/* ============================================================================
   darkheart.io — UI System  (Phase 1: front door)
   Cinematic "Kingdom Hearts" identity, elevated. Darker / OLED-leaning palette,
   ethereal-glass depth, double-bezel cards, premium type, spring motion.
   Pure CSS — no build step. Reused across pages; later phases extend it.
   ============================================================================ */

:root{
  /* depth ladder — deepest void to raised surface */
  --void:#04060b;
  --bg-0:#070a12;
  --bg-1:#0b0f1a;
  --bg-2:#111726;
  --bg-3:#171f31;

  --ink:#eaf0fb;
  --muted:#9aa6bd;
  --faint:#6b7689;

  --line:rgba(255,255,255,.085);
  --line-2:rgba(255,255,255,.05);

  /* brand spectrum */
  --accent:#7ac6ff;     /* heart-blue */
  --accent-2:#9fb4ff;
  --violet:#b89aff;     /* nobody-violet */
  --gold:#e6cb7e;       /* crown-gold */
  --heart:#e0566b;      /* heartless-red (sparingly) */
  --glow:rgba(122,198,255,.45);

  /* motion */
  --ease:cubic-bezier(.32,.72,0,1);
  --ease-out:cubic-bezier(.16,1,.3,1);

  /* radii */
  --r-xl:30px;
  --r-lg:24px;
  --r-md:16px;
  --r-sm:11px;

  color-scheme:dark;
}

/* ---- reset / base ------------------------------------------------------- */
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
html,body{height:100%}
body{
  margin:0;min-height:100dvh;color:var(--ink);
  font-family:'General Sans',ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;
  background:var(--void);
  background-image:linear-gradient(180deg,var(--void),#05080f 45%,var(--void));
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
  text-rendering:optimizeLegibility;overflow-x:hidden;
}
::selection{background:rgba(122,198,255,.28);color:#fff}
a{color:inherit;text-decoration:none}
img,svg{display:block}
button{font-family:inherit}

h1,h2,h3{
  font-family:'Clash Display','General Sans',ui-sans-serif,system-ui,sans-serif;
  font-weight:600;letter-spacing:-.02em;line-height:1.02;margin:0;
}

/* ---- ambient background layers (all fixed, GPU-only, non-interactive) --- */
.dh-aurora,.dh-stars,.dh-vignette,.dh-grain{position:fixed;pointer-events:none}
.dh-aurora{
  inset:-25%;z-index:0;
  background:
    radial-gradient(42vw 42vw at 12% -8%,  rgba(122,198,255,.17), transparent 60%),
    radial-gradient(46vw 46vw at 88% 108%, rgba(184,154,255,.15), transparent 58%),
    radial-gradient(40vw 32vw at 58% 122%, rgba(230,203,126,.085),transparent 60%),
    radial-gradient(28vw 28vw at 96% 8%,   rgba(224,86,107,.06),  transparent 55%);
  filter:blur(28px);
  animation:dh-drift 26s var(--ease) infinite alternate;
  will-change:transform;
}
@keyframes dh-drift{to{transform:translate3d(0,-2.4%,0) scale(1.05)}}

.dh-stars{
  inset:-20vmax;z-index:1;opacity:.5;
  background:
    radial-gradient(1px 1px at 20% 30%,#ffffff55 50%,transparent 51%) 0 0/120px 120px,
    radial-gradient(1px 1px at 70% 60%,#ffffff42 50%,transparent 51%) 0 0/170px 170px,
    radial-gradient(1px 1px at 40% 80%,#ffffff30 50%,transparent 51%) 0 0/220px 220px;
  filter:blur(.2px);animation:dh-twinkle 18s linear infinite;will-change:transform;
}
@keyframes dh-twinkle{to{transform:translateY(-1.5%)}}

.dh-vignette{
  inset:-12vmax;z-index:2;
  background:radial-gradient(132vmax 92vmax at 50% 44%, transparent 42%, rgba(0,0,0,.55) 84%);
}
.dh-grain{
  inset:0;z-index:3;opacity:.045;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* ---- layout shell ------------------------------------------------------- */
.wrap{position:relative;z-index:5;width:min(1140px,92vw);margin:0 auto}

/* ---- eyebrow tag -------------------------------------------------------- */
.eyebrow{
  display:inline-flex;align-items:center;gap:9px;
  padding:7px 15px;border-radius:999px;
  font-weight:500;font-size:.62rem;letter-spacing:.24em;text-transform:uppercase;
  color:var(--muted);background:rgba(255,255,255,.03);border:1px solid var(--line);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.05);
}
.eyebrow .dot{width:5px;height:5px;border-radius:999px;background:var(--accent);box-shadow:0 0 10px var(--glow)}

.lede{color:var(--muted);font-size:clamp(1rem,1.4vw,1.16rem);line-height:1.62;font-weight:400}

/* ---- double-bezel (Doppelrand) ----------------------------------------- */
.bezel{
  position:relative;padding:7px;border-radius:var(--r-xl);
  background:linear-gradient(180deg,rgba(255,255,255,.06),rgba(255,255,255,.015));
  border:1px solid var(--line);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.05), 0 40px 90px -38px rgba(0,0,0,.85);
}
.bezel-core{
  position:relative;border-radius:calc(var(--r-xl) - 7px);
  background:linear-gradient(180deg,var(--bg-2),var(--bg-1));
  box-shadow:inset 0 1px 1px rgba(255,255,255,.07), inset 0 0 0 1px rgba(255,255,255,.02);
}

/* ---- buttons: pill + nested "island" icon ------------------------------ */
.btn{
  display:inline-flex;align-items:center;gap:13px;
  padding:13px 14px 13px 22px;border-radius:999px;
  font-weight:600;font-size:.95rem;letter-spacing:.01em;color:var(--ink);white-space:nowrap;
  background:linear-gradient(180deg,#1b2336,#101624);
  border:1px solid var(--line);cursor:pointer;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.08), 0 10px 28px -16px rgba(0,0,0,.8);
  transition:transform .55s var(--ease), box-shadow .55s var(--ease), border-color .55s var(--ease), background .55s var(--ease);
}
.btn .ic{
  width:34px;height:34px;border-radius:999px;display:grid;place-items:center;flex:none;
  background:rgba(255,255,255,.06);border:1px solid var(--line);color:var(--ink);
  transition:transform .55s var(--ease), background .55s var(--ease), border-color .55s var(--ease);
}
.btn .ic svg{width:15px;height:15px;stroke:currentColor;stroke-width:1.5;fill:none}
.btn:hover{border-color:rgba(122,198,255,.45);box-shadow:inset 0 1px 0 rgba(255,255,255,.12), 0 16px 44px -16px var(--glow)}
.btn:hover .ic{background:rgba(122,198,255,.2);border-color:rgba(122,198,255,.4);transform:translate(3px,-1px) scale(1.06)}
.btn:active{transform:scale(.985)}
.btn:focus-visible{outline:2px solid var(--accent);outline-offset:3px}

/* gold primary (the gateway / CTA) */
.btn-gold{
  background:linear-gradient(180deg,rgba(230,203,126,.22),rgba(230,203,126,.08));
  border-color:rgba(230,203,126,.4);color:#fdf3d6;
}
.btn-gold .ic{background:rgba(230,203,126,.18);border-color:rgba(230,203,126,.4);color:#fdf3d6}
.btn-gold:hover{border-color:rgba(230,203,126,.7);box-shadow:inset 0 1px 0 rgba(255,255,255,.14), 0 16px 44px -16px rgba(230,203,126,.5)}
.btn-gold:hover .ic{background:rgba(230,203,126,.32);border-color:rgba(230,203,126,.7)}

/* compact ghost pill (back / secondary nav) */
.btn-ghost{
  padding:9px 16px;gap:9px;font-size:.85rem;font-weight:500;color:var(--muted);
  background:rgba(255,255,255,.025);border:1px solid var(--line);box-shadow:none;
}
.btn-ghost:hover{color:var(--ink);border-color:rgba(122,198,255,.35);box-shadow:0 10px 30px -18px var(--glow)}

/* ---- scroll-reveal ------------------------------------------------------ */
.reveal{
  opacity:0;transform:translateY(18px);filter:blur(10px);
  transition:opacity .9s var(--ease-out), transform .9s var(--ease-out), filter .9s var(--ease-out);
  transition-delay:var(--d,0s);will-change:transform,opacity;
}
.reveal.in{opacity:1;transform:none;filter:none}

/* ---- forms (shared across app pages) ----------------------------------- */
.input,textarea.input{
  width:100%;appearance:none;-webkit-appearance:none;
  background:rgba(0,0,0,.28);border:1px solid var(--line);border-radius:var(--r-md);
  padding:12px 15px;color:var(--ink);font:inherit;font-size:.96rem;line-height:1.4;outline:none;
  box-shadow:inset 0 1px 2px rgba(0,0,0,.4);
  transition:border-color .4s var(--ease),box-shadow .4s var(--ease)}
.input::placeholder,textarea.input::placeholder{color:#79839a}
.input:focus,textarea.input:focus{border-color:rgba(122,198,255,.55);box-shadow:inset 0 1px 2px rgba(0,0,0,.4),0 0 0 3px rgba(122,198,255,.13)}
textarea.input{min-height:104px;resize:vertical;line-height:1.55}
select{appearance:auto;background:linear-gradient(180deg,#1b2336,#101624);border:1px solid var(--line);border-radius:var(--r-sm);color:var(--ink);padding:11px 13px;font:inherit;font-weight:600;cursor:pointer;outline:none}
select:focus{border-color:rgba(122,198,255,.55);box-shadow:0 0 0 3px rgba(122,198,255,.13)}
select option{background:#0c111b;color:var(--ink)}
.label{display:block;font-size:.72rem;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:0 0 8px}
.stack>*+*{margin-top:15px}   /* vertical rhythm for stacked form fields */

/* ---- app-page header (Home/Back + eyebrow + title) --------------------- */
.page-head{display:flex;justify-content:space-between;align-items:flex-end;gap:18px;margin:6px 0 30px;flex-wrap:wrap}
.page-head h1{font-size:clamp(2rem,5vw,3rem);margin:12px 0 0;line-height:1}
.page-head h1 .acc{background:linear-gradient(180deg,#cfe7ff,var(--accent) 50%,var(--violet));-webkit-background-clip:text;background-clip:text;color:transparent}
.page-nav{display:flex;gap:9px;flex-wrap:wrap}

/* ========================================================================
   PAGE: Landing (index.html)
   ======================================================================== */
.landing{min-height:100dvh;display:grid;place-items:center;text-align:center;padding:84px 0}
.landing-inner{display:grid;gap:24px;justify-items:center}

.crown-stage{position:relative;width:148px;height:148px;display:grid;place-items:center}
.crown-stage .halo{position:absolute;inset:0;border-radius:999px;animation:dh-spin 38s linear infinite;will-change:transform}
.crown-stage .halo svg{width:100%;height:100%;overflow:visible}
.crown-stage .halo circle{fill:none;stroke:rgba(230,203,126,.32);stroke-width:.6;stroke-dasharray:2 7;stroke-linecap:round}
.crown-stage .aura{position:absolute;inset:18%;border-radius:999px;background:radial-gradient(circle,rgba(230,203,126,.28),transparent 68%);filter:blur(14px);animation:dh-pulse 6s var(--ease) infinite}
.crown-stage .crown{position:relative;width:78px;height:78px;filter:drop-shadow(0 0 20px rgba(230,203,126,.5));cursor:pointer}
@keyframes dh-spin{to{transform:rotate(360deg)}}
@keyframes dh-pulse{0%,100%{opacity:.6;transform:scale(.96)}50%{opacity:1;transform:scale(1.06)}}

.brandmark{
  font-family:'Clash Display','General Sans',sans-serif;font-weight:600;letter-spacing:-.035em;line-height:.92;
  font-size:clamp(3.1rem,11vw,8.2rem);
}
.brandmark .heart{
  background:linear-gradient(180deg,#cfe7ff,var(--accent) 46%,var(--violet));
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.brandmark .tld{color:var(--faint);font-weight:500}
.landing .tagline{max-width:30ch;margin:0 auto}
.landing .footer{margin-top:18px;font-size:.82rem;color:var(--faint);letter-spacing:.02em}

/* the (easter-egg) Enter CTA — hidden until revealed */
.enter{opacity:0;pointer-events:none;transform:translateY(8px);transition:opacity .6s var(--ease), transform .6s var(--ease)}
.enter.show{opacity:1;pointer-events:auto;transform:none}

/* background sigils (heart ring + nobody bars) */
.sigils{position:fixed;inset:0;z-index:1;display:grid;place-items:center;pointer-events:none}
.sigils svg{position:absolute;opacity:.07;filter:drop-shadow(0 0 22px rgba(122,198,255,.16))}

.hotspot{position:fixed;right:16px;bottom:16px;width:62px;height:62px;border-radius:14px;opacity:.01;z-index:6}
.hotspot:focus-visible{outline:2px solid var(--accent)}

/* ========================================================================
   PAGE: Gateway (login.html)
   ======================================================================== */
.gw{min-height:100dvh;display:grid;place-items:center;padding:72px 0}
.gw-shell{width:min(468px,100%);display:grid;gap:16px;justify-items:stretch}
.gw-back{justify-self:start}
.gw-core{padding:30px}
.gw-logo{display:flex;align-items:center;gap:12px;margin-bottom:6px}
.gw-logo .crown{width:30px;height:30px;filter:drop-shadow(0 0 8px rgba(230,203,126,.45))}
.gw-logo .wm{font-family:'Clash Display',sans-serif;font-weight:600;font-size:1.18rem;letter-spacing:-.01em}
.gw h2{font-size:clamp(1.7rem,4.5vw,2.3rem);margin:14px 0 6px}
.gw .lede{margin:0 0 20px}

.form{display:grid;gap:15px}
.row{display:grid;gap:7px}
.row label{font-size:.78rem;font-weight:500;letter-spacing:.04em;color:var(--muted)}

/* field well — sits inside the card like inset hardware */
.field input[type="text"],
.field input[type="password"],
.field input[type="email"]{
  appearance:none;-webkit-appearance:none;width:100%;height:50px;
  padding:13px 46px 13px 16px;border-radius:var(--r-md);
  border:1px solid var(--line);background:rgba(0,0,0,.28);
  color:var(--ink);font-size:1rem;line-height:1.2;outline:none;
  background-clip:padding-box;
  box-shadow:inset 0 1px 2px rgba(0,0,0,.45);
  transition:border-color .4s var(--ease), box-shadow .4s var(--ease), background .4s var(--ease);
}
.field input::placeholder{color:#79839a;opacity:1}
.field input:focus,
.field input:active{
  border-color:rgba(122,198,255,.55);
  background:rgba(0,0,0,.22);
  box-shadow:inset 0 1px 2px rgba(0,0,0,.4), 0 0 0 3px rgba(122,198,255,.13);
}
/* keep WebKit autofill from tinting the field */
.field input:-webkit-autofill,
.field input:-webkit-autofill:hover,
.field input:-webkit-autofill:focus{
  -webkit-text-fill-color:var(--ink)!important;
  transition:background-color 9999s ease-in-out 0s!important;
  box-shadow:inset 0 1px 2px rgba(0,0,0,.45), 0 0 0 1000px rgba(8,11,18,.96) inset!important;
  border:1px solid var(--line)!important;border-radius:var(--r-md)!important;
}
@supports (-webkit-touch-callout:none){
  .field input[type="text"],.field input[type="password"],.field input[type="email"]{padding-right:54px}
}

/* custom checkbox bubble */
.checkbox{display:flex;align-items:center;gap:9px;color:var(--muted);font-size:.9rem}
.checkbox label{cursor:pointer}
.checkbox input[type="checkbox"]{
  appearance:none;-webkit-appearance:none;width:20px;height:20px;margin:0;flex:none;
  border:1px solid var(--line);border-radius:7px;background:rgba(0,0,0,.3);
  box-shadow:inset 0 1px 2px rgba(0,0,0,.5);position:relative;cursor:pointer;
  transition:border-color .25s var(--ease), box-shadow .25s var(--ease);
}
.checkbox input[type="checkbox"]::after{content:"";position:absolute;inset:4px;border-radius:4px;background:transparent;transition:all .25s var(--ease)}
.checkbox input[type="checkbox"]:checked{border-color:rgba(122,198,255,.6);box-shadow:0 0 12px rgba(122,198,255,.3)}
.checkbox input[type="checkbox"]:checked::after{background:var(--accent);box-shadow:0 0 8px var(--glow)}

.gw .util{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:4px}
.gw .error{color:#ff9aa6;font-size:.88rem;min-height:1.1em}
.gw .signoff{font-size:.8rem;color:var(--faint);text-align:center;margin-top:18px;letter-spacing:.02em}

/* ========================================================================
   PAGE: Hub (home.html)
   ======================================================================== */
.island-nav{
  position:sticky;top:18px;z-index:40;margin:18px auto 0;width:min(1140px,92vw);
  display:flex;align-items:center;justify-content:space-between;gap:14px;
  padding:10px 12px 10px 18px;border-radius:999px;
  background:rgba(9,12,20,.62);backdrop-filter:blur(18px) saturate(140%);-webkit-backdrop-filter:blur(18px) saturate(140%);
  border:1px solid var(--line);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.06), 0 24px 60px -28px rgba(0,0,0,.85);
}
.island-nav .nv-brand{display:flex;align-items:center;gap:11px}
.island-nav .nv-brand .crown{width:26px;height:26px}
.island-nav .nv-brand .wm{font-family:'Clash Display',sans-serif;font-weight:600;font-size:1.04rem;letter-spacing:-.01em}
.island-nav .nv-brand .tag{font-size:.66rem;letter-spacing:.2em;text-transform:uppercase;color:var(--faint);margin-top:2px}
.island-nav .nv-actions{display:flex;align-items:center;gap:9px}

.hub{padding:54px 0 90px}
.hub-head{display:grid;gap:18px;max-width:62ch;margin-bottom:42px}
.hub-head h2{font-size:clamp(2rem,5.2vw,3.2rem)}
.hub-head h2 .acc{
  background:linear-gradient(180deg,#cfe7ff,var(--accent) 50%,var(--violet));
  -webkit-background-clip:text;background-clip:text;color:transparent;
}

.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(270px,1fr));gap:18px}
.tile{
  --tint:var(--accent);
  position:relative;padding:7px;border-radius:var(--r-lg);text-decoration:none;color:var(--ink);
  background:linear-gradient(180deg,rgba(255,255,255,.055),rgba(255,255,255,.012));
  border:1px solid var(--line);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.05), 0 26px 60px -34px rgba(0,0,0,.85);
  transition:transform .55s var(--ease), box-shadow .55s var(--ease), border-color .55s var(--ease);
}
.tile-core{
  position:relative;border-radius:calc(var(--r-lg) - 7px);overflow:hidden;
  background:linear-gradient(180deg,var(--bg-2),var(--bg-1));
  box-shadow:inset 0 1px 1px rgba(255,255,255,.06);
  padding:22px;min-height:158px;display:flex;flex-direction:column;gap:13px;
}
/* top accent hairline that ignites on hover */
.tile-core::before{
  content:"";position:absolute;top:0;left:0;right:0;height:1px;
  background:linear-gradient(90deg,transparent,var(--tint),transparent);
  opacity:.0;transition:opacity .55s var(--ease);
}
.tile .t-ic{
  width:46px;height:46px;border-radius:13px;display:grid;place-items:center;
  background:radial-gradient(120% 120% at 30% 20%,color-mix(in srgb,var(--tint) 26%,transparent),transparent 70%),rgba(255,255,255,.03);
  border:1px solid var(--line);color:var(--tint);
  transition:transform .55s var(--ease), box-shadow .55s var(--ease);
}
.tile .t-ic svg{width:21px;height:21px;stroke:currentColor;stroke-width:1.4;fill:none}
.tile .t-title{font-family:'Clash Display',sans-serif;font-weight:600;font-size:1.18rem;letter-spacing:-.01em}
.tile .t-desc{font-size:.86rem;line-height:1.5;color:var(--muted)}
.tile .t-arrow{
  position:absolute;top:18px;right:18px;width:30px;height:30px;border-radius:999px;
  display:grid;place-items:center;background:rgba(255,255,255,.04);border:1px solid var(--line);color:var(--muted);
  transition:transform .55s var(--ease), background .55s var(--ease), color .55s var(--ease), border-color .55s var(--ease);
}
.tile .t-arrow svg{width:14px;height:14px;stroke:currentColor;stroke-width:1.6;fill:none}
.tile:hover{transform:translateY(-5px);border-color:color-mix(in srgb,var(--tint) 45%,var(--line));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.08), 0 30px 70px -30px color-mix(in srgb,var(--tint) 40%,#000)}
.tile:hover .tile-core::before{opacity:.85}
.tile:hover .t-ic{transform:scale(1.06);box-shadow:0 0 26px -6px color-mix(in srgb,var(--tint) 60%,transparent)}
.tile:hover .t-arrow{transform:translate(3px,-3px);background:color-mix(in srgb,var(--tint) 22%,transparent);border-color:color-mix(in srgb,var(--tint) 45%,var(--line));color:#fff}

.hub-foot{display:flex;justify-content:space-between;align-items:center;margin-top:46px;font-size:.82rem;color:var(--faint)}

/* ========================================================================
   Responsive
   ======================================================================== */
@media (max-width:768px){
  .wrap{width:100%;padding-left:18px;padding-right:18px}
  .island-nav{width:auto;margin:14px 12px 0;top:12px}
  .island-nav .nv-brand .tag{display:none}
  .hub{padding:36px 0 64px}
  .tiles{grid-template-columns:1fr;gap:14px}
  .gw-core{padding:22px}
  .landing{padding:64px 0}
}
@media (max-width:420px){
  .island-nav{padding:8px 9px 8px 13px;gap:8px}
  .island-nav .nv-actions{gap:7px}
  .island-nav .btn-ghost{padding:8px 12px;font-size:.78rem}
  .btn{padding:12px 13px 12px 18px}
  .brandmark{font-size:clamp(2.6rem,15vw,4rem)}
}

/* ========================================================================
   Reduced motion — kill ambient + spring motion, keep content visible
   ======================================================================== */
@media (prefers-reduced-motion:reduce){
  .dh-aurora,.dh-stars,.crown-stage .halo,.crown-stage .aura{animation:none}
  .reveal{opacity:1;transform:none;filter:none;transition:none}
  *{scroll-behavior:auto!important}
}
