/* Happy Lingo v2 — unified design system
   Single source of truth for all v2 pages (hub, learn, practice, writing, speaking, progress, primary, arcade).
   Do not fork this file per-page — add new components here instead. */

:root{
  --cobalt:#173b78;--cobalt2:#2459a5;--blue:#2d6bb3;--sky:#55b9e8;--sky-soft:#eaf7fd;
  --sun:#f2ad35;--sun-soft:#fff5dc;--ink:#182738;--muted:#5c6e82;--paper:#f4f8fb;--white:#fff;
  --line:#dce9f1;--green:#2d8a61;--green-soft:#eaf7f0;--red:#c75a4e;--red-soft:#fff0ee;
  --purple:#7654b7;--purple-soft:#f1ecfb;--shadow:0 12px 36px rgba(24,58,96,.07);--radius:21px;
  /* sidebar text on --cobalt background: opacities tuned for WCAG AA contrast */
  --side-text-1:rgba(255,255,255,.85);--side-text-2:rgba(255,255,255,.68);--side-text-3:rgba(255,255,255,.58)
}
*{box-sizing:border-box}
body{margin:0;background:var(--paper);color:var(--ink);font-family:"DM Sans",system-ui,sans-serif}
a{color:inherit}button{font:inherit;cursor:pointer}
a:focus-visible,button:focus-visible,input:focus-visible{outline:3px solid var(--sky);outline-offset:2px;border-radius:6px}

/* ---- App shell / layout ---- */
.app{min-height:100vh;display:grid;grid-template-columns:235px 1fr}
.side{background:var(--cobalt);color:#fff;padding:24px 15px;position:sticky;top:0;height:100vh;display:flex;flex-direction:column}
.brand{font:700 22px Fraunces,serif;padding:5px 12px 25px}
.brand span{color:var(--sun)}
.mini{background:rgba(255,255,255,.08);padding:13px;border-radius:17px;margin-bottom:20px}
.avatar{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;background:var(--sun);color:#3d2a0b;font-weight:900;margin-bottom:9px}
.mini b{display:block;font-size:13px}
.mini small{color:var(--side-text-2)}
.nav{display:grid;gap:5px}
.nav a,.nav button{color:var(--side-text-2);text-decoration:none;padding:11px 12px;border-radius:11px;font-size:13px;font-weight:800;border:0;background:transparent;text-align:left;width:100%}
.nav a:hover,.nav a.active,.nav button:hover,.nav button.active{background:rgba(255,255,255,.14);color:#fff}
.sidefoot{margin-top:auto;color:var(--side-text-3);font-size:11px;padding:12px;line-height:1.5}

.main{min-width:0}
.top{height:70px;background:rgba(255,255,255,.94);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 32px;position:sticky;top:0;z-index:10;backdrop-filter:blur(12px)}
.top b{color:var(--cobalt)}
.top small{display:block;color:var(--muted);font-size:12px;margin-top:2px}
.back{color:var(--cobalt);font-size:12px;font-weight:800;text-decoration:none}
.logout{border:1px solid var(--line);background:#fff;color:var(--muted);padding:8px 12px;border-radius:10px;font-weight:700;font-size:13px}

.wrap{max-width:1220px;margin:auto;padding:30px 32px 70px}

/* ---- Hero ---- */
.hero{background:linear-gradient(135deg,var(--cobalt),#2462a8 65%,var(--sky));border-radius:28px;color:#fff;padding:28px 30px;display:flex;justify-content:space-between;gap:20px;box-shadow:var(--shadow);position:relative;overflow:hidden}
.hero:after{content:"☀";position:absolute;right:30px;top:-40px;font:900 150px Fraunces,serif;opacity:.08}
.hero h1{font:700 clamp(27px,4vw,40px) Fraunces,serif;margin:0 0 5px;letter-spacing:-1px}
.hero p{margin:0;color:rgba(255,255,255,.78);line-height:1.55;max-width:650px}
.badge{align-self:flex-start;padding:7px 11px;border-radius:999px;background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.24);font-size:12px;font-weight:900;white-space:nowrap}

/* ---- Cards ---- */
.card{background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 7px 24px rgba(24,58,96,.05);overflow:hidden}
.head{padding:19px 21px 12px;display:flex;align-items:end;justify-content:space-between;gap:12px}
.head h2{font:700 21px Fraunces,serif;margin:0}
.head p{font-size:12px;color:var(--muted);margin:4px 0 0}
.body{padding:0 21px 21px}
.grid{display:grid;grid-template-columns:1.25fr .75fr;gap:18px}
.stack{display:grid;gap:18px}
.notice{background:var(--sun-soft);border:1px solid #efd48d;color:#6b4f10;padding:9px 11px;border-radius:10px;font-size:11px;margin-bottom:13px;display:none}
.demo{background:var(--sun-soft);border:1px solid #efd38a;color:#6b4f10;padding:9px 12px;border-radius:12px;font-size:12px;margin-bottom:14px;display:none}
.error{background:#fff0ef;border:1px solid #efc1bc;color:#7a352e;padding:12px;border-radius:12px;font-size:12px;display:none}

.btn{display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:11px;padding:10px 14px;font-weight:900;text-decoration:none;cursor:pointer}
.primary{background:var(--cobalt);color:#fff}
.secondary{background:var(--sky-soft);color:var(--cobalt)}
.sun{background:var(--sun);color:#3d2a0b}
.pill{font-size:11px;font-weight:900;padding:5px 8px;border-radius:999px;background:var(--sky-soft);color:var(--cobalt)}
.pill.good{background:var(--green-soft);color:var(--green)}
.pill.bad{background:var(--red-soft);color:var(--red)}
.empty{text-align:center;color:var(--muted);padding:25px 8px;font-size:12px}

/* ---- Stats row (hub, progress) ---- */
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:18px 0 28px}
.stat{background:#fff;border:1px solid var(--line);border-radius:18px;padding:18px;box-shadow:0 6px 20px rgba(24,58,96,.05)}
.stat strong{font-family:Fraunces,serif;font-size:30px;display:block}
.stat span{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;font-weight:800}

/* ---- Recommendation card (hub) ---- */
.recommend{background:linear-gradient(135deg,#fff8e7,#fff);border:1px solid #f3d99b;border-radius:20px;padding:20px;display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.recicon{width:58px;height:58px;border-radius:17px;background:var(--sun);display:grid;place-items:center;font-size:28px;flex:0 0 auto}
.recommend h3{margin:0 0 4px;font-size:17px}
.recommend p{margin:0 0 12px;color:var(--muted);font-size:13px;line-height:1.5}
.cta{border:0;background:var(--cobalt);color:#fff;padding:10px 14px;border-radius:11px;font-weight:800;white-space:nowrap}

/* ---- Progress bar (hub) ---- */
.progress{height:11px;background:#e7eef3;border-radius:999px;overflow:hidden}
.progress i{display:block;height:100%;background:linear-gradient(90deg,var(--sky),var(--cobalt2));border-radius:999px}
.progressmeta{display:flex;justify-content:space-between;font-size:12px;color:var(--muted);margin-top:8px}

/* ---- Activity feed (hub) ---- */
.activity{display:grid;gap:10px}
.activityrow{display:flex;align-items:center;gap:13px;padding:13px;border:1px solid var(--line);border-radius:15px}
.activityicon{width:38px;height:38px;border-radius:12px;background:var(--sky-soft);display:grid;place-items:center;flex:0 0 auto}
.activityrow>div:nth-child(2){flex:1}
.activityrow b{display:block;font-size:13px}
.activityrow small{color:var(--muted)}

/* ---- Quick links grid (hub) ---- */
.quickgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
.quick{padding:16px;border:1px solid var(--line);border-radius:17px;background:#fff;text-decoration:none;color:var(--ink);transition:.15s}
.quick:hover{transform:translateY(-2px);border-color:#9fd8ef;box-shadow:0 10px 22px rgba(24,58,96,.07)}
.qi{font-size:23px}
.quick b{display:block;margin-top:7px}
.quick small{color:var(--muted)}

/* ---- Game promo card (hub) ---- */
.game{background:linear-gradient(135deg,#f0ebfb,#fff);border:1px solid #ddd2f3;border-radius:20px;padding:19px;display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.gameicon{font-size:34px}
.game h3{margin:0 0 4px}
.game p{margin:0;color:var(--muted);font-size:12px}
.game button{margin-left:auto;border:0;background:var(--purple);color:#fff;padding:10px 13px;border-radius:11px;font-weight:800}

/* ---- Score chart (progress) ---- */
.chart{height:190px;display:flex;align-items:flex-end;gap:9px;padding:12px 5px 0;border-bottom:1px solid var(--line)}
.barwrap{height:100%;flex:1;display:flex;align-items:flex-end;gap:5px}
.bar{width:100%;border-radius:7px 7px 2px 2px;background:linear-gradient(180deg,var(--sky),var(--blue));min-height:3px;position:relative}
.bar:hover:after{content:attr(data-value);position:absolute;top:-24px;right:0;background:var(--ink);color:#fff;padding:4px 6px;border-radius:5px;font-size:10px}
.chartlabels{display:flex;gap:9px;padding:6px 5px 0}
.chartlabels span{flex:1;text-align:center;font-size:10px;color:var(--muted)}
.kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:14px}
.kpi{background:var(--paper);border-radius:13px;padding:12px;text-align:center}
.kpi b{display:block;font:700 22px Fraunces,serif}
.kpi small{font-size:10px;color:var(--muted);text-transform:uppercase;font-weight:800}

/* ---- Skill bars (progress) ---- */
.skills{display:grid;gap:12px}
.skill{display:grid;grid-template-columns:150px 1fr 48px;gap:10px;align-items:center}
.skill span{font-size:12px;font-weight:800}
.track{height:10px;background:#e8eef3;border-radius:99px;overflow:hidden}
.track i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--sky),var(--blue))}
.skill strong{text-align:right;font-size:12px}

/* ---- Focus areas (progress) ---- */
.weak{display:grid;gap:9px}
.weakrow{display:flex;align-items:center;gap:10px;padding:11px 12px;border-radius:13px;background:var(--red-soft);border:1px solid #f1d0cb}
.weakrow b{flex:1;font-size:12px}
.weakrow span{font-weight:900;color:var(--red);font-size:12px}

/* ---- List rows (progress: study/writing/history) ---- */
.studyrow,.writingrow,.historyrow{display:flex;align-items:center;gap:11px;padding:12px 0;border-bottom:1px solid var(--line)}
.studyrow:last-child,.writingrow:last-child,.historyrow:last-child{border-bottom:0}
.ico{width:36px;height:36px;border-radius:11px;background:var(--sky-soft);display:grid;place-items:center;flex:0 0 auto}
.grow{flex:1}
.grow b{display:block;font-size:12px}
.grow small{color:var(--muted);font-size:11px}
.history{overflow:auto}
.history table{width:100%;border-collapse:collapse;font-size:12px}
.history th{font-size:10px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);text-align:left;padding:8px;border-bottom:1px solid var(--line)}
.history td{padding:10px 8px;border-bottom:1px solid #edf2f5}
.grade{font-weight:900}

/* ---- Toast (hub) ---- */
.toast{position:fixed;right:20px;bottom:20px;background:var(--ink);color:#fff;padding:12px 15px;border-radius:12px;box-shadow:var(--shadow);display:none;z-index:50;font-size:13px}

/* ---- Mobile nav ---- */
.mobile{display:none}
@media(max-width:900px){
  .app{grid-template-columns:1fr}
  .side{display:none}
  .grid{grid-template-columns:1fr}
  .stats{grid-template-columns:repeat(2,1fr)}
  .wrap{padding:20px 15px 90px}
  .content{padding:20px 16px 90px}
  .top,.topbar{padding:0 17px}
  .skill{grid-template-columns:115px 1fr 40px}
  .mobile{display:flex;position:fixed;left:10px;right:10px;bottom:10px;background:rgba(23,59,120,.96);z-index:30;border-radius:17px;padding:7px;justify-content:space-around;box-shadow:0 12px 30px rgba(0,0,0,.2);overflow-x:auto}
  .mobile a,.mobile button{color:rgba(255,255,255,.72);text-decoration:none;font-size:10px;font-weight:800;text-align:center;padding:6px 4px;flex:1;min-width:0;background:none;border:0;font-family:inherit;cursor:pointer;white-space:nowrap}
  .mobile a.active,.mobile button.active{color:#fff}
}
@media(max-width:520px){
  .hero{border-radius:22px;padding:23px}
  .hero:after{right:-15px}
  .kpis{grid-template-columns:1fr 1fr 1fr}
  .stats{grid-template-columns:1fr 1fr}
  .stats .stat{padding:13px}
  .stat strong{font-size:25px}
  .skill{grid-template-columns:95px 1fr 38px}
  .skill span{font-size:10px}
  .recommend{align-items:flex-start}
  .recommend .cta{white-space:nowrap}
}
