reend-components 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- :root{--ef-black: 0 0% 4%;--ef-black-soft: 0 0% 6.7%;--ef-black-muted: 0 0% 10%;--ef-dark-gray: 0 0% 13.3%;--ef-gray: 0 0% 20%;--ef-gray-mid: 0 0% 40%;--ef-gray-light: 0 0% 60%;--ef-white-muted: 0 0% 80%;--ef-white-soft: 0 0% 87.8%;--ef-white: 0 0% 94.1%;--ef-pure-white: 0 0% 100%;--ef-yellow: 48 100% 58%;--ef-yellow-dark: 48 85% 39%;--ef-blue: 201 66% 58%;--ef-blue-light: 196 64% 69%;--ef-blue-dark: 202 56% 38%;--ef-cyan: 186 100% 50%;--ef-red: 355 100% 64%;--ef-green: 145 67% 51%;--ef-orange: 39 100% 50%;--ef-purple: 270 77% 64%;--background: 0 0% 4%;--foreground: 0 0% 94.1%;--card: 0 0% 7.8%;--card-foreground: 0 0% 87.8%;--popover: 0 0% 10%;--popover-foreground: 0 0% 87.8%;--primary: 48 100% 58%;--primary-foreground: 0 0% 4%;--secondary: 0 0% 10%;--secondary-foreground: 0 0% 87.8%;--muted: 0 0% 13.3%;--muted-foreground: 0 0% 60%;--accent: 0 0% 10%;--accent-foreground: 48 100% 58%;--destructive: 355 100% 64%;--destructive-foreground: 0 0% 100%;--border: 0 0% 100% / .06;--border-strong: 0 0% 100% / .12;--border-accent: 48 100% 58% / .4;--input: 0 0% 100% / .1;--ring: 48 100% 58%;--radius: 0px;--radius-none: 0px;--radius-sm: 2px;--radius-md: 4px;--surface-canvas: 0 0% 4%;--surface-0: 0 0% 5.9%;--surface-1: 0 0% 7.8%;--surface-2: 0 0% 10%;--surface-3: 0 0% 13.3%;--surface-hover: 0 0% 11.8%;--surface-active: 0 0% 14.5%;--header-height: 64px;--sidebar-width: 280px;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / .3);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / .4), 0 2px 4px -2px rgb(0 0 0 / .3);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .5), 0 4px 6px -4px rgb(0 0 0 / .4);--shadow-glow: 0 0 20px hsl(var(--primary) / .2);--z-base: 0;--z-dropdown: 10;--z-sticky: 20;--z-overlay: 30;--z-modal: 40;--z-popover: 50;--z-toast: 60;--z-tooltip: 70;--ease-default: cubic-bezier(.25, .8, .25, 1);--ease-bounce: cubic-bezier(.34, 1.56, .64, 1);--ease-sharp: cubic-bezier(.4, 0, .2, 1);--ease-smooth: cubic-bezier(.45, 0, .55, 1);--duration-instant: .1s;--duration-fast: .15s;--duration-normal: .25s;--duration-slow: .4s;--duration-slower: .7s}.light{--ef-black: 0 0% 96%;--ef-black-soft: 0 0% 93%;--ef-black-muted: 0 0% 90%;--ef-dark-gray: 0 0% 87%;--ef-gray: 0 0% 80%;--ef-gray-mid: 0 0% 50%;--ef-gray-light: 0 0% 35%;--ef-white-muted: 0 0% 25%;--ef-white-soft: 0 0% 15%;--ef-white: 0 0% 8%;--ef-pure-white: 0 0% 0%;--ef-yellow: 42 90% 42%;--ef-yellow-dark: 42 85% 30%;--ef-blue-light: 196 50% 55%;--ef-blue-dark: 202 56% 30%;--ef-cyan: 186 80% 35%;--ef-red: 355 85% 48%;--ef-green: 145 60% 38%;--ef-orange: 39 90% 38%;--ef-purple: 270 65% 50%;--background: 0 0% 97%;--foreground: 0 0% 8%;--card: 0 0% 100%;--card-foreground: 0 0% 15%;--popover: 0 0% 100%;--popover-foreground: 0 0% 15%;--primary: 42 90% 42%;--primary-foreground: 0 0% 100%;--secondary: 0 0% 93%;--secondary-foreground: 0 0% 15%;--muted: 0 0% 93%;--muted-foreground: 0 0% 42%;--accent: 0 0% 93%;--accent-foreground: 42 90% 42%;--destructive: 355 80% 50%;--destructive-foreground: 0 0% 100%;--border: 0 0% 0% / .1;--border-strong: 0 0% 0% / .18;--border-accent: 42 90% 42% / .4;--input: 0 0% 0% / .12;--ring: 42 90% 42%;--surface-canvas: 0 0% 97%;--surface-0: 0 0% 95%;--surface-1: 0 0% 100%;--surface-2: 0 0% 97%;--surface-3: 0 0% 93%;--surface-hover: 0 0% 92%;--surface-active: 0 0% 88%;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / .08);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .08);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .12), 0 4px 6px -4px rgb(0 0 0 / .08);--shadow-glow: 0 0 20px hsl(var(--primary) / .25)}body{background-color:hsl(var(--background));color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
1
+ :root{--ef-black: 0 0% 4%;--ef-black-soft: 0 0% 6.7%;--ef-black-muted: 0 0% 10%;--ef-dark-gray: 0 0% 13.3%;--ef-gray: 0 0% 20%;--ef-gray-mid: 0 0% 40%;--ef-gray-light: 0 0% 60%;--ef-white-muted: 0 0% 80%;--ef-white-soft: 0 0% 87.8%;--ef-white: 0 0% 94.1%;--ef-pure-white: 0 0% 100%;--ef-yellow: 48 100% 58%;--ef-yellow-dark: 48 85% 39%;--ef-blue: 201 66% 58%;--ef-blue-light: 196 64% 69%;--ef-blue-dark: 202 56% 38%;--ef-cyan: 186 100% 50%;--ef-red: 355 100% 64%;--ef-green: 145 67% 51%;--ef-orange: 39 100% 50%;--ef-purple: 270 77% 64%;--background: 0 0% 4%;--foreground: 0 0% 94.1%;--card: 0 0% 7.8%;--card-foreground: 0 0% 87.8%;--popover: 0 0% 10%;--popover-foreground: 0 0% 87.8%;--primary: 48 100% 58%;--primary-foreground: 0 0% 4%;--secondary: 0 0% 10%;--secondary-foreground: 0 0% 87.8%;--muted: 0 0% 13.3%;--muted-foreground: 0 0% 60%;--accent: 0 0% 10%;--accent-foreground: 48 100% 58%;--destructive: 355 100% 64%;--destructive-foreground: 0 0% 100%;--border: 0 0% 100% / .06;--border-strong: 0 0% 100% / .12;--border-accent: 48 100% 58% / .4;--input: 0 0% 100% / .1;--ring: 48 100% 58%;--radius: 0px;--radius-none: 0px;--radius-sm: 2px;--radius-md: 4px;--surface-canvas: 0 0% 4%;--surface-0: 0 0% 5.9%;--surface-1: 0 0% 7.8%;--surface-2: 0 0% 10%;--surface-3: 0 0% 13.3%;--surface-hover: 0 0% 11.8%;--surface-active: 0 0% 14.5%;--header-height: 64px;--sidebar-width: 280px;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / .3);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / .4), 0 2px 4px -2px rgb(0 0 0 / .3);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .5), 0 4px 6px -4px rgb(0 0 0 / .4);--shadow-glow: 0 0 20px hsl(var(--primary) / .2);--z-below: -1;--z-base: 0;--z-raised: 1;--z-dropdown: 100;--z-sticky: 200;--z-header: 1000;--z-overlay: 1500;--z-modal: 2000;--z-toast: 3000;--z-tooltip: 4000;--z-max: 9999;--ease-default: cubic-bezier(.25, .8, .25, 1);--ease-bounce: cubic-bezier(.34, 1.56, .64, 1);--ease-sharp: cubic-bezier(.4, 0, .2, 1);--ease-smooth: cubic-bezier(.45, 0, .55, 1);--duration-instant: .1s;--duration-fast: .15s;--duration-normal: .3s;--duration-slow: .5s;--duration-slower: .8s;--ef-yellow-glow: rgba(255, 212, 41, .15);--text-primary: hsl(0 0% 94.1%);--text-secondary: hsl(0 0% 87.8%);--text-tertiary: hsl(0 0% 80%);--text-muted: hsl(0 0% 60%);--text-placeholder: hsl(0 0% 40%);--text-disabled: hsl(0 0% 26.7%);--text-link: hsl(201 66% 58%);--text-accent: hsl(48 100% 58%);--text-error: hsl(355 100% 64%);--text-success: hsl(145 67% 51%);--border-subtle: 0 0% 100% / .06;--border-default: 0 0% 100% / .1;--font-display: "Bender", "Orbitron", sans-serif;--font-ui: "Orbitron", monospace;--font-mono: "JetBrains Mono", "Courier New", monospace;--font-body: "Source Han Sans", "Noto Sans SC", "Inter", sans-serif;--font-decorative: "Morro", "Bender", sans-serif;--ef-red-soft: rgba(255, 71, 87, .1);--ef-green-soft: rgba(46, 213, 115, .1);--ef-orange-soft: rgba(255, 165, 2, .1);--opacity-overlay: .85;--opacity-hover: .08;--opacity-disabled: .38;--opacity-border: .12;--opacity-focus: .24;--opacity-muted: .5;--ef-gradient-primary: linear-gradient(135deg, #ffd429 0%, #ffa502 100%);--ef-gradient-overlay: linear-gradient( 180deg, rgba(10, 10, 10, .9) 0%, rgba(10, 10, 10, .4) 50%, rgba(10, 10, 10, .95) 100% );--ef-gradient-line: linear-gradient( 90deg, transparent 0%, #ffd429 50%, transparent 100% );--ef-gradient-card-hover: linear-gradient( 145deg, rgba(255, 212, 41, .05) 0%, transparent 60% );--ef-gradient-scanline: repeating-linear-gradient( 0deg, transparent, transparent 2px, rgba(255, 255, 255, .015) 2px, rgba(255, 255, 255, .015) 4px );--chart-1: #ffd429;--chart-2: #00e5ff;--chart-3: #a55eea;--chart-4: #2ed573;--chart-5: #ffa502;--chart-6: #4da8da;--chart-7: #ff4757;--chart-8: #7ec8e3;--bp-mobile: 480px;--bp-tablet: 768px;--bp-laptop: 1024px;--bp-desktop: 1280px;--bp-wide: 1536px;--safe-top: env(safe-area-inset-top, 0px);--safe-right: env(safe-area-inset-right, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);--safe-left: env(safe-area-inset-left, 0px);--ef-lime: 84 100% 63%;--ef-lime-dark: 84 80% 42%;--ef-lime-glow: rgba(203, 255, 64, .25);--accent-active: 84 100% 63%;--shadow-glow-sm: 0 0 6px rgba(0, 0, 0, .25);--shadow-glow-md: 0 0 12px rgba(0, 0, 0, .35);--shadow-glow-lg: 0 0 24px rgba(0, 0, 0, .5);--shadow-accent: 0 0 16px hsl(var(--primary) / .35);--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--space-16: 64px;--space-20: 80px;--space-24: 96px;--space-32: 128px;--container-max: 1280px;--container-padding: 24px;--grid-columns: 12;--grid-gutter: 24px;--content-narrow: 680px;--content-default: 960px;--content-wide: 1200px;--type-display-xl-size: 72px;--type-display-lg-size: 56px;--type-h1-size: 48px;--type-h2-size: 36px;--type-h3-size: 28px;--type-h4-size: 22px;--type-body-lg-size: 18px;--type-body-size: 16px;--type-body-sm-size: 14px;--type-caption-size: 12px;--type-overline-size: 11px;--lh-heading: 1;--lh-display: .95;--lh-body: 1.6;--lh-caption: 1.4;--icon-xs: 16px;--icon-sm: 20px;--icon-md: 24px;--icon-lg: 32px;--icon-xl: 48px;--icon-2xl: 64px;--ratio-banner: 21 / 9;--ratio-feature: 16 / 9;--ratio-portrait: 3 / 4;--ratio-cinematic: 21 / 9;--bg-grid-size: 60px;--bg-grid-color: rgba(255, 255, 255, .03);--bg-glow-primary: radial-gradient( ellipse 80% 50% at 50% 0%, hsl(var(--primary) / .12) 0%, transparent 70% );--bg-glow-lime: radial-gradient( ellipse 80% 50% at 50% 0%, hsl(var(--ef-lime) / .1) 0%, transparent 70% );--bg-diagonal: repeating-linear-gradient( -45deg, transparent, transparent 4px, rgba(255, 255, 255, .02) 4px, rgba(255, 255, 255, .02) 8px );--bracket-size: 24px;--bracket-width: 2px;--bracket-color: hsl(var(--primary) / .4)}.light{--ef-black: 0 0% 96%;--ef-black-soft: 0 0% 93%;--ef-black-muted: 0 0% 90%;--ef-dark-gray: 0 0% 87%;--ef-gray: 0 0% 80%;--ef-gray-mid: 0 0% 50%;--ef-gray-light: 0 0% 35%;--ef-white-muted: 0 0% 25%;--ef-white-soft: 0 0% 15%;--ef-white: 0 0% 8%;--ef-pure-white: 0 0% 0%;--ef-yellow: 42 90% 42%;--ef-yellow-dark: 42 85% 30%;--ef-blue-light: 196 50% 55%;--ef-blue-dark: 202 56% 30%;--ef-cyan: 186 80% 35%;--ef-red: 355 85% 48%;--ef-green: 145 60% 38%;--ef-orange: 39 90% 38%;--ef-purple: 270 65% 50%;--background: 0 0% 97%;--foreground: 0 0% 8%;--card: 0 0% 100%;--card-foreground: 0 0% 15%;--popover: 0 0% 100%;--popover-foreground: 0 0% 15%;--primary: 42 90% 42%;--primary-foreground: 0 0% 100%;--secondary: 0 0% 93%;--secondary-foreground: 0 0% 15%;--muted: 0 0% 93%;--muted-foreground: 0 0% 42%;--accent: 0 0% 93%;--accent-foreground: 42 90% 42%;--destructive: 355 80% 50%;--destructive-foreground: 0 0% 100%;--border: 0 0% 0% / .1;--border-strong: 0 0% 0% / .18;--border-accent: 42 90% 42% / .4;--input: 0 0% 0% / .12;--ring: 42 90% 42%;--surface-canvas: 0 0% 97%;--surface-0: 0 0% 95%;--surface-1: 0 0% 100%;--surface-2: 0 0% 97%;--surface-3: 0 0% 93%;--surface-hover: 0 0% 92%;--surface-active: 0 0% 88%;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / .08);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .08);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .12), 0 4px 6px -4px rgb(0 0 0 / .08);--shadow-glow: 0 0 20px hsl(var(--primary) / .25);--shadow-glow-sm: 0 0 6px rgba(0, 0, 0, .1);--shadow-glow-md: 0 0 12px rgba(0, 0, 0, .15);--shadow-glow-lg: 0 0 24px rgba(0, 0, 0, .2);--shadow-accent: 0 0 16px hsl(var(--primary) / .25);--ef-lime: 84 90% 38%;--ef-lime-dark: 84 80% 28%;--ef-lime-glow: rgba(100, 160, 0, .2);--accent-active: 84 90% 38%;--bg-grid-color: rgba(0, 0, 0, .04);--bg-glow-primary: radial-gradient( ellipse 80% 50% at 50% 0%, hsl(var(--primary) / .1) 0%, transparent 70% );--bg-glow-lime: radial-gradient( ellipse 80% 50% at 50% 0%, hsl(var(--ef-lime) / .08) 0%, transparent 70% );--bg-diagonal: repeating-linear-gradient( -45deg, transparent, transparent 4px, rgba(0, 0, 0, .015) 4px, rgba(0, 0, 0, .015) 8px );--bracket-color: hsl(var(--primary) / .35);--text-primary: hsl(0 0% 8%);--text-secondary: hsl(0 0% 20%);--text-tertiary: hsl(0 0% 35%);--text-muted: hsl(0 0% 45%);--text-placeholder: hsl(0 0% 55%);--text-disabled: hsl(0 0% 65%);--text-link: hsl(202 56% 35%);--text-accent: hsl(42 90% 42%);--text-error: hsl(355 85% 48%);--text-success: hsl(145 60% 38%);--ef-gradient-scanline: repeating-linear-gradient( 0deg, transparent, transparent 2px, rgba(0, 0, 0, .04) 2px, rgba(0, 0, 0, .04) 4px )}body{background-color:hsl(var(--background));color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.clip-corner{clip-path:polygon(0 0,calc(100% - 12px) 0,100% 12px,100% 100%,12px 100%,0 calc(100% - 12px))}.clip-corner-sm{clip-path:polygon(0 0,calc(100% - 8px) 0,100% 8px,100% 100%,8px 100%,0 calc(100% - 8px))}.clip-corner-lg{clip-path:polygon(0 0,calc(100% - 16px) 0,100% 16px,100% 100%,16px 100%,0 calc(100% - 16px))}.font-display,.font-ui{font-family:Orbitron,monospace}.font-mono{font-family:JetBrains Mono,Courier New,monospace}.font-body{font-family:Source Han Sans,Noto Sans SC,Inter,sans-serif}.corner-brackets{position:relative}.corner-brackets:before,.corner-brackets:after{content:"";position:absolute;width:24px;height:24px;pointer-events:none}.corner-brackets:before{top:-1px;left:-1px;border-top:2px solid hsl(var(--primary) / .4);border-left:2px solid hsl(var(--primary) / .4)}.corner-brackets:after{bottom:-1px;right:-1px;border-bottom:2px solid hsl(var(--primary) / .4);border-right:2px solid hsl(var(--primary) / .4)}.scanline-overlay{position:relative}.scanline-overlay:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(255,255,255,.015) 2px,rgba(255,255,255,.015) 4px);pointer-events:none}.light .scanline-overlay:after{background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,0,0,.04) 2px,rgba(0,0,0,.04) 4px)}.glow-yellow{box-shadow:0 0 20px hsl(var(--primary) / .2)}.glow-yellow-strong{box-shadow:0 0 40px hsl(var(--primary) / .3)}.text-glow-yellow{text-shadow:0 0 20px hsl(var(--primary) / .3)}.gradient-line-h{height:1px;background:linear-gradient(90deg,transparent 0%,hsl(var(--primary)) 50%,transparent 100%)}.gradient-line-v{width:1px;background:linear-gradient(180deg,transparent 0%,hsl(var(--primary)) 50%,transparent 100%)}.diamond-marker:before{content:"◆";color:hsl(var(--primary));margin-right:8px;font-size:8px;vertical-align:middle}.panel-glass{background:#1414148c;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid rgba(255,255,255,.1);box-shadow:0 4px 24px #0006;color:hsl(var(--foreground))}.panel-glass-light{background:#14141459;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.08);color:hsl(var(--foreground))}.panel-glass-dark{background:#0a0a0aa6;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.08);color:#f0f0f0}.light .panel-glass{background:#ffffffbf;border:1px solid rgba(0,0,0,.08);box-shadow:0 4px 24px #00000014;color:hsl(var(--foreground))}.light .panel-glass-light{background:#ffffff8c;border:1px solid rgba(0,0,0,.06);color:hsl(var(--foreground))}@media (prefers-reduced-transparency: reduce){.panel-glass,.panel-glass-light,.panel-glass-dark{background:hsl(var(--surface-2));backdrop-filter:none;-webkit-backdrop-filter:none}.light .panel-glass,.light .panel-glass-light{background:hsl(var(--surface-2))}}.bg-grid-pattern{background-image:linear-gradient(var(--bg-grid-color) 1px,transparent 1px),linear-gradient(90deg,var(--bg-grid-color) 1px,transparent 1px);background-size:var(--bg-grid-size) var(--bg-grid-size)}.bg-radial-glow{background-image:var(--bg-glow-primary);background-repeat:no-repeat;background-position:center top;background-size:100% 600px}.bg-radial-glow-lime{background-image:var(--bg-glow-lime);background-repeat:no-repeat;background-position:center top;background-size:100% 600px}.bg-diagonal-lines{background-image:var(--bg-diagonal)}.bg-noise-overlay{position:relative}.bg-noise-overlay:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.025'/%3E%3C/svg%3E");opacity:.025;pointer-events:none;z-index:0}.ef-heading{font-family:Orbitron,monospace;line-height:var(--lh-heading, 1);text-transform:uppercase;letter-spacing:.05em}.ef-display{font-family:Orbitron,monospace;line-height:var(--lh-display, .95);text-transform:uppercase;letter-spacing:.08em;font-weight:700}.ef-overline{font-family:JetBrains Mono,monospace;font-size:var(--type-overline-size, 11px);text-transform:uppercase;letter-spacing:.12em;color:hsl(var(--muted-foreground))}.shadow-glow-sm{box-shadow:var(--shadow-glow-sm)}.shadow-glow-md{box-shadow:var(--shadow-glow-md)}.shadow-glow-lg{box-shadow:var(--shadow-glow-lg)}.shadow-accent{box-shadow:var(--shadow-accent)}mark,.search-highlight{background:#ffd42933;color:hsl(var(--primary));border-radius:0;padding:0 2px}.search-result-category{font-family:Orbitron,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:hsl(var(--muted-foreground))}.search-result-title{font-family:Bender,sans-serif;font-size:16px;font-weight:600;color:hsl(var(--foreground))}.search-result-excerpt{font-size:14px;color:hsl(var(--muted-foreground));line-height:1.5}.light mark,.light .search-highlight{background:#ffb40026;color:hsl(var(--primary))}.spoiler{background:hsl(var(--foreground));color:transparent;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:all .2s ease}.spoiler:hover,.spoiler:focus,.spoiler[data-revealed=true]{background:transparent;color:inherit}.ripple{position:relative;overflow:hidden}.ripple:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(circle,rgba(255,212,41,.15) 0%,transparent 60%);opacity:0;transform:scale(0);transition:transform .4s ease,opacity .4s ease}.ripple:active:after{transform:scale(2.5);opacity:1;transition:transform 0s,opacity 0s}:not(pre)>code{background:#1a1a1a;padding:2px 6px;font-family:JetBrains Mono,monospace;font-size:.875em;color:hsl(var(--ef-yellow));border:1px solid hsl(var(--border))}@media print{.print-hidden{display:none!important}.print-only{display:block!important}.print-break-before{page-break-before:always}.print-break-after{page-break-after:always}.print-no-break{page-break-inside:avoid}}@media (pointer: coarse){.touch-target{min-width:44px;min-height:44px}[role=dialog][data-sheet=bottom]{padding-bottom:calc(var(--safe-bottom) + 12px)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeInDown{0%{opacity:0;transform:translateY(-16px)}to{opacity:1;transform:translateY(0)}}@keyframes slideInRight{0%{opacity:0;transform:translate(-24px)}to{opacity:1;transform:translate(0)}}@keyframes scaleIn{0%{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes loadingDot{0%,80%,to{opacity:.2;transform:scale(.8)}40%{opacity:1;transform:scale(1)}}@keyframes glitch{0%,90%,to{transform:translate(0)}92%{transform:translate(-2px,1px)}94%{transform:translate(2px,-1px)}96%{transform:translate(-1px,-1px)}98%{transform:translate(1px,1px)}}@keyframes cursorBlink{0%,50%{opacity:1}51%,to{opacity:0}}@keyframes pulseGlow{0%,to{box-shadow:0 0 8px hsl(var(--primary) / .2)}50%{box-shadow:0 0 20px hsl(var(--primary) / .4)}}@keyframes skeletonShimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes slideDown{0%{transform:scaleY(0);opacity:0}to{transform:scaleY(1);opacity:1}}@keyframes diamondSpin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes switchThumbSpin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes shrink{0%{transform:scaleX(1)}to{transform:scaleX(0)}}@keyframes countUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes dialog-in{0%{opacity:0;transform:translate(-50%,-48%) scale(.96)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}@keyframes shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-4px)}40%,80%{transform:translate(4px)}}@keyframes slideUp{0%{transform:translateY(100%);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes particleDrift{0%{transform:translate(0)}33%{transform:translate(2px,-3px)}66%{transform:translate(-2px,2px)}to{transform:translate(0)}}.animate-fade-in{animation:fadeIn .3s ease forwards}.animate-fade-in-up{animation:fadeInUp .4s var(--ease-default, ease) forwards}.animate-fade-in-down{animation:fadeInDown .4s var(--ease-default, ease) forwards}.animate-slide-in-right{animation:slideInRight .4s var(--ease-default, ease) forwards}.animate-scale-in{animation:scaleIn .3s var(--ease-default, ease) forwards}.animate-rotate{animation:rotate 1s linear infinite}.animate-loading-dot{animation:loadingDot 1.4s ease-in-out infinite both}.animate-glitch{animation:glitch 3s infinite}.animate-cursor-blink{animation:cursorBlink 1s step-end infinite}.animate-pulse-glow{animation:pulseGlow 2s ease-in-out infinite}.animate-skeleton{background:linear-gradient(90deg,hsl(var(--surface-1)),hsl(var(--surface-2)),hsl(var(--surface-1)));background-size:200% 100%;animation:skeletonShimmer 1.5s infinite}.animate-slide-down{animation:slideDown .3s ease forwards;transform-origin:top;overflow:hidden}.animate-diamond-spin{animation:diamondSpin .8s linear infinite}.animate-switch-spin{animation:switchThumbSpin .35s cubic-bezier(.34,1.56,.64,1) both}.animate-shrink{animation:shrink 5s linear forwards;transform-origin:left}.animate-dialog-in{animation:dialog-in .3s ease forwards}.animate-accordion-down{animation:accordion-down .25s cubic-bezier(.16,1,.3,1)}.animate-accordion-up{animation:accordion-up .2s cubic-bezier(.7,0,1,1)}.animate-shake{animation:shake .4s var(--ease-sharp, cubic-bezier(.4, 0, .2, 1))}.animate-slide-up{animation:slideUp .3s var(--ease-sharp, cubic-bezier(.4, 0, .2, 1)) forwards}.animate-particle-drift{animation:particleDrift var(--particle-dur, 3s) ease-in-out infinite}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}::view-transition-old(root){animation:fadeOut .2s var(--ease-sharp, ease) forwards}::view-transition-new(root){animation:fadeIn .3s var(--ease-default, ease) forwards}@media (prefers-reduced-motion: reduce){::view-transition-old(root),::view-transition-new(root){animation:none}}.scrollable-panel{overscroll-behavior:contain}body.no-pull-refresh{overscroll-behavior-y:none}.autosave-indicator{font-family:Orbitron,monospace;font-size:11px;display:flex;align-items:center;gap:6px}.autosave-saved{color:#2ed573}.autosave-saving{color:#999}.autosave-unsaved{color:#ffa502}.autosave-error{color:#ff4757}@media (hover: hover) and (pointer: fine){.btn{min-height:36px}}@media (prefers-contrast: more){:root{--border-subtle: rgba(255, 255, 255, .2);--border-default: rgba(255, 255, 255, .4);--text-muted: #BBBBBB}}@media (forced-colors: active){.btn-primary,[class*=btn-]{background:ButtonFace;color:ButtonText;border:2px solid ButtonText;forced-color-adjust:none}.card,[class*=border-border]{border:1px solid CanvasText}[class*=clip-corner]{clip-path:none;border-radius:2px}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reend-components",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "private": false,
5
5
  "description": "Tactical, sci-fi, and gaming-inspired React component library — Arknights: Endfield Design System",
6
6
  "type": "module",
@@ -20,6 +20,7 @@
20
20
  },
21
21
  "./styles.css": "./dist/lib/style.css",
22
22
  "./variables.css": "./src/styles/variables.css",
23
+ "./utilities.css": "./src/styles/utilities.css",
23
24
  "./tailwind": {
24
25
  "import": "./src/tailwind-preset.ts",
25
26
  "require": "./src/tailwind-preset.ts"
@@ -80,6 +81,12 @@
80
81
  },
81
82
  "lucide-react": {
82
83
  "optional": true
84
+ },
85
+ "recharts": {
86
+ "optional": true
87
+ },
88
+ "react-resizable-panels": {
89
+ "optional": true
83
90
  }
84
91
  },
85
92
  "scripts": {
@@ -115,6 +122,8 @@
115
122
  "@radix-ui/react-tooltip": "^1.2.7",
116
123
  "class-variance-authority": "^0.7.1",
117
124
  "clsx": "^2.1.1",
125
+ "react-resizable-panels": "^4.6.4",
126
+ "recharts": "^3.7.0",
118
127
  "sonner": "^1.7.4",
119
128
  "tailwind-merge": "^2.6.0",
120
129
  "tailwindcss-animate": "^1.0.7"
@@ -0,0 +1,580 @@
1
+ /* ═══════════════════════════════════════════════════════════════════════════
2
+ ReEnd-Components CSS Utilities
3
+ Exported to npm via dist/lib/style.css (imported by src/components/ui/index.ts)
4
+ Design tokens live in variables.css — this file contains COMPONENT + ANIMATION utilities.
5
+ ═══════════════════════════════════════════════════════════════════════════ */
6
+
7
+ /* ═══ CLIP-PATH ENDFIELD SIGNATURE ═══ */
8
+ .clip-corner {
9
+ clip-path: polygon(
10
+ 0 0,
11
+ calc(100% - 12px) 0,
12
+ 100% 12px,
13
+ 100% 100%,
14
+ 12px 100%,
15
+ 0 calc(100% - 12px)
16
+ );
17
+ }
18
+ .clip-corner-sm {
19
+ clip-path: polygon(
20
+ 0 0,
21
+ calc(100% - 8px) 0,
22
+ 100% 8px,
23
+ 100% 100%,
24
+ 8px 100%,
25
+ 0 calc(100% - 8px)
26
+ );
27
+ }
28
+ .clip-corner-lg {
29
+ clip-path: polygon(
30
+ 0 0,
31
+ calc(100% - 16px) 0,
32
+ 100% 16px,
33
+ 100% 100%,
34
+ 16px 100%,
35
+ 0 calc(100% - 16px)
36
+ );
37
+ }
38
+
39
+ /* ═══ TYPOGRAPHY CLASSES ═══ */
40
+ .font-display {
41
+ font-family: "Orbitron", monospace;
42
+ }
43
+ .font-ui {
44
+ font-family: "Orbitron", monospace;
45
+ }
46
+ .font-mono {
47
+ font-family: "JetBrains Mono", "Courier New", monospace;
48
+ }
49
+ .font-body {
50
+ font-family: "Source Han Sans", "Noto Sans SC", "Inter", sans-serif;
51
+ }
52
+
53
+ /* ═══ CORNER BRACKETS — ENDFIELD SIGNATURE ═══ */
54
+ .corner-brackets {
55
+ position: relative;
56
+ }
57
+ .corner-brackets::before,
58
+ .corner-brackets::after {
59
+ content: "";
60
+ position: absolute;
61
+ width: 24px;
62
+ height: 24px;
63
+ pointer-events: none;
64
+ }
65
+ .corner-brackets::before {
66
+ top: -1px;
67
+ left: -1px;
68
+ border-top: 2px solid hsl(var(--primary) / 0.4);
69
+ border-left: 2px solid hsl(var(--primary) / 0.4);
70
+ }
71
+ .corner-brackets::after {
72
+ bottom: -1px;
73
+ right: -1px;
74
+ border-bottom: 2px solid hsl(var(--primary) / 0.4);
75
+ border-right: 2px solid hsl(var(--primary) / 0.4);
76
+ }
77
+
78
+ /* ═══ SCANLINE OVERLAY ═══ */
79
+ .scanline-overlay {
80
+ position: relative;
81
+ }
82
+ .scanline-overlay::after {
83
+ content: "";
84
+ position: absolute;
85
+ inset: 0;
86
+ background: repeating-linear-gradient(
87
+ 0deg,
88
+ transparent,
89
+ transparent 2px,
90
+ rgba(255, 255, 255, 0.015) 2px,
91
+ rgba(255, 255, 255, 0.015) 4px
92
+ );
93
+ pointer-events: none;
94
+ }
95
+ .light .scanline-overlay::after {
96
+ background: repeating-linear-gradient(
97
+ 0deg,
98
+ transparent,
99
+ transparent 2px,
100
+ rgba(0, 0, 0, 0.04) 2px,
101
+ rgba(0, 0, 0, 0.04) 4px
102
+ );
103
+ }
104
+
105
+ /* ═══ GLOW EFFECTS ═══ */
106
+ .glow-yellow {
107
+ box-shadow: 0 0 20px hsl(var(--primary) / 0.2);
108
+ }
109
+ .glow-yellow-strong {
110
+ box-shadow: 0 0 40px hsl(var(--primary) / 0.3);
111
+ }
112
+ .text-glow-yellow {
113
+ text-shadow: 0 0 20px hsl(var(--primary) / 0.3);
114
+ }
115
+
116
+ /* ═══ GRADIENT LINE ═══ */
117
+ .gradient-line-h {
118
+ height: 1px;
119
+ background: linear-gradient(
120
+ 90deg,
121
+ transparent 0%,
122
+ hsl(var(--primary)) 50%,
123
+ transparent 100%
124
+ );
125
+ }
126
+ .gradient-line-v {
127
+ width: 1px;
128
+ background: linear-gradient(
129
+ 180deg,
130
+ transparent 0%,
131
+ hsl(var(--primary)) 50%,
132
+ transparent 100%
133
+ );
134
+ }
135
+
136
+ /* ═══ DIAMOND MARKER ═══ */
137
+ .diamond-marker::before {
138
+ content: "◆";
139
+ color: hsl(var(--primary));
140
+ margin-right: 8px;
141
+ font-size: 8px;
142
+ vertical-align: middle;
143
+ }
144
+
145
+ /* ═══ GLASSMORPHISM ═══ */
146
+ .panel-glass {
147
+ background: rgba(20, 20, 20, 0.55);
148
+ backdrop-filter: blur(16px);
149
+ -webkit-backdrop-filter: blur(16px);
150
+ border: 1px solid rgba(255, 255, 255, 0.1);
151
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.4);
152
+ color: hsl(var(--foreground));
153
+ }
154
+ .panel-glass-light {
155
+ background: rgba(20, 20, 20, 0.35);
156
+ backdrop-filter: blur(12px);
157
+ -webkit-backdrop-filter: blur(12px);
158
+ border: 1px solid rgba(255, 255, 255, 0.08);
159
+ color: hsl(var(--foreground));
160
+ }
161
+ .panel-glass-dark {
162
+ background: rgba(10, 10, 10, 0.65);
163
+ backdrop-filter: blur(12px);
164
+ -webkit-backdrop-filter: blur(12px);
165
+ border: 1px solid rgba(255, 255, 255, 0.08);
166
+ color: #f0f0f0;
167
+ }
168
+ .light .panel-glass {
169
+ background: rgba(255, 255, 255, 0.75);
170
+ border: 1px solid rgba(0, 0, 0, 0.08);
171
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.08);
172
+ color: hsl(var(--foreground));
173
+ }
174
+ .light .panel-glass-light {
175
+ background: rgba(255, 255, 255, 0.55);
176
+ border: 1px solid rgba(0, 0, 0, 0.06);
177
+ color: hsl(var(--foreground));
178
+ }
179
+ @media (prefers-reduced-transparency: reduce) {
180
+ .panel-glass,
181
+ .panel-glass-light,
182
+ .panel-glass-dark {
183
+ background: hsl(var(--surface-2));
184
+ backdrop-filter: none;
185
+ -webkit-backdrop-filter: none;
186
+ }
187
+ .light .panel-glass,
188
+ .light .panel-glass-light {
189
+ background: hsl(var(--surface-2));
190
+ }
191
+ }
192
+
193
+ /* ═══ BACKGROUND DECORATIONS ═══ */
194
+ .bg-grid-pattern {
195
+ background-image:
196
+ linear-gradient(var(--bg-grid-color) 1px, transparent 1px),
197
+ linear-gradient(90deg, var(--bg-grid-color) 1px, transparent 1px);
198
+ background-size: var(--bg-grid-size) var(--bg-grid-size);
199
+ }
200
+ .bg-radial-glow {
201
+ background-image: var(--bg-glow-primary);
202
+ background-repeat: no-repeat;
203
+ background-position: center top;
204
+ background-size: 100% 600px;
205
+ }
206
+ .bg-radial-glow-lime {
207
+ background-image: var(--bg-glow-lime);
208
+ background-repeat: no-repeat;
209
+ background-position: center top;
210
+ background-size: 100% 600px;
211
+ }
212
+ .bg-diagonal-lines {
213
+ background-image: var(--bg-diagonal);
214
+ }
215
+ .bg-noise-overlay {
216
+ position: relative;
217
+ }
218
+ .bg-noise-overlay::after {
219
+ content: "";
220
+ position: absolute;
221
+ inset: 0;
222
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.025'/%3E%3C/svg%3E");
223
+ opacity: 0.025;
224
+ pointer-events: none;
225
+ z-index: 0;
226
+ }
227
+
228
+ /* ═══ TYPOGRAPHY UTILITIES ═══ */
229
+ .ef-heading {
230
+ font-family: "Orbitron", monospace;
231
+ line-height: var(--lh-heading, 1);
232
+ text-transform: uppercase;
233
+ letter-spacing: 0.05em;
234
+ }
235
+ .ef-display {
236
+ font-family: "Orbitron", monospace;
237
+ line-height: var(--lh-display, 0.95);
238
+ text-transform: uppercase;
239
+ letter-spacing: 0.08em;
240
+ font-weight: 700;
241
+ }
242
+ .ef-overline {
243
+ font-family: "JetBrains Mono", monospace;
244
+ font-size: var(--type-overline-size, 11px);
245
+ text-transform: uppercase;
246
+ letter-spacing: 0.12em;
247
+ color: hsl(var(--muted-foreground));
248
+ }
249
+
250
+ /* ═══ GLOW SHADOW UTILITIES ═══ */
251
+ .shadow-glow-sm {
252
+ box-shadow: var(--shadow-glow-sm);
253
+ }
254
+ .shadow-glow-md {
255
+ box-shadow: var(--shadow-glow-md);
256
+ }
257
+ .shadow-glow-lg {
258
+ box-shadow: var(--shadow-glow-lg);
259
+ }
260
+ .shadow-accent {
261
+ box-shadow: var(--shadow-accent);
262
+ }
263
+
264
+ /* ═══ SEARCH HIGHLIGHT ═══ */
265
+ mark,
266
+ .search-highlight {
267
+ background: rgba(255, 212, 41, 0.2);
268
+ color: hsl(var(--primary));
269
+ border-radius: 0;
270
+ padding: 0 2px;
271
+ }
272
+ .search-result-category {
273
+ font-family: 'Orbitron', monospace;
274
+ font-size: 10px;
275
+ letter-spacing: 0.1em;
276
+ text-transform: uppercase;
277
+ color: hsl(var(--muted-foreground));
278
+ }
279
+ .search-result-title {
280
+ font-family: 'Bender', sans-serif;
281
+ font-size: 16px;
282
+ font-weight: 600;
283
+ color: hsl(var(--foreground));
284
+ }
285
+ .search-result-excerpt {
286
+ font-size: 14px;
287
+ color: hsl(var(--muted-foreground));
288
+ line-height: 1.5;
289
+ }
290
+ .light mark,
291
+ .light .search-highlight {
292
+ background: rgba(255, 180, 0, 0.15);
293
+ color: hsl(var(--primary));
294
+ }
295
+
296
+ /* ═══ SPOILER ═══ */
297
+ .spoiler {
298
+ background: hsl(var(--foreground));
299
+ color: transparent;
300
+ cursor: pointer;
301
+ user-select: none;
302
+ transition: all 0.2s ease;
303
+ }
304
+ .spoiler:hover,
305
+ .spoiler:focus,
306
+ .spoiler[data-revealed="true"] {
307
+ background: transparent;
308
+ color: inherit;
309
+ }
310
+
311
+ /* ═══ RIPPLE EFFECT ═══ */
312
+ .ripple {
313
+ position: relative;
314
+ overflow: hidden;
315
+ }
316
+ .ripple::after {
317
+ content: "";
318
+ position: absolute;
319
+ inset: 0;
320
+ background: radial-gradient(circle, rgba(255, 212, 41, 0.15) 0%, transparent 60%);
321
+ opacity: 0;
322
+ transform: scale(0);
323
+ transition: transform 0.4s ease, opacity 0.4s ease;
324
+ }
325
+ .ripple:active::after {
326
+ transform: scale(2.5);
327
+ opacity: 1;
328
+ transition: transform 0s, opacity 0s;
329
+ }
330
+
331
+ /* ═══ INLINE CODE (prose) ═══ */
332
+ :not(pre) > code {
333
+ background: #1a1a1a;
334
+ padding: 2px 6px;
335
+ font-family: "JetBrains Mono", monospace;
336
+ font-size: 0.875em;
337
+ color: hsl(var(--ef-yellow));
338
+ border: 1px solid hsl(var(--border));
339
+ }
340
+
341
+ /* ═══ PRINT UTILITIES ═══ */
342
+ @media print {
343
+ .print-hidden {
344
+ display: none !important;
345
+ }
346
+ .print-only {
347
+ display: block !important;
348
+ }
349
+ .print-break-before {
350
+ page-break-before: always;
351
+ }
352
+ .print-break-after {
353
+ page-break-after: always;
354
+ }
355
+ .print-no-break {
356
+ page-break-inside: avoid;
357
+ }
358
+ }
359
+
360
+ /* ═══ POINTER / TOUCH ═══ */
361
+ @media (pointer: coarse) {
362
+ .touch-target {
363
+ min-width: 44px;
364
+ min-height: 44px;
365
+ }
366
+ [role="dialog"][data-sheet="bottom"] {
367
+ padding-bottom: calc(var(--safe-bottom) + 12px);
368
+ }
369
+ }
370
+
371
+ /* ═══ KEYFRAME ANIMATIONS ═══ */
372
+ @keyframes fadeIn {
373
+ from { opacity: 0; }
374
+ to { opacity: 1; }
375
+ }
376
+ @keyframes fadeOut {
377
+ from { opacity: 1; }
378
+ to { opacity: 0; }
379
+ }
380
+ @keyframes fadeInUp {
381
+ from { opacity: 0; transform: translateY(16px); }
382
+ to { opacity: 1; transform: translateY(0); }
383
+ }
384
+ @keyframes fadeInDown {
385
+ from { opacity: 0; transform: translateY(-16px); }
386
+ to { opacity: 1; transform: translateY(0); }
387
+ }
388
+ @keyframes slideInRight {
389
+ from { opacity: 0; transform: translateX(-24px); }
390
+ to { opacity: 1; transform: translateX(0); }
391
+ }
392
+ @keyframes scaleIn {
393
+ from { opacity: 0; transform: scale(0.92); }
394
+ to { opacity: 1; transform: scale(1); }
395
+ }
396
+ @keyframes rotate {
397
+ from { transform: rotate(0deg); }
398
+ to { transform: rotate(360deg); }
399
+ }
400
+ @keyframes loadingDot {
401
+ 0%, 80%, 100% { opacity: 0.2; transform: scale(0.8); }
402
+ 40% { opacity: 1; transform: scale(1); }
403
+ }
404
+ @keyframes glitch {
405
+ 0%, 90%, 100% { transform: translate(0); }
406
+ 92% { transform: translate(-2px, 1px); }
407
+ 94% { transform: translate(2px, -1px); }
408
+ 96% { transform: translate(-1px, -1px); }
409
+ 98% { transform: translate(1px, 1px); }
410
+ }
411
+ @keyframes cursorBlink {
412
+ 0%, 50% { opacity: 1; }
413
+ 51%, 100% { opacity: 0; }
414
+ }
415
+ @keyframes pulseGlow {
416
+ 0%, 100% { box-shadow: 0 0 8px hsl(var(--primary) / 0.2); }
417
+ 50% { box-shadow: 0 0 20px hsl(var(--primary) / 0.4); }
418
+ }
419
+ @keyframes skeletonShimmer {
420
+ 0% { background-position: -200% 0; }
421
+ 100% { background-position: 200% 0; }
422
+ }
423
+ @keyframes slideDown {
424
+ from { transform: scaleY(0); opacity: 0; }
425
+ to { transform: scaleY(1); opacity: 1; }
426
+ }
427
+ @keyframes diamondSpin {
428
+ from { transform: rotate(0deg); }
429
+ to { transform: rotate(360deg); }
430
+ }
431
+ @keyframes switchThumbSpin {
432
+ from { transform: rotate(0deg); }
433
+ to { transform: rotate(360deg); }
434
+ }
435
+ @keyframes shrink {
436
+ from { transform: scaleX(1); }
437
+ to { transform: scaleX(0); }
438
+ }
439
+ @keyframes countUp {
440
+ from { opacity: 0; transform: translateY(8px); }
441
+ to { opacity: 1; transform: translateY(0); }
442
+ }
443
+ @keyframes dialog-in {
444
+ from { opacity: 0; transform: translate(-50%, -48%) scale(0.96); }
445
+ to { opacity: 1; transform: translate(-50%, -50%) scale(1); }
446
+ }
447
+ @keyframes accordion-down {
448
+ from { height: 0; }
449
+ to { height: var(--radix-accordion-content-height); }
450
+ }
451
+ @keyframes accordion-up {
452
+ from { height: var(--radix-accordion-content-height); }
453
+ to { height: 0; }
454
+ }
455
+ @keyframes shake {
456
+ 0%, 100% { transform: translateX(0); }
457
+ 20%, 60% { transform: translateX(-4px); }
458
+ 40%, 80% { transform: translateX(4px); }
459
+ }
460
+ @keyframes slideUp {
461
+ from { transform: translateY(100%); opacity: 0; }
462
+ to { transform: translateY(0); opacity: 1; }
463
+ }
464
+ @keyframes particleDrift {
465
+ 0% { transform: translate(0, 0); }
466
+ 33% { transform: translate(2px, -3px); }
467
+ 66% { transform: translate(-2px, 2px); }
468
+ 100% { transform: translate(0, 0); }
469
+ }
470
+
471
+ /* ═══ ANIMATION UTILITY CLASSES ═══ */
472
+ .animate-fade-in { animation: fadeIn 0.3s ease forwards; }
473
+ .animate-fade-in-up { animation: fadeInUp 0.4s var(--ease-default, ease) forwards; }
474
+ .animate-fade-in-down { animation: fadeInDown 0.4s var(--ease-default, ease) forwards; }
475
+ .animate-slide-in-right { animation: slideInRight 0.4s var(--ease-default, ease) forwards; }
476
+ .animate-scale-in { animation: scaleIn 0.3s var(--ease-default, ease) forwards; }
477
+ .animate-rotate { animation: rotate 1s linear infinite; }
478
+ .animate-loading-dot { animation: loadingDot 1.4s ease-in-out infinite both; }
479
+ .animate-glitch { animation: glitch 3s infinite; }
480
+ .animate-cursor-blink { animation: cursorBlink 1s step-end infinite; }
481
+ .animate-pulse-glow { animation: pulseGlow 2s ease-in-out infinite; }
482
+ .animate-skeleton {
483
+ background: linear-gradient(
484
+ 90deg,
485
+ hsl(var(--surface-1)) 0%,
486
+ hsl(var(--surface-2)) 50%,
487
+ hsl(var(--surface-1)) 100%
488
+ );
489
+ background-size: 200% 100%;
490
+ animation: skeletonShimmer 1.5s infinite;
491
+ }
492
+ .animate-slide-down { animation: slideDown 0.3s ease forwards; transform-origin: top; overflow: hidden; }
493
+ .animate-diamond-spin { animation: diamondSpin 0.8s linear infinite; }
494
+ .animate-switch-spin { animation: switchThumbSpin 0.35s cubic-bezier(0.34, 1.56, 0.64, 1) both; }
495
+ .animate-shrink { animation: shrink 5s linear forwards; transform-origin: left; }
496
+ .animate-dialog-in { animation: dialog-in 0.3s ease forwards; }
497
+ .animate-accordion-down { animation: accordion-down 0.25s cubic-bezier(0.16, 1, 0.3, 1); }
498
+ .animate-accordion-up { animation: accordion-up 0.2s cubic-bezier(0.7, 0, 1, 1); }
499
+ .animate-shake { animation: shake 0.4s var(--ease-sharp, cubic-bezier(0.4, 0, 0.2, 1)); }
500
+ .animate-slide-up { animation: slideUp 0.3s var(--ease-sharp, cubic-bezier(0.4, 0, 0.2, 1)) forwards; }
501
+ .animate-particle-drift { animation: particleDrift var(--particle-dur, 3s) ease-in-out infinite; }
502
+
503
+ /* ═══ REDUCED MOTION ═══ */
504
+ @media (prefers-reduced-motion: reduce) {
505
+ *,
506
+ *::before,
507
+ *::after {
508
+ animation-duration: 0.01ms !important;
509
+ transition-duration: 0.01ms !important;
510
+ }
511
+ }
512
+
513
+ /* ═══ VIEW TRANSITIONS API ═══ */
514
+ ::view-transition-old(root) {
515
+ animation: fadeOut 0.2s var(--ease-sharp, ease) forwards;
516
+ }
517
+ ::view-transition-new(root) {
518
+ animation: fadeIn 0.3s var(--ease-default, ease) forwards;
519
+ }
520
+ @media (prefers-reduced-motion: reduce) {
521
+ ::view-transition-old(root),
522
+ ::view-transition-new(root) {
523
+ animation: none;
524
+ }
525
+ }
526
+
527
+ /* ═══ SCROLL BEHAVIOR (Section 101) ═══ */
528
+ .scrollable-panel {
529
+ overscroll-behavior: contain;
530
+ }
531
+ body.no-pull-refresh {
532
+ overscroll-behavior-y: none;
533
+ }
534
+
535
+ /* ═══ AUTOSAVE INDICATOR (Section 103) ═══ */
536
+ .autosave-indicator {
537
+ font-family: 'Orbitron', monospace;
538
+ font-size: 11px;
539
+ display: flex;
540
+ align-items: center;
541
+ gap: 6px;
542
+ }
543
+ .autosave-saved { color: #2ED573; }
544
+ .autosave-saving { color: #999; }
545
+ .autosave-unsaved { color: #FFA502; }
546
+ .autosave-error { color: #FF4757; }
547
+
548
+ /* ═══ POINTER TYPE — fine (mouse/trackpad) (Section 107) ═══ */
549
+ @media (hover: hover) and (pointer: fine) {
550
+ .btn { min-height: 36px; }
551
+ }
552
+
553
+ /* ═══ HIGH CONTRAST MODE (Section 107) ═══ */
554
+ @media (prefers-contrast: more) {
555
+ :root {
556
+ --border-subtle: rgba(255, 255, 255, 0.2);
557
+ --border-default: rgba(255, 255, 255, 0.4);
558
+ --text-muted: #BBBBBB;
559
+ }
560
+ }
561
+
562
+ /* ═══ FORCED COLORS / WINDOWS HIGH CONTRAST (Section 107) ═══ */
563
+ @media (forced-colors: active) {
564
+ .btn-primary,
565
+ [class*="btn-"] {
566
+ background: ButtonFace;
567
+ color: ButtonText;
568
+ border: 2px solid ButtonText;
569
+ forced-color-adjust: none;
570
+ }
571
+ .card,
572
+ [class*="border-border"] {
573
+ border: 1px solid CanvasText;
574
+ }
575
+ /* clip-path is invisible in forced-colors — fall back to border radius */
576
+ [class*="clip-corner"] {
577
+ clip-path: none;
578
+ border-radius: 2px;
579
+ }
580
+ }