:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--accent:#4f46e5;--accent-ink:#fff;--accent-soft:var(--lightningcss-light,#4f46e521)var(--lightningcss-dark,#6366f133);--accent-line:var(--lightningcss-light,#4f46e559)var(--lightningcss-dark,#818cf873);--bg:var(--lightningcss-light,#f6f7fb)var(--lightningcss-dark,#111318);--surface:var(--lightningcss-light,#fff)var(--lightningcss-dark,#191c24);--surface-2:var(--lightningcss-light,#f1f2f8)var(--lightningcss-dark,#14161d);--fg:var(--lightningcss-light,#171921)var(--lightningcss-dark,#eceef4);--muted:var(--lightningcss-light,#5d6473)var(--lightningcss-dark,#98a1b3);--border:var(--lightningcss-light,#17192187)var(--lightningcss-dark,#eceef445);--border-soft:var(--lightningcss-light,#17192145)var(--lightningcss-dark,#eceef424);--shadow:var(--lightningcss-light,0 1px 2px #1719210d)var(--lightningcss-dark,0 1px 2px #0006);--assist-bubble:var(--lightningcss-light,#17192121)var(--lightningcss-dark,#eceef424);--ok:var(--lightningcss-light,#15803d)var(--lightningcss-dark,#4ade80);--warn:var(--lightningcss-light,#b45309)var(--lightningcss-dark,#fbbf24);--info:var(--lightningcss-light,#0369a1)var(--lightningcss-dark,#38bdf8);--err:var(--lightningcss-light,#dc2626)var(--lightningcss-dark,#f87171);--err-soft:var(--lightningcss-light,#dc26261a)var(--lightningcss-dark,#f8717124);--font-sans:system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-display:system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono:ui-monospace, "SF Mono", "Cascadia Code", Menlo, monospace;--radius:12px;--radius-sm:8px;--radius-lg:18px;--gap-sm:8px;--gap:14px;--gap-lg:24px;--topnav-h:60px}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--fg);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:16px;line-height:1.55}img,svg{max-width:100%;display:block}a{color:inherit;text-decoration:none}button{font:inherit;cursor:pointer;color:inherit}p{text-wrap:pretty}h1,h2,h3,h4{text-wrap:balance;font-family:var(--font-display);margin:0}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}.app-shell{flex-direction:column;max-width:960px;height:100dvh;margin:0 auto;padding:0 1.5rem;display:flex}#view{flex-direction:column;flex:1;min-height:0;display:flex}.scroll{flex:1;min-height:0;padding:1.5rem 0 3rem;overflow-y:auto}.topnav{align-items:center;gap:var(--gap-lg);height:var(--topnav-h);border-bottom:1px solid var(--border-soft);flex-shrink:0;display:flex}.topnav .logo{letter-spacing:-.01em;color:var(--fg);align-items:center;gap:9px;font-size:16px;font-weight:750;display:inline-flex}.topnav .logo .mark{background:var(--accent);width:28px;height:28px;color:var(--accent-ink);font-family:var(--font-mono);border-radius:8px;place-items:center;font-size:13px;font-weight:700;display:grid}.topnav nav{flex:1;gap:4px;display:flex}.topnav nav a{border-radius:var(--radius-sm);color:var(--muted);padding:8px 12px;font-size:14px;font-weight:550;transition:color .15s,background .15s}.topnav nav a:hover{color:var(--fg);background:var(--surface-2)}.topnav nav a.active{color:var(--accent);background:var(--accent-soft)}.topnav .user{color:var(--muted);align-items:center;gap:10px;font-size:13px;display:inline-flex}.topnav .user .email{text-overflow:ellipsis;white-space:nowrap;max-width:180px;overflow:hidden}.topnav .avatar{background:var(--accent-soft);width:30px;height:30px;color:var(--accent);border-radius:50%;flex-shrink:0;place-items:center;font-size:12px;font-weight:700;display:grid}.btn{border-radius:var(--radius);letter-spacing:-.005em;white-space:nowrap;border:1px solid #0000;justify-content:center;align-items:center;gap:8px;min-height:44px;padding:11px 18px;font-size:14px;font-weight:600;transition:background .16s,border-color .16s,box-shadow .16s,transform 50ms;display:inline-flex}.btn:active{transform:translateY(1px)}.btn-primary{background:var(--accent);color:var(--accent-ink);box-shadow:var(--shadow)}.btn-primary:hover{background:color-mix(in oklch, var(--accent) 88%, black)}.btn-secondary{background:var(--surface);color:var(--fg);border-color:var(--border-soft)}.btn-secondary:hover{border-color:var(--accent-line);color:var(--accent)}.btn-ghost{color:var(--muted);background:0 0}.btn-ghost:hover{color:var(--fg);background:var(--surface-2)}.btn:disabled{opacity:.6;cursor:not-allowed}.badge{font-family:var(--font-mono);letter-spacing:.02em;white-space:nowrap;border:1px solid var(--border-soft);border-radius:999px;align-items:center;gap:6px;padding:4px 10px;font-size:11px;font-weight:600;display:inline-flex}.badge-neutral{color:var(--muted);background:var(--surface-2)}.badge-owned{color:var(--accent);background:var(--accent-soft);border-color:var(--accent-line)}.badge-pending{color:var(--warn);background:color-mix(in oklch, var(--warn) 12%, transparent)}.badge-generating{color:var(--info);background:color-mix(in oklch, var(--info) 12%, transparent)}.badge-ready{color:var(--ok);background:color-mix(in oklch, var(--ok) 12%, transparent)}.badge-failed{color:var(--err);background:var(--err-soft)}.status-dot{background:currentColor;border-radius:50%;flex-shrink:0;width:7px;height:7px}.status-dot.pulse{animation:1.6s ease-in-out infinite pulse}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}.form-row{gap:var(--gap);flex-direction:column;display:flex}.field{flex-direction:column;gap:6px;display:flex}.field label{color:var(--muted);font-size:13px;font-weight:600}.input{border-radius:var(--radius);border:1px solid var(--border-soft);background:var(--surface);width:100%;color:var(--fg);padding:11px 14px;font-size:15px;transition:border-color .15s,box-shadow .15s}.input:focus{border-color:var(--accent-line);box-shadow:0 0 0 3px var(--accent-soft);outline:none}.input::placeholder{color:var(--muted);opacity:.75}.error-text{color:var(--err);margin:0;font-size:13px}.seg{background:var(--surface-2);border:1px solid var(--border-soft);border-radius:999px;gap:2px;padding:3px;display:inline-flex}.seg-btn{color:var(--muted);background:0 0;border:0;border-radius:999px;padding:6px 13px;font-size:12.5px;font-weight:600;transition:background .15s,color .15s,box-shadow .15s}.seg-btn.active{background:var(--surface);color:var(--fg);box-shadow:var(--shadow)}.auth-wrap{flex:1;justify-content:center;align-items:center;min-height:0;padding:2rem 0;display:flex;overflow-y:auto}.auth-card{width:100%;max-width:420px;padding:2rem}.auth-brand{text-align:center;margin-bottom:1.5rem}.auth-brand .mark{background:var(--accent);width:40px;height:40px;color:var(--accent-ink);font-family:var(--font-mono);border-radius:12px;place-items:center;margin:0 auto 12px;font-size:18px;font-weight:700;display:grid}.auth-brand h1{letter-spacing:-.01em;font-size:20px}.auth-brand p{color:var(--muted);margin-top:4px;font-size:14px}.auth-switch{text-align:center;color:var(--muted);margin-top:1.25rem;font-size:13.5px}.auth-switch a{color:var(--accent);font-weight:600}.auth-switch a:hover{text-decoration:underline}.pw-meter{flex-direction:column;gap:4px;margin-top:4px;display:flex}.pw-meter .req{color:var(--muted);align-items:center;gap:6px;font-size:12px;display:inline-flex}.pw-meter .req .dot{background:var(--muted);opacity:.4;border-radius:50%;width:7px;height:7px}.pw-meter .req.ok{color:var(--ok)}.pw-meter .req.ok .dot{background:var(--ok);opacity:1}.card{background:var(--surface);border:1px solid var(--border-soft);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:1.5rem}.page-head{justify-content:space-between;align-items:flex-start;gap:var(--gap);margin-bottom:1.25rem;display:flex}.page-head h1{letter-spacing:-.02em;font-size:26px}.page-sub{color:var(--muted);margin:4px 0 0;font-size:14px}.head-badges{flex-wrap:wrap;justify-content:flex-end;gap:6px;display:flex}.course-grid{gap:var(--gap);grid-template-columns:repeat(auto-fill,minmax(280px,1fr));display:grid}.course-card{border-radius:var(--radius-lg);border:1px solid var(--border-soft);background:var(--surface);box-shadow:var(--shadow);flex-direction:column;gap:12px;padding:1.25rem;transition:border-color .16s,transform .12s;display:flex}.course-card:hover{border-color:var(--accent-line);transform:translateY(-1px)}.course-card .badges{flex-wrap:wrap;gap:6px;display:flex}.course-card h3{letter-spacing:-.01em;font-size:17px;line-height:1.3}.course-card .sub{color:var(--muted);margin:4px 0 0;font-size:13px}.meta-row{border-top:1px dashed var(--border-soft);color:var(--muted);justify-content:space-between;align-items:center;gap:8px;margin-top:auto;padding-top:10px;font-size:12px;display:flex}.meta-row .course-file{text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:7px;min-width:0;display:inline-flex;overflow:hidden}.meta-row .src{font-family:var(--font-mono);background:var(--surface-2);border:1px solid var(--border-soft);border-radius:6px;flex-shrink:0;padding:2px 6px;font-size:10px;font-weight:700}.meta-row .date{white-space:nowrap;flex-shrink:0}.layout-two-col{gap:var(--gap-lg);grid-template-columns:300px 1fr;align-items:start;display:grid}.sidebar{gap:var(--gap);flex-direction:column;display:flex;position:sticky;top:1.5rem}.sidebar-card{background:var(--surface);border:1px solid var(--border-soft);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:8px}.module-block{padding:6px}.module-head{letter-spacing:-.01em;align-items:center;gap:8px;padding:8px 10px 6px;font-size:13px;font-weight:700;display:flex}.module-head .n{font-family:var(--font-mono);color:var(--accent);font-size:11px}.lesson-list{flex-direction:column;gap:2px;margin-top:2px;display:flex}.lesson-link{border-radius:var(--radius-sm);color:var(--fg);justify-content:space-between;align-items:center;gap:8px;padding:9px 10px;font-size:13.5px;line-height:1.35;transition:background .14s,color .14s;display:flex}.lesson-link:hover{background:var(--surface-2)}.lesson-link.active{background:var(--accent-soft);color:var(--accent);font-weight:600}.lesson-link.dim{opacity:.65}.lesson-link .tick{font-family:var(--font-mono);color:var(--muted);flex-shrink:0;font-size:12px}button.lesson-link{text-align:left;width:100%;font:inherit;cursor:pointer;background:0 0;border:0}.failed-card{border:1px solid var(--err-soft);background:var(--err-soft);border-radius:var(--radius-lg);color:var(--fg);padding:1.25rem}.failed-card .msg{margin-bottom:12px;font-size:14px}.failed-card .btn{background:var(--surface);border-color:var(--border-soft)}.main-col{min-width:0}.lesson-section{border-top:1px solid var(--border-soft);padding:1.25rem 1.5rem}.main-col .card>.lesson-section:first-child{border-top:0}.lesson-section h2{letter-spacing:.01em;align-items:center;gap:8px;margin-bottom:12px;font-size:14px;font-weight:700;display:flex}.lesson-section h2 .k{font-family:var(--font-mono)}.vocab-item{border-bottom:1px dashed var(--border-soft);flex-direction:column;gap:6px;padding:10px 0;display:flex}.vocab-item:last-child{border-bottom:0}.vocab-term{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.vocab-term .term{font-weight:700}.vocab-term .phon{font-family:var(--font-mono);color:var(--muted);font-size:12px}.vocab-term .meaning{color:var(--muted);font-size:13.5px}.vocab-example{font-size:13.5px}.vocab-example .en{color:var(--fg)}.vocab-example .es{color:var(--muted)}.grammar-point{border-bottom:1px dashed var(--border-soft);padding:10px 0}.grammar-point:last-child{border-bottom:0}.grammar-point h3{margin-bottom:4px;font-size:15px}.grammar-point .expl{color:var(--muted);margin:0 0 8px;font-size:13.5px}.grammar-example{border-left:2px solid var(--accent-line);margin-bottom:6px;padding:6px 12px;font-size:13.5px}.grammar-example .en{color:var(--fg)}.grammar-example .es{color:var(--muted)}.dialogue-line{border-bottom:1px dashed var(--border-soft);grid-template-columns:90px 1fr;gap:10px;padding:7px 0;font-size:14px;display:grid}.dialogue-line:last-child{border-bottom:0}.dialogue-line .speaker{font-family:var(--font-mono);color:var(--accent);text-transform:uppercase;letter-spacing:.04em;padding-top:3px;font-size:11px;font-weight:700}.dialogue-line .en{color:var(--fg)}.dialogue-line .es{color:var(--muted)}.error-item{border-bottom:1px dashed var(--border-soft);padding:10px 0;font-size:14px}.error-item:last-child{border-bottom:0}.error-item .wrong{color:var(--err)}.error-item .fixed{color:var(--ok);margin-top:2px}.error-item .why{color:var(--muted);margin-top:4px;font-size:13px}.exercise-item{border-bottom:1px dashed var(--border-soft);align-items:flex-start;gap:12px;padding:10px 0;font-size:14px;display:flex}.exercise-item:last-child{border-bottom:0}.exercise-item .n{font-family:var(--font-mono);color:var(--accent);background:var(--accent-soft);border-radius:50%;flex-shrink:0;place-items:center;width:22px;height:22px;font-size:12px;font-weight:700;display:grid}.exercise-item .type{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-size:10.5px;display:block}.exercise-item .prompt{margin-top:2px;display:block}.sol-box{margin-top:6px;font-size:13.5px}.sol-box .answer{color:var(--ok);font-weight:600}.chat-cta{border:1px solid var(--border-soft);background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow);margin-top:14px;padding:10px}.main-col.has-cta{padding-bottom:0}.chat-page{flex-direction:column;flex:1;min-height:0;display:flex}.chat-top{justify-content:space-between;align-items:center;gap:var(--gap);border-bottom:1px solid var(--border-soft);flex-wrap:nowrap;flex-shrink:0;padding:12px 0;display:flex}.chat-back{color:var(--muted);white-space:nowrap;align-items:center;gap:6px;font-size:13.5px;font-weight:600;display:inline-flex}.chat-back:hover{color:var(--accent)}.chat-tools{flex-wrap:nowrap;align-items:center;gap:8px;display:flex}.chat-tools .btn{min-height:38px;padding:8px 14px;font-size:13px}.chat-tools .seg-btn{min-height:30px;padding:5px 11px;font-size:12px}.chat-tools .reset-abbr{display:none}.chat-title{flex-shrink:0;padding:14px 0 4px}.chat-title h1{letter-spacing:-.01em;font-size:1.1rem;font-weight:750}.chat-title .sub{color:var(--muted);margin-top:2px;font-size:12.5px}.chat-body{flex-direction:column;flex:1;min-height:0;display:flex}.chat-msgs{scroll-behavior:smooth;flex-direction:column;flex:1;gap:10px;min-height:0;padding:14px 2px 6px;display:flex;overflow-y:auto}.chat-msg{word-break:break-word;border-radius:16px;flex-direction:column;gap:2px;max-width:80%;padding:10px 14px;font-size:14.5px;line-height:1.5;animation:.18s ease-out rise;display:flex}@keyframes rise{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.chat-msg .role{font-family:var(--font-mono);letter-spacing:.05em;text-transform:uppercase;opacity:.75;font-size:10.5px}.chat-msg.user{background:var(--accent-soft);border:1px solid var(--accent-line);color:var(--fg);border-bottom-right-radius:6px;align-self:flex-end;align-items:flex-end}.chat-msg.user .role{color:var(--accent)}.chat-msg.assistant{background:var(--assist-bubble);color:var(--fg);border-bottom-left-radius:6px;align-self:flex-start;align-items:flex-start}.chat-msg.assistant .role{color:var(--muted)}.chat-msg.typing{background:var(--assist-bubble);border-bottom-left-radius:6px;align-self:flex-start;align-items:center;gap:6px;padding:12px 16px;display:inline-flex}.chat-msg.typing .dots{gap:4px;display:inline-flex}.chat-msg.typing .dots i{background:var(--muted);border-radius:50%;width:6px;height:6px;animation:1.2s infinite blink}.chat-msg.typing .dots i:nth-child(2){animation-delay:.2s}.chat-msg.typing .dots i:nth-child(3){animation-delay:.4s}@keyframes blink{0%,80%,to{opacity:.25}40%{opacity:1}}.chat-msg.typing .typing-label{color:var(--muted);font-size:12px}.chat-system{text-align:center;color:var(--muted);align-self:center;padding:4px 0;font-size:12px}.chat-system.err{color:var(--err)}.chat-form{border-top:1px solid var(--border-soft);flex-shrink:0;padding:12px 0 8px}.chat-form .row{align-items:flex-end;gap:10px;display:flex}.chat-input-wrap{flex-direction:column;flex:1;gap:6px;min-width:0;display:flex}.chat-input-wrap .input{resize:none;min-height:46px;max-height:140px;line-height:1.45}.chat-input-wrap .input.listening{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.chat-input-wrap .voice-hint{color:var(--muted);font-size:11.5px}.mic-btn{border:1px solid var(--border-soft);background:var(--surface);width:46px;height:46px;color:var(--muted);border-radius:50%;flex-shrink:0;place-items:center;font-size:18px;transition:background .15s,border-color .15s,transform 50ms;display:grid}.mic-btn:hover{border-color:var(--accent-line);color:var(--accent)}.mic-btn.live{border-color:var(--accent);background:var(--accent-soft);color:var(--accent);animation:1.4s ease-in-out infinite micpulse}@keyframes micpulse{0%,to{box-shadow:0 0 0 0 var(--accent-soft)}50%{box-shadow:0 0 0 8px #0000}}.chat-notices{min-height:18px;color:var(--muted);flex-shrink:0;padding:6px 2px 2px;font-size:12px}.chat-notices .warn{color:var(--warn)}.upload-wrap{flex:1;justify-content:center;align-items:flex-start;min-height:0;padding:1.5rem 0;display:flex;overflow-y:auto}.upload-card{width:100%;max-width:560px}.file-drop{text-align:center;border:1.5px dashed var(--border);border-radius:var(--radius-lg);background:var(--surface);cursor:pointer;flex-direction:column;justify-content:center;align-items:center;padding:32px 20px;transition:border-color .16s,background .16s;display:flex;position:relative}.file-drop:hover{background:color-mix(in oklch, var(--accent) 8%, transparent)}.file-drop .ficon{font-size:22px}.file-drop p{color:var(--muted);margin:6px 0 0;font-size:13.5px}.file-drop p b{color:var(--fg)}.file-drop input[type=file]{opacity:0;cursor:pointer;width:100%;height:100%;position:absolute;inset:0}.file-meta{color:var(--muted);justify-content:center;align-items:center;gap:8px;margin-top:10px;font-size:12.5px;display:flex}.seg-vis{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.seg-vis .note{color:var(--muted);max-width:280px;font-size:12.5px}.empty{text-align:center;color:var(--muted);border:1px dashed var(--border-soft);border-radius:var(--radius-lg);padding:48px 20px}.empty h2{color:var(--fg);margin-bottom:6px;font-size:18px}.empty p{margin:0;font-size:14px}@media (width<=820px){.layout-two-col{grid-template-columns:1fr}.sidebar{position:static}}@media (width<=768px){.app-shell{padding:0 1rem}.scroll{padding:1.25rem 0 4.5rem}.chat-msg{max-width:90%}.chat-top{padding:10px 0}.chat-tools .btn{padding:7px 10px;font-size:12px}.chat-tools .reset-full{display:none}.chat-tools .reset-abbr{display:inline-flex}.chat-tools .seg-btn{padding:5px 8px;font-size:11.5px}.topnav .user .email{display:none}.topnav nav a{padding:7px 9px;font-size:13.5px}.page-head h1{font-size:22px}.dialogue-line{grid-template-columns:1fr;gap:0}.dialogue-line .speaker{padding-top:0}.auth-wrap{align-items:start}.chat-cta{border-bottom:0;border-left:0;border-right:0;border-radius:0;margin:0;padding:10px 1rem;position:fixed;bottom:0;left:0;right:0}.chat-cta .btn{width:100%}}@media (width<=420px){.course-grid{grid-template-columns:1fr}}
