/* ==========================================================================
   KYOSS GRADIENT SYSTEM  v1.0
   Framework-independent · standards-based CSS custom properties
   --------------------------------------------------------------------------
   Sections
     0. Registered properties (enables smooth palette transitions)
     1. Root tokens (surfaces, motion, semantic gradient aliases)
     2. Palettes  — 25 art-directed palettes, selectable via
                    [data-kg="name"] or .kg-<name>
     3. Derived tokens — text, border, shadow, glow, ring, tint, subtle bg
     4. Variants  — .kg-light / .kg-dark
     5. Utilities — bg, text, border, ring, scrim, plate, focus
     6. Effects   — drift, breathe, sheen, mesh, radial, cursor, grain, rare
     7. Components — button, card, profile card, chat header, badge,
                     music card, nav, modal, page background, match screen
     8. Motion & accessibility
   --------------------------------------------------------------------------
   Usage
     <button class="kg-btn" data-kg="primary">Say hi</button>
     <article class="kg-profile-card" data-kg="orchid">…</article>
     <body class="kg-page" data-kg="conversations">
   Every palette exposes the same token contract:
     --kg-1 / --kg-2 / --kg-3      gradient stops (colors)
     --kg-gradient                 composed gradient
     --kg-ink / --kg-ink-soft      readable text + icon color ON the gradient
     --kg-accent                   solid accent (borders, focus, glow)
     --kg-deep                     accent tuned for text on light surfaces
     --kg-border, --kg-shadow, --kg-glow, --kg-ring, --kg-tint, --kg-bg-subtle
   ========================================================================== */


/* 0. REGISTERED PROPERTIES
   Lets browsers interpolate gradient stops when a palette changes.
   Unsupported browsers simply switch instantly (graceful). */
@property --kg-1 { syntax: '<color>'; inherits: true; initial-value: #FF5E4D; }
@property --kg-2 { syntax: '<color>'; inherits: true; initial-value: #FF8A5B; }
@property --kg-3 { syntax: '<color>'; inherits: true; initial-value: #FFC85C; }
@property --kg-angle { syntax: '<angle>'; inherits: true; initial-value: 135deg; }


/* 1. ROOT TOKENS
   ------------------------------------------------------------------------ */
:root {
  /* Surfaces */
  --kg-surface: #FFFCF7;               /* soft cream — Kyoss base surface */
  --kg-surface-2: #F6F1E8;
  --kg-surface-ink: #1B1533;           /* body text on surfaces */
  --kg-surface-ink-soft: #5B546E;
  --kg-veil: rgba(255, 252, 247, 0.88); /* used to make subtle page tints */
  --kg-veil-strong: rgba(255, 252, 247, 0.94);

  /* Motion */
  --kg-ease: cubic-bezier(0.22, 1, 0.36, 1);
  --kg-ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
  --kg-dur-fast: 160ms;
  --kg-dur: 280ms;
  --kg-dur-slow: 640ms;
  --kg-dur-drift: 22s;

  /* Shape */
  --kg-radius: 18px;
  --kg-radius-sm: 12px;
  --kg-radius-pill: 999px;
  --kg-border-w: 2px;

  /* Layer helpers */
  --kg-overlay: linear-gradient(transparent, transparent);
  --kg-angle: 135deg;

  /* Default palette = brand (Ember) */
  --kg-1: #FF5E4D; --kg-2: #FF8A5B; --kg-3: #FFC85C;
  --kg-accent-rgb: 255, 110, 80;
  --kg-deep-rgb: 178, 58, 42;
  --kg-ink-rgb: 34, 16, 46;

  /* Grain texture (static SVG, rasterised once — no runtime filter cost) */
  --kg-grain-img: url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.55 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");

  /* Semantic gradient aliases for direct use without data attributes */
  --kg-grad-brand:         linear-gradient(135deg, #FF5E4D, #FF8A5B, #FFC85C);
  --kg-grad-primary:       linear-gradient(135deg, #0A1FB8, #2B4CFF, #3560F5);
  --kg-grad-secondary:     linear-gradient(135deg, #3D0BC9, #6D28FF, #8B3DFF);
  --kg-grad-discovery:     linear-gradient(120deg, #35E4FF, #5AF1D0, #DCFF6B);
  --kg-grad-conversations: linear-gradient(160deg, #0A1533, #12306B, #1B5FBF);
  --kg-grad-profiles:      linear-gradient(135deg, #FF7AD9, #B78CFF, #6EDBFF);
  --kg-grad-moments:       linear-gradient(135deg, #FFE45E, #FF9AB8, #8FA3FF);
  --kg-grad-matching:      linear-gradient(135deg, #1029C7, #6A3BD8, #BF3F6B);
  --kg-grad-music:         radial-gradient(70% 80% at 0% 100%, #FFC94D 0%, rgba(255,201,77,0) 60%), linear-gradient(160deg, #0B1B3F, #142B66);
  --kg-grad-achievements:  linear-gradient(135deg, #FFC94D, #FF8E3C, #E8476A);
  --kg-grad-rare:          radial-gradient(60% 60% at 100% 0%, #D4FF4F 0%, rgba(212,255,79,0) 55%), linear-gradient(135deg, #2E0B8F, #4C1D95, #6D28D9);
  --kg-grad-success:       linear-gradient(135deg, #C8F53F, #6EE7A8, #14B8A6);
  --kg-grad-warning:       linear-gradient(135deg, #FFB020, #FFE14D, #D4F55A);
  --kg-grad-error:         linear-gradient(135deg, #B93A0F, #C9435F, #9F2F7A);
  --kg-grad-neutral:       linear-gradient(135deg, #FFFDF7, #FBF3E4, #F3E7D3);
  --kg-grad-neutral-dark:  linear-gradient(135deg, #0E0B1F, #1B1538, #2A2050);

  color-scheme: light;
}

/* Optional dark surface theme */
[data-theme="dark"] {
  --kg-surface: #0F0C1D;
  --kg-surface-2: #17132A;
  --kg-surface-ink: #F3EEFF;
  --kg-surface-ink-soft: #A79FBF;
  --kg-veil: rgba(15, 12, 29, 0.86);
  --kg-veil-strong: rgba(15, 12, 29, 0.93);
  color-scheme: dark;
}


/* 2. PALETTES
   Each palette sets: 3 stops, accent (rgb triplet for alpha use),
   deep (text on light surfaces), ink (text ON the gradient), angle.
   Semantic names share the block with their palette.
   ------------------------------------------------------------------------ */

/* — WARM FAMILY — */

/* 01 Ember · brand. Coral rising into warm yellow — the Kyoss signature. */
[data-kg="ember"], .kg-ember, [data-kg="brand"], .kg-brand {
  --kg-1: #FF5E4D; --kg-2: #FF8A5B; --kg-3: #FFC85C; --kg-angle: 135deg;
  --kg-accent-rgb: 255, 110, 80; --kg-deep-rgb: 178, 58, 42; --kg-ink-rgb: 34, 16, 46;
}
/* 02 Tangerine · moments / live. Orange → hot pink; loud but controlled. */
[data-kg="tangerine"], .kg-tangerine, [data-kg="live"], .kg-live {
  --kg-1: #FF7A18; --kg-2: #FF4D6D; --kg-3: #FF2E93; --kg-angle: 120deg;
  --kg-accent-rgb: 255, 77, 109; --kg-deep-rgb: 184, 28, 86; --kg-ink-rgb: 42, 7, 20;
}
/* 03 Golden Hour · achievements. Amber → tangerine → rose; trophy warmth. */
[data-kg="goldenhour"], .kg-goldenhour, [data-kg="achievements"], .kg-achievements {
  --kg-1: #FFC94D; --kg-2: #FF8E3C; --kg-3: #E8476A; --kg-angle: 135deg;
  --kg-accent-rgb: 255, 142, 60; --kg-deep-rgb: 176, 68, 46; --kg-ink-rgb: 43, 15, 26;
}
/* 04 Peach Cream · neutral decorative surface. Cream → peach; barely-there warmth. */
[data-kg="peachcream"], .kg-peachcream, [data-kg="neutral-warm"], .kg-neutral-warm {
  --kg-1: #FFF6E5; --kg-2: #FFDDC2; --kg-3: #FFBFAE; --kg-angle: 150deg;
  --kg-accent-rgb: 255, 160, 130; --kg-deep-rgb: 154, 74, 42; --kg-ink-rgb: 74, 36, 24;
}
/* 05 Saffron · warning. Saffron → lemon → lime; alert without alarm. */
[data-kg="saffron"], .kg-saffron, [data-kg="warning"], .kg-warning {
  --kg-1: #FFB020; --kg-2: #FFE14D; --kg-3: #D4F55A; --kg-angle: 120deg;
  --kg-accent-rgb: 255, 176, 32; --kg-deep-rgb: 138, 90, 0; --kg-ink-rgb: 31, 42, 10;
}
/* 06 Rosewater · soft profiles. Blush → pink; affectionate, quiet. */
[data-kg="rosewater"], .kg-rosewater {
  --kg-1: #FFD6E0; --kg-2: #FFB3C7; --kg-3: #FF8FAB; --kg-angle: 135deg;
  --kg-accent-rgb: 255, 143, 171; --kg-deep-rgb: 176, 32, 84; --kg-ink-rgb: 74, 15, 36;
}
/* 07 Hot Noon · matching "it's a match". Hot pink → coral → mango. */
[data-kg="hotnoon"], .kg-hotnoon, [data-kg="match"], .kg-match {
  --kg-1: #FF2D95; --kg-2: #FF5F6D; --kg-3: #FFB347; --kg-angle: 135deg;
  --kg-accent-rgb: 255, 61, 120; --kg-deep-rgb: 190, 20, 100; --kg-ink-rgb: 43, 7, 24;
}
/* 08 Terracotta · error. Burnt clay → rose → plum; serious, never harsh. */
[data-kg="terracotta"], .kg-terracotta, [data-kg="error"], .kg-error {
  --kg-1: #B93A0F; --kg-2: #C9435F; --kg-3: #9F2F7A; --kg-angle: 135deg;
  --kg-accent-rgb: 201, 67, 95; --kg-deep-rgb: 160, 42, 60; --kg-ink-rgb: 255, 255, 255;
}

/* — COOL FAMILY — */

/* 09 Cobalt · primary action. Deep cobalt → electric blue; decisive. */
[data-kg="cobalt"], .kg-cobalt, [data-kg="primary"], .kg-primary {
  --kg-1: #0A1FB8; --kg-2: #2B4CFF; --kg-3: #3560F5; --kg-angle: 135deg;
  --kg-accent-rgb: 43, 76, 255; --kg-deep-rgb: 20, 45, 200; --kg-ink-rgb: 255, 255, 255;
}
/* 10 Navy Tide · conversations. Midnight navy → ocean blue; calm focus. */
[data-kg="navytide"], .kg-navytide, [data-kg="conversations"], .kg-conversations {
  --kg-1: #0A1533; --kg-2: #12306B; --kg-3: #1B5FBF; --kg-angle: 160deg;
  --kg-accent-rgb: 27, 95, 191; --kg-deep-rgb: 18, 48, 107; --kg-ink-rgb: 255, 255, 255;
}
/* 11 Cyan Pop · discovery. Cyan → mint → lime; radar-bright, fresh. */
[data-kg="cyanpop"], .kg-cyanpop, [data-kg="discovery"], .kg-discovery {
  --kg-1: #35E4FF; --kg-2: #5AF1D0; --kg-3: #DCFF6B; --kg-angle: 120deg;
  --kg-accent-rgb: 0, 190, 230; --kg-deep-rgb: 0, 112, 140; --kg-ink-rgb: 6, 34, 43;
}
/* 12 Glacier · subtle backgrounds. Ice white → sky; airy. */
[data-kg="glacier"], .kg-glacier, [data-kg="neutral-cool"], .kg-neutral-cool {
  --kg-1: #E6F4FF; --kg-2: #BFE3FF; --kg-3: #9CCBFF; --kg-angle: 150deg;
  --kg-accent-rgb: 96, 165, 250; --kg-deep-rgb: 22, 78, 150; --kg-ink-rgb: 11, 47, 92;
}
/* 13 Electric · secondary action. Indigo → electric violet; energetic support. */
[data-kg="electric"], .kg-electric, [data-kg="secondary"], .kg-secondary {
  --kg-1: #3D0BC9; --kg-2: #6D28FF; --kg-3: #8B3DFF; --kg-angle: 135deg;
  --kg-accent-rgb: 122, 43, 255; --kg-deep-rgb: 90, 26, 214; --kg-ink-rgb: 255, 255, 255;
}
/* 14 Ultramarine · matching screen. Ultramarine → violet → raspberry; tension. */
[data-kg="ultramarine"], .kg-ultramarine, [data-kg="matching"], .kg-matching {
  --kg-1: #1029C7; --kg-2: #6A3BD8; --kg-3: #BF3F6B; --kg-angle: 135deg;
  --kg-accent-rgb: 191, 63, 107; --kg-deep-rgb: 150, 40, 90; --kg-ink-rgb: 255, 255, 255;
}
/* 15 Deep Reef · music / dark surfaces. Abyss teal → sea green; immersive. */
[data-kg="reef"], .kg-reef {
  --kg-1: #072F3A; --kg-2: #0F5F5C; --kg-3: #1B7F62; --kg-angle: 150deg;
  --kg-accent-rgb: 32, 178, 140; --kg-deep-rgb: 15, 95, 92; --kg-ink-rgb: 255, 255, 255;
}
/* 16 Night · neutral dark surface. Ink black → indigo dusk; the dark canvas. */
[data-kg="night"], .kg-night, [data-kg="neutral-dark"], .kg-neutral-dark {
  --kg-1: #0E0B1F; --kg-2: #1B1538; --kg-3: #2A2050; --kg-angle: 135deg;
  --kg-accent-rgb: 122, 96, 200; --kg-deep-rgb: 27, 21, 56; --kg-ink-rgb: 245, 241, 255;
}

/* — GREEN FAMILY — */

/* 17 Lime Circuit · success. Lime → mint → teal; alive, confirmed. */
[data-kg="lime"], .kg-lime, [data-kg="success"], .kg-success {
  --kg-1: #C8F53F; --kg-2: #6EE7A8; --kg-3: #14B8A6; --kg-angle: 135deg;
  --kg-accent-rgb: 22, 163, 148; --kg-deep-rgb: 16, 110, 90; --kg-ink-rgb: 5, 42, 37;
}
/* 18 Mint Cream · success-light / soft status. Mint mist. */
[data-kg="mint"], .kg-mint {
  --kg-1: #EAFBF1; --kg-2: #C5F2DD; --kg-3: #9FE6CB; --kg-angle: 150deg;
  --kg-accent-rgb: 52, 199, 150; --kg-deep-rgb: 12, 110, 80; --kg-ink-rgb: 11, 59, 46;
}

/* — CROSS-FAMILY / UNEXPECTED — */

/* 19 Sorbet · moments/posts. Lemon → pink → periwinkle; three-flavor scoop. */
[data-kg="sorbet"], .kg-sorbet, [data-kg="moments"], .kg-moments {
  --kg-1: #FFE45E; --kg-2: #FF9AB8; --kg-3: #8FA3FF; --kg-angle: 135deg;
  --kg-accent-rgb: 255, 122, 162; --kg-deep-rgb: 60, 60, 190; --kg-ink-rgb: 26, 16, 64;
}
/* 20 Orchid · profiles. Orchid pink → lavender → sky cyan; expressive identity. */
[data-kg="orchid"], .kg-orchid, [data-kg="profiles"], .kg-profiles {
  --kg-1: #FF7AD9; --kg-2: #B78CFF; --kg-3: #6EDBFF; --kg-angle: 135deg;
  --kg-accent-rgb: 183, 140, 255; --kg-deep-rgb: 120, 50, 200; --kg-ink-rgb: 35, 16, 63;
}
/* 21 Dusk · profile hero / evening. Plum → magenta-plum → rose; cinematic. */
[data-kg="dusk"], .kg-dusk {
  --kg-1: #241046; --kg-2: #6B2A6E; --kg-3: #B8456B; --kg-angle: 150deg;
  --kg-accent-rgb: 184, 69, 107; --kg-deep-rgb: 107, 42, 110; --kg-ink-rgb: 255, 255, 255;
}
/* 22 Honey Navy · music. Navy field lit by a warm-yellow radial — vinyl glow. */
[data-kg="honey"], .kg-honey, [data-kg="music"], .kg-music {
  --kg-1: #0B1B3F; --kg-2: #142B66; --kg-3: #FFC94D; --kg-angle: 160deg;
  --kg-accent-rgb: 255, 201, 77; --kg-deep-rgb: 20, 43, 102; --kg-ink-rgb: 255, 255, 255;
}
/* 23 Voltage · rare achievements. Violet field struck by a lime flare. */
[data-kg="voltage"], .kg-voltage, [data-kg="rare"], .kg-rare {
  --kg-1: #2E0B8F; --kg-2: #4C1D95; --kg-3: #D4FF4F; --kg-angle: 135deg;
  --kg-accent-rgb: 168, 230, 60; --kg-deep-rgb: 76, 29, 149; --kg-ink-rgb: 255, 255, 255;
}
/* 24 Duo · brand rings & borders. Coral ↔ cobalt via pink — the Kyoss handshake. */
[data-kg="duo"], .kg-duo {
  --kg-1: #F4583C; --kg-2: #D8558F; --kg-3: #2B4CFF; --kg-angle: 120deg;
  --kg-accent-rgb: 244, 88, 60; --kg-deep-rgb: 30, 60, 220; --kg-ink-rgb: 255, 255, 255;
}
/* 25 Paper · page background. Warm paper whites; the resting state. */
[data-kg="paper"], .kg-paper, [data-kg="neutral"], .kg-neutral {
  --kg-1: #FFFDF7; --kg-2: #FBF3E4; --kg-3: #F3E7D3; --kg-angle: 135deg;
  --kg-accent-rgb: 214, 170, 120; --kg-deep-rgb: 120, 84, 40; --kg-ink-rgb: 42, 33, 24;
}


/* 3. DERIVED TOKENS
   Re-declared on every palette host so they resolve against that host's stops.
   ------------------------------------------------------------------------ */
:root, [data-kg], [class*="kg-"], .kg-light, .kg-dark {
  --kg-gradient-flat: linear-gradient(var(--kg-angle), var(--kg-1) 0%, var(--kg-2) 50%, var(--kg-3) 100%);
  --kg-gradient: var(--kg-overlay), var(--kg-gradient-flat);
  --kg-gradient-radial: radial-gradient(120% 120% at 0% 0%, var(--kg-1) 0%, var(--kg-2) 55%, var(--kg-3) 100%);
  --kg-gradient-conic: conic-gradient(from 0deg, var(--kg-1), var(--kg-2), var(--kg-3), var(--kg-1));

  --kg-ink: rgb(var(--kg-ink-rgb));
  --kg-ink-soft: rgba(var(--kg-ink-rgb), 0.74);
  --kg-ink-faint: rgba(var(--kg-ink-rgb), 0.16);

  --kg-accent: rgb(var(--kg-accent-rgb));
  --kg-deep: rgb(var(--kg-deep-rgb));
  --kg-on-tint: var(--kg-deep);

  --kg-border: rgba(var(--kg-accent-rgb), 0.55);
  --kg-border-soft: rgba(var(--kg-accent-rgb), 0.22);
  --kg-shadow: 0 1px 2px rgba(var(--kg-accent-rgb), 0.16), 0 14px 30px -14px rgba(var(--kg-accent-rgb), 0.55);
  --kg-shadow-lg: 0 2px 4px rgba(var(--kg-accent-rgb), 0.12), 0 28px 56px -22px rgba(var(--kg-accent-rgb), 0.6);
  --kg-glow: 0 0 0 1px rgba(var(--kg-accent-rgb), 0.18), 0 0 36px -8px rgba(var(--kg-accent-rgb), 0.55);
  --kg-glow-strong: 0 0 0 1px rgba(var(--kg-accent-rgb), 0.3), 0 0 56px -6px rgba(var(--kg-accent-rgb), 0.75);
  --kg-ring: 0 0 0 3px var(--kg-surface), 0 0 0 6px var(--kg-accent);

  --kg-tint: rgba(var(--kg-accent-rgb), 0.10);
  --kg-tint-strong: rgba(var(--kg-accent-rgb), 0.18);
  --kg-bg-subtle: linear-gradient(var(--kg-veil), var(--kg-veil)), var(--kg-gradient-flat);
}

/* Special compositions (radial accents) — override the composed gradient only */
[data-kg="honey"], .kg-honey, [data-kg="music"], .kg-music {
  --kg-gradient: var(--kg-overlay),
    radial-gradient(70% 80% at 0% 100%, var(--kg-3) 0%, rgba(255, 201, 77, 0) 60%),
    linear-gradient(var(--kg-angle), var(--kg-1), var(--kg-2));
}
[data-kg="voltage"], .kg-voltage, [data-kg="rare"], .kg-rare {
  --kg-gradient: var(--kg-overlay),
    radial-gradient(60% 60% at 100% 0%, var(--kg-3) 0%, rgba(212, 255, 79, 0) 55%),
    linear-gradient(var(--kg-angle), var(--kg-1), var(--kg-2) 60%, #6D28D9);
}
/* Wide-gamut refinement: hue-preserving interpolation for the cross-family pairs */
@supports (background: linear-gradient(in oklch, red, blue)) {
  [data-kg="duo"], .kg-duo {
    --kg-gradient-flat: linear-gradient(var(--kg-angle) in oklch, var(--kg-1), var(--kg-2), var(--kg-3));
  }
  [data-kg="sorbet"], .kg-sorbet, [data-kg="moments"], .kg-moments,
  [data-kg="orchid"], .kg-orchid, [data-kg="profiles"], .kg-profiles {
    --kg-gradient-flat: linear-gradient(var(--kg-angle) in oklab, var(--kg-1), var(--kg-2), var(--kg-3));
  }
}


/* 4. VARIANTS
   .kg-light  → pastel version, always dark ink
   .kg-dark   → deepened version, always light ink
   A variant applies to its element and to descendants that do NOT declare
   their own palette; a nested [data-kg] starts fresh at medium weight.
   ------------------------------------------------------------------------ */
[data-kg] { --kg-overlay: linear-gradient(transparent, transparent); }
.kg-light {
  --kg-overlay: linear-gradient(rgba(255, 253, 248, 0.64), rgba(255, 253, 248, 0.64));
  --kg-ink-rgb: 24, 16, 44;
}
.kg-dark {
  --kg-overlay: linear-gradient(rgba(14, 10, 32, 0.52), rgba(14, 10, 32, 0.52));
  --kg-ink-rgb: 255, 255, 255;
}
/* Medium is the default. */


/* 5. UTILITIES
   ------------------------------------------------------------------------ */
.kg-bg            { background: var(--kg-gradient); color: var(--kg-ink); }
.kg-bg-flat       { background: var(--kg-gradient-flat); color: var(--kg-ink); }
.kg-bg-radial     { background: var(--kg-overlay), var(--kg-gradient-radial); color: var(--kg-ink); }
.kg-bg-subtle     { background: var(--kg-bg-subtle); color: var(--kg-surface-ink); }
.kg-bg-tint       { background: var(--kg-tint); color: var(--kg-on-tint); }
.kg-shadow        { box-shadow: var(--kg-shadow); }
.kg-shadow-lg     { box-shadow: var(--kg-shadow-lg); }
.kg-glow          { box-shadow: var(--kg-glow); }
.kg-accent-text   { color: var(--kg-deep); }
.kg-accent-fill   { fill: var(--kg-deep); }

/* Gradient text — falls back to the deep accent colour */
.kg-text {
  color: var(--kg-deep);
  font-weight: 700;
}
@supports ((-webkit-background-clip: text) or (background-clip: text)) {
  .kg-text {
    background: var(--kg-gradient-flat);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    color: transparent;
  }
}

/* Static gradient border (2 layers: surface on padding-box, gradient on border-box) */
.kg-border {
  border: var(--kg-border-w) solid transparent;
  border-radius: var(--kg-radius);
  background:
    linear-gradient(var(--kg-surface), var(--kg-surface)) padding-box,
    var(--kg-gradient-flat) border-box;
  color: var(--kg-surface-ink);
}

/* Animated gradient border — rotating conic layer clipped by the host */
.kg-border-anim {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  border-radius: var(--kg-radius);
  padding: var(--kg-border-w);
  color: var(--kg-surface-ink);
}
.kg-border-anim::before {
  content: "";
  position: absolute;
  inset: -50%;
  z-index: -2;
  background: var(--kg-2);
  background: var(--kg-gradient-conic);
  animation: kg-spin 7s linear infinite;
  will-change: transform;
}
.kg-border-anim::after {
  content: "";
  position: absolute;
  inset: var(--kg-border-w);
  z-index: -1;
  border-radius: calc(var(--kg-radius) - var(--kg-border-w));
  background: var(--kg-surface);
}

/* Profile ring (animated conic ring around an avatar) */
.kg-avatar {
  --kg-avatar-size: 64px;
  --kg-ring-w: 3px;
  --kg-ring-gap: 2px;
  position: relative;
  isolation: isolate;
  display: inline-block;
  width: var(--kg-avatar-size);
  height: var(--kg-avatar-size);
  padding: calc(var(--kg-ring-w) + var(--kg-ring-gap));
  border-radius: 50%;
  overflow: hidden;
  flex: none;
}
.kg-avatar::before {
  content: "";
  position: absolute;
  inset: -50%;
  z-index: -2;
  border-radius: 50%;
  background: var(--kg-2);
  background: var(--kg-gradient-conic);
  animation: kg-spin 9s linear infinite;
  will-change: transform;
}
.kg-avatar::after {
  content: "";
  position: absolute;
  inset: var(--kg-ring-w);
  z-index: -1;
  border-radius: 50%;
  background: var(--kg-surface);
}
.kg-avatar > img, .kg-avatar > .kg-avatar-fill {
  display: block;
  width: 100%;
  height: 100%;
  border-radius: 50%;
  object-fit: cover;
}
.kg-avatar > .kg-avatar-fill {
  display: grid;
  place-items: center;
  background: var(--kg-gradient);
  color: var(--kg-ink);
  font-weight: 700;
  font-size: calc(var(--kg-avatar-size) * 0.36);
}
.kg-avatar--static::before { animation: none; }
.kg-avatar--lg { --kg-avatar-size: 112px; --kg-ring-w: 4px; --kg-ring-gap: 3px; }
.kg-avatar--sm { --kg-avatar-size: 40px; --kg-ring-w: 2px; --kg-ring-gap: 2px; }

/* Text safety: scrim (bottom fade) and plate (solid pod) */
.kg-scrim {
  position: relative;
}
.kg-scrim::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: linear-gradient(to top, rgba(12, 8, 26, 0.78) 0%, rgba(12, 8, 26, 0.36) 45%, rgba(12, 8, 26, 0) 75%);
  pointer-events: none;
}
.kg-scrim > * { position: relative; z-index: 1; }
.kg-scrim .kg-scrim-text { color: #FFFFFF; }

.kg-plate {
  background: rgba(255, 252, 247, 0.92);
  color: #1B1533;
  border-radius: var(--kg-radius-sm);
  padding: 0.75rem 1rem;
}
.kg-plate--dark {
  background: rgba(14, 10, 32, 0.78);
  color: #FFFFFF;
}

/* Focus (keyboard only) */
.kg-focus:focus { outline: none; }
.kg-focus:focus-visible {
  outline: 3px solid transparent; /* Windows High Contrast keeps an outline */
  box-shadow: var(--kg-ring);
}

/* Palette-transition helper (registered properties interpolate; else instant) */
.kg-transition, [data-kg] {
  transition:
    --kg-1 var(--kg-dur-slow) var(--kg-ease-in-out),
    --kg-2 var(--kg-dur-slow) var(--kg-ease-in-out),
    --kg-3 var(--kg-dur-slow) var(--kg-ease-in-out),
    --kg-angle var(--kg-dur-slow) var(--kg-ease-in-out),
    color var(--kg-dur) ease,
    box-shadow var(--kg-dur) ease;
}


/* 6. EFFECTS
   All continuous animations use transform/opacity only (compositor-friendly).
   Layer groups — combine at most ONE class from each group on the same element:
     ::before group  → .kg-drift  .kg-mesh  .kg-radial  (.kg-rare-fx uses both)
     ::after  group  → .kg-breathe  .kg-cursor  .kg-grain  .kg-sheen  .kg-scrim
   Need more? Add child layers: <i class="kg-grain-layer"> / <i class="kg-mesh-layer">
   ------------------------------------------------------------------------ */

/* Shared: effect hosts need a clipping context */
.kg-drift, .kg-breathe, .kg-mesh, .kg-cursor, .kg-grain, .kg-radial, .kg-rare-fx, .kg-sheen {
  position: relative;
  isolation: isolate;
  overflow: hidden;
}
.kg-drift > *, .kg-breathe > *, .kg-mesh > *, .kg-cursor > *, .kg-grain > *, .kg-radial > *, .kg-rare-fx > * {
  position: relative;
  z-index: 1;
}

/* Slowly shifting gradient — oversized layer translated/rotated, never repainted */
.kg-drift { background: var(--kg-2); color: var(--kg-ink); }
.kg-drift::before {
  content: "";
  position: absolute;
  inset: -40%;
  z-index: 0;
  background: var(--kg-gradient);
  animation: kg-drift var(--kg-dur-drift) var(--kg-ease-in-out) infinite alternate;
  will-change: transform;
}

/* Soft colour breathing — radial accent that swells and fades */
.kg-breathe { background: var(--kg-gradient); color: var(--kg-ink); }
.kg-breathe::after {
  content: "";
  position: absolute;
  z-index: 0;
  width: 90%;
  aspect-ratio: 1;
  left: 55%;
  top: -35%;
  border-radius: 50%;
  background: radial-gradient(circle, var(--kg-3) 0%, rgba(255, 255, 255, 0) 65%);
  opacity: 0.6;
  animation: kg-breathe 7s var(--kg-ease-in-out) infinite;
  will-change: transform, opacity;
}

/* Organic mesh — one transform-animated layer of four radial pools over the base gradient.
   (Uses ::before only, so it composes with ::after effects: grain, cursor, breathe.) */
.kg-mesh { background: var(--kg-gradient-flat); color: var(--kg-ink); }
.kg-mesh::before {
  content: "";
  position: absolute;
  inset: -35%;
  z-index: 0;
  background:
    radial-gradient(30% 30% at 28% 30%, var(--kg-1) 0%, rgba(255,255,255,0) 70%),
    radial-gradient(26% 26% at 74% 68%, var(--kg-3) 0%, rgba(255,255,255,0) 70%),
    radial-gradient(22% 22% at 68% 28%, var(--kg-2) 0%, rgba(255,255,255,0) 70%),
    radial-gradient(32% 32% at 30% 76%, var(--kg-3) 0%, rgba(255,255,255,0) 72%);
  animation: kg-mesh-a 28s var(--kg-ease-in-out) infinite alternate;
  will-change: transform;
}
/* Optional second, counter-moving layer as a real child: <i class="kg-mesh-layer"></i> */
.kg-mesh-layer.kg-mesh-layer {
  position: absolute;
  inset: -35%;
  z-index: 0;
  pointer-events: none;
  background:
    radial-gradient(28% 28% at 70% 25%, var(--kg-2) 0%, rgba(255,255,255,0) 70%),
    radial-gradient(36% 36% at 24% 70%, var(--kg-1) 0%, rgba(255,255,255,0) 72%);
  opacity: 0.85;
  animation: kg-mesh-b 34s var(--kg-ease-in-out) infinite alternate;
  will-change: transform;
}

/* Radial colour accent (static) */
.kg-radial { background: var(--kg-gradient-flat); color: var(--kg-ink); }
.kg-radial::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background:
    radial-gradient(45% 55% at 100% 0%, var(--kg-3) 0%, rgba(255,255,255,0) 70%),
    radial-gradient(40% 50% at 0% 100%, var(--kg-1) 0%, rgba(255,255,255,0) 70%);
}

/* Cursor-responsive light — JS writes --kg-mx/--kg-my (px offsets from centre). Uses ::after. */
.kg-cursor { background: var(--kg-gradient); color: var(--kg-ink); --kg-mx: 0px; --kg-my: 0px; }
.kg-cursor::after {
  content: "";
  position: absolute;
  z-index: 0;
  left: 50%;
  top: 50%;
  width: 70%;
  aspect-ratio: 1;
  margin: -35% 0 0 -35%;
  border-radius: 50%;
  background: radial-gradient(circle, var(--kg-3) 0%, rgba(255, 255, 255, 0) 62%);
  opacity: 0.75;
  transform: translate3d(var(--kg-mx), var(--kg-my), 0);
  transition: transform 700ms var(--kg-ease), opacity 400ms ease;
  will-change: transform;
}
.kg-cursor:not(.is-hovering)::after { opacity: 0.45; }

/* Light travelling across a button (hover, keyboard focus, or .is-selected) */
.kg-sheen::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 2;
  pointer-events: none;
  background: linear-gradient(115deg, rgba(255,255,255,0) 30%, rgba(255,255,255,0.42) 50%, rgba(255,255,255,0) 70%);
  transform: translate3d(-130%, 0, 0);
  will-change: transform;
}
.kg-sheen:hover::after,
.kg-sheen:focus-visible::after,
.kg-sheen.kg-sheen-once::after { animation: kg-sheen 900ms var(--kg-ease-in-out) 1; }
.kg-sheen.is-selected::after { animation: kg-sheen-loop 3.6s var(--kg-ease-in-out) infinite; }

/* Restrained grain (static SVG noise, soft-light blend, single layer). Uses ::after.
   When ::after is taken (e.g. .kg-cursor, .kg-breathe) drop in a child instead:
   <i class="kg-grain-layer" aria-hidden="true"></i> */
.kg-grain::after, .kg-grain-layer.kg-grain-layer {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background-image: var(--kg-grain-img);
  background-size: 180px 180px;
  opacity: 0.22;
  mix-blend-mode: soft-light;
  pointer-events: none;
  border-radius: inherit;
}

/* Rare achievement — slow conic sweep + diagonal shimmer */
.kg-rare-fx { background: var(--kg-gradient); color: var(--kg-ink); }
.kg-rare-fx::before {
  content: "";
  position: absolute;
  inset: -60%;
  z-index: 0;
  background: conic-gradient(from 0deg, rgba(255,255,255,0) 0deg, rgba(212,255,79,0.55) 40deg, rgba(255,255,255,0) 90deg, rgba(255,255,255,0) 200deg, rgba(255,122,217,0.45) 250deg, rgba(255,255,255,0) 300deg);
  animation: kg-spin 11s linear infinite;
  opacity: 0.9;
  will-change: transform;
}
.kg-rare-fx::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background: linear-gradient(115deg, rgba(255,255,255,0) 40%, rgba(255,255,255,0.35) 50%, rgba(255,255,255,0) 60%);
  transform: translate3d(-130%, 0, 0);
  animation: kg-sheen-loop 5.2s var(--kg-ease-in-out) infinite;
  will-change: transform;
}

/* Section transitions (enter animations for view swaps) */
.kg-enter { animation: kg-enter var(--kg-dur-slow) var(--kg-ease) both; }
.kg-enter-delay-1 { animation-delay: 60ms; }
.kg-enter-delay-2 { animation-delay: 120ms; }
.kg-enter-delay-3 { animation-delay: 180ms; }

/* Keyframes */
@keyframes kg-spin { to { transform: rotate(1turn); } }
@keyframes kg-drift {
  0%   { transform: translate3d(-6%, -4%, 0) rotate(0deg) scale(1); }
  100% { transform: translate3d(6%, 4%, 0) rotate(8deg) scale(1.06); }
}
@keyframes kg-breathe {
  0%, 100% { transform: scale(1); opacity: 0.5; }
  50%      { transform: scale(1.12); opacity: 0.85; }
}
@keyframes kg-mesh-a {
  0%   { transform: translate3d(-4%, -3%, 0) rotate(0deg); }
  100% { transform: translate3d(5%, 4%, 0) rotate(14deg); }
}
@keyframes kg-mesh-b {
  0%   { transform: translate3d(4%, 3%, 0) rotate(0deg) scale(1.05); }
  100% { transform: translate3d(-5%, -4%, 0) rotate(-12deg) scale(1); }
}
@keyframes kg-sheen {
  from { transform: translate3d(-130%, 0, 0); }
  to   { transform: translate3d(130%, 0, 0); }
}
@keyframes kg-sheen-loop {
  0%   { transform: translate3d(-130%, 0, 0); }
  38%  { transform: translate3d(130%, 0, 0); }
  100% { transform: translate3d(130%, 0, 0); }
}
@keyframes kg-enter {
  from { opacity: 0; transform: translate3d(0, 10px, 0); }
  to   { opacity: 1; transform: translate3d(0, 0, 0); }
}
@keyframes kg-pulse-ring {
  0%   { transform: scale(0.9); opacity: 0.6; }
  100% { transform: scale(1.6); opacity: 0; }
}


/* 7. COMPONENTS
   ------------------------------------------------------------------------ */

/* Button */
.kg-btn {
  --kg-btn-py: 0.7rem;
  --kg-btn-px: 1.25rem;
  position: relative;
  isolation: isolate;
  overflow: hidden;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  min-height: 44px;
  padding: var(--kg-btn-py) var(--kg-btn-px);
  border: 0;
  border-radius: var(--kg-radius-pill);
  background: var(--kg-gradient);
  color: var(--kg-ink);
  font: inherit;
  font-weight: 650;
  letter-spacing: 0.01em;
  line-height: 1.2;
  text-decoration: none;
  cursor: pointer;
  box-shadow: var(--kg-shadow);
  transform: translateZ(0);
  transition:
    transform var(--kg-dur-fast) var(--kg-ease),
    box-shadow var(--kg-dur) ease,
    --kg-1 var(--kg-dur-slow) var(--kg-ease-in-out),
    --kg-2 var(--kg-dur-slow) var(--kg-ease-in-out),
    --kg-3 var(--kg-dur-slow) var(--kg-ease-in-out);
  -webkit-tap-highlight-color: transparent;
  user-select: none;
}
.kg-btn::before {           /* hover tint layer, opacity-only */
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background: rgba(255, 255, 255, 0.14);
  opacity: 0;
  transition: opacity var(--kg-dur-fast) ease;
}
.kg-btn::after {            /* travelling light */
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background: linear-gradient(115deg, rgba(255,255,255,0) 30%, rgba(255,255,255,0.40) 50%, rgba(255,255,255,0) 70%);
  transform: translate3d(-130%, 0, 0);
}
.kg-btn > * { position: relative; z-index: 2; }
.kg-btn:hover { transform: translateY(-1px) translateZ(0); box-shadow: var(--kg-shadow-lg); }
.kg-btn:hover::before { opacity: 1; }
.kg-btn:hover::after, .kg-btn:focus-visible::after, .kg-btn.kg-sheen-once::after { animation: kg-sheen 900ms var(--kg-ease-in-out) 1; }
.kg-btn.is-selected::after { animation: kg-sheen-loop 3.6s var(--kg-ease-in-out) infinite; }
.kg-btn:active { transform: translateY(0) scale(0.98) translateZ(0); box-shadow: 0 1px 2px rgba(var(--kg-accent-rgb), 0.25); transition-duration: 60ms; }
.kg-btn:focus { outline: none; }
.kg-btn:focus-visible { box-shadow: var(--kg-ring), var(--kg-shadow); }
.kg-btn:disabled, .kg-btn[aria-disabled="true"] { opacity: 0.55; cursor: not-allowed; transform: none; box-shadow: none; }
.kg-btn:disabled::after { animation: none; }

/* Button — tinted secondary style (readable accent text on light surfaces) */
.kg-btn--tint {
  background: var(--kg-tint);
  color: var(--kg-on-tint);
  box-shadow: inset 0 0 0 1px var(--kg-border-soft);
}
.kg-btn--tint::before { background: var(--kg-tint-strong); }
.kg-btn--tint::after { display: none; }
.kg-btn--tint:hover { box-shadow: inset 0 0 0 1px var(--kg-border), var(--kg-shadow); }

/* Button — outline (gradient border, surface fill) */
.kg-btn--outline {
  background:
    linear-gradient(var(--kg-surface), var(--kg-surface)) padding-box,
    var(--kg-gradient-flat) border-box;
  border: var(--kg-border-w) solid transparent;
  color: var(--kg-on-tint);
  box-shadow: none;
}
.kg-btn--outline::before { background: var(--kg-tint); }
.kg-btn--outline::after { display: none; }

/* Button — ghost-on-gradient (for use inside gradient surfaces) */
.kg-btn--ghost {
  background: rgba(255, 255, 255, 0.16);
  color: currentColor;
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.28);
}
.kg-btn--ghost::after { display: none; }
.kg-btn--ghost:hover { box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.5); }

.kg-btn--sm { --kg-btn-py: 0.45rem; --kg-btn-px: 0.9rem; min-height: 36px; font-size: 0.875rem; }
.kg-btn--lg { --kg-btn-py: 0.95rem; --kg-btn-px: 1.6rem; min-height: 52px; font-size: 1.0625rem; }
.kg-btn--icon { width: 44px; padding: 0; }

/* Card (surface card with palette header) */
.kg-card {
  position: relative;
  border-radius: var(--kg-radius);
  background: var(--kg-surface);
  color: var(--kg-surface-ink);
  box-shadow: 0 1px 2px rgba(27, 21, 51, 0.06), 0 12px 32px -18px rgba(27, 21, 51, 0.25);
  overflow: hidden;
  transition: transform var(--kg-dur) var(--kg-ease), box-shadow var(--kg-dur) ease;
}
.kg-card:hover { transform: translateY(-2px); box-shadow: var(--kg-shadow-lg); }
.kg-card__cover {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  height: 120px;
  background: var(--kg-gradient);
  color: var(--kg-ink);
}
.kg-card__body { padding: 1rem 1.25rem 1.25rem; }

/* Profile card */
.kg-profile-card {
  position: relative;
  border-radius: calc(var(--kg-radius) + 4px);
  background: var(--kg-surface);
  color: var(--kg-surface-ink);
  overflow: hidden;
  box-shadow: 0 1px 2px rgba(27, 21, 51, 0.06), 0 16px 40px -20px rgba(27, 21, 51, 0.3);
  transition: transform var(--kg-dur) var(--kg-ease), box-shadow var(--kg-dur) ease;
}
.kg-profile-card:hover { transform: translateY(-3px); box-shadow: var(--kg-shadow-lg); }
.kg-profile-card__cover {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  height: 96px;
  background: var(--kg-gradient);
}
.kg-profile-card__avatar {
  margin: -40px auto 0;
  display: block;
}
.kg-profile-card__body { padding: 0.75rem 1.25rem 1.25rem; text-align: center; }
.kg-profile-card__name { font-weight: 750; font-size: 1.0625rem; margin: 0; }
.kg-profile-card__meta { margin: 0.2rem 0 0.9rem; font-size: 0.85rem; color: var(--kg-surface-ink-soft); }
.kg-profile-card__tags { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.4rem; margin-bottom: 1rem; }

/* Chip / tag / badge */
.kg-chip {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  padding: 0.3rem 0.7rem;
  border-radius: var(--kg-radius-pill);
  background: var(--kg-tint);
  color: var(--kg-on-tint);
  font-size: 0.8rem;
  font-weight: 600;
  line-height: 1.2;
  box-shadow: inset 0 0 0 1px var(--kg-border-soft);
}
.kg-chip--solid { background: var(--kg-gradient); color: var(--kg-ink); box-shadow: var(--kg-shadow); }

.kg-badge {
  --kg-badge-size: 72px;
  position: relative;
  isolation: isolate;
  overflow: hidden;
  display: inline-grid;
  place-items: center;
  width: var(--kg-badge-size);
  height: var(--kg-badge-size);
  border-radius: 28%;
  background: var(--kg-gradient);
  color: var(--kg-ink);
  box-shadow: var(--kg-shadow), inset 0 1px 0 rgba(255,255,255,0.35), inset 0 -2px 0 rgba(0,0,0,0.12);
  font-size: calc(var(--kg-badge-size) * 0.42);
  flex: none;
}
.kg-badge > * { position: relative; z-index: 1; }
.kg-badge--rare {
  box-shadow: var(--kg-glow-strong), inset 0 1px 0 rgba(255,255,255,0.35), inset 0 -2px 0 rgba(0,0,0,0.2);
}
.kg-badge--rare::before {
  content: "";
  position: absolute;
  inset: -60%;
  z-index: 0;
  background: conic-gradient(from 0deg, rgba(255,255,255,0) 0deg, rgba(212,255,79,0.6) 40deg, rgba(255,255,255,0) 90deg, rgba(255,255,255,0) 200deg, rgba(255,122,217,0.45) 250deg, rgba(255,255,255,0) 300deg);
  animation: kg-spin 9s linear infinite;
  will-change: transform;
}
.kg-badge--rare::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background: linear-gradient(115deg, rgba(255,255,255,0) 40%, rgba(255,255,255,0.4) 50%, rgba(255,255,255,0) 60%);
  transform: translate3d(-130%, 0, 0);
  animation: kg-sheen-loop 4.8s var(--kg-ease-in-out) infinite;
  will-change: transform;
}
.kg-badge--locked { filter: grayscale(1); opacity: 0.45; box-shadow: none; }

/* Chat header */
.kg-chat-header {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  display: flex;
  align-items: center;
  gap: 0.85rem;
  padding: 0.85rem 1rem;
  background: var(--kg-gradient);
  color: var(--kg-ink);
  border-radius: var(--kg-radius) var(--kg-radius) 0 0;
}
.kg-chat-header::before {          /* quiet radial accent, static */
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background: radial-gradient(60% 120% at 100% 0%, rgba(255,255,255,0.18) 0%, rgba(255,255,255,0) 70%);
  pointer-events: none;
}
.kg-chat-header > * { position: relative; z-index: 1; }
.kg-chat-header__name { font-weight: 700; margin: 0; line-height: 1.2; }
.kg-chat-header__status { margin: 0; font-size: 0.8rem; color: var(--kg-ink-soft); }
.kg-chat-header__dot {
  display: inline-block; width: 8px; height: 8px; border-radius: 50%;
  background: #C8F53F; box-shadow: 0 0 0 2px rgba(255,255,255,0.5); margin-right: 0.35rem; vertical-align: 1px;
}
.kg-chat { border-radius: var(--kg-radius); background: var(--kg-surface); color: var(--kg-surface-ink); overflow: hidden; box-shadow: 0 1px 2px rgba(27,21,51,.06), 0 12px 32px -18px rgba(27,21,51,.25); }
.kg-chat__body { padding: 1rem; display: grid; gap: 0.5rem; background: var(--kg-bg-subtle); }
.kg-bubble {
  max-width: 78%;
  padding: 0.6rem 0.85rem;
  border-radius: 18px;
  font-size: 0.925rem;
  line-height: 1.4;
  background: var(--kg-surface);
  color: var(--kg-surface-ink);
  box-shadow: 0 1px 2px rgba(27,21,51,.08);
  justify-self: start;
  border-bottom-left-radius: 6px;
}
.kg-bubble--me {
  justify-self: end;
  background: var(--kg-gradient);
  color: var(--kg-ink);
  border-bottom-left-radius: 18px;
  border-bottom-right-radius: 6px;
  box-shadow: var(--kg-shadow);
}

/* Music card */
.kg-music-card {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  display: grid;
  grid-template-columns: 64px 1fr auto;
  align-items: center;
  gap: 0.9rem;
  padding: 0.85rem;
  border-radius: var(--kg-radius);
  background: var(--kg-gradient);
  color: var(--kg-ink);
  box-shadow: var(--kg-shadow);
}
.kg-music-card > * { position: relative; z-index: 1; }
.kg-music-card__art {
  width: 64px; height: 64px; border-radius: 12px;
  background: var(--kg-gradient-conic);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,0.3), 0 6px 14px -6px rgba(0,0,0,0.4);
  display: grid; place-items: center; font-size: 1.4rem;
}
.kg-music-card__title { margin: 0; font-weight: 700; font-size: 0.975rem; line-height: 1.25; }
.kg-music-card__artist { margin: 0.15rem 0 0; font-size: 0.8rem; color: var(--kg-ink-soft); }
.kg-eq { display: inline-flex; align-items: flex-end; gap: 3px; height: 18px; }
.kg-eq i { display: block; width: 3px; height: 40%; background: currentColor; border-radius: 2px; transform-origin: bottom; animation: kg-eq 1.1s ease-in-out infinite alternate; }
.kg-eq i:nth-child(2) { animation-delay: -0.3s; height: 90%; }
.kg-eq i:nth-child(3) { animation-delay: -0.6s; height: 60%; }
.kg-eq i:nth-child(4) { animation-delay: -0.9s; height: 75%; }
@keyframes kg-eq { from { transform: scaleY(0.35); } to { transform: scaleY(1); } }

/* Navigation */
.kg-nav {
  display: flex;
  gap: 0.25rem;
  padding: 0.35rem;
  border-radius: var(--kg-radius-pill);
  background: var(--kg-surface-2);
}
.kg-nav__item {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  min-height: 40px;
  padding: 0.45rem 0.95rem;
  border: 0;
  border-radius: var(--kg-radius-pill);
  background: transparent;
  color: var(--kg-surface-ink-soft);
  font: inherit;
  font-weight: 600;
  cursor: pointer;
  transition: color var(--kg-dur) ease, background-color var(--kg-dur) ease, transform var(--kg-dur-fast) var(--kg-ease);
  -webkit-tap-highlight-color: transparent;
}
.kg-nav__item:hover { color: var(--kg-on-tint); background: var(--kg-tint); }
.kg-nav__item:active { transform: scale(0.97); }
.kg-nav__item:focus { outline: none; }
.kg-nav__item:focus-visible { box-shadow: var(--kg-ring); }
.kg-nav__item.is-active, .kg-nav__item[aria-current="page"] {
  color: var(--kg-ink);
  background: var(--kg-gradient);
  box-shadow: var(--kg-shadow);
  animation: kg-enter var(--kg-dur) var(--kg-ease);
}
.kg-nav__item.is-active::after {
  content: "";
  position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background: linear-gradient(115deg, rgba(255,255,255,0) 30%, rgba(255,255,255,0.35) 50%, rgba(255,255,255,0) 70%);
  transform: translate3d(-130%, 0, 0);
  animation: kg-sheen 900ms var(--kg-ease-in-out) 1;
}
.kg-nav__item > * { position: relative; z-index: 1; }

/* Underline-style nav (for top bars) */
.kg-tabs { display: flex; gap: 1.25rem; border-bottom: 1px solid rgba(27,21,51,0.1); }
.kg-tabs__item {
  position: relative; padding: 0.75rem 0.1rem; border: 0; background: none; font: inherit; font-weight: 600;
  color: var(--kg-surface-ink-soft); cursor: pointer; transition: color var(--kg-dur) ease;
}
.kg-tabs__item::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: -1px; height: 3px; border-radius: 3px 3px 0 0;
  background: var(--kg-gradient-flat); transform: scaleX(0); transform-origin: center; transition: transform var(--kg-dur) var(--kg-ease);
}
.kg-tabs__item:hover { color: var(--kg-on-tint); }
.kg-tabs__item.is-active { color: var(--kg-on-tint); }
.kg-tabs__item.is-active::after { transform: scaleX(1); }
.kg-tabs__item:focus-visible { outline: none; box-shadow: var(--kg-ring); border-radius: 6px; }

/* Modal */
.kg-modal-backdrop {
  position: fixed; inset: 0; z-index: 50;
  display: grid; place-items: center; padding: 1rem;
  background: rgba(14, 10, 32, 0.55);
  animation: kg-fade var(--kg-dur) ease both;
}
.kg-modal {
  position: relative;
  width: min(100%, 440px);
  border-radius: calc(var(--kg-radius) + 4px);
  background: var(--kg-surface);
  color: var(--kg-surface-ink);
  overflow: hidden;
  box-shadow: 0 30px 80px -30px rgba(14,10,32,0.6), var(--kg-glow);
  animation: kg-enter var(--kg-dur-slow) var(--kg-ease) both;
}
.kg-modal__accent { height: 6px; background: var(--kg-gradient-flat); }
.kg-modal__hero { position: relative; isolation: isolate; overflow: hidden; padding: 1.75rem 1.5rem 1.25rem; background: var(--kg-gradient); color: var(--kg-ink); }
.kg-modal__body { padding: 1.25rem 1.5rem 1.5rem; }
.kg-modal__actions { display: flex; gap: 0.6rem; justify-content: flex-end; margin-top: 1.25rem; }
@keyframes kg-fade { from { opacity: 0; } to { opacity: 1; } }

/* Page background — surface with veiled palette tints (no background-attachment: fixed) */
.kg-page {
  min-height: 100%;
  background-color: var(--kg-surface);
  background-image:
    linear-gradient(var(--kg-veil), var(--kg-veil)),
    radial-gradient(70% 55% at 0% 0%, var(--kg-1) 0%, rgba(255,255,255,0) 70%),
    radial-gradient(55% 45% at 100% 15%, var(--kg-3) 0%, rgba(255,255,255,0) 70%),
    radial-gradient(60% 50% at 50% 100%, var(--kg-2) 0%, rgba(255,255,255,0) 70%);
  background-repeat: no-repeat;
  background-size: 100% 100%, 100% 100%, 100% 100%, 100% 100%;
  color: var(--kg-surface-ink);
}
.kg-page--strong { --kg-veil: var(--kg-veil-strong); background-image:
    linear-gradient(rgba(255,252,247,0.78), rgba(255,252,247,0.78)),
    radial-gradient(70% 55% at 0% 0%, var(--kg-1) 0%, rgba(255,255,255,0) 70%),
    radial-gradient(55% 45% at 100% 15%, var(--kg-3) 0%, rgba(255,255,255,0) 70%),
    radial-gradient(60% 50% at 50% 100%, var(--kg-2) 0%, rgba(255,255,255,0) 70%); }
[data-theme="dark"] .kg-page--strong { background-image:
    linear-gradient(rgba(15,12,29,0.78), rgba(15,12,29,0.78)),
    radial-gradient(70% 55% at 0% 0%, var(--kg-1) 0%, rgba(255,255,255,0) 70%),
    radial-gradient(55% 45% at 100% 15%, var(--kg-3) 0%, rgba(255,255,255,0) 70%),
    radial-gradient(60% 50% at 50% 100%, var(--kg-2) 0%, rgba(255,255,255,0) 70%); }

/* Matching screen */
.kg-match-screen {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  display: grid;
  place-items: center;
  text-align: center;
  padding: 2.5rem 1.5rem;
  border-radius: calc(var(--kg-radius) + 6px);
  background: var(--kg-gradient);
  color: var(--kg-ink);
  min-height: 380px;
}
.kg-match-screen > * { position: relative; z-index: 1; }
.kg-match-screen__pair { display: flex; align-items: center; justify-content: center; margin-bottom: 1.25rem; }
.kg-match-screen__pair .kg-avatar { --kg-surface: rgba(255,255,255,0.9); }
.kg-match-screen__pair .kg-avatar + .kg-avatar { margin-left: -18px; }
.kg-match-screen__heart {
  position: relative; z-index: 2; margin: 0 -6px;
  width: 44px; height: 44px; border-radius: 50%; display: grid; place-items: center;
  background: rgba(255,255,255,0.95); color: #FF2D95; font-size: 1.2rem;
  box-shadow: 0 8px 20px -6px rgba(0,0,0,0.35);
}
.kg-match-screen__heart::after {
  content: ""; position: absolute; inset: -6px; border-radius: 50%;
  border: 2px solid rgba(255,255,255,0.8); animation: kg-pulse-ring 1.8s var(--kg-ease) infinite;
}
.kg-match-screen h2 { margin: 0 0 0.35rem; font-size: clamp(1.6rem, 3vw, 2.2rem); font-weight: 800; letter-spacing: -0.02em; }
.kg-match-screen p { margin: 0 0 1.4rem; color: var(--kg-ink-soft); }
.kg-match-screen__actions { display: flex; gap: 0.6rem; flex-wrap: wrap; justify-content: center; }

/* Toast / status */
.kg-toast {
  display: flex; align-items: center; gap: 0.7rem;
  padding: 0.75rem 1rem; border-radius: var(--kg-radius-sm);
  background: var(--kg-surface); color: var(--kg-surface-ink);
  border-left: 4px solid var(--kg-accent);
  box-shadow: 0 1px 2px rgba(27,21,51,.06), var(--kg-shadow);
}
.kg-toast__icon {
  width: 32px; height: 32px; border-radius: 10px; display: grid; place-items: center; flex: none;
  background: var(--kg-gradient); color: var(--kg-ink); font-size: 0.95rem;
}


/* 8. MOTION & ACCESSIBILITY
   ------------------------------------------------------------------------ */
@media (prefers-reduced-motion: reduce) {
  .kg-drift::before, .kg-breathe::after, .kg-mesh::before, .kg-mesh-layer,
  .kg-avatar::before, .kg-border-anim::before, .kg-rare-fx::before, .kg-rare-fx::after,
  .kg-badge--rare::before, .kg-badge--rare::after, .kg-eq i, .kg-match-screen__heart::after,
  .kg-sheen::after, .kg-btn::after, .kg-nav__item.is-active::after {
    animation: none !important;
  }
  .kg-btn::after, .kg-sheen::after, .kg-rare-fx::after, .kg-badge--rare::after { display: none; }
  .kg-cursor::after { transition: none; transform: none; }
  .kg-enter, .kg-modal, .kg-modal-backdrop, .kg-nav__item.is-active { animation: none; }
  [data-kg], .kg-transition, .kg-btn { transition-duration: 1ms; }
  .kg-card:hover, .kg-profile-card:hover, .kg-btn:hover { transform: none; }
}

/* Save power on hidden tabs / discrete GPUs: pause continuous animations when
   the element is not displayed (browsers already do this for offscreen). */
@media (prefers-reduced-transparency: reduce) {
  .kg-grain::after { display: none; }
  .kg-plate { background: #FFFFFF; }
  .kg-plate--dark { background: #0E0A20; }
}

/* Forced-colors (Windows High Contrast): keep controls visible */
@media (forced-colors: active) {
  .kg-btn, .kg-nav__item, .kg-chip { border: 1px solid ButtonText; forced-color-adjust: none; }
  .kg-btn:focus-visible, .kg-nav__item:focus-visible { outline: 3px solid Highlight; outline-offset: 2px; }
  .kg-text { -webkit-text-fill-color: CanvasText; color: CanvasText; background: none; }
}

/* Responsive nudges */
@media (max-width: 640px) {
  :root { --kg-radius: 16px; }
  .kg-music-card { grid-template-columns: 56px 1fr auto; }
  .kg-music-card__art { width: 56px; height: 56px; }
  .kg-match-screen { min-height: 320px; padding: 2rem 1rem; }
  .kg-nav { overflow-x: auto; scrollbar-width: none; }
  .kg-nav::-webkit-scrollbar { display: none; }
}
