/* ============================================================================
   Nihongo Drill — Linear design system
   Tokens transcribed from DESIGN-linear.app.md
   ==========================================================================*/

:root{
  /* brand */
  --primary:#5e6ad2; --on-primary:#ffffff; --primary-hover:#828fff; --primary-focus:#5e69d1;
  --brand-secure:#7a7fad;
  /* ink */
  --ink:#f7f8f8; --ink-muted:#d0d6e0; --ink-subtle:#8a8f98; --ink-tertiary:#62666d;
  /* surface ladder */
  --canvas:#010102; --s1:#0f1011; --s2:#141516; --s3:#18191a; --s4:#191a1b;
  --hairline:#23252a; --hairline-strong:#34343a; --hairline-tertiary:#3e3e44;
  /* semantic */
  --success:#27a644; --danger:#c8543f; --overlay:#000000;
  /* radius */
  --r-xs:4px; --r-sm:6px; --r-md:8px; --r-lg:12px; --r-xl:16px; --r-xxl:24px; --r-pill:9999px;
  /* spacing */
  --sp-xxs:4px; --sp-xs:8px; --sp-sm:12px; --sp-md:16px; --sp-lg:24px; --sp-xl:32px;
  --sp-xxl:48px; --sp-section:96px;
  /* type */
  --font-display:"Inter","SF Pro Display",-apple-system,system-ui,"Segoe UI",Roboto,sans-serif;
  --font-text:"Inter","SF Pro Text",-apple-system,system-ui,"Segoe UI",Roboto,sans-serif;
  --font-jp:"Hiragino Kaku Gothic ProN","Yu Gothic","Noto Sans JP","Meiryo",
            "MS PGothic",var(--font-text);
  --font-mono:ui-monospace,"SF Mono",Menlo,"JetBrains Mono",monospace;
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;background:var(--canvas);color:var(--ink);
  font-family:var(--font-text);font-size:16px;line-height:1.5;letter-spacing:-.05px;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:2px solid rgba(94,105,210,.5);outline-offset:2px;border-radius:var(--r-xs)}

/* ------------------------------------------------------------ type scale */
.display-xl{font-family:var(--font-display);font-size:clamp(40px,7vw,80px);font-weight:600;line-height:1.05;letter-spacing:-3px}
.display-lg{font-family:var(--font-display);font-size:clamp(32px,5vw,56px);font-weight:600;line-height:1.1;letter-spacing:-1.8px}
.display-md{font-family:var(--font-display);font-size:clamp(26px,3.4vw,40px);font-weight:600;line-height:1.15;letter-spacing:-1px}
.headline{font-family:var(--font-display);font-size:28px;font-weight:600;line-height:1.2;letter-spacing:-.6px}
.card-title{font-family:var(--font-display);font-size:22px;font-weight:500;line-height:1.25;letter-spacing:-.4px}
.subhead{font-family:var(--font-display);font-size:20px;font-weight:400;line-height:1.4;letter-spacing:-.2px}
.body-lg{font-size:18px;line-height:1.5;letter-spacing:-.1px}
.body-sm{font-size:14px;line-height:1.5}
.caption{font-size:12px;line-height:1.4;color:var(--ink-subtle)}
.eyebrow{font-size:13px;font-weight:500;line-height:1.3;letter-spacing:.4px;
         text-transform:uppercase;color:var(--ink-subtle)}
.mono{font-family:var(--font-mono);font-size:13px}
.muted{color:var(--ink-subtle)}
.dim{color:var(--ink-tertiary)}
.jp{font-family:var(--font-jp)}

/* ------------------------------------------------------------- structure */
.wrap{max-width:1280px;margin:0 auto;padding:0 var(--sp-lg)}
.wrap-narrow{max-width:880px;margin:0 auto;padding:0 var(--sp-lg)}
.stack{display:flex;flex-direction:column;gap:var(--sp-lg)}
.row{display:flex;align-items:center;gap:var(--sp-sm)}
.row-between{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-md)}
.spacer{flex:1}
section.block{padding:var(--sp-xxl) 0}
hr.rule{border:0;border-top:1px solid var(--hairline);margin:var(--sp-xl) 0}

/* ------------------------------------------------------------------- nav */
.topnav{position:sticky;top:0;z-index:50;height:56px;background:rgba(1,1,2,.86);
        backdrop-filter:blur(12px);border-bottom:1px solid var(--hairline)}
.topnav .inner{max-width:1280px;margin:0 auto;padding:0 var(--sp-lg);height:56px;
               display:flex;align-items:center;gap:var(--sp-lg)}
.brand{display:flex;align-items:center;gap:10px;font-family:var(--font-display);
       font-weight:600;letter-spacing:-.4px;font-size:15px}
.brand .mark{width:22px;height:22px;border-radius:var(--r-sm);background:var(--primary);
             display:grid;place-items:center;font-size:12px;color:#fff;font-weight:700}
.navlinks{display:flex;gap:var(--sp-xxs);font-size:14px}
.navlinks a{padding:6px 10px;border-radius:var(--r-md);color:var(--ink-subtle)}
.navlinks a:hover{color:var(--ink);background:var(--s1)}
.navlinks a.on{color:var(--ink);background:var(--s2)}
.avatar{width:26px;height:26px;border-radius:var(--r-pill);background:var(--s3);
        object-fit:cover;border:1px solid var(--hairline)}

/* ---------------------------------------------------------------- button */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;
     padding:8px 14px;border-radius:var(--r-md);border:1px solid transparent;
     font-size:14px;font-weight:500;line-height:1.2;cursor:pointer;
     background:var(--s1);color:var(--ink);transition:background .12s,border-color .12s,transform .06s}
.btn:hover{background:var(--s2)}
.btn:active{transform:translateY(1px)}
.btn[disabled]{opacity:.45;cursor:not-allowed}
.btn-primary{background:var(--primary);color:var(--on-primary);border-color:transparent}
.btn-primary:hover{background:var(--primary-hover)}
.btn-primary:active{background:var(--primary-focus)}
.btn-secondary{background:var(--s1);border-color:var(--hairline)}
.btn-tertiary{background:transparent;border-color:var(--hairline)}
.btn-tertiary:hover{background:var(--s1)}
.btn-ghost{background:transparent;color:var(--ink-subtle)}
.btn-ghost:hover{background:var(--s1);color:var(--ink)}
.btn-lg{padding:11px 20px;font-size:15px;border-radius:var(--r-md)}
.btn-block{width:100%}
.btn-danger{background:transparent;border-color:var(--hairline);color:var(--ink-subtle)}
.btn-danger:hover{border-color:var(--hairline-strong);color:var(--ink)}

/* ----------------------------------------------------------------- cards */
.card{background:var(--s1);border:1px solid var(--hairline);border-radius:var(--r-lg);
      padding:var(--sp-lg);position:relative}
.card::before{content:"";position:absolute;inset:0 0 auto 0;height:1px;border-radius:var(--r-lg) var(--r-lg) 0 0;
              background:linear-gradient(90deg,transparent,rgba(255,255,255,.07),transparent)}
.card-2{background:var(--s2);border-color:var(--hairline-strong)}
.card-flat{background:transparent;border-color:var(--hairline)}
.card-link{display:block;transition:background .12s,border-color .12s}
.card-link:hover{background:var(--s2);border-color:var(--hairline-strong)}
.panel{background:var(--s1);border:1px solid var(--hairline);border-radius:var(--r-xl);padding:var(--sp-xl)}
.grid{display:grid;gap:var(--sp-md)}
.grid-3{grid-template-columns:repeat(3,1fr)}
.grid-2{grid-template-columns:repeat(2,1fr)}
.grid-4{grid-template-columns:repeat(4,1fr)}
@media(max-width:900px){.grid-3,.grid-4{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.grid-2,.grid-3,.grid-4{grid-template-columns:1fr}}

/* ---------------------------------------------------------------- badges */
.badge{display:inline-flex;align-items:center;gap:6px;padding:2px 8px;border-radius:var(--r-pill);
       background:var(--s2);color:var(--ink-muted);font-size:12px;line-height:1.4;
       border:1px solid var(--hairline)}
.badge-success{color:var(--success);border-color:rgba(39,166,68,.35);background:rgba(39,166,68,.08)}
.badge-accent{color:#b9c0ff;border-color:rgba(94,106,210,.4);background:rgba(94,106,210,.12)}
.badge-warn{color:#e0a355;border-color:rgba(224,163,85,.3);background:rgba(224,163,85,.08)}
.dot{width:6px;height:6px;border-radius:var(--r-pill);background:currentColor;display:inline-block}

/* ---------------------------------------------------------------- inputs */
.input,.select{width:100%;background:var(--s1);border:1px solid var(--hairline);
               border-radius:var(--r-md);padding:8px 12px;color:var(--ink);font-size:16px}
.input:focus,.select:focus{outline:2px solid rgba(94,105,210,.5);outline-offset:0;
                           border-color:var(--hairline-strong)}
.input-xl{font-size:24px;padding:14px 16px;text-align:center;letter-spacing:-.4px}
label.field{display:block;margin-bottom:var(--sp-xs)}
.chips{display:flex;flex-wrap:wrap;gap:var(--sp-xs)}
.chip{padding:6px 14px;border-radius:var(--r-pill);background:transparent;
      border:1px solid var(--hairline);color:var(--ink-subtle);font-size:14px;
      font-weight:500;cursor:pointer;transition:.12s}
.chip:hover{color:var(--ink);border-color:var(--hairline-strong)}
.chip.on{background:var(--s2);color:var(--ink);border-color:var(--hairline-strong)}
.chip-sm{padding:4px 10px;font-size:13px}

/* ---------------------------------------------------------------- tables */
.table{width:100%;border-collapse:collapse;font-size:14px}
.table th{text-align:left;padding:10px 12px;color:var(--ink-subtle);font-weight:500;font-size:12px;
          text-transform:uppercase;letter-spacing:.4px;border-bottom:1px solid var(--hairline)}
.table td{padding:12px;border-bottom:1px solid var(--hairline);vertical-align:middle}
.table tr:last-child td{border-bottom:0}
.table tbody tr:hover{background:var(--s1)}
.scroll-x{overflow-x:auto}

/* ------------------------------------------------------------------ quiz */
.quiz-shell{min-height:100dvh;display:flex;flex-direction:column}
.quiz-top{border-bottom:1px solid var(--hairline);padding:var(--sp-md) 0}
.progressbar{height:3px;background:var(--s2);border-radius:var(--r-pill);overflow:hidden}
.progressbar > i{display:block;height:100%;background:var(--primary);transition:width .25s ease}
.timerbar{height:4px;background:var(--s2);border-radius:var(--r-pill);overflow:hidden;margin-top:var(--sp-sm)}
.timerbar > i{display:block;height:100%;background:var(--primary);width:100%}
.timerbar.warn > i{background:#e0a355}
.timerbar.crit > i{background:var(--danger)}

.stage{flex:1;display:grid;place-items:center;padding:var(--sp-xl) var(--sp-lg)}
.stage-inner{width:100%;max-width:720px}
.prompt-card{background:var(--s1);border:1px solid var(--hairline);border-radius:var(--r-xl);
             padding:var(--sp-xxl) var(--sp-xl);text-align:center;position:relative}
.prompt-card::before{content:"";position:absolute;inset:0 0 auto 0;height:1px;
             border-radius:var(--r-xl) var(--r-xl) 0 0;
             background:linear-gradient(90deg,transparent,rgba(255,255,255,.08),transparent)}
.prompt-big{font-family:var(--font-jp);font-size:clamp(64px,14vw,132px);line-height:1;
            font-weight:500;letter-spacing:-2px}
.prompt-mid{font-family:var(--font-display);font-size:clamp(26px,5vw,40px);line-height:1.2;
            font-weight:600;letter-spacing:-1px}
.prompt-sub{margin-top:var(--sp-md);color:var(--ink-subtle);font-size:14px}

.choices{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-sm);margin-top:var(--sp-lg)}
@media(max-width:560px){.choices{grid-template-columns:1fr}}
.choice{display:flex;align-items:center;gap:var(--sp-sm);text-align:left;
        background:var(--s1);border:1px solid var(--hairline);border-radius:var(--r-md);
        padding:14px 16px;font-size:16px;cursor:pointer;transition:.12s;width:100%}
.choice:hover:not(:disabled){background:var(--s2);border-color:var(--hairline-strong)}
.choice .key{width:22px;height:22px;flex:0 0 22px;border-radius:var(--r-xs);background:var(--s3);
             color:var(--ink-subtle);font-size:11px;display:grid;place-items:center;font-family:var(--font-mono)}
.choice.correct{border-color:rgba(39,166,68,.55);background:rgba(39,166,68,.1)}
.choice.wrong{border-color:rgba(200,84,63,.55);background:rgba(200,84,63,.1)}
.choice:disabled{cursor:default}
.choice .jp{font-size:22px}

.verdict{margin-top:var(--sp-lg);border-radius:var(--r-lg);border:1px solid var(--hairline);
         background:var(--s1);padding:var(--sp-md) var(--sp-lg);display:none}
.verdict.show{display:block}
.verdict.ok{border-color:rgba(39,166,68,.4)}
.verdict.no{border-color:rgba(200,84,63,.4)}
.verdict .headline-row{display:flex;align-items:center;gap:10px;font-weight:600;letter-spacing:-.3px}
.verdict .reveal{margin-top:6px;font-family:var(--font-jp);color:var(--ink-muted);font-size:16px}
.verdict .hint{margin-top:8px;color:var(--ink-subtle);font-size:13px;line-height:1.5}

/* --------------------------------------------------------------- metrics */
.stat{background:var(--s1);border:1px solid var(--hairline);border-radius:var(--r-lg);padding:var(--sp-lg)}
.stat .k{font-size:12px;text-transform:uppercase;letter-spacing:.4px;color:var(--ink-subtle)}
.stat .v{font-family:var(--font-display);font-size:34px;font-weight:600;letter-spacing:-1.2px;margin-top:6px}
.stat .s{font-size:13px;color:var(--ink-tertiary);margin-top:2px}

.bars{display:flex;align-items:flex-end;gap:6px;height:150px;margin-top:var(--sp-md)}
.bars .b{flex:1;display:flex;flex-direction:column;justify-content:flex-end;height:100%;
         gap:6px;align-items:center}
.bars .b i{display:block;width:100%;max-width:38px;background:var(--primary);
           border-radius:var(--r-xs);min-height:3px;transition:height .3s ease}
.bars .b.empty i{background:var(--s3)}
.bars .b span{font-size:11px;color:var(--ink-tertiary);white-space:nowrap}
.bars .b b{font-size:11px;color:var(--ink-subtle);font-weight:500}

.ring{--p:0;width:108px;height:108px;border-radius:50%;display:grid;place-items:center;flex:0 0 108px;
      background:conic-gradient(var(--primary) calc(var(--p)*1%),var(--s2) 0)}
.ring > div{width:86px;height:86px;border-radius:50%;background:var(--s1);display:grid;place-items:center;
            font-family:var(--font-display);font-size:24px;font-weight:600;letter-spacing:-1px}

.streak-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(13px,1fr));gap:4px}
.streak-grid i{aspect-ratio:1;border-radius:3px;background:var(--s2);display:block}

/* ---------------------------------------------------------------- login */
.login-shell{min-height:100dvh;display:grid;place-items:center;padding:var(--sp-lg)}
.login-card{width:100%;max-width:420px;background:var(--s1);border:1px solid var(--hairline);
            border-radius:var(--r-xl);padding:var(--sp-xl)}
.oauth-btn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;
           padding:11px 16px;border-radius:var(--r-md);border:1px solid var(--hairline);
           background:var(--s2);font-size:15px;font-weight:500;cursor:pointer;transition:.12s}
.oauth-btn:hover{background:var(--s3);border-color:var(--hairline-strong)}
.oauth-btn svg{width:18px;height:18px;flex:0 0 18px}
.oauth-btn.disabled{opacity:.45;pointer-events:none}

/* ---------------------------------------------------------------- footer */
.footer{border-top:1px solid var(--hairline);padding:var(--sp-xxl) 0;margin-top:var(--sp-section);
        color:var(--ink-subtle);font-size:12px}

.empty{text-align:center;padding:var(--sp-xxl) var(--sp-lg);color:var(--ink-subtle)}
.empty .big{font-size:34px;margin-bottom:var(--sp-sm)}
.hide{display:none !important}
