//
// CSS value names
//
inherit
initial
unset
revert

//
// CSS_PROP_OUTLINE_STYLE
// CSS_PROP_BORDER_TOP_STYLE
// CSS_PROP_BORDER_BOTTOM_STYLE
// CSS_PROP_BORDER_LEFT_STYLE
// The order here must match the order of the BorderStyle enum in RenderStyleConstants.h.
none
hidden
inset
groove
outset
ridge
dotted
dashed
solid
double

//
// CSS_PROP_FONT:
//
caption
icon
menu
message-box
small-caption
-webkit-mini-control
-webkit-small-control
-webkit-control

#if defined(WTF_PLATFORM_IOS_FAMILY) && WTF_PLATFORM_IOS_FAMILY
-apple-system-headline
-apple-system-body
-apple-system-subheadline
-apple-system-footnote
-apple-system-caption1
-apple-system-caption2
-apple-system-short-headline
-apple-system-short-body
-apple-system-short-subheadline
-apple-system-short-footnote
-apple-system-short-caption1
-apple-system-tall-body
-apple-system-title0
-apple-system-title1
-apple-system-title2
-apple-system-title3
-apple-system-title4
#endif

// This has to go after the -apple-system versions.
status-bar

//
// CSS_PROP_FONT_STYLE:
//
//normal
italic
oblique
// The following is only allowed in @font-face:
all
//
// CSS_PROP_FONT_VARIANT:
//
//normal
small-caps

// font-variant-ligatures:
//
common-ligatures
no-common-ligatures
discretionary-ligatures
no-discretionary-ligatures
historical-ligatures
no-historical-ligatures
contextual
no-contextual

// font-variant-caps
//
// FIXME: Unify this with plain font-variant
// small-caps
all-small-caps
petite-caps
all-petite-caps
unicase
titling-caps

// font-variant-numeric
//
lining-nums
oldstyle-nums
proportional-nums
tabular-nums
diagonal-fractions
stacked-fractions
ordinal
slashed-zero

// font-variant-alternates
//
historical-forms

// font-variant-east-asian
//
jis78
jis83
jis90
jis04
simplified
traditional
full-width
proportional-width
ruby

//
// CSS_PROP_FONT_WEIGHT:
//
normal
bold
bolder
lighter

//
// CSS_PROP_FONT_SIZE:
//
xx-small
x-small
small
medium
large
x-large
xx-large
-webkit-xxx-large
-webkit-ruby-text
smaller
larger

//
// CSS_PROP_FONT_STRETCH:
//
//normal
wider
narrower
ultra-condensed
extra-condensed
condensed
semi-condensed
semi-expanded
expanded
extra-expanded
ultra-expanded
//
// CSS_PROP_GENERIC_FONT_FAMILY:
//
serif
sans-serif
cursive
fantasy
monospace
-webkit-body
-webkit-pictograph
system-ui
//
//
// CSS_PROP_*_COLOR
//
alpha
aqua
black
blue
fuchsia
gray
green
lime
maroon
navy
olive
orange
purple
red
silver
teal
white
yellow
transparent
-webkit-link
-webkit-activelink
activeborder
activecaption
appworkspace
background
buttonface
buttonhighlight
buttonshadow
buttontext
activebuttontext
captiontext
graytext
highlight
highlighttext
inactiveborder
inactivecaption
inactivecaptiontext
infobackground
infotext
luminance
menutext
scrollbar
threeddarkshadow
threedface
threedhighlight
threedlightshadow
threedshadow
window
windowframe
windowtext
#if (defined(WTF_PLATFORM_MAC) && WTF_PLATFORM_MAC) || (defined(WTF_PLATFORM_IOS_FAMILY) && WTF_PLATFORM_IOS_FAMILY)
-apple-system-header-text
-apple-system-text-background
-apple-system-control-background
-apple-system-placeholder-text
-apple-system-label
-apple-system-secondary-label
-apple-system-tertiary-label
-apple-system-quaternary-label
-apple-system-grid
-apple-system-separator
-apple-system-container-border
-apple-system-background
-apple-system-secondary-background
-apple-system-tertiary-background
-apple-system-grouped-background
-apple-system-secondary-grouped-background
-apple-system-tertiary-grouped-background
-apple-system-selected-content-background
-apple-system-unemphasized-selected-content-background
-apple-wireless-playback-target-active
-apple-system-blue
-apple-system-brown
-apple-system-gray
-apple-system-green
-apple-system-orange
-apple-system-pink
-apple-system-purple
-apple-system-red
-apple-system-yellow
#endif
#if defined(WTF_PLATFORM_MAC) && WTF_PLATFORM_MAC
-apple-system-alternate-selected-text
-apple-system-control-accent
-apple-system-even-alternating-content-background
-apple-system-odd-alternating-content-background
-apple-system-selected-text
-apple-system-unemphasized-selected-text
-apple-system-selected-text-background
-apple-system-unemphasized-selected-text-background
-apple-system-find-highlight-background
#endif
#if defined(WTF_PLATFORM_IOS_FAMILY) && WTF_PLATFORM_IOS_FAMILY
-apple-system-indigo
-apple-system-teal
#endif
#if defined(HAVE_OS_DARK_MODE_SUPPORT) && HAVE_OS_DARK_MODE_SUPPORT
-webkit-control-background
#endif
-webkit-focus-ring-color
currentcolor
//
// colors in non strict mode
grey
-webkit-text
//
// CSS_PROP_BACKGROUND_REPEAT:
//
repeat
repeat-x
repeat-y
no-repeat
// round
// space
//
// CSS_PROP__WEBKIT_BACKGROUND_COMPOSITE:
//
clear
copy
source-over
source-in
source-out
source-atop
destination-over
destination-in
destination-out
destination-atop
xor
plus-darker
// highlight
plus-lighter
//
// CSS_PROP_VERTICAL_ALIGN:
//
baseline
middle
sub
super
text-top
text-bottom
top
bottom
// HTML alignment MIDDLE has no corresponding CSS alignment
-webkit-baseline-middle
//
// CSS_PROP_TEXT_ALIGN:
// The order here must match the order of the TextAlignMode enum in RenderStyleConstants.h.
//
-webkit-auto
left
right
center
justify
-webkit-left
-webkit-right
-webkit-center
-webkit-match-parent
//
// CSS_PROP_TEXT_JUSTIFY:
//
//auto
//none
inter-word
distribute
//
// CSS_PROP_LIST_STYLE_POSITION:
//
outside
inside
//
// CSS_PROP_LIST_STYLE_TYPE:
// The order here must match the order of the ListStyleType enum in RenderStyleConstants.h.
//
disc
circle
square
decimal
decimal-leading-zero
arabic-indic
binary
bengali
cambodian
khmer
devanagari
gujarati
gurmukhi
kannada
lower-hexadecimal
lao
malayalam
mongolian
myanmar
octal
oriya
persian
urdu
telugu
tibetan
thai
upper-hexadecimal
lower-roman
upper-roman
lower-greek
lower-alpha
lower-latin
upper-alpha
upper-latin
afar
ethiopic-halehame-aa-et
ethiopic-halehame-aa-er
amharic
ethiopic-halehame-am-et
amharic-abegede
ethiopic-abegede-am-et
cjk-earthly-branch
cjk-heavenly-stem
ethiopic
ethiopic-halehame-gez
ethiopic-abegede
ethiopic-abegede-gez
hangul-consonant
hangul
lower-norwegian
oromo
ethiopic-halehame-om-et
sidama
ethiopic-halehame-sid-et
somali
ethiopic-halehame-so-et
tigre
ethiopic-halehame-tig
tigrinya-er
ethiopic-halehame-ti-er
tigrinya-er-abegede
ethiopic-abegede-ti-er
tigrinya-et
ethiopic-halehame-ti-et
tigrinya-et-abegede
ethiopic-abegede-ti-et
upper-greek
upper-norwegian
asterisks
footnotes
hebrew
armenian
lower-armenian
upper-armenian
georgian
cjk-ideographic
hiragana
katakana
hiragana-iroha
katakana-iroha
//none
//
// CSS_PROP_DISPLAY:
// The order here must match the order of the DisplayType enum in RenderStyleConstants.h.
//
inline
block
list-item
compact
inline-block
table
inline-table
table-row-group
table-header-group
table-footer-group
table-row
table-column-group
table-column
table-cell
table-caption
-webkit-box
-webkit-inline-box
flex
-webkit-flex
inline-flex
-webkit-inline-flex
contents
grid
inline-grid
flow-root
//none
//
// CSS_PROP_CURSOR:
// The order here must match the order of the CursorType enum in RenderStyleConstants.h.
//
auto
default
// none
context-menu
help
pointer
progress
wait
cell
crosshair
text
vertical-text
alias
// copy
move
no-drop
not-allowed
grab
grabbing
e-resize
n-resize
ne-resize
nw-resize
s-resize
se-resize
sw-resize
w-resize
ew-resize
ns-resize
nesw-resize
nwse-resize
col-resize
row-resize
all-scroll
zoom-in
zoom-out
-webkit-grab
-webkit-grabbing
-webkit-zoom-in
-webkit-zoom-out
//
// CSS_PROP_CURSOR_VISIBILITY:
// auto
auto-hide
//
// CSS_PROP_DIRECTION:
//
ltr
rtl
//
// CSS_PROP_TEXT_TRANSFORM:
//
capitalize
uppercase
lowercase
//none
//
// CSS_PROP_VISIBILITY:
//
visible
//hidden
collapse
//
// Unordered rest
//
a3
a4
a5
above
absolute
always
avoid
b4
b5
below
bidi-override
blink
both
close-quote
crop
cross
embed
fixed
hand
hide
higher
invert
inverted
isolate-override
plaintext
-webkit-isolate
-webkit-isolate-override
-webkit-plaintext
landscape
ledger
legal
letter
level
line-through
local
loud
lower
mix
no-close-quote
no-open-quote
nowrap
open-quote
overline
portrait
pre
pre-line
pre-wrap
relative
scroll
separate
show
static
thick
thin
underline
wavy
ink
objects
-webkit-nowrap

// CSS3 Values
// CSS_PROP_BOX_ALIGN
stretch
start
end
//center
//baseline

#if defined(ENABLE_CSS_BOX_DECORATION_BREAK) && ENABLE_CSS_BOX_DECORATION_BREAK
// CSS_PROP_BOX_DECORATION_BREAK
clone
slice
#endif

// CSS_PROP_BOX_DIRECTION
// normal
reverse

// CSS_PROP_BOX_ORIENT
horizontal
vertical
inline-axis
block-axis

// CSS_PROP_BOX_PACK
// start
// end
// center
// justify

// CSS_PROP_BOX_LINES
single
multiple

// CSS_PROP_ALIGN_CONTENT
flex-start
flex-end
// center
space-between
space-around
space-evenly
// stretch

// CSS_PROP_ALIGN_ITEMS / CSS_PROP_ALIGN_SELF
// flex-start
// flex-end
// center
// baseline
first-baseline
last-baseline
// stretch

// CSS_PROP_JUSTIFY_CONTENT
// start
// end
// flex-start
// flex-end
// center
// space-between
// space-around
// space-evenly
// stretch

// CSS_PROP_JUSTIFY_ITEMS / CSS_PROP_JUSTIFY_SELF
// auto
// stretch
// baseline
// last baseline
// first baseline
// center
// start
// end
self-start
self-end
// flex-start
// flex-end
// left
// right
unsafe
safe
legacy

// CSS_PROP_FLEX_FLOW
row
row-reverse
column
column-reverse
// nowrap
// wrap
wrap-reverse

// CSS_PROP_MARQUEE_DIRECTION
forwards
backwards
ahead
// reverse
// left
// right
up
down
// auto

// CSS_PROP_MARQUEE_SPEED
slow
// normal
fast

// CSS_PROP_MARQUEE_REPETITION
infinite

// CSS_PROP_MARQUEE_STYLE
// none
slide
// scroll
alternate

//
// CSS_PROP__KHTML_USER_MODIFY
//
read-only
read-write
read-write-plaintext-only

//
// CSS_PROP__KHTML_USER_DRAG
//
element

//
// CSS_PROP__KHTML_USER_SELECT
//
ignore

//
// CSS_PROP_WIDTH/MIN_WIDTH/MAX_WIDTH
//
intrinsic
min-intrinsic

//
// CSS3 intrinsic dimension keywords
//
min-content
-webkit-min-content
max-content
-webkit-max-content
-webkit-fill-available
fit-content
-webkit-fit-content

//
// CSS_PROP_TEXT_OVERFLOW
//
clip
ellipsis

//
// CSS_PROP__KHTML_MARGIN_COLLAPSE
//
// collapse
// separate
discard

//
// CSS_PROP_TEXT_*_COLOR
//
dot-dash
dot-dot-dash
wave

//
// CSS_PROP_TEXT_*_MODE
//
continuous
skip-white-space

//
// CSS_PROP_WORD_BREAK
//
break-all
keep-all

//
// CSS_PROP_WORD_WRAP
//
break-word

//
// CSS_PROP_WHITE_SPACE
//
break-spaces

//
// CSS_PROP__KHTML_NBSP_MODE
//
space

//
// CSS_PROP__KHTML_LINE_BREAK
//
// auto
loose
// normal
strict
after-white-space
anywhere

// -webkit-appearance
// The order here must match the order in the ControlPart enum in ThemeTypes.h.
// All appearance values that should be accepted by the parser should be listed between 'checkbox' and 'textarea':
checkbox
radio
push-button
square-button
button
button-bevel
default-button
inner-spin-button
listbox
listitem
media-controls-background
media-controls-dark-bar-background
media-controls-fullscreen-background
media-controls-light-bar-background
media-current-time-display
media-enter-fullscreen-button
media-exit-fullscreen-button
media-fullscreen-volume-slider
media-fullscreen-volume-slider-thumb
media-mute-button
media-overlay-play-button
media-play-button
media-return-to-realtime-button
media-rewind-button
media-seek-back-button
media-seek-forward-button
media-slider
media-sliderthumb
media-time-remaining-display
media-toggle-closed-captions-button
media-volume-slider
media-volume-slider-container
media-volume-slider-mute-button
media-volume-sliderthumb
menulist
menulist-button
menulist-text
menulist-textfield
meter
progress-bar
progress-bar-value
slider-horizontal
slider-vertical
sliderthumb-horizontal
sliderthumb-vertical
caret
searchfield
searchfield-decoration
searchfield-results-decoration
searchfield-results-button
searchfield-cancel-button
snapshotted-plugin-overlay
textfield
relevancy-level-indicator
continuous-capacity-level-indicator
discrete-capacity-level-indicator
rating-level-indicator
#if defined(ENABLE_SERVICE_CONTROLS) && ENABLE_SERVICE_CONTROLS
image-controls-button
#endif
#if defined(ENABLE_APPLE_PAY) && ENABLE_APPLE_PAY
-apple-pay-button
#endif
#if defined(ENABLE_INPUT_TYPE_COLOR) && ENABLE_INPUT_TYPE_COLOR
color-well
#endif
#if defined(ENABLE_DATALIST_ELEMENT) && ENABLE_DATALIST_ELEMENT
list-button
#endif
textarea
#if defined(ENABLE_ATTACHMENT_ELEMENT) && ENABLE_ATTACHMENT_ELEMENT
attachment
borderless-attachment
#endif
caps-lock-indicator

//
// CSS_PROP_BORDER_IMAGE
//
// stretch
// repeat
round

//
// CSS_PROP_BACKGROUND_CLIP/ORIGIN
//
// border/content/padding are deprecated and ultimately will only apply to the -webkit- form of these properties.
// border-box/content-box/padding-box should be used instead.
//
border
border-box
content
content-box
padding
padding-box

//
// Variables Implementation
//
var
-internal-variable-value

//
// Environment Variables
//
env

//
// CSS_PROP_BREAK_BEFORE/AFTER/INSIDE
//
avoid-column
avoid-page
page
recto
region
verso

// CSS Shapes
margin-box

// clip-path
stroke-box
view-box

//
// background-size
//
contain
cover

//
// CSS_PROP__KHTML_RTL_ORDERING
//
logical
visual

//
// CSS_PROP__WEBKIT_BORDER_FIT
//
lines

//
// CSS_PROP__WEBKIT_ANIMATION_DIRECTION
//
// alternate

alternate-reverse

//
// CSS_PROP__WEBKIT_ANIMATION_FILL_MODE
//
// forwards
// backwards
// both

//
// CSS_PROP__WEBKIT_ANIMATION_ITERATION_COUNT
//
// infinite

//
// CSS_PROP__WEBKIT_ANIMATION_PLAY_STATE
//
running
paused

//
// CSS_PROP__WEBKIT_TRANSFORM_STYLE
//
flat
preserve-3d

//
// CSS_PROP__WEBKIT_TRANSITION_TIMING_FUNCTION
// CSS_PROP__WEBKIT_ANIMATION_TIMING_FUNCTION
//
ease
linear
ease-in
ease-out
ease-in-out
step-start
step-end

//
// CSS_PROP_ZOOM
//
document
reset

#if defined(ENABLE_CSS_DEVICE_ADAPTATION) && ENABLE_CSS_DEVICE_ADAPTATION
//
// CSS_PROP_USER_ZOOM
//
// fixed
zoom

//
// CSS_PROP_MIN_WIDTH
// CSS_PROP_MAX_WIDTH
// CSS_PROP_MIN_HEIGHT
// CSS_PROP_MAX_HEIGHT
//
// auto
device-width
device-height
#endif

//
// CSS_PROP_POINTER_EVENTS
//
visiblePainted
visibleFill
visibleStroke
//visible
painted
fill
stroke
//all
//none

//
// CSS_PROP_SPEECH
//
spell-out
digits
literal-punctuation
no-punctuation

//
// -webkit-font-smoothing
//
// auto
// none
antialiased
subpixel-antialiased

// text-rendering
//auto
optimizeSpeed
optimizeLegibility
geometricPrecision

// -webkit-color-adjust
economy
exact

// -webkit-hyphenate-limit-lines
no-limit

// -webkit-hyphens
// none
manual
// auto

#if defined(ENABLE_LETTERPRESS) && ENABLE_LETTERPRESS
-webkit-letterpress
#endif

#if defined(ENABLE_OVERFLOW_SCROLLING_TOUCH) && ENABLE_OVERFLOW_SCROLLING_TOUCH
// -webkit-overflow-scrolling
// auto
touch
#endif

// -webkit-writing-mode
// SVG compatibility
lr
rl
tb
lr-tb
rl-tb
tb-rl
// Standard values from CSS3
horizontal-tb
vertical-rl
vertical-lr
horizontal-bt

// -webkit-ruby-position
after
before
inter-character

// -webkit-text-emphasis-position
over
under

// -webkit-text-emphasis-style
filled
open
dot
// circle
double-circle
triangle
sesame

// -webkit-radial-gradient
// circle
ellipse
closest-side
closest-corner
farthest-side
farthest-corner
// contain
// cover

// -webkit-text-orientation
sideways
sideways-right
upright
vertical-right
mixed

// -webkit-line-box-contain
font
glyphs
inline-box
initial-letter
replaced

// font-feature-settings
on
off

// image-rendering
// auto
// optimizeSpeed (deprecated)
optimizeQuality // ( deprecated)
crisp-edges
pixelated
-webkit-crisp-edges
-webkit-optimize-contrast

// shape-outside
nonzero
evenodd
at
// closest-side
// farthest-side

#if defined(ENABLE_CSS_SCROLL_SNAP)
// -webkit-scroll-snap-points-x
// -webkit-scroll-snap-points-y
elements

// -webkit-scroll-snap-type
mandatory
proximity
x
y
#endif

break

wrap

// -webkit-line-align
edges

alphabetic

// position
sticky
-webkit-sticky

// (pointer:) media feature
// none
coarse
fine

// (hover:) media feature.
// none
hover
on-demand

// blend modes
// normal
multiply
screen
overlay
darken
lighten
color-dodge
color-burn
hard-light
soft-light
difference
exclusion
hue
saturation
color
luminosity
// plus-darker
// plus-lighter

// isolation
// auto
isolate

// object-fit
// fill
// contain
// cover
// none
scale-down

// background-image, etc.
container-scroll
cross-fade
image-set
linear-gradient
radial-gradient
conic-gradient
repeating-linear-gradient
repeating-radial-gradient
repeating-conic-gradient
-webkit-canvas
-webkit-cross-fade
-webkit-gradient
-webkit-linear-gradient
-webkit-radial-gradient
-webkit-repeating-linear-gradient
-webkit-repeating-radial-gradient
-webkit-image-set
-webkit-named-image
filter
-webkit-filter
#if defined(ENABLE_CSS_PAINTING_API) && ENABLE_CSS_PAINTING_API
paint
#endif

// deprecated gradients
from
to
color-stop
radial

// content
attr
counter
counters

// clip
rect

// shapes
polygon

// @font-face src
format

// (-webkit-)filter
// invert
grayscale
sepia
saturate
hue-rotate
opacity
brightness
contrast
blur
drop-shadow
url
cubic-bezier
spring
steps
apple-invert-lightness

// colors
rgb
rgba
hsl
hsla
//color

// transform
matrix
matrix3d
perspective
rotate
rotateX
rotateY
rotateZ
rotate3d
scale
scaleX
scaleY
scaleZ
scale3d
skew
skewX
skewY
translate
translateX
translateY
translateZ
translate3d

// transform-box
// border-box
// view-box
// stroke-box
// content-box
fill-box

// motion path
path

calc
-webkit-calc
min
max

#if defined(ENABLE_CSS_IMAGE_RESOLUTION) && ENABLE_CSS_IMAGE_RESOLUTION
from-image
snap
#endif

// overflow
-webkit-paged-x
-webkit-paged-y

// paint-order
// normal
// fill
// stroke
markers

// grid-{column-start|column-end|row-start|row-end}
span

// grid-template-{columns|rows}
minmax

// grid-auto-flow
auto-flow
dense

#if defined(ENABLE_CSS3_TEXT) && ENABLE_CSS3_TEXT
// text-indent
-webkit-each-line
-webkit-hanging
#endif

// -webkit-column-fill
balance

// -webkit-aspect-ratio
from-dimensions
from-intrinsic

#if defined(ENABLE_CSS_TRAILING_WORD) && ENABLE_CSS_TRAILING_WORD
// -apple-trailing-word
-webkit-partially-balanced
#endif

#if defined(ENABLE_APPLE_PAY) && ENABLE_APPLE_PAY
// -apple-pay-button-style
white-outline

// -apple-pay-button-type
plain
buy
set-up
donate
#if defined(ENABLE_APPLE_PAY_SESSION_V4) && ENABLE_APPLE_PAY_SESSION_V4
check-out
book
subscribe
#endif
#endif

// font-synthesis
weight
style

// will-change
scroll-position
//contents

#if defined(ENABLE_POINTER_EVENTS) && ENABLE_POINTER_EVENTS
// touch-action
// auto
// none
manipulation
pan-x
pan-y
pinch-zoom
#endif

// hanging-punctuation
allow-end
first
force-end
last

// color-gamut
p3
rec2020

// color() function
sRGB
display-p3

// prefers-default-appearance
prefers
// no-preference

// prefers-reduced-motion
reduce
no-preference

#if defined(ENABLE_DARK_MODE_CSS) && ENABLE_DARK_MODE_CSS
// prefers-color-scheme
light
dark
// no-preference

// color-scheme
only
// light
// dark
#endif

// auto-repeat
auto-fill
auto-fit

// font-display
// auto
// block
swap
fallback
optional

#if defined(ENABLE_APPLICATION_MANIFEST) && ENABLE_APPLICATION_MANIFEST
fullscreen
standalone
minimal-ui
browser
#endif

// text-decoration-thickness, text-underline-offset
from-font
