:root{--color-primary:#ec4899;--color-primary-dark:#be185d;--color-primary-light:#f9a8d4;--color-primary-soft:#fce7f3;--color-accent:#a855f7;--color-gold:#ec4899;--color-gold-light:#fbcfe8;--color-ink:#3b0b2e;--color-ink-soft:#86647a;--color-bg:#fdf3f9;--color-surface:#fff;--color-surface-glass:#ffffffb8;--color-border:#f6d6ea;--color-muted:#a98b9e;--color-success:#16a34a;--color-success-soft:#dcfce7;--color-danger:#e11d48;--color-danger-soft:#ffe4e9;--color-red:var(--color-primary);--color-red-dark:var(--color-primary-dark);--color-red-soft:var(--color-primary-soft);--font-latin:"Noto Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--font-hanzi:"Noto Sans SC", var(--font-latin);--radius-sm:10px;--radius-md:16px;--radius-lg:24px;--radius-xl:32px;--shadow-sm:0 2px 8px #be186c12;--shadow-md:0 10px 28px #be186c1f;--shadow-lg:0 22px 50px #be186c2e;--transition-fast:.18s cubic-bezier(.4, 0, .2, 1);--transition-med:.32s cubic-bezier(.4, 0, .2, 1)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--color-primary:#f472b6;--color-primary-dark:#fbcfe8;--color-primary-light:#f9a8d4;--color-primary-soft:#3a1230;--color-accent:#c084fc;--color-gold:#f472b6;--color-gold-light:#4a1d3d;--color-ink:#f6e9f2;--color-ink-soft:#cbadc0;--color-bg:#170c14;--color-surface:#23131d;--color-surface-glass:#23131db8;--color-border:#3c2033;--color-muted:#8f7488;--color-success:#4ade80;--color-success-soft:#14301f70;--color-danger:#fb7185;--color-danger-soft:#3a1620;--shadow-sm:0 2px 8px #00000059;--shadow-md:0 10px 28px #0006;--shadow-lg:0 22px 50px #00000080}}:root[data-theme=dark]{--color-primary:#f472b6;--color-primary-dark:#fbcfe8;--color-primary-light:#f9a8d4;--color-primary-soft:#3a1230;--color-accent:#c084fc;--color-gold:#f472b6;--color-gold-light:#4a1d3d;--color-ink:#f6e9f2;--color-ink-soft:#cbadc0;--color-bg:#170c14;--color-surface:#23131d;--color-surface-glass:#23131db8;--color-border:#3c2033;--color-muted:#8f7488;--color-success:#4ade80;--color-success-soft:#14301f70;--color-danger:#fb7185;--color-danger-soft:#3a1620;--shadow-sm:0 2px 8px #00000059;--shadow-md:0 10px 28px #0006;--shadow-lg:0 22px 50px #00000080}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--color-bg);color:var(--color-ink);font-family:var(--font-latin);-webkit-font-smoothing:antialiased;transition:background var(--transition-med), color var(--transition-med);margin:0}a{color:var(--color-primary);text-decoration:none}a:hover{text-decoration:underline}button{cursor:pointer;font-family:inherit}::selection{background:var(--color-primary-light);color:#3b0b2e}@keyframes fadeInUp{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}@keyframes float{0%,to{transform:translate(0)scale(1)}50%{transform:translate(-14px,18px)scale(1.06)}}.app-shell{flex-direction:column;min-height:100%;display:flex}.app-main{flex:1;width:100%;max-width:1080px;margin:0 auto;padding:32px 24px 64px;animation:.4s both fadeInUp}.navbar{z-index:20;background:var(--color-surface-glass);-webkit-backdrop-filter:blur(16px)saturate(160%);border-bottom:1px solid var(--color-border);box-shadow:var(--shadow-sm);flex-wrap:wrap;align-items:center;gap:24px;padding:14px 24px;display:flex;position:sticky;top:0}.navbar-brand{font-family:var(--font-hanzi);background:linear-gradient(120deg, var(--color-primary), var(--color-accent));color:#0000;letter-spacing:.01em;-webkit-background-clip:text;background-clip:text;font-size:1.15rem;font-weight:900}.navbar-brand:hover{text-decoration:none}.navbar-links{flex-wrap:wrap;flex:1;gap:18px;display:flex}.navbar-links a{color:var(--color-ink-soft);padding-bottom:2px;font-size:.92rem;font-weight:600;position:relative}.navbar-links a:after{content:"";background:linear-gradient(90deg, var(--color-primary), var(--color-accent));height:2px;transition:right var(--transition-fast);border-radius:2px;position:absolute;bottom:-2px;left:0;right:100%}.navbar-links a:hover{color:var(--color-primary);text-decoration:none}.navbar-links a:hover:after{right:0}.navbar-auth{align-items:center;gap:14px;font-size:.92rem;display:flex}.navbar-user{color:var(--color-ink-soft);font-weight:600}.navbar-auth button{border:1px solid var(--color-border);border-radius:var(--radius-sm);color:var(--color-ink-soft);transition:border-color var(--transition-fast), color var(--transition-fast);background:0 0;padding:7px 14px;font-weight:600}.navbar-auth button:hover{border-color:var(--color-primary);color:var(--color-primary)}.navbar-cta{background:linear-gradient(120deg, var(--color-primary), var(--color-primary-dark));border-radius:var(--radius-sm);box-shadow:var(--shadow-sm);transition:transform var(--transition-fast), box-shadow var(--transition-fast);padding:7px 16px;font-weight:700;color:#fff!important}.navbar-cta:hover{box-shadow:var(--shadow-md);text-decoration:none;transform:translateY(-1px)}.theme-toggle{border:1px solid var(--color-border);background:var(--color-surface);width:36px;height:36px;transition:transform var(--transition-fast), box-shadow var(--transition-fast);border-radius:50%;justify-content:center;align-items:center;font-size:1.05rem;display:flex}.theme-toggle:hover{box-shadow:var(--shadow-sm);transform:rotate(-14deg)scale(1.08)}.hero{background:linear-gradient(135deg, var(--color-primary) 0%, var(--color-accent) 100%);color:#fff;border-radius:var(--radius-xl);box-shadow:var(--shadow-lg);margin-bottom:40px;padding:64px 44px;animation:.5s both fadeInUp;position:relative;overflow:hidden}.hero-blob{filter:blur(40px);opacity:.35;pointer-events:none;background:#fff;border-radius:50%;animation:9s ease-in-out infinite float;position:absolute}.hero-blob-1{width:220px;height:220px;top:-60px;right:8%}.hero-blob-2{background:var(--color-gold-light,#fbcfe8);width:140px;height:140px;animation-delay:2s;bottom:-40px;left:10%}.hero-blob-3{width:90px;height:90px;animation-delay:4s;top:30%;left:42%}.hero-kicker{font-family:var(--font-hanzi);letter-spacing:.08em;text-transform:uppercase;background:#ffffff38;border-radius:999px;margin-bottom:16px;padding:5px 14px;font-size:.8rem;font-weight:700;display:inline-block;position:relative}.hero h1{font-size:clamp(1.7rem,3.4vw,2.6rem);font-family:var(--font-hanzi);margin:0 0 12px;font-weight:900;line-height:1.15;position:relative}.hero p{color:#ffffffe0;margin:0;font-size:1.08rem;position:relative}.level-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:20px;display:grid}.level-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);transition:transform var(--transition-med), box-shadow var(--transition-med), border-color var(--transition-fast);padding:26px;animation:.5s both fadeInUp;position:relative;overflow:hidden}.level-card:before{content:"";background:linear-gradient(135deg, var(--color-primary-soft), transparent 60%);opacity:0;transition:opacity var(--transition-med);position:absolute;inset:0}.level-card:hover{box-shadow:var(--shadow-lg);border-color:var(--color-primary);text-decoration:none;transform:translateY(-6px)scale(1.015)}.level-card:hover:before{opacity:1}.level-card-emoji{margin-bottom:10px;font-size:1.8rem;display:inline-block;position:relative}.level-card h2{color:var(--color-ink);font-family:var(--font-hanzi);margin:0 0 8px;position:relative}.level-card p{color:var(--color-ink-soft);margin:0 0 14px;font-size:.92rem;position:relative}.level-card-arrow{color:var(--color-primary);transition:transform var(--transition-fast);font-size:.85rem;font-weight:700;display:inline-block;position:relative}.level-card:hover .level-card-arrow{transform:translate(4px)}.lesson-list-page h1{font-family:var(--font-hanzi);margin-bottom:24px}.lesson-grid{grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:16px;margin-bottom:24px;display:grid}.lesson-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);transition:transform var(--transition-fast), box-shadow var(--transition-fast);color:var(--color-ink);flex-direction:column;gap:4px;padding:18px;display:flex;position:relative}.lesson-card:hover{box-shadow:var(--shadow-md);text-decoration:none;transform:translateY(-3px)}.lesson-card-locked{opacity:.55;cursor:not-allowed}.lesson-card-locked:hover{box-shadow:var(--shadow-sm);transform:none}.lesson-number{color:var(--color-primary);text-transform:uppercase;letter-spacing:.04em;font-size:.78rem;font-weight:700}.lesson-title{font-weight:600}.lesson-zh-title{font-family:var(--font-hanzi);color:var(--color-ink-soft)}.lesson-lock{position:absolute;top:14px;right:14px}.lesson-free-badge{background:var(--color-gold-light);color:var(--color-primary-dark);border-radius:999px;padding:2px 8px;font-size:.7rem;font-weight:700;position:absolute;top:14px;right:14px}.search-link{margin-top:8px}.breadcrumb{color:var(--color-muted);margin-bottom:6px;font-size:.85rem}.lesson-detail-page h1{font-family:var(--font-hanzi);margin:0 0 4px}.zh-title{font-family:var(--font-hanzi);color:var(--color-ink-soft);margin:0 0 20px;font-weight:500}.tab-bar{border-bottom:1px solid var(--color-border);flex-wrap:wrap;gap:6px;margin-bottom:24px;padding-bottom:10px;display:flex}.tab-bar button{color:var(--color-ink-soft);transition:background var(--transition-fast), color var(--transition-fast);background:0 0;border:none;border-radius:999px;padding:8px 16px;font-size:.9rem;font-weight:600}.tab-bar button:hover{background:var(--color-primary-soft);color:var(--color-primary)}.tab-bar .tab-active{background:linear-gradient(120deg, var(--color-primary), var(--color-primary-dark));color:#fff}.vocab-grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:16px;display:grid}.vocab-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);transition:transform var(--transition-fast), box-shadow var(--transition-fast);flex-direction:column;gap:6px;padding:18px;display:flex}.vocab-card:hover{box-shadow:var(--shadow-md);transform:translateY(-3px)}.vocab-card-difficult{border-color:var(--color-gold);background:linear-gradient(180deg, var(--color-gold-light) 0%, var(--color-surface) 30%)}.vocab-card-head{justify-content:space-between;align-items:baseline;display:flex}.vocab-hanzi{font-family:var(--font-hanzi);font-size:1.7rem;font-weight:700}.vocab-pos{color:var(--color-muted);background:var(--color-bg);border:1px solid var(--color-border);border-radius:999px;padding:2px 8px;font-size:.72rem}.vocab-pinyin{color:var(--color-primary);font-style:italic;font-weight:600}.vocab-meaning{font-weight:600}.vocab-example{border-top:1px dashed var(--color-border);color:var(--color-ink-soft);flex-direction:column;gap:2px;margin-top:4px;padding-top:8px;font-size:.85rem;display:flex}.vocab-example-zh{font-family:var(--font-hanzi);color:var(--color-ink)}.vocab-difficult-btn{border:1px solid var(--color-border);color:var(--color-ink-soft);transition:border-color var(--transition-fast), color var(--transition-fast), background var(--transition-fast);background:0 0;border-radius:999px;align-self:flex-start;margin-top:10px;padding:6px 14px;font-size:.8rem;font-weight:600}.vocab-difficult-btn:hover{border-color:var(--color-primary);color:var(--color-primary)}.vocab-difficult-btn.active{background:linear-gradient(120deg, var(--color-primary), var(--color-primary-dark));color:#fff;border-color:#0000}.flashcard-wrap{flex-direction:column;align-items:center;gap:20px;padding:20px 0;display:flex}.flashcard{border-radius:var(--radius-xl);background:linear-gradient(135deg, var(--color-primary) 0%, var(--color-accent) 100%);color:#fff;cursor:pointer;width:min(420px,90vw);height:240px;box-shadow:var(--shadow-lg);-webkit-user-select:none;user-select:none;transition:transform var(--transition-fast);justify-content:center;align-items:center;display:flex}.flashcard:hover{transform:translateY(-2px)scale(1.01)}.flashcard-face{text-align:center;flex-direction:column;align-items:center;gap:12px;padding:24px;display:flex}.flashcard-hanzi{font-family:var(--font-hanzi);font-size:3.2rem;font-weight:900}.flashcard-pinyin{color:#ffe4f2;font-size:1.2rem;font-style:italic}.flashcard-meaning{font-size:1.5rem;font-weight:700}.flashcard-example{font-family:var(--font-hanzi);color:#ffe4f2}.flashcard-controls{color:var(--color-ink-soft);align-items:center;gap:20px;font-weight:600;display:flex}.flashcard-controls button{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-sm);color:var(--color-ink);transition:border-color var(--transition-fast), color var(--transition-fast);padding:8px 16px;font-weight:700}.flashcard-controls button:hover{border-color:var(--color-primary);color:var(--color-primary)}.quiz-panel{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-xl);text-align:center;max-width:480px;box-shadow:var(--shadow-md);margin:0 auto;padding:32px}.quiz-progress{color:var(--color-muted);font-size:.85rem;font-weight:600}.quiz-hanzi{font-family:var(--font-hanzi);margin:4px 0;font-size:2.6rem;font-weight:800}.quiz-pinyin{color:var(--color-primary);margin-bottom:20px;font-style:italic}.quiz-options{grid-template-columns:1fr 1fr;gap:12px;display:grid}.quiz-option{background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-sm);color:var(--color-ink);transition:border-color var(--transition-fast), transform var(--transition-fast);padding:14px;font-weight:600}.quiz-option:hover{border-color:var(--color-primary);transform:translateY(-1px)}.quiz-option.correct{background:var(--color-success-soft);border-color:var(--color-success);color:var(--color-success)}.quiz-option.wrong{background:var(--color-danger-soft);border-color:var(--color-danger);color:var(--color-danger)}.quiz-next{background:linear-gradient(120deg, var(--color-primary), var(--color-primary-dark));color:#fff;border-radius:var(--radius-sm);box-shadow:var(--shadow-sm);border:none;margin-top:22px;padding:10px 22px;font-weight:700}.quiz-next:hover{box-shadow:var(--shadow-md)}.quiz-result{text-align:center;font-size:1.2rem;font-weight:700}.quiz-result button{background:linear-gradient(120deg, var(--color-primary), var(--color-primary-dark));color:#fff;border-radius:var(--radius-sm);border:none;margin-top:16px;padding:10px 22px;font-weight:700}.grammar-point,.lesson-text{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);margin-bottom:16px;padding:20px}.grammar-point h3,.lesson-text h3{font-family:var(--font-hanzi);margin:0 0 8px}.grammar-pattern{background:var(--color-gold-light);color:var(--color-primary-dark);border-radius:var(--radius-sm);margin-bottom:8px;padding:4px 10px;font-weight:700;display:inline-block}.grammar-note{color:var(--color-ink-soft);margin-bottom:10px}.grammar-point ul{flex-direction:column;gap:6px;margin:0;padding-left:18px;display:flex}.example-zh{font-family:var(--font-hanzi);font-weight:600}.example-pinyin{color:var(--color-primary);font-style:italic}.example-vi{color:var(--color-ink-soft)}.text-source{color:var(--color-muted);margin-top:-4px;font-size:.85rem}.text-line{margin:6px 0}.resource-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);margin-bottom:12px;overflow:hidden}.resource-toggle{text-align:left;background:var(--color-bg);width:100%;color:var(--color-ink);border:none;padding:14px 18px;font-weight:700}.resource-payload{white-space:pre-wrap;word-break:break-word;color:var(--color-ink-soft);border-top:1px solid var(--color-border);max-height:360px;margin:0;padding:16px 18px;font-size:.8rem;overflow:auto}.resource-body{border-top:1px solid var(--color-border);flex-direction:column;gap:8px;padding:18px;display:flex}.exercise-section{margin-bottom:18px}.exercise-section:last-child{margin-bottom:0}.exercise-section h4{font-family:var(--font-hanzi);margin:0 0 4px}.exercise-note{color:var(--color-ink-soft);margin:0 0 10px;font-size:.88rem}.exercise-item{background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-sm);margin-bottom:10px;padding:14px}.exercise-prompt{white-space:pre-line;font-family:var(--font-hanzi);margin:0 0 10px}.exercise-sample{white-space:pre-line;color:var(--color-success);margin:0;font-weight:600}.exercise-reveal-btn{background:var(--color-surface);border:1px solid var(--color-primary);color:var(--color-primary);border-radius:999px;padding:6px 14px;font-size:.82rem;font-weight:700}.exercise-reveal-btn:hover{background:var(--color-primary-soft)}.exercise-answer-detail{border-top:1px dashed var(--color-border);flex-direction:column;gap:4px;margin-top:10px;padding-top:10px;display:flex}.text-practice-before{background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-sm);margin-bottom:14px;padding:14px}.option-chip{border:1px solid var(--color-border);border-radius:999px;padding:4px 12px;font-size:.85rem}.option-chip.correct{background:var(--color-success-soft);border-color:var(--color-success);color:var(--color-success);font-weight:700}.review-page-note{color:var(--color-ink-soft)}.locked-notice{text-align:center;background:var(--color-surface);border:1px solid var(--color-gold);border-radius:var(--radius-lg);max-width:480px;box-shadow:var(--shadow-md);margin:60px auto;padding:40px}.auth-page{max-width:380px;margin:40px auto}.auth-page h1{font-family:var(--font-hanzi);text-align:center;margin-bottom:24px}.auth-form,.search-form,.admin-form{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);flex-direction:column;gap:14px;padding:28px;display:flex}.search-form,.admin-form{flex-flow:wrap;align-items:center}.auth-form label{color:var(--color-ink-soft);flex-direction:column;gap:6px;font-size:.88rem;font-weight:600;display:flex}input,select{border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);color:var(--color-ink);transition:border-color var(--transition-fast), box-shadow var(--transition-fast);padding:10px 12px;font-family:inherit;font-size:1rem}input:focus,select:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-soft);outline:none}.search-form input{flex:1;min-width:220px}button[type=submit],.admin-form button{background:linear-gradient(120deg, var(--color-primary), var(--color-primary-dark));color:#fff;border-radius:var(--radius-sm);box-shadow:var(--shadow-sm);transition:box-shadow var(--transition-fast), transform var(--transition-fast);border:none;padding:10px 20px;font-weight:700}button[type=submit]:hover,.admin-form button:hover{box-shadow:var(--shadow-md);transform:translateY(-1px)}.admin-form button.secondary{background:var(--color-surface);color:var(--color-primary);border:1px solid var(--color-primary);box-shadow:none}.admin-form button.secondary:hover{background:var(--color-primary-soft);transform:none}.form-error{color:var(--color-danger);font-size:.88rem;font-weight:600}.form-success{color:var(--color-success);font-size:.88rem;font-weight:600}.admin-table{border-collapse:collapse;background:var(--color-surface);border-radius:var(--radius-md);width:100%;box-shadow:var(--shadow-sm);margin-top:24px;overflow:hidden}.admin-table th,.admin-table td{text-align:left;border-bottom:1px solid var(--color-border);padding:12px 16px;font-size:.9rem}.admin-table th{background:var(--color-bg);color:var(--color-ink-soft);text-transform:uppercase;letter-spacing:.04em;font-size:.72rem;font-weight:700}.admin-table button{border:1px solid var(--color-border);border-radius:var(--radius-sm);background:0 0;padding:6px 12px;font-weight:600}.admin-table button:hover{border-color:var(--color-primary);color:var(--color-primary)}@media (prefers-reduced-motion:reduce){*{transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}}@media (width<=640px){.app-main{padding:20px 16px 48px}.hero{padding:40px 26px}.quiz-options{grid-template-columns:1fr}}
