@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./fraunces-vietnamese-wght-normal-CnvboYUG.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./fraunces-latin-ext-wght-normal-Ca2vKHc0.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./fraunces-latin-wght-normal-ukD16Tqj.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Spectral;font-style:normal;font-display:swap;font-weight:400;src:url(./spectral-cyrillic-ext-400-normal-B4-YHs9i.woff2) format("woff2"),url(./spectral-cyrillic-ext-400-normal--n_iQ4wr.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Spectral;font-style:normal;font-display:swap;font-weight:400;src:url(./spectral-cyrillic-400-normal-Bx9Tn3WZ.woff2) format("woff2"),url(./spectral-cyrillic-400-normal-X3p2PSzL.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Spectral;font-style:normal;font-display:swap;font-weight:400;src:url(./spectral-vietnamese-400-normal-C7CRHYqk.woff2) format("woff2"),url(./spectral-vietnamese-400-normal-CWkMWCzb.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Spectral;font-style:normal;font-display:swap;font-weight:400;src:url(./spectral-latin-ext-400-normal-XDLFwhqg.woff2) format("woff2"),url(./spectral-latin-ext-400-normal-BHbqXr-7.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Spectral;font-style:normal;font-display:swap;font-weight:400;src:url(./spectral-latin-400-normal-CTVgUekv.woff2) format("woff2"),url(./spectral-latin-400-normal-D34IWA1h.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Spectral;font-style:normal;font-display:swap;font-weight:500;src:url(./spectral-cyrillic-ext-500-normal-bcG1qx3J.woff2) format("woff2"),url(./spectral-cyrillic-ext-500-normal-B5u3KHyE.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Spectral;font-style:normal;font-display:swap;font-weight:500;src:url(./spectral-cyrillic-500-normal-medSbGbm.woff2) format("woff2"),url(./spectral-cyrillic-500-normal-CNC_J6mt.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Spectral;font-style:normal;font-display:swap;font-weight:500;src:url(./spectral-vietnamese-500-normal-qnENts6X.woff2) format("woff2"),url(./spectral-vietnamese-500-normal-BfZg6KYt.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Spectral;font-style:normal;font-display:swap;font-weight:500;src:url(./spectral-latin-ext-500-normal-CC9VEg_t.woff2) format("woff2"),url(./spectral-latin-ext-500-normal-Bmnp8FUT.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Spectral;font-style:normal;font-display:swap;font-weight:500;src:url(./spectral-latin-500-normal-nNjq7_Cd.woff2) format("woff2"),url(./spectral-latin-500-normal-PrYyf_gG.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Spectral;font-style:normal;font-display:swap;font-weight:600;src:url(./spectral-cyrillic-ext-600-normal-CvRHnPuy.woff2) format("woff2"),url(./spectral-cyrillic-ext-600-normal-BVATWin6.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Spectral;font-style:normal;font-display:swap;font-weight:600;src:url(./spectral-cyrillic-600-normal-Dl75bDKp.woff2) format("woff2"),url(./spectral-cyrillic-600-normal-veT-ELBO.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Spectral;font-style:normal;font-display:swap;font-weight:600;src:url(./spectral-vietnamese-600-normal-ZNiwCzjU.woff2) format("woff2"),url(./spectral-vietnamese-600-normal-esmjhrFa.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Spectral;font-style:normal;font-display:swap;font-weight:600;src:url(./spectral-latin-ext-600-normal-DKlDBbgb.woff2) format("woff2"),url(./spectral-latin-ext-600-normal-DnKmvInL.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Spectral;font-style:normal;font-display:swap;font-weight:600;src:url(./spectral-latin-600-normal-DE3OxvnQ.woff2) format("woff2"),url(./spectral-latin-600-normal-DXnQJnYb.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Spectral;font-style:italic;font-display:swap;font-weight:400;src:url(./spectral-cyrillic-ext-400-italic-CZOVIkJA.woff2) format("woff2"),url(./spectral-cyrillic-ext-400-italic-C6Gmo4JY.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Spectral;font-style:italic;font-display:swap;font-weight:400;src:url(./spectral-cyrillic-400-italic-C6o5RXh-.woff2) format("woff2"),url(./spectral-cyrillic-400-italic-C95RxGpc.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Spectral;font-style:italic;font-display:swap;font-weight:400;src:url(./spectral-vietnamese-400-italic-DO3bsfcj.woff2) format("woff2"),url(./spectral-vietnamese-400-italic-D8dhja4j.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Spectral;font-style:italic;font-display:swap;font-weight:400;src:url(./spectral-latin-ext-400-italic-BgTM1Mst.woff2) format("woff2"),url(./spectral-latin-ext-400-italic-BcKU4A_a.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Spectral;font-style:italic;font-display:swap;font-weight:400;src:url(./spectral-latin-400-italic-CDO25mTW.woff2) format("woff2"),url(./spectral-latin-400-italic-Ds-NcNVC.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--paper: #f4eee2;--paper-card: #fbf7ee;--paper-sunk: #ece3d3;--ink: #25201a;--ink-soft: #6a6052;--ink-faint: #9a9082;--accent: #9c3d23;--accent-2: #355a73;--good: #4d6b4f;--bad: #9c3d23;--line: #dcd1bd;--line-soft: #e7ddca;--radius: 7px;--shadow: 0 1px 2px rgba(40,30,15,.06), 0 8px 24px rgba(40,30,15,.05);--maxw: 940px}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background-color:var(--paper);background-image:radial-gradient(rgba(120,100,70,.05) 1px,transparent 1px);background-size:4px 4px;color:var(--ink);font-family:Spectral,Georgia,serif;font-size:18px;line-height:1.55;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%}h1,h2,h3{font-family:Fraunces Variable,Georgia,serif;font-weight:600;line-height:1.15;letter-spacing:-.01em}h1{font-size:2rem;margin:0}h2{font-size:1.4rem;margin:0 0 .6rem}h3{font-size:1.1rem;margin:0 0 .3rem}a{color:var(--accent-2)}button{font-family:inherit}.app{min-height:100vh;display:flex;flex-direction:column}.container{width:100%;max-width:var(--maxw);margin:0 auto;padding:0 20px}.topbar{border-bottom:1px solid var(--line);background:linear-gradient(var(--paper-card),var(--paper));position:sticky;top:0;z-index:10}.topbar .container{display:flex;align-items:center;gap:18px;height:64px}.brand{font-family:Fraunces Variable,serif;font-weight:600;font-size:1.15rem;letter-spacing:-.01em}.brand small{display:block;font-family:Spectral,serif;font-weight:400;font-size:.72rem;color:var(--ink-soft);letter-spacing:.04em;text-transform:uppercase}.nav{display:flex;gap:2px;margin-left:auto;flex-wrap:wrap}.nav button{background:transparent;border:none;color:var(--ink-soft);padding:8px 14px;border-radius:var(--radius);cursor:pointer;font-size:.95rem;transition:background .18s ease,color .18s ease;border-bottom:2px solid transparent}.nav button:hover{color:var(--ink);background:var(--paper-sunk)}.nav button.active{color:var(--accent);border-bottom-color:var(--accent)}main{flex:1;padding:30px 0 70px}.section-title{display:flex;align-items:baseline;gap:12px;margin-bottom:18px}.section-title .hint{color:var(--ink-soft);font-size:.92rem;font-style:italic}.panel{background:var(--paper-card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px 22px}.grid{display:grid;gap:16px}.grid.cols-2{grid-template-columns:repeat(2,1fr)}.grid.cols-3{grid-template-columns:repeat(3,1fr)}.grid.cols-4{grid-template-columns:repeat(4,1fr)}@media (max-width: 720px){.grid.cols-2,.grid.cols-3,.grid.cols-4{grid-template-columns:1fr 1fr}}@media (max-width: 480px){.grid.cols-2,.grid.cols-3,.grid.cols-4{grid-template-columns:1fr}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(--ink);color:var(--paper-card);border:1px solid var(--ink);padding:10px 18px;border-radius:var(--radius);cursor:pointer;font-size:.98rem;transition:transform .12s ease,background .18s ease,box-shadow .18s ease}.btn:hover{transform:translateY(-1px);box-shadow:var(--shadow)}.btn:active{transform:translateY(0)}.btn.ghost{background:transparent;color:var(--ink);border-color:var(--line)}.btn.ghost:hover{background:var(--paper-sunk)}.btn.accent{background:var(--accent);border-color:var(--accent);color:#fdf6ee}.btn.good{background:var(--good);border-color:var(--good);color:#f4f7f0}.btn:disabled{opacity:.45;cursor:not-allowed;transform:none;box-shadow:none}.btn.lg{padding:13px 24px;font-size:1.05rem}.kbd{font-family:Spectral,monospace;font-size:.72rem;border:1px solid var(--line);border-bottom-width:2px;border-radius:4px;padding:1px 6px;color:var(--ink-soft);background:var(--paper)}.source-tag{font-size:.78rem;color:var(--ink-soft);font-style:italic}.source-tag:before{content:"❦ ";color:var(--accent);font-style:normal}.pill{display:inline-block;font-size:.72rem;padding:2px 9px;border-radius:20px;background:var(--paper-sunk);color:var(--ink-soft);border:1px solid var(--line)}.mode-tile{text-align:left;cursor:pointer;border:1px solid var(--line);background:var(--paper-card);border-radius:var(--radius);padding:22px;transition:transform .14s ease,box-shadow .18s ease,border-color .18s}.mode-tile:hover{transform:translateY(-3px);box-shadow:var(--shadow);border-color:var(--accent)}.mode-tile .num{font-family:Fraunces Variable,serif;font-size:1.6rem;color:var(--accent)}.mode-tile h3{margin-top:6px}.mode-tile p{margin:6px 0 0;color:var(--ink-soft);font-size:.92rem}.stat{background:var(--paper-card);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px}.stat .value{font-family:Fraunces Variable,serif;font-size:2rem;line-height:1;color:var(--ink)}.stat .label{color:var(--ink-soft);font-size:.85rem;margin-top:6px}.stat .value .unit{font-size:1rem;color:var(--ink-soft)}.bar{height:9px;background:var(--paper-sunk);border-radius:20px;overflow:hidden;border:1px solid var(--line-soft)}.bar>span{display:block;height:100%;background:var(--accent-2);transition:width .5s ease}.bar.good>span{background:var(--good)}.flashcard-stage{perspective:1600px}.flashcard{position:relative;width:100%;min-height:280px;cursor:pointer;transition:transform .55s cubic-bezier(.2,.7,.2,1);transform-style:preserve-3d}.flashcard.flipped{transform:rotateY(180deg)}.flashcard .face{position:absolute;top:0;right:0;bottom:0;left:0;backface-visibility:hidden;-webkit-backface-visibility:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:32px;border:1px solid var(--line);border-radius:var(--radius);background:var(--paper-card);box-shadow:var(--shadow)}.flashcard .face.back{transform:rotateY(180deg);background:#fbf6ec}.flashcard .face .role{position:absolute;top:14px;left:16px;font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint)}.flashcard .face .txt{font-size:1.35rem;line-height:1.45;max-width:640px}.flashcard .face.back .txt{font-size:1.15rem}.flashcard .face .src{position:absolute;bottom:12px;left:0;right:0}.option{display:flex;align-items:flex-start;gap:12px;width:100%;text-align:left;padding:13px 16px;margin:8px 0;border:1px solid var(--line);border-radius:var(--radius);background:var(--paper-card);cursor:pointer;transition:border-color .15s,background .15s,transform .1s;font-size:1rem;color:var(--ink)}.option:hover{border-color:var(--accent-2)}.option .box{flex:0 0 22px;height:22px;border:1.5px solid var(--ink-faint);border-radius:5px;display:inline-flex;align-items:center;justify-content:center;font-size:.8rem;margin-top:1px}.option.selected{border-color:var(--accent-2);background:#eef2f4}.option.selected .box{background:var(--accent-2);border-color:var(--accent-2);color:#fff}.option.correct{border-color:var(--good);background:#eef2ea}.option.correct .box{background:var(--good);border-color:var(--good);color:#fff}.option.wrong{border-color:var(--bad);background:#f6ece8}.option.wrong .box{background:var(--bad);border-color:var(--bad);color:#fff}.option:disabled{cursor:default}.timer{font-family:Fraunces Variable,serif;font-size:1.3rem}.timer.low{color:var(--accent)}.explain{border-left:3px solid var(--accent-2);padding:8px 14px;margin-top:10px;background:var(--paper);border-radius:0 var(--radius) var(--radius) 0;font-size:.95rem}.explain.ok{border-left-color:var(--good)}.explain.ko{border-left-color:var(--bad)}.row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.row.between{justify-content:space-between}.spacer{flex:1}.muted{color:var(--ink-soft)}.center{text-align:center}.mt{margin-top:18px}.mt-lg{margin-top:28px}select,input[type=number]{font-family:inherit;font-size:.95rem;padding:7px 10px;border:1px solid var(--line);border-radius:var(--radius);background:var(--paper-card);color:var(--ink)}.chapter-row{display:flex;align-items:center;gap:12px;padding:9px 0;border-bottom:1px dashed var(--line-soft)}.chapter-row:last-child{border-bottom:none}.chapter-row .name{flex:1}.chapter-row .bar{width:160px}.empty{text-align:center;color:var(--ink-soft);padding:40px 0;font-style:italic}@media (max-width: 640px){body{font-size:16px}.topbar .container{height:auto;flex-direction:column;align-items:stretch;gap:6px;padding:9px 14px}.brand{font-size:1.05rem}.brand small{font-size:.66rem}.nav{margin-left:0;flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;gap:2px;padding-bottom:3px;scrollbar-width:none}.nav::-webkit-scrollbar{display:none}.nav button{white-space:nowrap;padding:8px 11px;font-size:.9rem}.container{padding:0 14px}main{padding:18px 0 48px}h1{font-size:1.5rem}h2{font-size:1.2rem}.section-title{flex-direction:column;align-items:flex-start;gap:2px}.section-title .hint{font-size:.85rem}.panel{padding:15px 16px}.mode-tile{padding:16px}.mode-tile .num{font-size:1.35rem}.stat{padding:13px 14px}.stat .value{font-size:1.55rem}.flashcard{min-height:230px}.flashcard .face{padding:22px 18px}.flashcard .face .txt{font-size:1.12rem}.flashcard .face.back .txt{font-size:1rem}.kbd-hint{display:none}.btn{padding:11px 16px}.btn.lg{padding:13px 18px;font-size:1rem}.flashcard-controls .btn{flex:1}.quiz-config-row{flex-direction:column;align-items:stretch;gap:6px}.quiz-config-row label{width:auto!important}select,input[type=number]{width:100%}.option{font-size:.98rem;padding:12px 14px}.chapter-row{flex-wrap:wrap}.chapter-row .bar{width:100%;order:3}}
