/* Giao diện "Rừng vẹt ấm" — thiết kế theo các nguyên tắc có bằng chứng:
   1) nền kem ấm + chữ xám đậm (đủ tương phản, đỡ chói hơn trắng tinh/đen tuyền);
   2) góc bo tròn, màu ấm, nhân vật thân thiện (emotional design) NHƯNG chỉ đặt ở chỗ chuyển tiếp/phản hồi,
      không trang trí trong vùng đang học (nguyên tắc coherence: chi tiết thừa làm giảm khả năng học);
   3) dòng chữ vừa phải, giãn dòng 1.6; màu đúng/sai luôn đi kèm biểu tượng, không chỉ dựa vào màu. */
:root{
  --bg:#fbf7ef; --bg2:#f3ecdd; --card:#ffffff; --ink:#2b2622; --muted:#675f55; --line:#e7dece;
  --main:#1f7a6b; --main-d:#155a4f; --main-l:#dff1eb; --on-main:#ffffff;
  --accent:#f29a52; --accent-d:#a85414; --accent-l:#fff0df;
  --ok:#1d7a4b; --ok-bg:#e2f3e8; --bad:#af3f36; --bad-bg:#fbe8e4; --warn:#855300; --warn-bg:#fff1d3;
  --info:#245a82; --info-bg:#e7f1f8; --rec:#c4453a;
  --shadow:0 1px 2px rgba(70,50,20,.06),0 6px 18px rgba(70,50,20,.06);
  --radius:16px; --fs:1;
  --pattern:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='90' height='90' viewBox='0 0 90 90'%3E%3Cg fill='none' stroke='white' stroke-opacity='0.13' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 66C12 44 29 29 48 27 50 45 39 62 12 66Z'/%3E%3Cpath d='M12 66 41 35'/%3E%3Cpath d='M64 34C64 21 72 12 82 10 84 21 77 31 64 34Z'/%3E%3Cpath d='M64 34 77 18'/%3E%3C/g%3E%3C/svg%3E");
  --pattern-dark:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='90' height='90' viewBox='0 0 90 90'%3E%3Cg fill='none' stroke='%231f7a6b' stroke-opacity='0.10' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 66C12 44 29 29 48 27 50 45 39 62 12 66Z'/%3E%3Cpath d='M12 66 41 35'/%3E%3Cpath d='M64 34C64 21 72 12 82 10 84 21 77 31 64 34Z'/%3E%3Cpath d='M64 34 77 18'/%3E%3C/g%3E%3C/svg%3E");
}
:root[data-theme="light"]{ --bg:#f7f9f8; --bg2:#eaf0ee; --line:#dbe4e1; --ink:#22282a; --muted:#59646a; }
:root[data-theme="dark"]{
  --bg:#1c2321; --bg2:#242c29; --card:#2a3330; --ink:#ede8dd; --muted:#b4bbb0; --line:#3b4742;
  --main:#58c2aa; --main-d:#7fd7c3; --main-l:#264139; --on-main:#0f2a25;
  --accent:#f5a864; --accent-d:#f5b87f; --accent-l:#3b3024;
  --ok:#7fd6a2; --ok-bg:#1f3a2c; --bad:#f09a90; --bad-bg:#432724; --warn:#f2c36b; --warn-bg:#3d3220;
  --info:#8cc3ec; --info-bg:#22344a; --rec:#f08a80;
  --shadow:0 1px 2px rgba(0,0,0,.3),0 6px 18px rgba(0,0,0,.25);
}
*{box-sizing:border-box}
html,body{margin:0}
body{font-family:"Segoe UI","Nunito","Trebuchet MS",Arial,sans-serif;background:var(--bg);color:var(--ink);font-size:calc(17px * var(--fs));line-height:1.6}
.top{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 26px;color:#fff;position:sticky;top:0;z-index:5;
  background-image:var(--pattern),linear-gradient(135deg,#155a4f,#1f7a6b);box-shadow:0 2px 10px rgba(20,60,50,.25)}
:root[data-theme="dark"] .top{background-image:var(--pattern),linear-gradient(135deg,#143a33,#1c5a4d)}
.brand{color:#fff;text-decoration:none;font-weight:800;font-size:1.25em;display:flex;align-items:center;gap:10px}
.brand .logo{width:46px;height:46px;border-radius:14px;background:#fff3c4;display:inline-flex;align-items:center;justify-content:center;box-shadow:0 2px 6px rgba(0,0,0,.2);overflow:hidden}
.brand .logo svg{width:44px;height:44px}
.brand small{font-weight:500;opacity:.9;font-size:.78em;display:block;line-height:1.1}
.top nav{display:flex;flex-wrap:wrap;gap:4px}
.top nav a{color:#fff;text-decoration:none;padding:8px 14px;border-radius:12px;opacity:.95;font-weight:600;font-size:.95em;white-space:nowrap}
.top nav a:hover{background:rgba(255,255,255,.16)}
.top nav a.on{background:rgba(255,255,255,.26);opacity:1}
#app{max-width:1100px;margin:0 auto;padding:24px 22px 70px}
#warn:not(:empty){background:var(--warn-bg);color:var(--warn);padding:10px 24px;font-size:.9em}
h1{font-size:1.7em;margin:0 0 8px;letter-spacing:-.01em}
h2{font-size:1.3em;margin:0 0 10px}
h3{font-size:1.06em;margin:18px 0 6px}
p{margin:6px 0}
.card>p,.card>.muted{max-width:72ch}
.muted{color:var(--muted)}
.small{font-size:.85em}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:20px 22px;margin-bottom:18px;box-shadow:var(--shadow)}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
@media(max-width:800px){.grid2,.grid3{grid-template-columns:1fr}}
button,.btn{font:inherit;cursor:pointer;border:1.5px solid var(--main);background:var(--card);color:var(--main-d);padding:9px 17px;border-radius:12px;display:inline-flex;align-items:center;gap:7px;text-decoration:none;font-weight:600;transition:transform .12s,box-shadow .12s,background .12s}
button:hover,.btn:hover{background:var(--main-l);transform:translateY(-1px);box-shadow:0 3px 8px rgba(30,70,60,.12)}
button:active,.btn:active{transform:translateY(0)}
button:focus-visible,.btn:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
button.primary,.btn.primary{background:var(--main);color:var(--on-main);border-color:var(--main)}
button.primary:hover,.btn.primary:hover{background:var(--main-d);color:var(--on-main)}
:root[data-theme="dark"] button.primary:hover,:root[data-theme="dark"] .btn.primary:hover{background:var(--main-d);color:#0f2a25}
button.big,.btn.big{font-size:1.12em;padding:13px 26px;border-radius:14px}
button.mic{border-color:var(--rec);color:var(--rec)}
button.mic:hover{background:var(--bad-bg)}
button.mic.rec{background:var(--rec);color:#fff;animation:pulse 1.1s infinite}
button:disabled{opacity:.5;cursor:default;transform:none;box-shadow:none}
@keyframes pulse{50%{box-shadow:0 0 0 8px rgba(196,69,58,.2)}}
@keyframes bob{50%{transform:translateY(-5px)}}
@keyframes pop{from{transform:scale(.96);opacity:.4}to{transform:scale(1);opacity:1}}
select{font:inherit;padding:8px 10px;border:1.5px solid var(--line);border-radius:10px;background:var(--card);color:var(--ink)}
.row{display:flex;flex-wrap:wrap;gap:9px;align-items:center}
.stat{text-align:center}
.stat b{display:block;font-size:1.9em;color:var(--main);line-height:1.15}
.bar{height:12px;background:var(--bg2);border-radius:99px;overflow:hidden}
.bar i{display:block;height:100%;background:linear-gradient(90deg,var(--main),#3bb59c);border-radius:99px;transition:width .4s}
.days{display:grid;grid-template-columns:repeat(10,1fr);gap:8px}
@media(max-width:800px){.days{grid-template-columns:repeat(6,1fr)}}
.d{display:block;text-align:center;padding:10px 0;border-radius:12px;border:1.5px solid var(--line);background:var(--card);color:var(--ink);text-decoration:none;font-size:.9em;font-weight:600}
.d:hover{border-color:var(--main)}
.d.done{background:var(--ok-bg);border-color:transparent;color:var(--ok)}
.d.now{border:2.5px solid var(--accent);background:var(--accent-l)}
.d.soon{opacity:.38;pointer-events:none}
.d.rev{border-style:dashed}
.layout{display:grid;grid-template-columns:250px 1fr;gap:20px;align-items:start}
@media(max-width:800px){.layout{grid-template-columns:1fr}}
.side{position:sticky;top:84px;padding:16px}
.side button{width:100%;justify-content:flex-start;margin-bottom:6px;border:1.5px solid transparent;background:transparent;color:var(--ink);text-align:left;font-weight:500;padding:8px 10px}
.side button:hover{background:var(--bg2);box-shadow:none}
.side button.on{background:var(--main-l);border-color:var(--main);font-weight:700}
.side button .dot{width:10px;height:10px;border-radius:50%;background:var(--k,var(--main));flex:none}
.side button .ck{margin-left:auto;color:var(--ok);font-weight:800;font-size:.85em;white-space:nowrap}
.side button .tm{margin-left:auto;color:var(--muted);font-weight:500;font-size:.82em}
.side .grp{font-size:.8em;color:var(--muted);margin:14px 0 4px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}
.tag{display:inline-block;padding:2px 10px;border-radius:99px;background:var(--main-l);color:var(--main-d);font-size:.8em;font-weight:600}
.streak{display:inline-flex;align-items:center;gap:6px;background:var(--accent-l);color:var(--accent-d);padding:4px 12px;border-radius:99px;font-weight:700;font-size:.9em}
.word{display:flex;flex-wrap:wrap;gap:10px;align-items:center;padding:13px 0;border-bottom:1px solid var(--line)}
.word:last-child{border-bottom:0}
.word .en{font-weight:800;font-size:1.2em;min-width:130px}
.word .ipa{color:var(--muted);min-width:110px}
.word .vi{min-width:130px}
.word .ex{flex-basis:100%;color:var(--muted);font-size:.9em}
.ipa-big{font-size:2.5em;font-weight:800;color:var(--main);min-width:90px}
.sound{display:flex;gap:18px;align-items:flex-start;flex-wrap:wrap}
.chips{display:flex;flex-wrap:wrap;gap:9px}
.chip{display:inline-flex;gap:6px;align-items:center;border:1.5px solid var(--line);border-radius:99px;padding:3px 6px 3px 14px;background:var(--card);font-weight:600}
.chip button{padding:2px 9px;border-radius:99px}
.res{margin-top:12px;padding:14px 16px;border-radius:14px;background:var(--main-l);animation:pop .25s ease-out}
.res.mm{display:flex;gap:14px;align-items:flex-start}
.res .rbody{flex:1;min-width:0}
.res .mini{flex:none;width:62px;height:62px}
.res .pct{font-size:1.9em;font-weight:800}
.res.good{background:var(--ok-bg)} .res.good .pct{color:var(--ok)}
.res.mid{background:var(--warn-bg)} .res.mid .pct{color:var(--warn)}
.res.low{background:var(--bad-bg)} .res.low .pct{color:var(--bad)}
.w-ok{color:var(--ok);font-weight:700}
.w-bad{color:var(--bad);font-weight:700;text-decoration:underline wavy}
.sent{padding:15px 0;border-bottom:1px solid var(--line)}
.sent:last-child{border-bottom:0}
.sent .t{font-size:1.2em;font-weight:700}
textarea,input[type=text]{font:inherit;width:100%;padding:11px 14px;border:1.5px solid var(--line);border-radius:12px;background:var(--card);color:var(--ink)}
textarea:focus,input[type=text]:focus{border-color:var(--main)}
textarea{min-height:170px;resize:vertical;line-height:1.6}
input.short{width:230px}
.pass{background:var(--bg);border-left:5px solid var(--accent);padding:14px 18px;border-radius:10px;font-size:1.08em;max-width:72ch;line-height:1.7}
.q{padding:13px 12px;border-bottom:1px solid var(--line);border-radius:10px}
.q:last-child{border-bottom:0}
.q.ok{background:var(--ok-bg)} .q.bad{background:var(--bad-bg)}
.q.ok .why::before{content:"✔ "} .q.bad .why::before{content:"✘ "}
.why{font-size:.9em;color:var(--muted);margin-top:4px}
.note{background:var(--warn-bg);color:var(--warn);border-radius:12px;padding:11px 15px;font-size:.92em}
.info{background:var(--info-bg);color:var(--info);border-radius:12px;padding:11px 15px;font-size:.92em;max-width:80ch}
.big-q{font-size:1.55em;font-weight:800;margin:14px 0}
.spark{display:flex;align-items:flex-end;gap:5px;height:90px}
.spark i{flex:1;background:linear-gradient(180deg,#3bb59c,var(--main));border-radius:6px 6px 0 0;min-height:3px;position:relative}
.spark i span{position:absolute;top:-17px;left:0;right:0;text-align:center;font-size:.68em;color:var(--muted)}
.soundcard .ipa-big{font-size:2.7em}
.diagram{display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap}
.dg-side,.dg-box{background:#fffdfb;border:1px solid #e7dece;border-radius:14px}
.dg-side{flex:1 1 300px;max-width:340px;padding:6px}
.dg-right{display:flex;flex-direction:column;gap:10px;flex:1 1 200px;max-width:230px}
.dg-box{padding:6px 8px}
.dg-cap{font-size:.74em;color:#6a6258;margin-bottom:2px}
.dg-legend{margin-top:6px}
a{color:var(--main-d)}
table{border-collapse:collapse;width:100%}
td,th{padding:8px 10px;border-bottom:1px solid var(--line);text-align:left}
details>summary{cursor:pointer;font-weight:600}

/* ----- Linh vật ----- */
.parrot svg{display:block;width:100%;height:100%}
.parrot-bob{animation:bob 3.4s ease-in-out infinite}
.mascot{display:flex;gap:14px;align-items:center}
.mascot .pic{flex:none;width:88px;height:88px}
.mascot .bubble{background:var(--card);border:1.5px solid var(--line);border-radius:18px;padding:12px 16px;position:relative;box-shadow:var(--shadow);max-width:60ch}
.mascot .bubble::before{content:"";position:absolute;left:-9px;top:26px;width:16px;height:16px;background:var(--card);border-left:1.5px solid var(--line);border-bottom:1.5px solid var(--line);transform:rotate(45deg)}
.hero{position:relative;overflow:hidden;border-radius:24px;padding:22px 26px;margin-bottom:20px;background:linear-gradient(135deg,var(--main-l),var(--accent-l));border:1px solid var(--line);box-shadow:var(--shadow)}
.hero::before{content:"";position:absolute;inset:0;background-image:var(--pattern-dark);opacity:.9;pointer-events:none}
.hero>*{position:relative}
.hero .pic{width:120px;height:120px}
.hero h1{margin:0}
.cta-row{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px}
.todo{display:flex;gap:16px;align-items:center;flex-wrap:wrap}
.todo .num{flex:none;width:44px;height:44px;border-radius:50%;background:var(--main);color:var(--on-main);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:1.15em}
.todo.done .num{background:var(--ok)}
.todo.rev .num{background:var(--accent);color:#3b2410}

/* ----- Chế độ tập trung ----- */
.focusbar{display:none}
body.focus .top{display:none}
body.focus #app{max-width:860px;padding-top:12px}
body.focus .layout{grid-template-columns:1fr}
body.focus .side{display:none}
body.focus .focusbar{display:flex;align-items:center;gap:12px;position:sticky;top:0;z-index:4;background:var(--bg);padding:10px 4px;border-bottom:1px solid var(--line);margin-bottom:14px}
body.focus .focusbar .bar{flex:1}

/* ----- Đồng bộ: biểu tượng đám mây ----- */
.cloud{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:12px;background:rgba(255,255,255,.16);color:#fff;text-decoration:none;font-size:1.1em;flex:none}
.cloud:hover{background:rgba(255,255,255,.28)}
.cloud.syncing{animation:pulse 1.4s infinite}
.top nav a .ic{margin-right:6px}

/* nhãn dài trên máy tính, nhãn ngắn trên điện thoại */
.lbl-short{display:none}
select{max-width:100%}
.side .revlink{width:100%;margin-bottom:6px;justify-content:flex-start}

/* ----- Điện thoại (iPhone): thanh tab dưới đáy, bước học dạng thanh trượt, nút to ----- */
html{-webkit-text-size-adjust:100%}
@media (max-width:760px){
  body{font-size:calc(16px * var(--fs))}
  .top{padding:calc(8px + env(safe-area-inset-top)) 12px 8px;gap:10px}
  .brand{font-size:1.1em;gap:8px}
  .brand .logo{width:38px;height:38px;border-radius:12px}
  .brand .logo svg{width:36px;height:36px}
  .brand small{display:none}
  .top nav{position:fixed;left:0;right:0;bottom:0;z-index:30;display:grid;grid-template-columns:repeat(5,1fr);gap:0;background:var(--card);border-top:1px solid var(--line);
    padding:6px 4px calc(6px + env(safe-area-inset-bottom));box-shadow:0 -4px 16px rgba(60,40,10,.10)}
  .top nav a{color:var(--muted);flex-direction:column;display:flex;align-items:center;gap:1px;padding:6px 2px;font-size:.68em;font-weight:600;border-radius:12px;opacity:1}
  .top nav a .ic{margin:0;font-size:1.7em;line-height:1.1}
  .top nav a:hover{background:transparent}
  .top nav a.on{background:var(--main-l);color:var(--main-d)}
  #app{padding:12px 12px calc(92px + env(safe-area-inset-bottom))}
  h1{font-size:1.45em}
  .card{padding:14px 14px;border-radius:14px;margin-bottom:14px}
  button,.btn{min-height:44px;padding:9px 14px}
  button.big,.btn.big{min-height:50px}
  input,textarea,select{font-size:16px}
  input.short{width:100%}
  .grid3{grid-template-columns:repeat(3,1fr);gap:8px}
  .grid3 .stat b{font-size:1.5em}
  .grid3 .stat{font-size:.8em}
  .hero{padding:14px 14px;border-radius:20px}
  .hero .pic{width:78px;height:78px}
  .mascot .pic{width:60px;height:60px}
  .mascot{gap:10px;align-items:flex-start}
  .todo .num{width:38px;height:38px}
  .todo .btn{width:100%;justify-content:center}
  .word .en{min-width:0;font-size:1.15em}
  .word .ipa,.word .vi{min-width:0}
  .ipa-big{font-size:2em}
  .soundcard .ipa-big{font-size:2.2em}
  .dg-side{max-width:100%}
  .dg-right{max-width:100%;flex-direction:row;flex-wrap:wrap}
  .dg-right .dg-box{flex:1 1 140px}
  .sent .t{font-size:1.1em}
  .big-q{font-size:1.35em}
  .res.mm .mini{width:48px;height:48px}
  /* bước học: thanh trượt ngang thay vì cột bên */
  .layout{display:block}
  .side{position:sticky;top:calc(54px + env(safe-area-inset-top));z-index:6;display:flex;flex-wrap:nowrap;align-items:center;gap:8px;overflow-x:auto;padding:8px 10px;margin-bottom:12px;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .side::-webkit-scrollbar{display:none}
  .side>*{flex:none}
  .lbl-full{display:none}
  .lbl-short{display:inline}
  .side .revlink{width:auto;margin:0;justify-content:center}
  .side button .tm{display:none}
  select{display:block;width:100%;margin-top:6px}
  .card{overflow-wrap:anywhere}
  .side>div:first-child{display:none}
  .side .bar{display:none}
  .side .grp{display:none}
  .side button{width:auto;white-space:nowrap;margin:0;border:1.5px solid var(--line);border-radius:99px;padding:8px 12px;min-height:40px}
  .side button.on{border-color:var(--main)}
  .side>a.btn{width:auto;margin:0!important;white-space:nowrap;border-radius:99px}
  .side>a.btn[href="#/"]{display:none}
  body.focus .top nav{display:none}
  body.focus #app{padding-bottom:30px}
  body.focus .focusbar{top:calc(env(safe-area-inset-top))}
  .focusbar b{font-size:.85em}
}
@media (max-width:380px){.top nav a{font-size:.62em}}

@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
:root[data-motion="off"] *{animation:none!important;transition:none!important}
