:root{--ink:#0f2424;--teal:#0f3d3e;--teal-2:#165c5e;--mint:#7bc4c4;--sand:#f4efe6;--paper:#fbf8f3;--gold:#f2c14e;--coral:#e07a5f;--muted:#5e7373;--line:#0f3d3e1f;--shadow:0 18px 50px #0f24241f;--radius:18px;--font-display:"Fraunces", Georgia, serif;--font-body:"IBM Plex Sans", system-ui, sans-serif;color:var(--ink);background:var(--paper);font-family:var(--font-body);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;font-weight:400;line-height:1.5}*{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}body{background-color:#0000;background-image:radial-gradient(1200px 600px at 10% -10%,#7bc4c459,#0000 60%),radial-gradient(900px 500px at 100% 0,#f2c14e38,#0000 55%),linear-gradient(#f7f3ec 0%,#eef6f5 48%,#fbf8f3 100%);background-position:0 0,0 0,0 0;background-repeat:repeat,repeat,repeat;background-size:auto,auto,auto;background-attachment:fixed;background-origin:padding-box,padding-box,padding-box;background-clip:border-box,border-box,border-box}a{color:inherit;text-decoration:none}button,input,select{font:inherit}.app-shell{grid-template-rows:auto 1fr auto;min-height:100vh;display:grid}.topbar{border-bottom:1px solid var(--line);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:20;background:#fbf8f3b8;justify-content:space-between;align-items:center;gap:16px;padding:18px 28px;display:flex;position:sticky;top:0}.brand{font-family:var(--font-display);letter-spacing:.01em;color:var(--teal);font-size:1.35rem;font-weight:700}.nav-links{flex-wrap:wrap;gap:8px;display:flex}.nav-links a{color:var(--muted);border-radius:999px;padding:8px 12px}.nav-links a.active,.nav-links a:hover{color:var(--teal);background:#0f3d3e14}.page{width:min(1080px,100% - 32px);margin:0 auto;padding:28px 0 64px}.footer{text-align:center;color:var(--muted);padding:24px;font-size:.9rem}.hero{align-content:center;gap:18px;min-height:calc(100vh - 88px);padding:48px 0 72px;display:grid;position:relative}.hero:before{content:"";opacity:.9;filter:blur(.2px);z-index:0;background:radial-gradient(circle at 30% 30%,#f2c14e8c,#0000 55%),radial-gradient(circle at 70% 60%,#7bc4c4a6,#0000 60%),linear-gradient(135deg,#0f3d3e,#2a7a6d);border-radius:40% 60% 55% 45%;width:min(42vw,420px);height:min(42vw,420px);animation:10s ease-in-out infinite floaty;position:absolute;inset:8% -8% auto auto}.hero>*{z-index:1;max-width:640px;position:relative}.hero h1{font-family:var(--font-display);color:var(--teal);margin:0;font-size:clamp(2.8rem,7vw,4.6rem);line-height:1.05}.hero p{color:var(--muted);max-width:34rem;margin:0;font-size:1.15rem}.cta-row{flex-wrap:wrap;gap:12px;margin-top:8px;display:flex}.btn{appearance:none;background:var(--teal);color:#f7fffe;cursor:pointer;border:none;border-radius:999px;padding:12px 20px;font-weight:600;transition:transform .18s,background .18s,box-shadow .18s;box-shadow:0 10px 24px #0f3d3e2e}.btn:hover{background:var(--teal-2);transform:translateY(-1px)}.btn.secondary{color:var(--teal);border:1px solid var(--line);box-shadow:none;background:0 0}.btn.ghost{color:var(--teal);box-shadow:none;border:1px solid var(--line);background:#ffffff8c}.btn.danger{background:var(--coral)}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}.card-panel{border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);background:#ffffffb8;padding:20px}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;display:grid}.stat{border:1px solid var(--line);background:#ffffffb3;border-radius:16px;padding:16px 18px}.stat .label{color:var(--muted);font-size:.9rem}.stat .value{font-family:var(--font-display);color:var(--teal);font-size:1.8rem}.form{gap:12px;max-width:420px;display:grid}.form label{color:var(--muted);gap:6px;font-size:.92rem;display:grid}.form input,.form select{border:1px solid var(--line);color:var(--ink);background:#ffffffe6;border-radius:12px;padding:12px 14px}.muted{color:var(--muted)}.error{color:var(--coral);font-size:.92rem}.study-stage{justify-items:center;gap:20px;padding:24px 0 40px;display:grid}.word-card{border:1px solid var(--line);width:min(560px,100%);min-height:320px;box-shadow:var(--shadow);text-align:center;background:linear-gradient(160deg,#ffffffeb,#f4efe6d9),#fff;border-radius:28px;align-content:center;gap:12px;padding:36px 28px;animation:.35s rise;display:grid}.word-card .lemma{font-family:var(--font-display);color:var(--teal);margin:0;font-size:clamp(2.4rem,6vw,3.4rem)}.word-card .phonetic{color:var(--muted);letter-spacing:.04em}.word-card .meaning{white-space:pre-wrap;font-size:1.15rem}.rating-row{grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;width:min(560px,100%);display:grid}.rating-row button{border:1px solid var(--line);cursor:pointer;background:#fffc;border-radius:16px;padding:14px 8px;font-weight:600}.rating-row button:hover{border-color:var(--teal);color:var(--teal)}.rating-row .forgot:hover{border-color:var(--coral);color:var(--coral)}.rating-row .mastered:hover{color:#2a7a6d;border-color:#2a7a6d}.progress-bar{background:#0f3d3e1a;border-radius:999px;width:min(560px,100%);height:8px;overflow:hidden}.progress-bar>span{background:linear-gradient(90deg, var(--mint), var(--teal));height:100%;transition:width .25s;display:block}.heatmap{grid-template-columns:repeat(15,1fr);gap:4px;display:grid}.heat-cell{aspect-ratio:1;background:#0f3d3e14;border-radius:4px}.book-list{gap:12px;display:grid}.book-item{border:1px solid var(--line);cursor:pointer;background:#ffffffb3;border-radius:16px;justify-content:space-between;align-items:center;gap:12px;padding:16px 18px;transition:border-color .15s,transform .15s;display:flex}.book-item:hover,.book-item.selected{border-color:var(--teal);transform:translateY(-1px)}.weak-list{gap:8px;display:grid}.weak-item{border:1px solid var(--line);background:#ffffffa6;border-radius:12px;grid-template-columns:1fr auto;gap:8px;padding:12px 14px;display:grid}@keyframes floaty{0%,to{transform:translateY(0)rotate(0)}50%{transform:translateY(12px)rotate(4deg)}}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@media (width<=800px){.topbar{padding:14px 16px}.grid-2,.grid-3,.rating-row{grid-template-columns:1fr 1fr}.hero:before{opacity:.55;width:220px;height:220px}}
