Fix code quality violations and exclude Manifest from checks

Document application modes (development/debug/production)
Add global file drop handler, order column normalization, SPA hash fix
Serve CDN assets via /_vendor/ URLs instead of merging into bundles
Add production minification with license preservation
Improve JSON formatting for debugging and production optimization
Add CDN asset caching with CSS URL inlining for production builds
Add three-mode system (development, debug, production)
Update Manifest CLAUDE.md to reflect helper class architecture
Refactor Manifest.php into helper classes for better organization
Pre-manifest-refactor checkpoint: Add app_mode documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
root
2026-01-14 10:38:22 +00:00
parent bb9046af1b
commit d523f0f600
2355 changed files with 231384 additions and 32223 deletions

View File

@@ -1,7 +1,13 @@
{
"abs()": {
"syntax": "abs( <calc-sum> )"
},
"absolute-size": {
"syntax": "xx-small | x-small | small | medium | large | x-large | xx-large | xxx-large"
},
"acos()": {
"syntax": "acos( <calc-sum> )"
},
"alpha-value": {
"syntax": "<number> | <percentage>"
},
@@ -20,6 +26,15 @@
"animateable-feature": {
"syntax": "scroll-position | contents | <custom-ident>"
},
"asin()": {
"syntax": "asin( <calc-sum> )"
},
"atan()": {
"syntax": "atan( <calc-sum> )"
},
"atan2()": {
"syntax": "atan2( <calc-sum>, <calc-sum> )"
},
"attachment": {
"syntax": "scroll | fixed | local"
},
@@ -41,6 +56,9 @@
"auto-track-list": {
"syntax": "[ <line-names>? [ <fixed-size> | <fixed-repeat> ] ]* <line-names>? <auto-repeat>\n[ <line-names>? [ <fixed-size> | <fixed-repeat> ] ]* <line-names>?"
},
"axis": {
"syntax": "block | inline | x | y"
},
"baseline-position": {
"syntax": "[ first | last ]? baseline"
},
@@ -81,7 +99,10 @@
"syntax": "<calc-value> [ '*' <calc-value> | '/' <number> ]*"
},
"calc-value": {
"syntax": "<number> | <dimension> | <percentage> | ( <calc-sum> )"
"syntax": "<number> | <dimension> | <percentage> | <calc-constant> | ( <calc-sum> )"
},
"calc-constant": {
"syntax": "e | pi | infinity | -infinity | NaN"
},
"cf-final-image": {
"syntax": "<image> | <color>"
@@ -102,7 +123,7 @@
"syntax": "<url>"
},
"color": {
"syntax": "<rgb()> | <rgba()> | <hsl()> | <hsla()> | <hex-color> | <named-color> | currentcolor | <deprecated-system-color>"
"syntax": "<rgb()> | <rgba()> | <hsl()> | <hsla()> | <hwb()> | <lab()> | <lch()> | <oklab()> | <oklch()> | <color()> | <hex-color> | <named-color> | <system-color> | <deprecated-system-color> | currentcolor | transparent"
},
"color-stop": {
"syntax": "<color-stop-length> | <color-stop-angle>"
@@ -116,6 +137,9 @@
"color-stop-list": {
"syntax": "[ <linear-color-stop> [, <linear-color-hint>]? ]# , <linear-color-stop>"
},
"color-interpolation-method": {
"syntax": "in [ <rectangular-color-space> | <polar-color-space> <hue-interpolation-method>? ]"
},
"combinator": {
"syntax": "'>' | '+' | '~' | [ '||' ]"
},
@@ -153,7 +177,7 @@
"syntax": "space-between | space-around | space-evenly | stretch"
},
"content-list": {
"syntax": "[ <string> | contents | <image> | <quote> | <target> | <leader()> ]+"
"syntax": "[ <string> | contents | <image> | <counter> | <quote> | <target> | <leader()> ]+"
},
"content-position": {
"syntax": "center | start | end | flex-start | flex-end"
@@ -164,8 +188,17 @@
"contrast()": {
"syntax": "contrast( [ <number-percentage> ] )"
},
"cos()": {
"syntax": "cos( <calc-sum> )"
},
"counter": {
"syntax": "<counter()> | <counters()>"
},
"counter()": {
"syntax": "counter( <custom-ident>, <counter-style>? )"
"syntax": "counter( <counter-name>, <counter-style>? )"
},
"counter-name": {
"syntax": "<custom-ident>"
},
"counter-style": {
"syntax": "<counter-style-name> | symbols()"
@@ -174,7 +207,7 @@
"syntax": "<custom-ident>"
},
"counters()": {
"syntax": "counters( <custom-ident>, <string>, <counter-style>? )"
"syntax": "counters( <counter-name>, <string>, <counter-style>? )"
},
"cross-fade()": {
"syntax": "cross-fade( <cf-mixing-image> , <cf-final-image>? )"
@@ -227,6 +260,9 @@
"env()": {
"syntax": "env( <custom-ident> , <declaration-value>? )"
},
"exp()": {
"syntax": "exp( <calc-sum> )"
},
"explicit-track-list": {
"syntax": "[ <line-names>? <track-size> ]+ <line-names>?"
},
@@ -266,14 +302,11 @@
"final-bg-layer": {
"syntax": "<'background-color'> || <bg-image> || <bg-position> [ / <bg-size> ]? || <repeat-style> || <attachment> || <box> || <box>"
},
"fit-content()": {
"syntax": "fit-content( [ <length> | <percentage> ] )"
},
"fixed-breadth": {
"syntax": "<length-percentage>"
},
"fixed-repeat": {
"syntax": "repeat( [ <positive-integer> ] , [ <line-names>? <fixed-size> ]+ <line-names>? )"
"syntax": "repeat( [ <integer [1,∞]> ] , [ <line-names>? <fixed-size> ]+ <line-names>? )"
},
"fixed-size": {
"syntax": "<fixed-breadth> | minmax( <fixed-breadth> , <track-breadth> ) | minmax( <inflexible-breadth> , <fixed-breadth> )"
@@ -303,7 +336,7 @@
"syntax": "<shape-box> | fill-box | stroke-box | view-box"
},
"gradient": {
"syntax": "<linear-gradient()> | <repeating-linear-gradient()> | <radial-gradient()> | <repeating-radial-gradient()> | <conic-gradient()>"
"syntax": "<linear-gradient()> | <repeating-linear-gradient()> | <radial-gradient()> | <repeating-radial-gradient()> | <conic-gradient()> | <repeating-conic-gradient()>"
},
"grayscale()": {
"syntax": "grayscale( <number-percentage> )"
@@ -326,6 +359,15 @@
"hue-rotate()": {
"syntax": "hue-rotate( <angle> )"
},
"hue-interpolation-method": {
"syntax": "[ shorter | longer | increasing | decreasing ] hue"
},
"hwb()": {
"syntax": "hwb( [<hue> | none] [<percentage> | none] [<percentage> | none] [ / [<alpha-value> | none] ]? )"
},
"hypot()": {
"syntax": "hypot( <calc-sum># )"
},
"id-selector": {
"syntax": "<hash-token>"
},
@@ -339,7 +381,7 @@
"syntax": "image-set( <image-set-option># )"
},
"image-set-option": {
"syntax": "[ <image> | <string> ] <resolution>"
"syntax": "[ <image> | <string> ] [ <resolution> || type(<string>) ]"
},
"image-src": {
"syntax": "<url> | <string>"
@@ -348,7 +390,7 @@
"syntax": "ltr | rtl"
},
"inflexible-breadth": {
"syntax": "<length> | <percentage> | min-content | max-content | auto"
"syntax": "<length-percentage> | min-content | max-content | auto"
},
"inset()": {
"syntax": "inset( <length-percentage>{1,4} [ round <'border-radius'> ]? )"
@@ -366,7 +408,19 @@
"syntax": "<keyframe-block>+"
},
"keyframe-selector": {
"syntax": "from | to | <percentage>"
"syntax": "from | to | <percentage> | <timeline-range-name> <percentage>"
},
"lab()": {
"syntax": "lab( [<percentage> | <number> | none] [ <percentage> | <number> | none] [ <percentage> | <number> | none] [ / [<alpha-value> | none] ]? )"
},
"layer()": {
"syntax": "layer( <layer-name> )"
},
"layer-name": {
"syntax": "<ident> [ '.' <ident> ]*"
},
"lch()": {
"syntax": "lch( [<percentage> | <number> | none] [ <percentage> | <number> | none] [ <hue> | none] [ / [<alpha-value> | none] ]? )"
},
"leader()": {
"syntax": "leader( <leader-type> )"
@@ -377,6 +431,9 @@
"length-percentage": {
"syntax": "<length> | <percentage>"
},
"light-dark()": {
"syntax": "light-dark( <color>, <color> )"
},
"line-names": {
"syntax": "'[' <custom-ident>* ']'"
},
@@ -396,7 +453,10 @@
"syntax": "<color> <color-stop-length>?"
},
"linear-gradient()": {
"syntax": "linear-gradient( [ <angle> | to <side-or-corner> ]? , <color-stop-list> )"
"syntax": "linear-gradient( [ [ <angle> | to <side-or-corner> ] || <color-interpolation-method> ]? , <color-stop-list> )"
},
"log()": {
"syntax": "log( <calc-sum>, <calc-sum>? )"
},
"mask-layer": {
"syntax": "<mask-reference> || <position> [ / <bg-size> ]? || <repeat-style> || <geometry-box> || [ <geometry-box> | no-clip ] || <compositing-operator> || <masking-mode>"
@@ -471,7 +531,13 @@
"syntax": "min( <calc-sum># )"
},
"minmax()": {
"syntax": "minmax( [ <length> | <percentage> | min-content | max-content | auto ] , [ <length> | <percentage> | <flex> | min-content | max-content | auto ] )"
"syntax": "minmax( [ <length-percentage> | min-content | max-content | auto ] , [ <length-percentage> | <flex> | min-content | max-content | auto ] )"
},
"mod()": {
"syntax": "mod( <calc-sum>, <calc-sum> )"
},
"name-repeat": {
"syntax": "repeat( [ <integer [1,∞]> | auto-fill ], <line-names>+ )"
},
"named-color": {
"syntax": "transparent | aliceblue | antiquewhite | aqua | aquamarine | azure | beige | bisque | black | blanchedalmond | blue | blueviolet | brown | burlywood | cadetblue | chartreuse | chocolate | coral | cornflowerblue | cornsilk | crimson | cyan | darkblue | darkcyan | darkgoldenrod | darkgray | darkgreen | darkgrey | darkkhaki | darkmagenta | darkolivegreen | darkorange | darkorchid | darkred | darksalmon | darkseagreen | darkslateblue | darkslategray | darkslategrey | darkturquoise | darkviolet | deeppink | deepskyblue | dimgray | dimgrey | dodgerblue | firebrick | floralwhite | forestgreen | fuchsia | gainsboro | ghostwhite | gold | goldenrod | gray | green | greenyellow | grey | honeydew | hotpink | indianred | indigo | ivory | khaki | lavender | lavenderblush | lawngreen | lemonchiffon | lightblue | lightcoral | lightcyan | lightgoldenrodyellow | lightgray | lightgreen | lightgrey | lightpink | lightsalmon | lightseagreen | lightskyblue | lightslategray | lightslategrey | lightsteelblue | lightyellow | lime | limegreen | linen | magenta | maroon | mediumaquamarine | mediumblue | mediumorchid | mediumpurple | mediumseagreen | mediumslateblue | mediumspringgreen | mediumturquoise | mediumvioletred | midnightblue | mintcream | mistyrose | moccasin | navajowhite | navy | oldlace | olive | olivedrab | orange | orangered | orchid | palegoldenrod | palegreen | paleturquoise | palevioletred | papayawhip | peachpuff | peru | pink | plum | powderblue | purple | rebeccapurple | red | rosybrown | royalblue | saddlebrown | salmon | sandybrown | seagreen | seashell | sienna | silver | skyblue | slateblue | slategray | slategrey | snow | springgreen | steelblue | tan | teal | thistle | tomato | turquoise | violet | wheat | white | whitesmoke | yellow | yellowgreen"
@@ -521,6 +587,9 @@
"page-selector": {
"syntax": "<pseudo-page>+ | <ident> <pseudo-page>*"
},
"page-size": {
"syntax": "A5 | A4 | A3 | B5 | B4 | JIS-B5 | JIS-B4 | letter | legal | ledger"
},
"path()": {
"syntax": "path( [ <fill-rule>, ]? <string> )"
},
@@ -528,14 +597,20 @@
"syntax": "paint( <ident>, <declaration-value>? )"
},
"perspective()": {
"syntax": "perspective( <length> )"
"syntax": "perspective( [ <length [0,∞]> | none ] )"
},
"polygon()": {
"syntax": "polygon( <fill-rule>? , [ <length-percentage> <length-percentage> ]# )"
},
"polar-color-space": {
"syntax": "hsl | hwb | lch | oklch"
},
"position": {
"syntax": "[ [ left | center | right ] || [ top | center | bottom ] | [ left | center | right | <length-percentage> ] [ top | center | bottom | <length-percentage> ]? | [ [ left | right ] <length-percentage> ] && [ [ top | bottom ] <length-percentage> ] ]"
},
"pow()": {
"syntax": "pow( <calc-sum>, <calc-sum> )"
},
"pseudo-class-selector": {
"syntax": "':' <ident-token> | ':' <function-token> <any-value> ')'"
},
@@ -551,6 +626,18 @@
"radial-gradient()": {
"syntax": "radial-gradient( [ <ending-shape> || <size> ]? [ at <position> ]? , <color-stop-list> )"
},
"ratio": {
"syntax": "<number [0,∞]> [ / <number [0,∞]> ]?"
},
"ray()": {
"syntax": "ray( <angle> && <ray-size>? && contain? && [at <position>]? )"
},
"ray-size": {
"syntax": "closest-side | closest-corner | farthest-side | farthest-corner | sides"
},
"rectangular-color-space": {
"syntax": "srgb | srgb-linear | display-p3 | a98-rgb | prophoto-rgb | rec2020 | lab | oklab | xyz | xyz-d50 | xyz-d65"
},
"relative-selector": {
"syntax": "<combinator>? <complex-selector>"
},
@@ -560,15 +647,24 @@
"relative-size": {
"syntax": "larger | smaller"
},
"rem()": {
"syntax": "rem( <calc-sum>, <calc-sum> )"
},
"repeat-style": {
"syntax": "repeat-x | repeat-y | [ repeat | space | round | no-repeat ]{1,2}"
},
"repeating-conic-gradient()": {
"syntax": "repeating-conic-gradient( [ from <angle> ]? [ at <position> ]?, <angular-color-stop-list> )"
},
"repeating-linear-gradient()": {
"syntax": "repeating-linear-gradient( [ <angle> | to <side-or-corner> ]? , <color-stop-list> )"
},
"repeating-radial-gradient()": {
"syntax": "repeating-radial-gradient( [ <ending-shape> || <size> ]? [ at <position> ]? , <color-stop-list> )"
},
"reversed-counter-name": {
"syntax": "reversed( <counter-name> )"
},
"rgb()": {
"syntax": "rgb( <percentage>{3} [ / <alpha-value> ]? ) | rgb( <number>{3} [ / <alpha-value> ]? ) | rgb( <percentage>#{3} , <alpha-value>? ) | rgb( <number>#{3} , <alpha-value>? )"
},
@@ -590,23 +686,35 @@
"rotateZ()": {
"syntax": "rotateZ( [ <angle> | <zero> ] )"
},
"round()": {
"syntax": "round( <rounding-strategy>?, <calc-sum>, <calc-sum> )"
},
"rounding-strategy": {
"syntax": "nearest | up | down | to-zero"
},
"saturate()": {
"syntax": "saturate( <number-percentage> )"
},
"scale()": {
"syntax": "scale( <number> , <number>? )"
"syntax": "scale( [ <number> | <percentage> ]#{1,2} )"
},
"scale3d()": {
"syntax": "scale3d( <number> , <number> , <number> )"
"syntax": "scale3d( [ <number> | <percentage> ]#{3} )"
},
"scaleX()": {
"syntax": "scaleX( <number> )"
"syntax": "scaleX( [ <number> | <percentage> ] )"
},
"scaleY()": {
"syntax": "scaleY( <number> )"
"syntax": "scaleY( [ <number> | <percentage> ] )"
},
"scaleZ()": {
"syntax": "scaleZ( <number> )"
"syntax": "scaleZ( [ <number> | <percentage> ] )"
},
"scroll()": {
"syntax": "scroll( [ <axis> || <scroller> ]? )"
},
"scroller": {
"syntax": "root | nearest | self"
},
"self-position": {
"syntax": "center | start | end | self-start | self-end | flex-start | flex-end"
@@ -614,6 +722,9 @@
"shape-radius": {
"syntax": "<length-percentage> | closest-side | farthest-side"
},
"sign()": {
"syntax": "sign( <calc-sum> )"
},
"skew()": {
"syntax": "skew( [ <angle> | <zero> ] , [ <angle> | <zero> ]? )"
},
@@ -641,8 +752,11 @@
"side-or-corner": {
"syntax": "[ left | right ] || [ top | bottom ]"
},
"sin()": {
"syntax": "sin( <calc-sum> )"
},
"single-animation": {
"syntax": "<time> || <timing-function> || <time> || <single-animation-iteration-count> || <single-animation-direction> || <single-animation-fill-mode> || <single-animation-play-state> || [ none | <keyframes-name> ]"
"syntax": "<'animation-duration'> || <easing-function> || <'animation-delay'> || <single-animation-iteration-count> || <single-animation-direction> || <single-animation-fill-mode> || <single-animation-play-state> || [ none | <keyframes-name> ] || <single-animation-timeline>"
},
"single-animation-direction": {
"syntax": "normal | reverse | alternate | alternate-reverse"
@@ -656,8 +770,11 @@
"single-animation-play-state": {
"syntax": "running | paused"
},
"single-animation-timeline": {
"syntax": "auto | none | <dashed-ident> | <scroll()> | <view()>"
},
"single-transition": {
"syntax": "[ none | <single-transition-property> ] || <time> || <timing-function> || <time>"
"syntax": "[ none | <single-transition-property> ] || <time> || <easing-function> || <time> || <transition-behavior-value>"
},
"single-transition-property": {
"syntax": "all | <custom-ident>"
@@ -665,6 +782,9 @@
"size": {
"syntax": "closest-side | farthest-side | closest-corner | farthest-corner | <length> | <length-percentage>{2}"
},
"sqrt()": {
"syntax": "sqrt( <calc-sum> )"
},
"step-position": {
"syntax": "jump-start | jump-end | jump-none | jump-both | start | end"
},
@@ -692,6 +812,12 @@
"symbol": {
"syntax": "<string> | <image> | <custom-ident>"
},
"system-color": {
"syntax": "AccentColor | AccentColorText | ActiveText | ButtonBorder | ButtonFace | ButtonText | Canvas | CanvasText | Field | FieldText | GrayText | Highlight | HighlightText | LinkText | Mark | MarkText | SelectedItem | SelectedItemText | VisitedText"
},
"tan()": {
"syntax": "tan( <calc-sum> )"
},
"target": {
"syntax": "<target-counter()> | <target-counters()> | <target-text()>"
},
@@ -707,7 +833,10 @@
"time-percentage": {
"syntax": "<time> | <percentage>"
},
"timing-function": {
"timeline-range-name": {
"syntax": "cover | contain | entry | exit | entry-crossing | exit-crossing"
},
"easing-function": {
"syntax": "linear | <cubic-bezier-timing-function> | <step-timing-function>"
},
"track-breadth": {
@@ -717,10 +846,10 @@
"syntax": "[ <line-names>? [ <track-size> | <track-repeat> ] ]+ <line-names>?"
},
"track-repeat": {
"syntax": "repeat( [ <positive-integer> ] , [ <line-names>? <track-size> ]+ <line-names>? )"
"syntax": "repeat( [ <integer [1,∞]> ] , [ <line-names>? <track-size> ]+ <line-names>? )"
},
"track-size": {
"syntax": "<track-breadth> | minmax( <inflexible-breadth> , <track-breadth> ) | fit-content( [ <length> | <percentage> ] )"
"syntax": "<track-breadth> | minmax( <inflexible-breadth> , <track-breadth> ) | fit-content( <length-percentage> )"
},
"transform-function": {
"syntax": "<matrix()> | <translate()> | <translateX()> | <translateY()> | <scale()> | <scaleX()> | <scaleY()> | <rotate()> | <skew()> | <skewX()> | <skewY()> | <matrix3d()> | <translate3d()> | <translateZ()> | <scale3d()> | <scaleZ()> | <rotate3d()> | <rotateX()> | <rotateY()> | <rotateZ()> | <perspective()>"
@@ -728,6 +857,9 @@
"transform-list": {
"syntax": "<transform-function>+"
},
"transition-behavior-value": {
"syntax": "normal | allow-discrete"
},
"translate()": {
"syntax": "translate( <length-percentage> , <length-percentage>? )"
},
@@ -752,9 +884,15 @@
"var()": {
"syntax": "var( <custom-property-name> , <declaration-value>? )"
},
"view()": {
"syntax": "view([<axis> || <'view-timeline-inset'>]?)"
},
"viewport-length": {
"syntax": "auto | <length-percentage>"
},
"visual-box": {
"syntax": "content-box | padding-box | border-box"
},
"wq-name": {
"syntax": "<ns-prefix>? <ident-token>"
}