:root,[data-theme=light]{color-scheme:light;--bg: #f4f7fb;--bg-soft: #ffffff;--card: #ffffff;--card-border: #dbe3ef;--text: #0f172a;--muted: #64748b;--primary: #4f46e5;--primary-hover: #4338ca;--primary-soft: #eef2ff;--danger: #dc2626;--danger-soft: #fef2f2;--success: #16a34a;--success-soft: #f0fdf4;--warning: #d97706;--shadow: 0 8px 30px rgba(15, 23, 42, .08);--radius: 14px;--surface-muted: #f8fafc;--progress-track: #e2e8f0;--highlight-bg: #fde68a;--highlight-text: #92400e;--fab-bg: rgba(255, 255, 255, .92)}[data-theme=dark]{color-scheme:dark;--bg: #0b1220;--bg-soft: #111827;--card: #1e293b;--card-border: #334155;--text: #f1f5f9;--muted: #94a3b8;--primary: #818cf8;--primary-hover: #a5b4fc;--primary-soft: rgba(129, 140, 248, .14);--danger: #f87171;--danger-soft: rgba(248, 113, 113, .12);--success: #4ade80;--success-soft: rgba(74, 222, 128, .12);--warning: #fbbf24;--shadow: 0 8px 30px rgba(0, 0, 0, .35);--surface-muted: #0f172a;--progress-track: #334155;--highlight-bg: rgba(251, 191, 36, .22);--highlight-text: #fde68a;--fab-bg: rgba(30, 41, 59, .94)}*{box-sizing:border-box}body{margin:0;font-family:Inter,system-ui,-apple-system,sans-serif;background:radial-gradient(circle at top left,rgba(79,70,229,.08),transparent 35%),radial-gradient(circle at top right,rgba(22,163,74,.06),transparent 30%),var(--bg);color:var(--text);min-height:100vh;line-height:1.5;-webkit-text-size-adjust:100%;padding-bottom:env(safe-area-inset-bottom,0)}#root{min-height:100vh}.app-shell{min-height:100vh;padding-bottom:calc(52px + env(safe-area-inset-bottom,8px))}.app{max-width:1100px;margin:0 auto;padding:20px 16px 24px;padding-left:max(16px,env(safe-area-inset-left,16px));padding-right:max(16px,env(safe-area-inset-right,16px))}.hero,.page-header{display:flex;justify-content:space-between;gap:24px;align-items:flex-start;margin-bottom:24px}.eyebrow{color:var(--primary);font-weight:600;text-transform:uppercase;letter-spacing:.08em;font-size:.75rem;margin:0 0 8px}.hero h1,.page-header h1{margin:0 0 8px;font-size:clamp(1.75rem,4vw,2.5rem);line-height:1.15}.subtitle{margin:0;color:var(--muted);max-width:640px}.stats{min-width:140px;text-align:center}.stats-label{display:block;color:var(--muted);font-size:.875rem;margin-bottom:8px}.stats strong{font-size:2rem;color:var(--primary)}.card{background:var(--card);border:1px solid var(--card-border);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow)}.toolbar{display:flex;gap:12px;margin-bottom:24px;flex-wrap:wrap}.search-input{flex:1;min-width:240px;padding:12px 16px;border-radius:12px;border:1px solid var(--card-border);background:var(--bg-soft);color:var(--text);font:inherit}.search-input:focus,.field input:focus,.field select:focus,.field textarea:focus,.typing-form input:focus,.typing-form textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px #4f46e51f}.layout{display:grid;gap:24px}.vocab-form h2,.vocab-card h3{margin-top:0}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.field{display:flex;flex-direction:column;gap:8px}.field.full-width{grid-column:1 / -1}.field span{font-size:.875rem;color:var(--muted);font-weight:500}.field input,.field select,.field textarea{width:100%;padding:12px 14px;border-radius:12px;border:1px solid var(--card-border);background:var(--bg-soft);color:var(--text);font:inherit}.field textarea{resize:vertical}.form-actions,.card-actions,.practice-actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.btn{border:none;border-radius:12px;padding:10px 16px;font:inherit;font-weight:600;cursor:pointer;transition:transform .15s ease,background .15s ease,border-color .15s ease;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;gap:6px}.btn:hover:not(:disabled){transform:translateY(-1px)}.btn:disabled{opacity:.55;cursor:not-allowed;transform:none}.btn.primary,.btn.btn-primary{background:var(--primary);color:#fff}.btn.primary:hover:not(:disabled),.btn.btn-primary:hover:not(:disabled){background:var(--primary-hover)}.btn.secondary,.btn.btn-outline{background:var(--bg-soft);color:var(--text);border:1px solid var(--card-border)}.btn.secondary:hover:not(:disabled),.btn.btn-outline:hover:not(:disabled){border-color:var(--primary);color:var(--primary)}.btn.ghost,.btn.btn-ghost{background:var(--primary-soft);color:var(--primary)}.btn-sm{padding:8px 14px;font-size:.88rem;min-height:36px;border-radius:999px}.btn.danger,.btn.btn-danger-soft{background:var(--danger-soft);color:var(--danger);border:1px solid rgba(220,38,38,.2)}.vocab-list{display:grid;gap:16px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.vocab-grid-2col{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;align-items:start;width:100%}.vocab-grid-2col .vocab-card{min-width:0;padding:14px;overflow:hidden;height:100%;box-sizing:border-box}.vocab-grid-2col .vocab-card h3{font-size:1rem;word-break:break-word;overflow-wrap:anywhere}.vocab-grid-2col .vocab-header{gap:10px}.vocab-grid-2col .vocab-details{gap:10px;margin-top:12px}.vocab-grid-2col .vocab-details dt{font-size:.68rem}.vocab-grid-2col .vocab-details dd{font-size:.86rem;overflow-wrap:anywhere;word-break:break-word}.vocab-grid-2col .example-list{padding-left:1.1rem;margin:0}.vocab-grid-2col .badge{font-size:.68rem;padding:3px 8px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vocab-grid-2col .badge-row{display:flex;flex-wrap:wrap;gap:4px}.vocab-grid-2col .card-actions{flex-shrink:0}.vocab-grid-2col .card-actions .btn{font-size:.78rem;padding:6px 10px}.vocab-header{display:flex;justify-content:space-between;gap:16px;align-items:flex-start}.badge,.badge-soft{display:inline-block;padding:4px 10px;border-radius:999px;background:var(--primary-soft);color:var(--primary);font-size:.75rem;font-weight:600}.vocab-details{display:grid;gap:12px;margin:16px 0 0}.vocab-details dt{color:var(--muted);font-size:.75rem;text-transform:uppercase;letter-spacing:.06em}.vocab-details dd{margin:4px 0 0}.phonetic{font-family:Times New Roman,serif;font-size:1.05rem;color:var(--muted)}.empty-state{text-align:center;color:var(--muted)}.muted{color:var(--muted)}.alert,.alert.success,.alert-error{padding:12px 16px;border-radius:12px;margin-bottom:16px;cursor:pointer}.alert.success{background:var(--success-soft);color:#166534;border:1px solid rgba(22,163,74,.25)}.alert.error,.alert-error{background:var(--danger-soft);color:#991b1b;border:1px solid rgba(220,38,38,.2)}.error{color:var(--danger)}.section-block{display:grid;gap:16px}.section-header{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.section-header h2{margin:0 0 4px}.count-pill,.pill{padding:6px 12px;border-radius:999px;background:var(--primary-soft);color:var(--primary);font-size:.875rem;font-weight:600;white-space:nowrap}.pill-success{background:var(--success-soft);color:var(--success)}.pill-danger{background:var(--danger-soft);color:var(--danger)}.search-bar{display:grid;grid-template-columns:1.5fr 1fr 1fr auto;gap:12px;align-items:center}.search-bar select{padding:12px 14px;border-radius:12px;border:1px solid var(--card-border);background:var(--bg-soft);color:var(--text);font:inherit}.badge-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.topic-badge{background:var(--success-soft);color:var(--success)}.example-list{margin:0;padding-left:18px}.example-list li{margin-bottom:6px}.title-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.title-row h3{margin:0}.speaker-btn{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border:1px solid rgba(79,70,229,.25);border-radius:999px;background:var(--primary-soft);color:var(--primary);cursor:pointer;transition:transform .15s ease,background .15s ease;flex-shrink:0}.speaker-btn svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.speaker-btn:hover:not(:disabled){transform:scale(1.05);background:#e0e7ff}.speaker-btn:disabled{opacity:.5;cursor:default}.speaker-btn.playing{background:var(--success-soft);border-color:#16a34a4d;color:var(--success)}.form-note{margin:-4px 0 16px}.topic-card{display:flex;flex-direction:column;align-items:flex-start;gap:8px;text-align:left;text-decoration:none;color:inherit;cursor:pointer;transition:transform .15s ease,border-color .15s ease,box-shadow .15s ease}.topic-page{display:grid;gap:20px}.page-nav{margin-bottom:4px}.topic-hero{margin-bottom:0}.topic-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px}.topic-card:hover{transform:translateY(-2px);border-color:var(--primary);box-shadow:0 12px 24px #4f46e51a}.topic-detail{display:grid;gap:20px}.topic-detail-header{display:flex;justify-content:space-between;gap:16px;align-items:flex-start}.topic-detail-header h2{margin:0}.pagination{display:flex;justify-content:center;align-items:center;gap:16px}.page-indicator{color:var(--muted);font-weight:600}.hero-actions{display:flex;flex-direction:column;gap:12px;align-items:stretch}.practice-link{text-align:center}.practice-page,.practice-session{display:grid;gap:20px}.practice-hero{margin-bottom:0}.practice-setup{display:grid;gap:20px;padding:clamp(20px,4vw,28px)}.practice-setup>.btn-primary{border-radius:999px;min-height:48px;font-size:1rem;justify-self:start}.period-card.active{box-shadow:0 6px 20px #4f46e51f;transform:translateY(-1px)}.period-card strong{font-size:1.05rem;color:var(--text)}.period-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.period-card{display:flex;flex-direction:column;gap:8px;align-items:flex-start;padding:16px;border-radius:var(--radius);border:1px solid var(--card-border);background:var(--bg-soft);color:inherit;cursor:pointer;text-align:left;transition:border-color .15s ease,background .15s ease}.period-card:hover{border-color:var(--primary)}.period-card.active{border-color:var(--primary);background:var(--primary-soft)}.level-preview h3{margin:0 0 12px}.level-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.level-chip{padding:12px;border-radius:12px;border:1px solid var(--card-border);background:var(--bg-soft)}.level-chip strong{display:block;margin-bottom:4px}.level-chip span{color:var(--muted);font-size:.875rem}.level-chip.basic{border-color:#4f46e540}.level-chip.intermediate{border-color:#d9770640}.level-chip.advanced{border-color:#16a34a40}.practice-status{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;background:radial-gradient(circle at top right,rgba(79,70,229,.08),transparent 50%),var(--card)}.status-stats{display:flex;flex-wrap:wrap;gap:8px}.progress-track{height:10px;border-radius:999px;background:var(--progress-track);overflow:hidden;box-shadow:inset 0 1px 2px #0f172a14}.progress-fill{height:100%;background:linear-gradient(90deg,var(--primary),#6366f1);border-radius:999px;transition:width .35s ease}.level-progress{display:grid;grid-template-columns:repeat(9,minmax(0,1fr));gap:6px}.level-step{padding:8px 4px;border-radius:10px;text-align:center;font-size:.8rem;font-weight:600;border:1px solid var(--card-border);color:var(--muted);background:var(--bg-soft)}.level-step.current{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}.level-step.done{border-color:#16a34a59;color:var(--success);background:var(--success-soft)}.practice-game{display:grid;gap:20px}.practice-game-header{display:flex;justify-content:space-between;align-items:center}.question-box{padding:20px;border-radius:var(--radius);background:var(--surface-muted);border:1px solid var(--card-border)}.flashcard{position:relative;min-height:260px;border:none;background:transparent;cursor:pointer;perspective:1000px;padding:0;width:100%}.flashcard-face{min-height:260px;padding:28px;border-radius:calc(var(--radius) + 2px);border:1px solid var(--card-border);background:linear-gradient(180deg,var(--card),var(--surface-muted));display:flex;flex-direction:column;justify-content:center;gap:12px;box-shadow:var(--shadow);transition:transform .2s ease,box-shadow .2s ease}.flashcard:hover .flashcard-face{box-shadow:0 16px 40px #4f46e51f}.flashcard:not(.flipped) .back,.flashcard.flipped .front{display:none}.flashcard-label{margin:0;color:var(--primary);font-size:.75rem;text-transform:uppercase;letter-spacing:.08em;font-weight:600}.flashcard-word-row{display:flex;align-items:center;gap:10px}.flashcard-word-row h3{margin:0;font-size:1.75rem}.flashcard-meaning{margin:0;font-size:1.4rem}.example-preview{margin:0;font-style:italic}.example-box{margin-top:12px;padding:16px;border-radius:12px;background:var(--primary-soft);border:1px solid rgba(79,70,229,.15)}.example-sentence{margin:8px 0 0;font-size:1.15rem;line-height:1.6}.word-highlight{background:var(--highlight-bg);color:var(--highlight-text);padding:0 4px;border-radius:4px;font-weight:700}.typing-form{display:flex;gap:12px;flex-wrap:wrap}.typing-form input,.typing-form textarea{flex:1;min-width:220px;padding:12px 14px;border-radius:12px;border:1px solid var(--card-border);background:var(--bg-soft);color:var(--text);font:inherit}.typing-form textarea{min-height:88px;resize:vertical}.choice-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.choice-btn{padding:16px;border-radius:var(--radius);border:1px solid var(--card-border);background:var(--bg-soft);color:var(--text);font:inherit;text-align:left;cursor:pointer;transition:border-color .15s ease,background .15s ease}.choice-btn:hover:not(:disabled){border-color:var(--primary);background:var(--primary-soft)}.choice-btn.correct{border-color:#16a34a73;background:var(--success-soft)}.feedback{margin:0;padding:12px 14px;border-radius:12px}.feedback.correct{background:var(--success-soft);color:#166534;border:1px solid rgba(22,163,74,.2)}.feedback.wrong{background:var(--danger-soft);color:#991b1b;border:1px solid rgba(220,38,38,.2)}.score-box{padding:16px;border-radius:var(--radius);border:1px solid var(--card-border)}.score-box.correct{background:var(--success-soft);border-color:#16a34a40}.score-box.wrong{background:var(--danger-soft);border-color:#dc262633}.score-box strong{display:block;margin-bottom:6px}.match-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.match-card{min-height:92px;padding:12px;border-radius:12px;border:1px solid var(--card-border);background:var(--primary-soft);color:var(--text);font:inherit;font-weight:600;cursor:pointer;transition:transform .15s ease,border-color .15s ease}.match-card:hover:not(:disabled){transform:translateY(-1px)}.match-card.open{background:var(--bg-soft)}.match-card.open.en{border-color:#4f46e566}.match-card.open.vi{border-color:#16a34a66}.match-card.wrong{border-color:#dc262673;background:var(--danger-soft)}.practice-complete{display:grid;gap:16px;text-align:center}.practice-complete .form-actions{justify-content:center}.practice-complete .btn-primary{border-radius:999px}.complete-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.complete-stats div{padding:16px;border-radius:var(--radius);border:1px solid var(--card-border);text-align:center;background:var(--surface-muted)}.complete-stats strong{display:block;font-size:1.8rem;margin-bottom:4px;color:var(--primary)}.complete-stats span{color:var(--muted);font-size:.875rem}.hint-btn{justify-self:start}.hint-box{margin:0;padding:12px 14px;border-radius:12px;background:var(--primary-soft);border:1px solid rgba(79,70,229,.15);color:var(--text)}.listen-box{text-align:center}.listen-play-btn{margin-top:8px}.flashcard-meanings{text-align:left}.muted-list{color:var(--muted)}.speak-controls{display:grid;gap:16px}.recording-indicator{margin:0;font-weight:600;color:var(--danger)}.transcript-box{padding:16px;border-radius:var(--radius);background:var(--surface-muted);border:1px solid var(--card-border)}.practice-nav-bar{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:16px 20px;border-radius:calc(var(--radius) + 4px);background:color-mix(in srgb,var(--card) 94%,transparent);border:1px solid var(--card-border);box-shadow:var(--shadow);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);position:sticky;bottom:16px;z-index:10}.practice-nav-bar .btn-outline:first-child{margin-right:auto}@media (max-width: 768px){.hero,.page-header{flex-direction:column}.form-grid{grid-template-columns:1fr}.vocab-header{flex-direction:column}.search-bar{grid-template-columns:1fr}.period-grid,.level-list,.level-progress,.choice-grid,.match-grid,.complete-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.level-progress{grid-template-columns:repeat(5,minmax(0,1fr))}.hero-actions{width:100%}.practice-status,.practice-nav-bar{flex-direction:column}.practice-nav-bar .btn-outline:first-child{margin-right:0}.landing-grid,.common-topic-grid,.calendar-picker{grid-template-columns:1fr}}.app:has(.landing-page){max-width:none;padding:0}.app>.landing-page{padding-left:max(16px,env(safe-area-inset-left,16px));padding-right:max(16px,env(safe-area-inset-right,16px))}@keyframes landingFadeUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes landingFloat{0%,to{transform:translate(0) scale(1)}50%{transform:translateY(-22px) scale(1.04)}}@keyframes landingGradientShift{0%,to{background-position:0% 50%}50%{background-position:100% 50%}}@keyframes landingCardIn{0%{opacity:0;transform:translateY(16px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.landing-page{position:relative;min-height:100vh;padding:max(20px,env(safe-area-inset-top,20px)) 24px max(48px,env(safe-area-inset-bottom,48px));background:radial-gradient(circle at 15% 15%,rgba(255,255,255,.65),transparent 42%),radial-gradient(circle at 85% 8%,rgba(251,207,232,.85),transparent 38%),linear-gradient(135deg,#fce7f3,#fbcfe8 30%,#f9a8d4 55%,#fdf2f8);background-size:120% 120%;animation:landingGradientShift 14s ease infinite;overflow:hidden}.landing-bg-shapes .shape{position:absolute;border-radius:999px;filter:blur(48px);opacity:.4;pointer-events:none;animation:landingFloat 9s ease-in-out infinite}.shape-1{width:260px;height:260px;background:#fff;top:-50px;right:8%;animation-delay:0s}.shape-2{width:200px;height:200px;background:#ec4899;bottom:12%;left:-30px;animation-delay:-3s}.shape-3{width:160px;height:160px;background:#fda4af;top:38%;right:-20px;animation-delay:-5s}.shape-4{width:120px;height:120px;background:#f472b6;top:18%;left:12%;animation-delay:-2s}.landing-topbar{position:relative;z-index:2;display:flex;justify-content:flex-end;max-width:920px;margin:0 auto 20px;animation:landingFadeUp .55s ease both}.landing-topbar-auth{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:4px;border-radius:999px;background:#ffffff8c;border:1px solid rgba(255,255,255,.85);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:0 8px 24px #be185d1a}.landing-topbar .btn-ghost{background:transparent}.landing-user-chip{font-size:.82rem;color:#9d174d;padding:0 10px;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.landing-hero{position:relative;z-index:1;max-width:720px;margin:0 auto 28px;animation:landingFadeUp .65s ease .08s both}.landing-hero-inner{padding:20px 22px;border-radius:22px;background:#ffffff9e;border:1px solid rgba(255,255,255,.92);box-shadow:0 16px 48px #be185d24;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.landing-brand-row{display:flex;align-items:center;gap:14px}.landing-brand-mark{display:grid;place-items:center;width:52px;height:52px;flex-shrink:0;border-radius:16px;background:linear-gradient(145deg,#fff,#fce7f3);border:1px solid rgba(255,255,255,.95);box-shadow:0 8px 20px #be185d2e;font-size:1.35rem;font-weight:800;color:#831843}.landing-brand-copy{min-width:0;text-align:left}.landing-brand-name{margin:0 0 2px;font-size:.72rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#be185d}.landing-brand-tagline{margin:0;font-size:clamp(1.35rem,4vw,1.85rem);line-height:1.15;color:#831843;font-weight:800}.landing-hero-desc{margin:14px 0 0;padding-top:14px;border-top:1px solid rgba(219,39,119,.12);color:#9d174d;font-size:.95rem;line-height:1.55}.landing-grid{position:relative;z-index:1;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;max-width:920px;margin:0 auto}.landing-card{display:flex;align-items:center;gap:14px;padding:18px 20px;border-radius:18px;background:#ffffffc7;border:1px solid rgba(255,255,255,.92);box-shadow:0 10px 32px #be185d1a;text-decoration:none;color:inherit;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);animation:landingCardIn .55s ease both;animation-delay:var(--card-delay, 0ms);transition:transform .22s ease,box-shadow .22s ease,border-color .22s ease}.landing-card:hover{transform:translateY(-5px) scale(1.015);box-shadow:0 22px 48px #be185d33;border-color:var(--card-accent, #ec4899)}.landing-card-icon{font-size:1.85rem;width:52px;height:52px;display:flex;align-items:center;justify-content:center;border-radius:14px;background:linear-gradient(135deg,#fffffff2,#fbcfe88c);flex-shrink:0;transition:transform .22s ease}.landing-card:hover .landing-card-icon{transform:scale(1.08) rotate(-4deg)}.landing-card-body h2{margin:0 0 3px;font-size:1.05rem;color:#831843}.landing-card-body p{margin:0;color:#9d174d;font-size:.84rem;line-height:1.4}.landing-card-arrow{margin-left:auto;color:#db2777;font-size:1.15rem;font-weight:700;opacity:.7;transition:transform .22s ease,opacity .22s ease}.landing-card:hover .landing-card-arrow{transform:translate(4px);opacity:1}.words-practice-entry{display:flex;align-items:center;gap:16px;padding:18px 20px;border-radius:calc(var(--radius) + 4px);text-decoration:none;color:inherit;background:radial-gradient(circle at top right,rgba(79,70,229,.12),transparent 50%),linear-gradient(135deg,#eef2ff,#fce7f3);border:1px solid rgba(79,70,229,.2);box-shadow:0 10px 28px #4f46e51a;transition:transform .2s ease,box-shadow .2s ease}.words-practice-entry:hover{transform:translateY(-2px);box-shadow:0 16px 36px #4f46e529}.words-practice-icon{font-size:1.75rem;width:52px;height:52px;display:grid;place-items:center;border-radius:14px;background:#ffffffd9;flex-shrink:0}.words-practice-copy{display:flex;flex-direction:column;gap:4px;min-width:0}.words-practice-copy strong{font-size:1.05rem;color:var(--text)}.words-practice-copy span{font-size:.88rem;color:var(--muted);line-height:1.4}.words-practice-arrow{margin-left:auto;font-size:1.25rem;font-weight:700;color:var(--primary);flex-shrink:0}[data-theme=dark] .words-practice-entry{background:radial-gradient(circle at top right,rgba(129,140,248,.15),transparent 50%),linear-gradient(135deg,#1e1b4b,#312e81);border-color:#818cf840}[data-theme=dark] .words-practice-icon{background:#1e293bd9}.sub-page{display:grid;gap:20px;animation:pageFadeIn .35s ease}@keyframes pageFadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.page-nav .btn-outline{border-radius:999px;padding:8px 16px;font-size:.88rem;font-weight:600}.learn-section-header{padding:clamp(20px,4vw,28px);border-radius:calc(var(--radius) + 4px);background:radial-gradient(circle at top right,rgba(79,70,229,.08),transparent 45%),var(--card);border:1px solid var(--card-border);box-shadow:var(--shadow)}.learn-section-content{display:grid;gap:16px}.learn-section-content>.card{transition:border-color .15s ease,box-shadow .15s ease}.learn-section-content>.card:hover{border-color:#4f46e559;box-shadow:0 12px 28px #4f46e514}.learn-section-actions{display:flex;gap:12px;flex-wrap:wrap}.learn-section-actions .btn-primary{border-radius:999px;padding:12px 24px}.feature-card h2,.feature-card h3{margin-top:0}.feature-steps{margin:0;padding-left:20px;line-height:1.7}.feature-steps li{margin-bottom:8px}.grammar-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.grammar-item{padding:14px;border-radius:12px;background:#f8fafc;border:1px solid var(--card-border)}.common-topic-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.common-topic-card{text-decoration:none;color:inherit;display:flex;flex-direction:column;gap:6px;transition:transform .15s ease,border-color .15s ease}.common-topic-card:hover{transform:translateY(-2px);border-color:#ec4899}.common-topic-emoji{font-size:1.75rem}.topic-hint{font-size:.75rem;color:#db2777}.random-toolbar{display:flex;gap:12px}.time-mode-tabs{display:flex;gap:4px;margin-bottom:16px;padding:4px;border-radius:999px;background:var(--surface-muted);border:1px solid var(--card-border)}.time-mode-tab{flex:1;padding:10px 16px;border-radius:999px;border:none;background:transparent;font:inherit;font-weight:600;color:var(--muted);cursor:pointer;transition:background .15s ease,color .15s ease,box-shadow .15s ease}.time-mode-tab.active{background:var(--card);color:var(--primary);box-shadow:0 2px 8px #0f172a14}.calendar-picker{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-bottom:8px}.calendar-hint{grid-column:1 / -1;margin:0}.homework-section{display:grid;gap:16px}.homework-header h2{margin:8px 0 4px}.homework-actions{display:grid;gap:16px}.homework-preview,.homework-saved-video{width:100%;max-width:520px;border-radius:var(--radius);background:#000}.upload-row{display:flex;flex-wrap:wrap;gap:12px;align-items:center}.homework-video-list{display:grid;gap:16px}.homework-video-item{display:grid;gap:10px;padding:12px;border-radius:var(--radius);border:1px solid var(--card-border);background:#f8fafc}.small{font-size:.85rem}.app-fab{position:fixed;right:max(12px,env(safe-area-inset-right,12px));bottom:max(12px,env(safe-area-inset-bottom,12px));z-index:1000;display:inline-flex;gap:2px;padding:3px;border-radius:999px;background:var(--fab-bg);border:1px solid var(--card-border);box-shadow:0 4px 16px #0f172a1f;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.app-fab-btn,.lang-fab-btn{border:none;border-radius:999px;padding:4px 8px;font-size:.68rem;font-weight:700;line-height:1;cursor:pointer;background:transparent;color:var(--muted);min-width:28px;min-height:28px;display:inline-flex;align-items:center;justify-content:center}.app-fab-theme{font-size:.85rem;padding:4px 6px}.app-fab-btn.active,.lang-fab-btn.active{background:var(--primary-soft);color:var(--primary)}.app:has(.auth-page){max-width:none;padding:0;margin:0}.app-shell:has(.auth-page){padding-bottom:max(72px,calc(56px + env(safe-area-inset-bottom,0)));overflow-x:hidden;width:100%;max-width:100%}.auth-page{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,480px);min-height:100dvh;background:var(--bg);overflow-x:clip}.auth-brand{display:flex;align-items:center;justify-content:center;padding:max(32px,env(safe-area-inset-top,32px)) clamp(24px,4vw,48px) 32px max(24px,env(safe-area-inset-left,24px));background:radial-gradient(circle at 20% 20%,rgba(255,255,255,.12),transparent 45%),radial-gradient(circle at 80% 80%,rgba(236,72,153,.25),transparent 40%),linear-gradient(145deg,#4f46e5,#7c3aed 42%,#ec4899);color:#fff;position:relative;overflow:hidden}.auth-brand:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.06'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");opacity:.5;pointer-events:none}.auth-brand-inner{position:relative;z-index:1;max-width:420px}.auth-brand-logo{display:inline-flex;text-decoration:none;margin-bottom:28px}.auth-brand-mark{display:grid;place-items:center;width:56px;height:56px;border-radius:16px;background:#ffffff2e;border:1px solid rgba(255,255,255,.35);font-size:1.5rem;font-weight:800;color:#fff;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.auth-brand-eyebrow{margin:0 0 10px;font-size:.78rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;opacity:.88}.auth-brand-title{margin:0 0 12px;font-size:clamp(1.75rem,4vw,2.35rem);line-height:1.15;font-weight:800}.auth-brand-subtitle{margin:0;font-size:1rem;line-height:1.65;opacity:.92}.auth-panel{display:flex;align-items:center;justify-content:center;min-width:0;padding:max(24px,env(safe-area-inset-top,24px)) max(20px,env(safe-area-inset-right,20px)) max(24px,env(safe-area-inset-bottom,24px)) max(20px,env(safe-area-inset-left,20px));background:radial-gradient(circle at top right,rgba(79,70,229,.06),transparent 40%),var(--bg)}.auth-card{width:min(100%,420px);max-width:100%;min-width:0;padding:clamp(24px,4vw,32px);border:1px solid var(--card-border);box-shadow:var(--shadow)}.auth-mobile-top{display:none}.auth-mobile-logo{display:inline-flex;text-decoration:none;flex-shrink:0}.auth-mobile-brand{margin:0;font-size:.72rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--primary)}.auth-mobile-tagline{margin:0;font-size:.95rem;font-weight:700;line-height:1.35;color:var(--text)}.auth-card h1{margin:0 0 8px;font-size:clamp(1.5rem,4vw,1.85rem);line-height:1.2}.auth-subtitle{margin:0 0 4px;line-height:1.55}.auth-body{margin-top:8px}.auth-form{display:grid;gap:14px;margin-top:16px}.auth-form-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.auth-forgot-link{font-size:.88rem;font-weight:600;color:var(--primary);text-decoration:none;white-space:nowrap}.auth-forgot-link:hover{text-decoration:underline}.auth-social{margin-top:16px;display:grid;gap:12px;justify-items:stretch;width:100%;min-width:0;clear:both;position:relative;z-index:0;isolation:isolate}.auth-footer{margin-top:20px;padding-top:16px;border-top:1px solid var(--card-border);display:grid;gap:10px;text-align:center}.auth-back-home{font-size:.88rem;text-decoration:none;display:inline-block}.auth-back-home:hover{color:var(--primary)}.auth-switch{margin:0;text-align:center;font-size:.92rem}.auth-switch a{color:var(--primary);font-weight:600;text-decoration:none}.auth-switch a:hover{text-decoration:underline}.auth-divider{display:flex;align-items:center;gap:12px;width:100%;margin:4px 0;color:var(--muted);font-size:.82rem;text-transform:uppercase;letter-spacing:.06em}.auth-divider:before,.auth-divider:after{content:"";flex:1;height:1px;background:var(--card-border)}.google-icon-login{display:flex;justify-content:center;align-items:center;min-height:48px;position:relative}.google-icon-login>div:not(.google-login-hidden){display:flex!important;justify-content:center}.google-login-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.google-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:48px;height:48px;border-radius:50%;border:1px solid #dadce0;background:#fff;box-shadow:0 2px 8px #3c40431f;cursor:pointer;transition:transform .15s ease,box-shadow .15s ease;color:inherit}.google-icon-btn svg{display:block;flex-shrink:0}.google-icon-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 4px 14px #3c404329}.google-icon-btn:disabled{opacity:.6;cursor:not-allowed}.google-login-wrap{display:flex;flex-direction:column;align-items:stretch;gap:8px;width:100%;max-width:100%;min-width:0}.google-login-wrap--active{align-items:center;min-height:44px;overflow:hidden}.google-login-wrap--active>div{max-width:100%;display:flex!important;justify-content:center}.btn-google{display:inline-flex;align-items:center;justify-content:center;gap:10px;background:#fff;color:#1f2937;border:1px solid #dadce0;min-height:44px;font-weight:500;box-shadow:0 1px 2px #3c404314}.btn-google:disabled{opacity:.72;cursor:not-allowed}.google-icon-svg{flex-shrink:0}.google-setup-hint{margin:0;font-size:.78rem;line-height:1.4;text-align:center}.otp-input{text-align:center;font-size:1.35rem!important;font-weight:700;letter-spacing:.35em;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.auth-remember{display:flex;align-items:center;gap:8px;font-size:.92rem;color:var(--text);cursor:pointer}.auth-remember input{width:16px;height:16px;accent-color:var(--primary)}.mail-inbox-hint{margin:12px 0 0;font-size:.88rem;line-height:1.5;text-align:center}.mail-inbox-hint a{color:var(--primary);word-break:break-all}@media (max-width: 900px){.auth-page{display:flex;flex-direction:column;min-height:100vh;min-height:100dvh;overflow-x:hidden}.auth-brand{display:none!important}.auth-mobile-top{display:flex;flex-direction:column;align-items:center;text-align:center;gap:8px;width:100%;margin-bottom:16px;padding-bottom:14px;border-bottom:1px solid var(--card-border)}.auth-mobile-top .auth-brand-mark{width:44px;height:44px;font-size:1.1rem;border-radius:12px;background:var(--primary-soft);border:1px solid rgba(79,70,229,.2);color:var(--primary)}.auth-mobile-tagline{margin:0;font-size:.95rem;line-height:1.35;max-width:100%}.auth-panel{flex:1 1 auto;display:block;width:100%;max-width:100%;padding:max(8px,env(safe-area-inset-top,8px)) max(16px,env(safe-area-inset-right,16px)) max(80px,calc(60px + env(safe-area-inset-bottom,16px))) max(16px,env(safe-area-inset-left,16px));overflow-y:auto;-webkit-overflow-scrolling:touch}.auth-card{width:100%;max-width:100%;min-width:0;margin:0;box-sizing:border-box}.auth-card.card{padding:clamp(16px,4vw,24px)}.google-login-wrap{width:100%;overflow:hidden}.google-login-wrap--active>div,.google-login-wrap--active iframe{max-width:100%!important}}.password-input-wrap{position:relative;display:flex;align-items:center}.password-input-wrap input{width:100%;padding-right:4.5rem}.password-toggle{position:absolute;right:8px;border:0;background:transparent;color:var(--primary);font-size:.82rem;font-weight:600;cursor:pointer;padding:6px 8px}.password-toggle:hover{color:var(--primary-dark, #1d4ed8)}.alert.success{background:#ecfdf5;color:#047857;border:1px solid #a7f3d0}.auth-loading{margin:40px auto;max-width:420px}.full-width{width:100%}.landing-auth-actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;align-items:center}.landing-welcome-banner{width:100%;margin:0 0 4px;padding:12px 16px;border-radius:999px;background:#ffffffd1;color:#9d174d;font-weight:700;font-size:clamp(1rem,3.8vw,1.15rem);text-align:center;box-shadow:0 8px 24px #be185d1f}.landing-user-email{word-break:break-word;text-align:center}[data-theme=dark] .landing-page{background:radial-gradient(circle at 10% 20%,rgba(129,140,248,.12),transparent 40%),radial-gradient(circle at 90% 10%,rgba(236,72,153,.15),transparent 35%),linear-gradient(145deg,#0f172a,#1e1b4b 40%,#312e81);background-size:120% 120%}[data-theme=dark] .landing-hero-inner,[data-theme=dark] .landing-topbar-auth{background:#1e293bbf;border-color:#334155e6}[data-theme=dark] .landing-brand-name{color:#c4b5fd}[data-theme=dark] .landing-brand-tagline{color:#e9d5ff}[data-theme=dark] .landing-hero-desc{color:#a5b4fc;border-top-color:#818cf833}[data-theme=dark] .landing-user-chip{color:#c4b5fd}[data-theme=dark] .landing-card{background:#1e293bd1;border-color:#334155e6;box-shadow:0 12px 40px #00000040}[data-theme=dark] .landing-card-body h2{color:#e9d5ff}[data-theme=dark] .landing-card-body p{color:#a5b4fc}[data-theme=dark] .landing-card-arrow{color:#818cf8}[data-theme=dark] .landing-brand-mark{background:#1e293bd9;border-color:#818cf859;color:#c4b5fd}[data-theme=dark] .landing-welcome-banner{background:#1e293be6;color:#fbcfe8}[data-theme=dark] .feedback.correct{color:#86efac}[data-theme=dark] .feedback.wrong{color:#fca5a5}[data-theme=dark] .grammar-item{background:var(--surface-muted)}body.welcome-open{overflow:hidden}.welcome-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;display:grid;place-items:center;padding:max(16px,env(safe-area-inset-top,16px)) max(16px,env(safe-area-inset-right,16px)) max(16px,env(safe-area-inset-bottom,16px)) max(16px,env(safe-area-inset-left,16px));background:#080c1c47;animation:welcomeOverlayIn .35s ease}.welcome-overlay--closing{animation:welcomeOverlayOut .55s ease forwards}.welcome-overlay--closing .welcome-card{animation:welcomeCardOut .55s ease forwards}.welcome-fireworks{position:fixed;top:0;right:0;bottom:0;left:0;width:100vw;height:100vh;pointer-events:none;z-index:0}.welcome-card{position:relative;z-index:2;width:min(100%,460px);text-align:center;padding:28px 24px;animation:welcomePop .55s ease;background:#fffffff5;box-shadow:0 24px 80px #0f172a47}.welcome-eyebrow{margin:0 0 10px;color:var(--primary);font-weight:700;text-transform:uppercase;letter-spacing:.08em;font-size:.78rem}.welcome-card h2{margin:0 0 10px;font-size:clamp(1.45rem,5vw,2rem);line-height:1.25;color:#831843}.welcome-title-glow{animation:welcomeGlow 2.4s ease-in-out infinite}.welcome-subtitle{margin:0 0 18px;color:var(--muted)}@keyframes welcomePop{0%{opacity:0;transform:translateY(18px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes welcomeGlow{0%,to{text-shadow:0 0 12px rgba(236,72,153,.35);transform:scale(1)}50%{text-shadow:0 0 22px rgba(236,72,153,.75),0 0 36px rgba(244,114,182,.45);transform:scale(1.02)}}@keyframes welcomeOverlayIn{0%{opacity:0}to{opacity:1}}@keyframes welcomeOverlayOut{to{opacity:0}}@keyframes welcomeCardOut{to{opacity:0;transform:translateY(-12px) scale(.96)}}@media (max-width: 1024px){.landing-grid,.level-list,.grammar-grid,.common-topic-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 640px){.app{padding-top:12px}.app:has(.auth-page){padding:0;overflow-x:clip}.auth-page{min-height:100vh;min-height:100dvh}.auth-panel{padding-left:max(12px,env(safe-area-inset-left,12px));padding-right:max(12px,env(safe-area-inset-right,12px))}.auth-card.card{padding:12px 8px 8px;border:none;box-shadow:none}.auth-card h1{font-size:1.35rem}.auth-subtitle{font-size:.92rem}.auth-footer{margin-top:16px;padding-top:14px}.auth-form-row{flex-direction:column;align-items:flex-start;gap:10px}.auth-forgot-link{white-space:normal}.google-login-wrap iframe{max-width:100%!important}.google-login-wrap iframe,.google-login-wrap>div{max-width:100%}.section-header{flex-direction:column;align-items:stretch}.count-pill{align-self:flex-start}.vocab-grid-2col{gap:8px}.vocab-grid-2col .vocab-card{padding:10px}.vocab-grid-2col .vocab-card h3{font-size:.88rem}.vocab-grid-2col .title-row{flex-wrap:wrap;gap:4px}.vocab-grid-2col .vocab-header{flex-direction:column;align-items:stretch}.vocab-grid-2col .card-actions{width:100%;flex-wrap:wrap}.vocab-grid-2col .card-actions .btn{flex:1 1 auto;min-width:0;font-size:.72rem;padding:5px 6px}.vocab-grid-2col .vocab-details dt{font-size:.62rem}.vocab-grid-2col .vocab-details dd{font-size:.78rem}.vocab-grid-2col .example-list{padding-left:.9rem;font-size:.78rem}.vocab-header{flex-direction:column;align-items:stretch}.vocab-header .card-actions{width:100%}.form-grid{grid-template-columns:1fr}.google-icon-login{min-height:52px}.password-input-wrap input{padding-right:3.75rem;font-size:16px}.password-toggle{font-size:.74rem;padding:4px 6px;min-height:44px}.field input,.field select,.field textarea{font-size:16px}.welcome-card{padding:22px 18px}.landing-topbar-auth{width:100%;justify-content:center}.landing-user-chip{max-width:100%;text-align:center;width:100%}.landing-brand-row{flex-direction:column;text-align:center}.landing-brand-copy{text-align:center}.hero,.page-header,.practice-status,.section-header,.topic-detail-header{flex-direction:column;align-items:stretch}.hero-actions,.status-stats{width:100%}.card{padding:16px}.landing-page{padding:32px 16px 48px}.landing-grid{grid-template-columns:1fr;gap:12px}.landing-card{padding:16px}.landing-card-icon{width:48px;height:48px;font-size:1.5rem}.period-grid,.level-list,.level-progress,.choice-grid,.match-grid,.complete-stats,.grammar-grid,.common-topic-grid,.calendar-picker{grid-template-columns:1fr}.level-progress{grid-template-columns:repeat(5,minmax(0,1fr))}.search-bar,.form-grid{grid-template-columns:1fr}.practice-nav-bar{flex-direction:column;position:sticky;bottom:56px}.typing-form{flex-direction:column}.typing-form input,.typing-form textarea,.typing-form button{width:100%}.upload-row{flex-direction:column;align-items:stretch}.upload-row input[type=file]{width:100%}.homework-preview,.homework-saved-video{max-width:100%}.pagination{flex-direction:column;gap:10px}.flashcard-face{min-height:220px;padding:20px}.match-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.btn,.btn.btn-primary,.btn.btn-outline{min-height:44px}.app-fab-btn,.lang-fab-btn{min-height:28px;min-width:32px}}@media (max-width: 380px){.level-progress{grid-template-columns:repeat(3,minmax(0,1fr))}.hero h1,.page-header h1,.landing-brand-tagline{font-size:1.55rem}.words-practice-entry{flex-wrap:wrap}.words-practice-arrow{display:none}.welcome-card h2{font-size:1.35rem}.app-fab{right:max(8px,env(safe-area-inset-right,8px));bottom:max(8px,env(safe-area-inset-bottom,8px))}}
