:root{--ink:#1c2a22;--paper:#f3ead6;--paper-2:#efe3c8;--line:#d7c49a;--olive:#2a6f5b;--orange:#c45c26;--clay:#a33b24;--gold:#d4a017;--white:#fffaf1;--shadow:4px 4px 0 #1c2a22;color:var(--ink);background:var(--paper);font-family:Nunito,Segoe UI,sans-serif;line-height:1.45}*{box-sizing:border-box}html,body,#root{min-height:100%}html{overflow-x:hidden}body{background:radial-gradient(circle at 12px 12px, #c45c2624 1.5px, transparent 2px) 0 0 / 28px 28px, var(--paper);margin:0;overflow-x:hidden}h1,h2,h3,.brand strong{font-feature-settings:"kern" 1, "liga" 1;font-family:Fraunces,Georgia,serif;font-weight:700}button,input{font:inherit}button{cursor:pointer}.app{max-width:960px;margin:0 auto;padding:16px 16px 48px}.top{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:20px;display:flex}.brand{text-align:left;background:0 0;border:0;align-items:center;gap:10px;padding:0;display:flex}.brand strong{font-size:1.25rem;display:block}.brand em{color:#5c6b62;font-size:.85rem;font-style:normal}.top nav{flex-wrap:wrap;gap:6px;display:flex}.top nav button{border:2px solid var(--ink);background:var(--white);border-radius:999px;padding:8px 14px}.top nav button.on{background:var(--olive);color:var(--white)}.hero-card,.now,.card,.unit-tile,.timeline button,.rhythm{background:var(--white);border:2px solid var(--ink);box-shadow:var(--shadow)}.hero-card{border-radius:18px;align-items:center;gap:16px;margin-bottom:20px;padding:20px;display:flex}.hero-card h1{margin:0 0 8px;font-size:2rem}.name-field{flex-direction:column;gap:4px;margin-top:10px;font-size:.9rem;display:flex}.name-field input{border:2px solid var(--ink);background:var(--paper);border-radius:10px;max-width:240px;padding:8px 10px}.course-switch{flex-direction:column;align-items:stretch;gap:8px;margin-top:12px;font-size:.9rem;display:flex}.course-switch-btns{grid-template-columns:1fr 1fr;gap:8px;display:grid}.course-switch button{border:2px solid var(--ink);background:var(--paper);text-align:center;border-radius:12px;width:100%;padding:8px 12px}.course-switch button.on{background:var(--olive);color:#fff}.now,.rhythm,.card{border-radius:16px;margin-bottom:20px;padding:18px}.eyebrow{text-transform:uppercase;letter-spacing:.08em;color:var(--orange);margin:0;font-size:.75rem}.cta-row,.hub-actions{flex-wrap:wrap;gap:8px;margin-top:12px;display:flex}.btn{background:var(--orange);color:#fff;border:2px solid var(--ink);box-shadow:3px 3px 0 var(--ink);border-radius:12px;padding:10px 16px;line-height:1.25}.btn:active{box-shadow:2px 2px 0 var(--ink);transform:translate(1px,1px)}.btn.ghost{background:var(--white);color:var(--ink)}.btn.small{padding:6px 10px;font-size:.9rem}.btn.listen{background:var(--olive);margin-bottom:12px}.btn:disabled{opacity:.45;cursor:not-allowed}.days{gap:8px;margin:0;padding:0;list-style:none;display:grid}.days li{border-bottom:1px dashed var(--line);grid-template-columns:120px 1fr;gap:8px;padding:8px 0;display:grid}.note,footer,.tiny{color:#5c6b62;font-size:.92rem}.rhythm .btn{margin-top:12px}footer{margin-top:28px}.unit-grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;display:grid}.unit-tile{text-align:left;border-radius:14px;gap:4px;padding:14px;display:grid}.unit-tile i{border-radius:99px;width:28px;height:8px;display:block}.unit-tile em,.timeline em{color:#5c6b62;font-size:.9rem;font-style:normal}.unit-tile.current{outline:3px solid var(--olive)}.stars{letter-spacing:.15em;color:var(--gold);font-size:1.1rem}.stars.small{font-size:.95rem}.timeline{padding:0;list-style:none}.timeline li{margin-bottom:10px}.timeline button{text-align:left;border-radius:12px;gap:4px;width:100%;padding:14px;display:grid}.timeline .active button{background:#e7f3ec}.when{color:var(--olive);font-size:.8rem}.holidays{padding-left:18px}.vocab{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px;padding:0;list-style:none;display:grid}.vocab li{background:var(--white);border:2px solid var(--ink);border-radius:10px;justify-content:space-between;gap:8px;padding:8px 10px;display:flex}.speak{color:var(--olive);text-align:left;background:0 0;border:0;padding:0;font-weight:800}.crumb button{color:var(--olive);background:0 0;border:0;padding:0}.lead{font-size:1.15rem}.grammar-card{padding:28px 26px!important}.grammar-card h1{margin-bottom:0}.grammar-card h2{color:var(--orange);margin-top:8px;margin-bottom:20px}.rule{max-width:38em}.rule p{margin:0 0 1.15em;font-size:1.18rem;line-height:1.75}.rule p:last-child{margin-bottom:0}.pattern{background:var(--paper-2);border-radius:8px;margin:1.4em 0;padding:12px 14px;font-family:ui-monospace,Consolas,monospace;font-size:1.05rem;line-height:1.5}.examples{margin:0;padding:0;list-style:none}.examples li{gap:4px;margin:16px 0;display:grid}.watch{border-left:4px solid var(--orange);background:#f7e1c8;padding:8px 12px}.dots{flex-wrap:wrap;gap:6px;margin:8px 0 16px;display:flex}.dots button{border:2px solid var(--ink);background:var(--white);border-radius:999px;padding:6px 12px}.dots button.on{background:var(--olive);color:#fff}.progress-row{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.play-card{padding:20px}.ask{font-size:1.2rem;font-weight:800}.options{gap:8px;display:grid}.opt{text-align:left;background:var(--paper);border:2px solid var(--ink);border-radius:12px;padding:12px}.opt.sel{background:#dceee4}.opt.matched{background:#c8e6c9;text-decoration:line-through}.sentence{font-size:1.2rem}.blank{border-bottom:2px solid var(--ink);min-width:3ch;margin:0 4px;display:inline-block}.chip{border:2px solid var(--ink);background:var(--paper-2);border-radius:10px;margin:4px;padding:8px 10px}.chip.on{background:#dceee4}.built,.bank{min-height:48px;margin-bottom:10px}.hint{color:#888}.match{grid-template-columns:1fr 1fr;gap:10px;display:grid}.col-label{text-transform:uppercase;letter-spacing:.06em;color:var(--olive);margin:0 0 6px;font-size:.8rem;font-weight:800}.how-to{margin:-8px 0 14px;font-size:1.02rem}.fb{border-radius:10px;justify-content:space-between;align-items:center;margin-top:14px;padding:10px;display:flex}.fb.ok{background:#dceee4}.explain{background:#f8d4cc;border-radius:12px;gap:12px;margin-top:16px;padding:14px;display:grid}.almost{margin:0;font-weight:800}.tip-card{background:var(--white);border:2px solid var(--ink);border-radius:12px;padding:12px 14px}.tip-card h3{margin:0 0 8px;font-size:1.05rem}.tip-card p{margin:0 0 8px}.tip-ex{gap:2px;display:grid}.tip-ex em{color:var(--olive);font-style:normal;font-weight:800}.celebrate{text-align:center;padding:20px}.big{font-family:Fraunces,serif;font-size:1.8rem}.row-actions{align-items:center;gap:12px;margin-bottom:16px;display:flex}.sheet{color:#111;background:#fff;border:1px solid #ccc;margin-bottom:24px;padding:24px}.sheet-head{border-bottom:2px solid #111;justify-content:space-between;padding-bottom:8px;font-size:.9rem;display:flex}.sheet h1{font-size:1.6rem}.name-line{letter-spacing:.04em}.grammar-box{background:#f6f1e4;margin:12px 0;padding:12px}.vocab-note{margin:0 0 12px}.vocab-block{margin-top:14px}.vocab-block h2{color:var(--olive);margin:0 0 8px;font-size:1.1rem}.vocab-cards{grid-template-columns:repeat(2,1fr);gap:8px;display:grid}.vocab-card{break-inside:avoid;border:1px dashed #333;border-radius:8px;justify-content:space-between;align-items:baseline;gap:10px;padding:8px 10px;display:flex}.vocab-card strong{font-size:1.05rem}.vocab-card span{color:#444}@media print{body{background:#fff}.no-print,.top,footer,.back{display:none!important}.app{max-width:none;padding:0}.sheet{box-shadow:none;page-break-after:always;border:0}.sheet.vocab-sheet,.answers-sheet{page-break-after:auto}}.cal-nav{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin:16px 0 12px;display:flex}.cal-nav-right{flex-wrap:wrap;gap:8px;display:flex}.cal-weekdays,.cal-grid{grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;display:grid}.cal-weekdays{text-align:center;color:#5c6b62;margin-bottom:6px;font-size:.85rem;font-weight:800}.cal-keys{flex-wrap:wrap;gap:8px;margin:0 0 10px;font-size:.82rem;display:flex}.cal-keys .key{border:2px solid var(--ink);border-radius:999px;padding:2px 10px}.cal-keys .play,.cal-cell.do.play{background:#e7f3ec}.cal-keys .vocab,.cal-cell.do.vocab{background:#fbe8d6}.cal-keys .print,.cal-cell.do.print{background:#e8e4f6}.cal-keys .holiday,.cal-cell.holiday{background:#efe3c8}.cal-cell{border:2px solid var(--ink);background:var(--white);text-align:left;min-width:0;min-height:92px;font:inherit;color:inherit;border-radius:12px;flex-direction:column;gap:4px;padding:8px;display:flex;overflow:hidden}.cal-cell.empty{min-height:0;box-shadow:none;background:0 0;border:0}.cal-cell b{font-size:1.05rem}.cal-cell .what{font-size:.78rem;line-height:1.25}.cal-cell em{color:#5c6b62;font-size:.72rem;font-style:normal}.cal-cell.today{outline:3px solid var(--olive);outline-offset:1px}.cal-cell.holiday{color:#5c6b62;background:#efe3c8}.cal-cell.do{box-shadow:var(--shadow)}.cal-list{margin:0 0 12px;padding:0;list-style:none}.cal-list li{border-bottom:1px dashed var(--line);grid-template-columns:52px 1fr;align-items:baseline;gap:8px;padding:6px 0;display:grid}.cal-list-go{text-align:left;color:var(--olive);background:0 0;border:0;padding:0;font-weight:700}.cal-legend h3{margin:16px 0 8px;font-size:1.05rem}.cal-mobile-hint{display:none}@media (width<=720px){.app{padding:12px 12px calc(28px + env(safe-area-inset-bottom,0px))}.top{flex-direction:column;align-items:stretch;gap:10px;margin-bottom:14px}.brand{min-width:0}.brand strong{font-size:1.1rem}.brand em{font-size:.78rem;line-height:1.3;display:block}.brand svg{flex-shrink:0;width:44px;height:44px}.top nav{grid-template-columns:1fr 1fr;gap:6px;width:100%;display:grid}.top nav button{text-align:center;width:100%;padding:10px 8px;font-size:.88rem}.hero-card{flex-direction:column;align-items:stretch;gap:10px;padding:14px}.hero-card h1{font-size:1.55rem}.hero-card svg{width:88px;height:88px}.name-field input{width:100%;max-width:none}.course-switch-btns{grid-template-columns:1fr}.now,.rhythm,.card{box-shadow:3px 3px 0 var(--ink);border-radius:14px;margin-bottom:14px;padding:14px}.cta-row,.hub-actions{grid-template-columns:1fr;gap:8px;display:grid}.cta-row .btn,.hub-actions .btn,.rhythm .btn{text-align:center;justify-self:stretch;width:100%}.days li{grid-template-columns:1fr}.days li b{display:block}.unit-grid,.vocab{grid-template-columns:1fr}.vocab li{flex-wrap:wrap;align-items:baseline}.grammar-card{padding:16px 14px!important}.rule p{font-size:1.05rem;line-height:1.6}.pattern{overflow-wrap:anywhere;padding:10px;font-size:.95rem}.progress-row{flex-wrap:wrap;align-items:flex-start;gap:8px;font-size:.88rem}.play-card{padding:14px}.ask{font-size:1.08rem}.fb{flex-direction:column;align-items:stretch;gap:8px}.match{grid-template-columns:1fr}.row-actions{flex-wrap:wrap;gap:8px}.sheet{padding:14px}.sheet-head{flex-direction:column;gap:4px}.vocab-cards{grid-template-columns:1fr}.cal-nav{flex-direction:column;align-items:stretch}.cal-nav h2{text-align:center;order:-1;font-size:1.25rem}.cal-nav-right{width:100%}.cal-nav .btn,.cal-nav-right .btn{text-align:center;flex:1;width:100%}.cal-weekdays,.cal-grid{gap:4px}.cal-weekdays{font-size:.75rem}.cal-cell{aspect-ratio:1;height:auto;min-height:0;box-shadow:none;border-width:1.5px;border-radius:6px;padding:0}.cal-cell.empty{aspect-ratio:1}.cal-cell.do{box-shadow:1px 1px 0 var(--ink)}.cal-cell.today{outline-offset:0;outline-width:2px}.cal-cell>*{display:none}.cal-cell>b{padding:3px 4px;font-size:.72rem;line-height:1;display:block}.cal-keys{gap:6px;font-size:.75rem}.cal-mobile-hint{margin:0 0 10px;display:block}.cal-list li{grid-template-columns:44px 1fr}.cal-list-go{font-size:.92rem}.big{font-size:1.4rem}footer{font-size:.85rem}}
