@import "https://fonts.googleapis.com/css2?family=Baloo+2:wght@500;600;700;800&display=swap";.app-shell{background:var(--color-bg);min-height:100dvh;padding-top:var(--safe-top);padding-left:var(--safe-left);padding-right:var(--safe-right);padding-bottom:var(--safe-bottom);flex-direction:column;display:flex}.app-header{-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--color-border-light);z-index:50;background:#fff5eeeb;justify-content:space-between;align-items:center;height:48px;padding:0 16px;display:flex;position:sticky;top:0}.header-left{align-items:center;gap:8px;display:flex}.header-right{align-items:center;gap:4px;display:flex}.header-logo{cursor:pointer;background:0 0;width:auto;height:44px}.btn-back{cursor:pointer;color:var(--color-dark);background:0 0;border:none;justify-content:center;align-items:center;min-width:44px;min-height:44px;padding:4px;font-size:20px;display:flex}.btn-back:hover{color:var(--color-primary)}.header-btn{cursor:pointer;color:var(--color-dark);min-height:36px;font-size:13px;font-weight:500;font-family:var(--font-body);background:0 0;border:1px solid #0000;border-radius:20px;align-items:center;gap:5px;padding:5px 10px;transition:background .15s,border-color .15s;display:inline-flex}.header-btn:hover{background:var(--color-primary-ghost)}.header-btn--admin{color:var(--color-primary);border-color:var(--color-primary)}.header-btn--admin:hover{background:var(--color-primary-ghost)}.header-btn-label{white-space:nowrap;text-overflow:ellipsis;max-width:80px;overflow:hidden}.header-dropdown-wrap{position:relative}.header-dropdown{background:var(--color-surface);border:1px solid var(--color-border);box-shadow:var(--shadow-lg);z-index:100;border-radius:10px;min-width:160px;padding:4px;position:absolute;top:42px;right:0;overflow:hidden}.dropdown-option{text-align:left;cursor:pointer;width:100%;color:var(--color-dark);font-size:13px;font-family:var(--font-body);background:0 0;border:none;border-radius:6px;padding:8px 12px;display:block}.dropdown-option:hover{background:var(--color-primary-ghost)}.dropdown-option--active{color:var(--color-primary);font-weight:600}.app-main{flex:1;width:100%;max-width:780px;margin:0 auto;padding:16px}@media (width<=480px){.app-main{padding:8px}.app-header{height:44px;padding:0 8px}.header-logo{height:40px}.header-btn-label{display:none}.header-btn{padding:5px 8px}.header-dropdown{right:-8px}}.loading-screen{background:#fff5ee;justify-content:center;align-items:center;min-height:100dvh;display:flex}.loading-logo{width:120px;height:auto;animation:1.2s ease-in-out infinite loadingPulse}@keyframes loadingPulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.85;transform:scale(1.08)}}@media (prefers-reduced-motion:reduce){.loading-logo{animation:none}}.intro-stage{z-index:1000;touch-action:pan-y;-webkit-user-select:none;user-select:none;cursor:grab;background:#1a1512;position:fixed;inset:0;overflow:hidden}.intro-stage.dragging{cursor:grabbing}.intro-slides{will-change:transform;height:100%;transition:transform .45s cubic-bezier(.4,0,.2,1);display:flex;position:absolute;inset:0}.intro-stage.dragging .intro-slides{transition:none}.intro-slide{flex:0 0 100%;height:100%;position:relative;overflow:hidden}.intro-slide img{object-fit:cover;width:100%;height:100%;display:block;position:absolute;inset:0}.intro-shade{background:linear-gradient(#140a0000 0%,#140a0059 45%,#140a00d1 100%);height:62%;position:absolute;inset:auto 0 0}.intro-copy{padding:24px clamp(22px, 7vw, 36px) calc(clamp(96px, 18vw, 120px) + env(safe-area-inset-bottom));color:#fff;z-index:2;pointer-events:none;position:absolute;bottom:0;left:0;right:0}.intro-en{font-family:var(--font-heading-en);letter-spacing:-.01em;max-width:14ch;font-size:clamp(26px,8.5vw,40px);font-weight:800;line-height:1.15}.intro-cn{font-family:var(--font-heading-zh);color:var(--color-primary);margin-top:8px;font-size:clamp(18px,5.6vw,26px);font-weight:700}.intro-sub{font-family:var(--font-body);color:#ffffffeb;max-width:34ch;margin-top:14px;font-size:clamp(14px,4.4vw,17px);font-weight:400;line-height:1.55}.intro-skip{top:calc(14px + env(safe-area-inset-top));z-index:5;-webkit-backdrop-filter:blur(6px);color:#fff;font-family:var(--font-body);cursor:pointer;background:#00000052;border:1px solid #ffffff40;border-radius:999px;padding:7px 16px;font-size:13px;font-weight:600;position:absolute;right:18px}.intro-progress{z-index:6;background:#ffffff26;height:3px;position:absolute;top:0;left:0;right:0}.intro-progress i{background:var(--color-primary);height:100%;transition:width .45s cubic-bezier(.4,0,.2,1);display:block}.intro-dots{bottom:calc(16px + env(safe-area-inset-bottom));z-index:3;pointer-events:none;justify-content:center;gap:7px;padding:10px;display:flex;position:absolute;left:0;right:0}.intro-dot{background:#ffffff59;border-radius:99px;width:7px;height:7px;transition:all .3s}.intro-dot.on{background:var(--color-primary);width:22px}.intro-next{right:clamp(22px,7vw,36px);bottom:calc(clamp(20px, 5.5vw, 28px) + env(safe-area-inset-bottom));z-index:4;background:var(--color-primary);color:#fff;font-family:var(--font-heading-en);cursor:pointer;border:none;border-radius:999px;padding:14px 30px;font-size:16px;font-weight:800;position:absolute;box-shadow:0 8px 24px #ff8c4266}.intro-next.glow{color:var(--color-primary-hover);background:#fff;box-shadow:0 8px 28px #ffffff59}@media (width>=768px){.intro-en{font-size:clamp(34px,6vw,48px)}.intro-copy{max-width:640px;margin:0 auto;padding-left:max(36px,8vw);padding-right:max(36px,8vw)}}.btn{justify-content:center;align-items:center;gap:var(--space-2);font-family:var(--font-heading-en);border-radius:var(--radius-md);cursor:pointer;transition:all .25s var(--spring-gentle);white-space:nowrap;min-height:var(--tap-target);border:2px solid #0000;font-weight:600;text-decoration:none;display:inline-flex}.btn:focus-visible{box-shadow:var(--shadow-focus)}.btn--xs{border-radius:6px;min-height:28px;padding:2px 8px;font-size:12px}.btn--sm{padding:var(--space-1) var(--space-3);font-size:var(--text-sm);min-height:36px}.btn--md{padding:var(--space-2) var(--space-5);font-size:var(--text-base)}.btn--lg{padding:var(--space-3) var(--space-8);font-size:var(--text-lg)}.btn--primary{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}.btn--primary:hover:not(:disabled){background:var(--color-primary-hover);border-color:var(--color-primary-hover);box-shadow:var(--shadow-md);transform:translateY(-1px)}.btn--primary:active:not(:disabled){transform:scale(.96)}.btn--secondary{background:var(--color-surface);color:var(--color-primary);border-color:var(--color-primary)}.btn--secondary:hover:not(:disabled){background:var(--color-primary-ghost)}.btn--secondary:active:not(:disabled){transform:scale(.96)}.btn--ghost{color:var(--color-dark-secondary);background:0 0;border-color:#0000}.btn--ghost:hover:not(:disabled){background:var(--color-primary-ghost);color:var(--color-primary)}.btn--ghost:active:not(:disabled){transform:scale(.96)}.btn--danger{background:var(--color-wrong);color:#fff;border-color:var(--color-wrong)}.btn--danger:hover:not(:disabled){opacity:.9}.btn--danger:active:not(:disabled){transform:scale(.96)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn--full{width:100%}.btn--loading .btn-content{opacity:.7}.btn-spinner{border:2px solid;border-right-color:#0000;border-radius:50%;width:16px;height:16px;animation:.6s linear infinite pulse}.gramlin{flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.gramlin-img{object-fit:contain;width:100%;height:100%}.gramlin--sm{width:48px;height:48px}.gramlin--md{width:80px;height:80px}.gramlin--lg{width:128px;height:128px}.gramlin--xl{width:192px;height:192px}.gramlin--animated .gramlin-img{animation:gramlinBounce var(--duration-slow) var(--ease-bounce)}@media (prefers-reduced-motion:reduce){.gramlin--animated .gramlin-img{animation:none}}.auth-overlay{z-index:100;padding:var(--space-4);-webkit-backdrop-filter:blur(10px);animation:auth-fade .25s var(--ease-out);background:#2d1b1073;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}@keyframes auth-fade{0%{opacity:0}to{opacity:1}}.auth-card{background:var(--color-bg-alt);border:1px solid var(--color-border);width:100%;max-width:420px;max-height:min(90dvh,720px);padding:var(--space-8) var(--space-6) var(--space-6);animation:auth-rise .3s var(--ease-out);border-radius:24px;position:relative;overflow-y:auto;box-shadow:0 24px 64px #2d1b1038}@keyframes auth-rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}.auth-close{border:1px solid var(--color-border);background:var(--color-surface);width:34px;height:34px;color:var(--color-dark-secondary);cursor:pointer;transition:all var(--duration-fast) var(--ease-out);border-radius:50%;justify-content:center;align-items:center;display:flex;position:absolute;top:14px;right:14px}.auth-close:hover{background:var(--color-primary-ghost);color:var(--color-primary);border-color:var(--color-primary)}.auth-close:disabled{opacity:.4;cursor:default}.auth-head{text-align:center;margin-bottom:var(--space-5);flex-direction:column;align-items:center;display:flex}.auth-head .gramlin{width:72px;height:72px;margin-bottom:var(--space-3)}.auth-head h2{font-family:var(--font-heading-en);font-size:var(--text-2xl);color:var(--color-dark);margin:0 0 var(--space-1);letter-spacing:-.01em;font-weight:800}.auth-sub{font-size:var(--text-sm);color:var(--color-muted);line-height:var(--leading-normal);max-width:320px;margin:0}.auth-tabs{gap:var(--space-1);border-radius:var(--radius-full);margin-bottom:var(--space-5);background:#e8d5c466;padding:4px;display:flex}.auth-tab{color:var(--color-muted);font-weight:700;font-size:var(--text-sm);font-family:var(--font-body);border-radius:var(--radius-full);cursor:pointer;transition:all var(--duration-fast) var(--ease-out);background:0 0;border:none;flex:1;padding:9px 12px}.auth-tab.is-active{background:var(--color-surface);color:var(--color-dark);box-shadow:var(--shadow-sm)}.auth-form{gap:var(--space-3);flex-direction:column;display:flex}.auth-label{font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.06em;color:var(--color-dark-secondary);margin-bottom:-4px;font-weight:700}.auth-input{border-radius:var(--radius-md);border:1.5px solid var(--color-border);background:var(--color-surface);width:100%;color:var(--color-dark);font-family:var(--font-body);font-size:var(--text-base);transition:border-color var(--duration-fast) var(--ease-out), box-shadow var(--duration-fast) var(--ease-out);padding:12px 14px}.auth-input:focus{border-color:var(--color-primary);outline:none;box-shadow:0 0 0 3px #ff8c422e}.auth-input::placeholder{color:var(--color-muted);opacity:.7}.auth-users{gap:var(--space-2);margin-bottom:var(--space-1);flex-wrap:wrap;display:flex}.auth-user-chip{border-radius:var(--radius-full);border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-dark-secondary);font-size:var(--text-sm);font-weight:600;font-family:var(--font-body);cursor:pointer;transition:all var(--duration-fast) var(--ease-out);align-items:center;gap:8px;padding:6px 12px 6px 6px;display:inline-flex}.auth-user-chip:hover{border-color:var(--color-primary);color:var(--color-primary)}.auth-user-avatar{background:var(--color-primary-ghost);width:26px;height:26px;color:var(--color-primary);border-radius:50%;justify-content:center;align-items:center;font-size:.72rem;font-weight:800;display:inline-flex}.auth-hint{font-size:var(--text-sm);color:var(--color-muted);line-height:var(--leading-normal);margin:0}.auth-error{color:var(--color-wrong);font-size:var(--text-sm);text-align:center;padding:var(--space-2);border-radius:var(--radius-sm);background:#e070701f;margin:0}.auth-notice{color:var(--color-correct);font-size:var(--text-sm);text-align:center;padding:var(--space-2);border-radius:var(--radius-sm);background:#4caf501f;margin:0}.auth-links{margin-top:var(--space-4);justify-content:center;display:flex}.auth-link{padding:var(--space-1) var(--space-2);color:var(--color-primary);font-size:var(--text-sm);cursor:pointer;font-weight:600;font-family:var(--font-body);background:0 0;border:none;text-decoration:underline}.auth-link:hover{opacity:.8}.auth-legal{margin-top:var(--space-4);text-align:center;font-size:var(--text-xs);color:var(--color-muted)}.auth-legal a{color:var(--color-primary);text-decoration:underline}@media (width<=480px){.auth-card{padding:var(--space-6) var(--space-4) var(--space-5);border-radius:20px;max-height:94dvh}}.welcome-screen{width:100%;max-width:100%;overflow-x:hidden}.landing-hero{text-align:center;padding:var(--space-16) var(--space-4) var(--space-12);justify-content:center;align-items:center;gap:var(--space-6);flex-direction:column;min-height:80dvh;display:flex}.hero-gramlin{width:180px;height:180px;margin-bottom:var(--space-2)}.hero-logo{width:min(420px,88vw);height:auto;margin-bottom:var(--space-2);pointer-events:none;-webkit-user-select:none;user-select:none}.catchphrase-carousel{justify-content:center;align-items:center;min-width:280px;height:1.75em;display:flex;position:relative;overflow:hidden}.catchphrase-text{color:var(--color-muted);font-size:var(--text-lg);white-space:nowrap;transition:opacity .4s;position:absolute}.catchphrase-text.visible{opacity:1}.catchphrase-text.hidden{opacity:0}.hero-cta{margin-top:var(--space-4);font-size:var(--text-xl);padding:var(--space-4) var(--space-10)}.returning-hint{color:var(--color-muted);font-size:var(--text-sm);margin:0}.module-gallery-section{padding:var(--space-16) 0}.section-heading{font-family:var(--font-heading-en);font-size:var(--text-3xl);color:var(--color-dark);text-align:center;margin:0 0 var(--space-2);font-weight:700}.section-sub{text-align:center;color:var(--color-muted);font-size:var(--text-lg);margin:0 0 var(--space-8);padding:0 var(--space-4)}.gallery-wrap{max-width:var(--max-width);padding:0 var(--space-4);align-items:center;margin:0 auto;display:flex;position:relative}.module-gallery{gap:var(--space-4);scroll-snap-type:x mandatory;scrollbar-width:none;padding:var(--space-2) var(--space-1);-webkit-overflow-scrolling:touch;cursor:grab;touch-action:pan-y;display:flex;overflow-x:auto}.module-gallery.is-dragging,.module-gallery.is-dragging *{-webkit-user-select:none;user-select:none;cursor:grabbing!important}.module-gallery::-webkit-scrollbar{display:none}.gallery-arrow{border-radius:var(--radius-full);border:1px solid var(--color-border);background:var(--color-surface);width:44px;height:44px;color:var(--color-dark);cursor:pointer;transition:all var(--duration-fast) var(--ease-out);z-index:1;flex-shrink:0;justify-content:center;align-items:center;display:flex}.gallery-arrow:hover{background:var(--color-primary-ghost);border-color:var(--color-primary);color:var(--color-primary)}.gallery-arrow--left{margin-right:var(--space-2)}.gallery-arrow--right{margin-left:var(--space-2)}.module-card{scroll-snap-align:start;border-radius:var(--radius-md);background:var(--color-surface);border:1px solid var(--color-border-light);width:260px;transition:transform var(--duration-normal) var(--ease-out), box-shadow var(--duration-normal) var(--ease-out);flex-direction:column;flex-shrink:0;display:flex;overflow:hidden}.module-card:hover{box-shadow:var(--shadow-lg);transform:translateY(-4px)}.module-card-cover{aspect-ratio:3/4;background:var(--color-bg-alt);flex-shrink:0;overflow:hidden}.module-card-cover img{object-fit:cover;pointer-events:none;width:100%;height:100%;display:block}.module-card-body{padding:var(--space-4);flex-direction:column;flex:1;display:flex}.module-card-body h3{font-family:var(--font-heading-en);font-size:var(--text-base);color:var(--color-dark);margin:0 0 var(--space-1);min-height:2.6em;font-weight:700;line-height:1.3}.module-card-body p{font-size:var(--text-sm);color:var(--color-muted);line-height:var(--leading-normal);-webkit-line-clamp:2;-webkit-box-orient:vertical;flex:1;margin:0;display:-webkit-box;overflow:hidden}.how-it-works{padding:var(--space-16) var(--space-4);background:var(--color-bg-alt)}.steps-grid{gap:var(--space-6);max-width:var(--max-width);margin:var(--space-8) auto 0;grid-template-columns:repeat(3,1fr);display:grid}.step-card{text-align:center;align-items:center;gap:var(--space-3);padding:var(--space-6) var(--space-4);flex-direction:column;display:flex}.step-card .gramlin{width:96px;height:96px}.step-number{border-radius:var(--radius-full);background:var(--color-primary);color:#fff;width:32px;height:32px;font-weight:700;font-size:var(--text-sm);justify-content:center;align-items:center;display:flex}.step-card h3{font-family:var(--font-heading-en);font-size:var(--text-xl);color:var(--color-dark);margin:0;font-weight:700}.step-card p{font-size:var(--text-sm);color:var(--color-muted);line-height:var(--leading-relaxed);max-width:240px;margin:0}.bottom-cta{text-align:center;padding:var(--space-16) var(--space-4);align-items:center;gap:var(--space-4);flex-direction:column;display:flex}.bottom-cta h2{font-family:var(--font-heading-en);font-size:var(--text-3xl);color:var(--color-dark);margin:0;font-weight:700}.bottom-cta p{color:var(--color-muted);font-size:var(--text-lg);margin:0}.login-overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:1000;padding:var(--space-4);animation:overlay-in .2s var(--ease-out);background:#2d1b1066;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}@keyframes overlay-in{0%{opacity:0}to{opacity:1}}.login-modal{background:var(--color-surface);border-radius:var(--radius-lg);padding:var(--space-8) var(--space-6);gap:var(--space-3);width:100%;max-width:400px;animation:modal-in .3s var(--spring-gentle);flex-direction:column;max-height:90dvh;display:flex;position:relative;overflow-y:auto}@keyframes modal-in{0%{opacity:0;transform:translateY(16px)scale(.97)}to{opacity:1;transform:translateY(0)scale(1)}}.modal-close{top:var(--space-3);right:var(--space-3);border-radius:var(--radius-full);width:36px;height:36px;color:var(--color-muted);cursor:pointer;transition:all var(--duration-fast) var(--ease-out);background:0 0;border:none;justify-content:center;align-items:center;display:flex;position:absolute}.modal-close:hover{background:var(--color-bg-alt);color:var(--color-dark)}.login-modal h2{font-family:var(--font-heading-en);font-size:var(--text-xl);text-align:center;color:var(--color-dark);margin:0}.login-modal .input{width:100%;padding:var(--space-3) var(--space-4);font-size:var(--text-base);font-family:var(--font-body);border:2px solid var(--color-border-light);border-radius:var(--radius-md);background:var(--color-bg-alt);color:var(--color-dark);transition:border-color var(--duration-fast) var(--ease-out);box-sizing:border-box}.login-modal .input:focus{border-color:var(--color-primary);box-shadow:var(--shadow-focus);outline:none}.login-modal .input::placeholder{color:var(--color-muted)}.login-error{color:var(--color-wrong);font-size:var(--text-sm);text-align:center;padding:var(--space-1);background:var(--color-wrong-bg);border-radius:var(--radius-sm);margin:0}.login-notice{color:var(--color-success,#2e7d32);font-size:var(--text-sm);text-align:center;padding:var(--space-1);border-radius:var(--radius-sm);background:#2e7d3214;margin:0}.login-hint{color:var(--color-muted);font-size:var(--text-sm);text-align:center;margin:0}.login-links{justify-content:center;gap:var(--space-2);flex-wrap:wrap;display:flex}.login-link{padding:var(--space-1) var(--space-2);color:var(--color-primary);font-size:var(--text-sm);cursor:pointer;background:0 0;border:none;text-decoration:underline}.login-link:hover{opacity:.8}.login-link:disabled{opacity:.5;cursor:default}.pin-label{text-align:center;color:var(--color-dark-secondary);font-size:var(--text-sm);margin:0}.pin-form{gap:var(--space-3);flex-direction:column;display:flex}.user-list{gap:var(--space-1);flex-direction:column;max-height:240px;display:flex;overflow-y:auto}.user-chip{align-items:center;gap:var(--space-3);padding:var(--space-3);border:1px solid var(--color-border-light);border-radius:var(--radius-md);background:var(--color-surface);cursor:pointer;transition:all var(--duration-fast) var(--ease-out);text-align:left;font-family:var(--font-body);display:flex}.user-chip:hover{background:var(--color-primary-ghost);border-color:var(--color-primary)}.user-avatar{border-radius:var(--radius-full);background:var(--color-primary);color:#fff;width:36px;height:36px;font-weight:700;font-size:var(--text-lg);flex-shrink:0;justify-content:center;align-items:center;display:flex}.user-name{font-size:var(--text-base);font-weight:500}@media (prefers-reduced-motion:reduce){.catchphrase-text{transition:none}.catchphrase-text.hidden{display:none}.login-overlay,.login-modal{animation:none}.module-card{transition:none}}@media (width<=900px){.steps-grid{gap:var(--space-4);grid-template-columns:1fr;max-width:420px}.step-card{text-align:left;gap:var(--space-4);padding:var(--space-4);flex-direction:row}.step-card .gramlin{flex-shrink:0;width:64px;height:64px}.step-number{display:none}.step-card p{max-width:none}.gallery-arrow{display:none}}@media (width<=480px){.landing-hero{padding:var(--space-12) var(--space-4) var(--space-8);gap:var(--space-4);min-height:70dvh}.hero-gramlin{width:140px;height:140px}.hero-logo{width:min(340px,88vw)}.module-card{width:200px}.section-heading{font-size:var(--text-2xl)}.section-sub{font-size:var(--text-base)}.bottom-cta h2{font-size:var(--text-2xl)}.bottom-cta p{font-size:var(--text-base)}.login-modal{padding:var(--space-6) var(--space-4);max-width:100%}}.lp__tabs{border-bottom:1px solid var(--color-border-light);margin-bottom:var(--space-2);gap:0;display:flex}.lp__tab{text-align:center;cursor:pointer;color:var(--color-muted);font-size:.72rem;font-weight:600;font-family:var(--font-body);background:0 0;border:none;border-bottom:2px solid #0000;flex:1;padding:10px 6px;transition:all .15s}.lp__tab:hover{color:var(--color-primary)}.lp__tab--active{color:var(--color-primary);border-bottom-color:var(--color-primary)}.lp__tab--locked{opacity:.4;cursor:not-allowed;color:var(--color-muted)}.lp__tab--locked:hover{color:var(--color-muted)}.lp__review-stack{margin-top:var(--space-3);background:var(--color-review-bg);border-radius:var(--radius-lg);color:#92400e;cursor:pointer;border:1px solid #fde68a;justify-content:space-between;align-items:center;padding:12px 14px;font-size:.78rem;font-weight:600;display:flex}.lp__review-stack:hover{background:#fef3c7}.lp__review-count{background:var(--color-review);color:#fff;border-radius:50%;justify-content:center;align-items:center;width:24px;height:24px;font-size:.65rem;font-weight:800;display:flex}.lp{gap:var(--space-3);padding:var(--space-2) 0;flex-direction:column;display:flex}.lp__banner{align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-4);color:var(--color-dark);flex-wrap:wrap;font-size:.85rem;display:flex}.lp__banner-greeting{white-space:nowrap;font-weight:700}.lp__banner-sub{color:var(--color-muted);white-space:nowrap}.lp__banner-stats{color:var(--color-muted);white-space:nowrap;align-items:center;gap:4px;margin-left:auto;font-size:.78rem;display:flex}.lp__grid-wrapper{align-items:stretch;display:flex;position:relative;overflow:visible}.lp__grid-arrow{z-index:10;background:var(--color-surface);border:1px solid var(--color-border);width:32px;height:32px;box-shadow:var(--shadow-sm);cursor:pointer;color:var(--color-dark);opacity:0;border-radius:50%;justify-content:center;align-items:center;transition:opacity .2s;display:flex;position:absolute;top:50%;transform:translateY(-50%)}.lp__grid-wrapper:hover .lp__grid-arrow{opacity:1}.lp__grid-arrow--left{left:-4px}.lp__grid-arrow--right{right:-4px}.lp__grid-arrow:hover{background:var(--color-primary-ghost);color:var(--color-primary)}.lp__grid{gap:var(--space-4);scroll-snap-type:x mandatory;scrollbar-width:none;padding:var(--space-1);cursor:grab;flex:1;align-items:stretch;min-height:clamp(460px,100dvh - 170px,1100px);display:flex;overflow-x:auto}.lp__grid.is-dragging,.lp__grid.is-dragging *{-webkit-user-select:none;user-select:none;cursor:grabbing!important}.lp__grid::-webkit-scrollbar{display:none}.lp__card{cursor:pointer;scroll-snap-align:start;background:#fef9f0;border:2px solid #f0e6d3;border-radius:20px;flex-direction:column;flex:0 0 280px;transition:transform .2s,box-shadow .2s;display:flex;position:relative;overflow:hidden;box-shadow:0 4px 16px #0000000f}.lp__card:hover{transform:translateY(-3px);box-shadow:0 8px 28px #0000001a}.lp__card--locked{opacity:.72}.lp__card:focus-visible{outline:3px solid var(--color-primary);outline-offset:3px}.lp__card--done{border-color:var(--color-correct)}.lp__card--progress{border-color:var(--color-primary)}.lp__collapsed{flex-direction:column;flex:1;min-height:0;display:flex}.lp__card--open .lp__collapsed{display:none}.lp__img-wrap{aspect-ratio:4/3;background:#e8dcc8;flex:auto;min-height:0;position:relative;overflow:hidden}.lp__img{object-fit:cover;pointer-events:none;width:100%;height:100%;transition:transform .3s;display:block}.lp__card:hover .lp__img{transform:scale(1.04)}.lp__badge{color:#fff;border-radius:10px;padding:2px 10px;font-size:.68rem;font-weight:700;position:absolute;top:8px;right:8px}.lp__badge--done{background:var(--color-correct)}.lp__badge--progress{background:var(--color-primary)}.lp__badge--planned{background:#6f6258}.lp__locked-overlay{color:#fff;background:#00000059;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.lp__card-body{flex-shrink:0;padding:12px 14px 14px}.lp__card-title{color:#5c3d2e;margin-bottom:4px;font-size:.95rem;font-weight:700}.lp__card-desc{color:#a08870;-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:.72rem;line-height:1.4;display:-webkit-box;overflow:hidden}.lp__panel{flex-direction:column;flex:1;min-height:300px;max-height:clamp(300px,100dvh - 230px,1040px);padding:16px 14px 14px;display:flex}.lp__panel-drag{cursor:pointer;background:#e0d4c0;border-radius:2px;flex-shrink:0;width:28px;height:4px;margin:0 auto 12px}.lp__panel-title{color:#5c3d2e;margin-bottom:8px;font-size:1rem;font-weight:700}.lp__phases{flex-direction:column;flex:1;gap:3px;min-height:0;display:flex;overflow-y:auto}.lp__phase{color:#3d2818;cursor:pointer;text-align:left;width:100%;font-size:.76rem;font-family:var(--font-body);background:#fff;border:1px solid #f0e6d3;border-radius:8px;align-items:center;gap:8px;padding:8px 10px;transition:background .15s;display:flex}.lp__phase:hover:not(.lp__phase--locked):not(.lp__phase--done){background:#fdf7ed}.lp__phase--done{opacity:.55}.lp__phase--locked{opacity:.5;cursor:default;pointer-events:none}.lp__phase--planned{background:#f7f3ec}.lp__phase-num{background:var(--color-primary-ghost);width:20px;height:20px;color:var(--color-primary);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:.65rem;font-weight:700;display:flex}.lp__phase--done .lp__phase-num{background:var(--color-correct-bg)}.lp__phase-name{flex:1;font-weight:500}.lp__phase-arrow{color:var(--color-muted);transition:transform .15s}.lp__phase:hover .lp__phase-arrow{transform:translate(2px)}.lp__phase-status{color:var(--color-muted);white-space:nowrap;font-size:.62rem;font-weight:700}.lp__panel-cta{justify-content:center;padding-top:10px;display:flex}.lp__pill-btn{background:var(--color-primary);color:#fff;cursor:pointer;font-size:.78rem;font-weight:700;font-family:var(--font-body);border:none;border-radius:18px;padding:8px 22px}.lp__pill-btn:hover{background:var(--color-primary-hover)}.lp__pill-btn:disabled{cursor:default;background:#8a7f75}.lp__mistakes-cta{padding:var(--space-1) 0;justify-content:center;display:flex}@media (width<=768px){.lp__grid-arrow{display:none}.lp__card{flex:0 0 80vw}}@media (width<=480px){.lp{gap:var(--space-2)}.lp__banner{padding:var(--space-1) var(--space-2);font-size:.78rem}.lp__banner-sub{display:none}.lp__card{flex:0 0 82vw}}.progress-bar{width:100%}.progress-header{margin-bottom:var(--space-1);justify-content:space-between;align-items:center;display:flex}.progress-label{font-size:var(--text-sm);color:var(--color-dark-secondary);font-weight:500}.progress-pct{font-size:var(--text-xs);color:var(--color-muted);font-family:var(--font-mono)}.progress-track{background:var(--color-border-light);border-radius:var(--radius-full);width:100%;overflow:hidden}.progress-bar--sm .progress-track{height:6px}.progress-bar--md .progress-track{height:10px}.progress-fill{border-radius:var(--radius-full);height:100%;transition:width var(--duration-slow) var(--ease-out)}.progress-fill--primary{background:var(--color-primary)}.progress-fill--correct{background:var(--color-correct)}.progress-fill--wrong{background:var(--color-wrong)}.module-screen{padding-bottom:40px}.ms-header{align-items:center;gap:16px;margin-bottom:24px;display:flex}.ms-header h2{margin:0 0 4px;font-size:1.3rem;font-weight:700}.ms-header p{color:var(--gl-text-secondary,#888);margin:0;font-size:.85rem}.ms-phase-list{flex-direction:column;gap:8px;margin-top:16px;display:flex}.ms-phase-item{background:var(--gl-bg,#fff5ee);border:1px solid #0000;border-radius:12px;justify-content:space-between;align-items:center;gap:12px;padding:16px;transition:all .15s;display:flex}.ms-phase-item:hover{border-color:var(--gl-primary,#ff8c42);background:#ff8c420d}.ms-phase-item.locked{opacity:.5;background:#f5f0ea}.ms-phase-item.locked:hover{border-color:#0000}.ms-phase-item.done{background:#e8f5e9}.ms-phase-info{align-items:center;gap:12px;display:flex}.ms-phase-num{background:var(--gl-primary,#ff8c42);color:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;font-size:13px;font-weight:700;display:flex}.ms-phase-num-locked{background:#ccc}.ms-phase-num-locked:after{content:"";border:2px solid #0000;border-color:#0000 #0000 #fff #fff;border-radius:50%;width:10px;height:10px;margin-top:-2px;display:block;transform:rotate(-45deg)}.ms-phase-num-done{background:#4caf50}.ms-phase-num-done:after{content:"";border:2px solid #fff;border-width:0 2px 2px 0;width:6px;height:10px;margin-top:-2px;display:block;transform:rotate(45deg)}.ms-phase-info strong{color:var(--gl-text,#2d1b10);font-size:.95rem;display:block}.ms-phase-sub{color:var(--gl-text-secondary,#888);margin:2px 0 0;font-size:.78rem}.ms-phase-action{flex-shrink:0}.ms-stars{color:#f5a623;font-size:13px}.ms-locked{color:#999;font-size:.8rem;font-weight:500}.mc-question-card{background:var(--color-surface);border:2px solid var(--color-border-light);border-radius:var(--radius-lg);padding:var(--space-6);transition:border-color var(--duration-normal)}.mc-question-card.card--correct{border-color:var(--color-correct)}.mc-question-card.card--wrong{border-color:var(--color-wrong);animation:shake var(--duration-normal) var(--ease-out)}.mc-question-actions{margin-top:var(--space-6);justify-content:center;display:flex}@media (width<=480px){.mc-question-card{padding:var(--space-4)}.question-text{font-size:var(--text-base)}.option-btn{padding:var(--space-2) var(--space-3)}}.bb-question-card{background:var(--color-surface);border:2px solid var(--color-border-light);border-radius:var(--radius-lg);padding:var(--space-6);transition:border-color var(--duration-normal)}.bb-question-card.card--correct{border-color:var(--color-correct)}.bb-question-card.card--wrong{border-color:var(--color-wrong);animation:shake var(--duration-normal) var(--ease-out)}.bb-memory-progress{align-items:center;gap:var(--space-2);margin-bottom:var(--space-5);color:var(--color-muted);letter-spacing:.08em;font-size:.68rem;font-weight:800;display:flex}.bb-memory-progress span:nth-child(odd){border-radius:999px;padding:4px 8px}.bb-memory-progress .is-active{color:var(--color-primary);background:var(--color-primary-ghost)}.bb-memory-progress .is-complete{color:var(--color-correct)}.bb-scenario-label,.bb-bank-label{color:var(--color-muted);letter-spacing:.08em;text-transform:uppercase;font-size:.7rem;font-weight:800}.bb-scenario,.bb-study-instruction{margin:var(--space-1) 0 var(--space-4);color:var(--color-dark-secondary);font-size:var(--text-sm);line-height:var(--leading-relaxed)}.bb-study-sentence,.bb-memorize-sentence{padding:var(--space-5);border:2px solid var(--color-border-light);border-radius:var(--radius-md);background:var(--color-bg-alt);color:var(--color-dark);font-size:var(--text-lg);margin:0;line-height:1.9}.bb-study-sentence{border-left:5px solid var(--color-primary)}.bb-mem-text{color:var(--color-dark)}.bb-mem-blank{vertical-align:baseline;border:2px dashed var(--color-primary);border-radius:var(--radius-sm);background:var(--color-primary-ghost);min-width:5rem;min-height:2.35rem;color:var(--color-primary);cursor:pointer;font-family:var(--font-body);font-size:var(--text-base);transition:background var(--duration-fast), border-color var(--duration-fast), color var(--duration-fast);justify-content:center;align-items:center;margin:0 4px;padding:3px 10px;font-weight:700;line-height:1.2;display:inline-flex}.bb-mem-blank:hover:not(:disabled),.bb-mem-blank--active{background:var(--color-primary);color:#fff;border-style:solid}.bb-mem-blank--active{box-shadow:0 0 0 3px var(--color-primary-ghost)}.bb-mem-blank--correct{border-color:var(--color-correct);background:var(--color-correct-bg);color:var(--color-correct)}.bb-mem-blank--wrong{border-color:var(--color-wrong);background:var(--color-wrong-bg);color:var(--color-wrong)}.bb-choice-panel{margin-top:var(--space-4)}.bb-bank-label{margin-bottom:var(--space-2)}.bb-bank{gap:var(--space-2);flex-wrap:wrap;display:flex}.bb-bank-block{min-height:var(--tap-target);padding:var(--space-2) var(--space-3);border:2px solid var(--color-border-light);border-radius:var(--radius-md);background:var(--color-surface);color:var(--color-dark);cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);transition:transform var(--duration-fast), border-color var(--duration-fast), background var(--duration-fast)}.bb-bank-block:hover,.bb-bank-block--chosen{border-color:var(--color-primary);background:var(--color-primary-ghost);transform:translateY(-1px)}.bb-actions{margin-top:var(--space-5);justify-content:center;display:flex}@media (width<=480px){.bb-question-card{padding:var(--space-4)}.bb-memory-progress{gap:4px}.bb-memory-progress span:nth-child(odd){padding-inline:4px}.bb-study-sentence,.bb-memorize-sentence{padding:var(--space-4);font-size:var(--text-base);line-height:1.85}.bb-mem-blank{min-width:4.25rem;min-height:2rem;font-size:var(--text-sm);padding-inline:7px}.bb-bank-block{flex:1 1 calc(50% - var(--space-2))}.bb-actions .btn{width:100%}}.lesson-screen{max-width:720px;padding-bottom:var(--space-8);flex-direction:column;min-height:100%;margin:0 auto;display:flex}.lesson-progress-header{margin-bottom:var(--space-2);justify-content:space-between;align-items:center;display:flex}.lesson-phase-label{font-weight:600;font-size:var(--text-sm);color:var(--color-dark-secondary)}.lesson-question-count{font-size:var(--text-sm);color:var(--color-muted);font-family:var(--font-mono)}.lesson-nav-bar{align-items:center;gap:var(--space-3);margin-top:var(--space-3);margin-bottom:var(--space-1);display:flex}.lesson-back-btn{font-size:var(--text-sm)}.lesson-nav-pos{font-size:var(--text-xs);color:var(--color-muted);font-family:var(--font-mono)}.lesson-nav-spacer{flex:1}.lesson-gramlin{margin:var(--space-4) 0;justify-content:center;min-height:100px;display:flex}.lesson-question-card{background:var(--color-surface);border:2px solid var(--color-border-light);border-radius:var(--radius-lg);padding:var(--space-6);transition:border-color var(--duration-normal)}.lesson-question-card.card--correct{border-color:var(--color-correct)}.lesson-question-card.card--wrong{border-color:var(--color-wrong);animation:shake var(--duration-normal) var(--ease-out)}.question-text{font-size:var(--text-lg);font-weight:500;line-height:var(--leading-relaxed);margin-bottom:var(--space-5);color:var(--color-dark)}.options-grid{gap:var(--space-2);flex-direction:column;display:flex}.option-btn{align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-4);border:2px solid var(--color-border-light);border-radius:var(--radius-md);background:var(--color-bg-alt);cursor:pointer;text-align:left;font-family:var(--font-body);font-size:var(--text-base);transition:all var(--duration-fast) var(--ease-out);min-height:var(--tap-target);display:flex}.option-btn--selected{border-color:var(--color-primary);background:var(--color-primary-ghost);box-shadow:0 0 0 1px var(--color-primary)}.option-btn:not(.option-btn--correct):not(.option-btn--wrong):not(.option-btn--dimmed):hover{border-color:var(--color-primary);background:var(--color-primary-ghost);transform:translate(2px)}.option-btn:disabled{cursor:default}.option-btn--correct{border-color:var(--color-correct);background:var(--color-correct-bg)}.option-btn--wrong{border-color:var(--color-wrong);background:var(--color-wrong-bg)}.option-btn--reveal-correct{border-color:var(--color-correct);background:var(--color-correct-bg)}.option-btn--dimmed{opacity:.5}.option-letter{border-radius:var(--radius-sm);background:var(--color-primary-ghost);width:28px;height:28px;color:var(--color-primary);font-size:var(--text-xs);flex-shrink:0;justify-content:center;align-items:center;font-weight:700;display:flex}.option-btn--correct .option-letter{background:var(--color-correct);color:#fff}.option-btn--wrong .option-letter{background:var(--color-wrong);color:#fff}.option-text{flex:1}.feedback{margin-top:var(--space-4);padding:var(--space-4);border-radius:var(--radius-md)}.feedback--correct{background:var(--color-correct-bg);color:#2e7d32}.feedback--wrong{background:var(--color-wrong-bg);color:#c62828}.feedback p{margin:0}.feedback p+p{margin-top:var(--space-2)}.teaching-tip{font-size:var(--text-sm);color:var(--color-dark-secondary);font-style:italic}.explanation{font-size:var(--text-sm);font-weight:500}.feedback-label{opacity:.7;margin-bottom:4px;font-size:.75rem}.feedback-body{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.lesson-next{margin-top:var(--space-6);justify-content:center;display:flex}@media (width<=480px){.lesson-question-card{padding:var(--space-4)}.question-text{font-size:var(--text-base)}.option-btn{padding:var(--space-2) var(--space-3)}}.star-rating{align-items:center;gap:var(--space-2);display:flex}.stars{gap:2px;display:flex}.star{color:var(--color-border);transition:color var(--duration-normal) var(--ease-out)}.star--filled{color:#f9a825}.star-rating--sm .star{font-size:var(--text-lg)}.star-rating--md .star{font-size:var(--text-2xl)}.star-rating--lg .star{font-size:var(--text-4xl)}.star--animated{animation:starPop var(--duration-slow) var(--ease-bounce) both}.star-score{font-size:var(--text-sm);color:var(--color-muted);font-family:var(--font-mono)}@media (prefers-reduced-motion:reduce){.star--animated{opacity:1;animation:none;transform:none}}.completion-screen{justify-content:center;align-items:center;min-height:60dvh;display:flex}.completion-card{text-align:center;background:var(--color-surface);border:1px solid var(--color-border-light);border-radius:var(--radius-lg);width:100%;max-width:480px;padding:var(--space-8);align-items:center;gap:var(--space-4);flex-direction:column;display:flex}.completion-gramlin{margin-bottom:var(--space-2)}.completion-title{color:var(--color-primary);margin:0}.completion-phase{color:var(--color-muted);font-size:var(--text-lg);margin:0}.completion-score{margin:var(--space-2) 0}.completion-unlock{background:var(--color-correct-bg);border-radius:var(--radius-md);padding:var(--space-3) var(--space-6)}.completion-unlock p{color:#2e7d32;margin:0;font-weight:600}.unlock-phase{font-size:var(--text-sm);color:var(--color-dark-secondary)!important;margin-top:var(--space-1)!important;font-weight:400!important}.completion-module-attempted{margin-top:var(--space-1)}.attempted-text{font-size:var(--text-sm);color:var(--color-muted)}.completion-module-progress{width:100%;margin-top:var(--space-2)}.completion-actions{gap:var(--space-2);margin-top:var(--space-2);flex-wrap:wrap;justify-content:center;display:flex}@media (width<=480px){.completion-card{padding:var(--space-5)}.completion-actions{flex-direction:column;width:100%}.completion-actions .btn{width:100%}}.badge{border-radius:var(--radius-full);white-space:nowrap;font-weight:600;font-family:var(--font-body);align-items:center;display:inline-flex}.badge--sm{font-size:var(--text-xs);padding:2px 8px}.badge--md{padding:var(--space-1) var(--space-3);font-size:var(--text-sm)}.badge--default{background:var(--color-primary-ghost);color:var(--color-primary)}.badge--success{background:var(--color-correct-bg);color:var(--color-correct)}.badge--warning{color:#e67a22;background:#fff3e0}.badge--danger{background:var(--color-wrong-bg);color:var(--color-wrong)}.badge--info{color:#1976d2;background:#e3f2fd}.card{background:var(--color-surface);border:1px solid var(--color-border-light);border-radius:var(--radius-lg);padding:var(--space-5);transition:transform .25s var(--spring-gentle), box-shadow .25s var(--ease-out-expo)}.card--hoverable:hover{border-color:var(--color-primary);box-shadow:var(--shadow-md);transform:translateY(-2px)}.card--clickable:active{transform:scale(.98)}.card--clickable{cursor:pointer}.card--clickable:focus-visible{box-shadow:var(--shadow-focus)}.card--no-pad{padding:0}.errorlog-screen{max-width:720px;margin:0 auto}.errorlog-empty{justify-content:center;align-items:center;gap:var(--space-4);text-align:center;flex-direction:column;min-height:50dvh;display:flex}.errorlog-empty h2{color:var(--color-muted)}.errorlog-header{margin-bottom:var(--space-4);justify-content:space-between;align-items:center;display:flex}.errorlog-header h2{margin:0}.errorlog-actions,.errorlog-filters{gap:var(--space-2);margin-bottom:var(--space-4);flex-wrap:wrap;display:flex}.filter-chip{align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-full);background:var(--color-surface);font-size:var(--text-sm);cursor:pointer;transition:all var(--duration-fast);font-family:var(--font-body);display:flex}.filter-chip:hover{border-color:var(--color-primary)}.filter-chip--active{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}.errorlog-list{gap:var(--space-4);flex-direction:column;display:flex}.error-entry{gap:var(--space-3);flex-direction:column;display:flex}.error-entry-header{gap:var(--space-2);flex-wrap:wrap;align-items:center;display:flex}.error-date{font-size:var(--text-xs);color:var(--color-muted);margin-left:auto}.error-entry-question{font-size:var(--text-sm);padding:var(--space-3);background:var(--color-bg-alt);border-radius:var(--radius-sm)}.error-entry-question p{margin:0}.error-entry-answers{gap:var(--space-2);flex-direction:column;display:flex}.error-answer-bubble{padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);font-size:var(--text-sm);gap:var(--space-2);display:flex}.error-answer-bubble--user{background:var(--color-wrong-bg);border:1px solid #e070704d}.error-answer-bubble--correct{background:var(--color-correct-bg);border:1px solid #4caf504d}.answer-label{color:var(--color-dark-secondary);flex-shrink:0;font-weight:600}.admin-screen{max-width:800px;margin:0 auto}.admin-header{margin-bottom:var(--space-3);justify-content:space-between;align-items:center;display:flex}.admin-header h2{margin:0}.admin-disclaimer{font-size:var(--text-sm);color:var(--color-muted);border-radius:var(--radius-md);padding:var(--space-2) var(--space-3);margin-bottom:var(--space-4);background:#fff3e0;border:1px solid #ffe0b2}.admin-table{background:var(--color-surface);border:1px solid var(--color-border-light);border-radius:var(--radius-lg);overflow:hidden}.admin-table-header{gap:var(--space-2);padding:var(--space-3) var(--space-4);background:var(--color-bg-alt);font-weight:600;font-size:var(--text-sm);color:var(--color-dark-secondary);border-bottom:1px solid var(--color-border-light);grid-template-columns:2fr 1fr 1fr 1fr;display:grid}.admin-table-row{gap:var(--space-2);padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--color-border-light);font-size:var(--text-sm);grid-template-columns:2fr 1fr 1fr 1fr;align-items:center;display:grid}.admin-table-row:last-child{border-bottom:none}.admin-table-row:hover{background:var(--color-surface-hover)}.admin-user-name{align-items:center;gap:var(--space-2);font-weight:500;display:flex}.admin-progress-cell{align-items:center;gap:var(--space-2);display:flex}.admin-mini-bar{background:var(--color-border-light);border-radius:var(--radius-full);width:60px;height:6px;overflow:hidden}.admin-mini-fill{background:var(--color-primary);border-radius:var(--radius-full);height:100%}.admin-pct{font-size:var(--text-xs);color:var(--color-muted);font-family:var(--font-mono)}@media (width<=600px){.admin-table-header,.admin-table-row{gap:var(--space-1);grid-template-columns:1fr 1fr}.admin-table-header span:nth-child(2),.admin-table-row span:nth-child(2){text-align:center}}.admin-module-access{padding:0 var(--space-4) var(--space-3) var(--space-4);background:var(--color-bg-alt,#f9f6f0);border-bottom:1px solid var(--color-border-light)}.admin-module-access-header{font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.5px;color:var(--color-muted);margin-bottom:var(--space-2);font-weight:600}.admin-module-chips{flex-wrap:wrap;gap:8px;display:flex}.admin-module-chip{border-radius:var(--radius-full,20px);font-size:var(--text-xs);cursor:pointer;white-space:nowrap;border:1px solid #0000;align-items:center;gap:8px;padding:4px 8px;transition:all .15s;display:inline-flex}.chip-unlocked{background:var(--color-correct-bg,#e8f5e9);color:var(--color-correct,#2e7d32);border-color:var(--color-correct,#2e7d32)}.chip-locked{background:var(--color-danger-bg,#fce4ec);color:var(--color-danger,#c62828);border-color:var(--color-danger,#c62828)}.admin-module-chip:hover{opacity:.8;transform:scale(.96)}@media (width<=600px){.admin-header{gap:var(--space-2);flex-wrap:wrap}.admin-header h2{white-space:nowrap;font-size:var(--text-xl)}.admin-disclaimer{font-size:var(--text-xs);line-height:1.4}.admin-table-header{display:none}.admin-table-row{gap:var(--space-2);padding:var(--space-3);grid-template-columns:1fr}.admin-table-row>span{align-items:center;gap:var(--space-2);font-size:var(--text-sm);display:flex}.admin-table-row>span:before{content:attr(data-label);font-weight:600;font-size:var(--text-xs);color:var(--color-muted);text-transform:uppercase;min-width:64px}.admin-mini-bar{width:80px}}:root{--wf-root:#4a3f6b;--wf-root-text:#f0e8ff;--wf-root-example:#c8b8e8;--wf-l1:#6b5b8f;--wf-l1-text:#e8dcf8;--wf-l1-example:#c0b0e0;--wf-l2:#8b7aab;--wf-l2-text:#ddd0f0;--wf-l2-example:#b8a8d8;--wf-l3:#a89ac2;--wf-l3-text:#d0c4e8;--wf-l3-example:#a898d0}.fcls{gap:var(--space-3);flex-direction:column;padding-bottom:40px;display:flex}.fcls-header{align-items:center;gap:10px;display:flex}.fcls-back{cursor:pointer;color:var(--color-dark);background:0 0;border:none;border-radius:8px;justify-content:center;align-items:center;min-width:40px;min-height:40px;padding:4px;font-size:18px;display:flex}.fcls-back:hover{color:var(--color-primary);background:var(--color-primary-ghost)}.fcls-header-info{flex-direction:column;gap:1px;display:flex}.fcls-mod-name{color:var(--color-muted);font-size:.68rem}.fcls-lesson-name{color:var(--color-dark);font-size:.9rem;font-weight:700}.fcls-progress{color:var(--color-muted);justify-content:space-between;font-size:.72rem;display:flex}.fcls-mastered{color:var(--color-correct);font-weight:600}.fcls-progress-bar{background:var(--color-border-light);border-radius:2px;width:100%;height:4px;overflow:hidden}.fcls-progress-fill{background:var(--color-primary);height:100%;transition:width .3s var(--ease-out);border-radius:2px}.fcls-stack{flex-direction:column;gap:8px;display:flex}.fcls-card{background:var(--color-surface);border:1px solid var(--color-border-light);cursor:pointer;transition:border-color .2s, box-shadow .2s, transform .2s var(--ease-out);touch-action:pan-y;-webkit-user-select:none;user-select:none;border-radius:14px;padding:14px}.fcls-card:hover{border-color:var(--color-primary);box-shadow:0 2px 12px #ff8c4214}.fcls-card--open{border-color:var(--color-primary)}.fcls-card--mastered{border-color:var(--color-correct);background:var(--color-correct-bg);cursor:default}.fcls-card--review{border-color:var(--color-review);background:var(--color-review-bg);cursor:default}.fcls-card--swiping{cursor:grabbing;z-index:1;transition:none}.fcls-front{flex-direction:column;gap:6px;display:flex}.fcls-pos-tag{text-transform:uppercase;letter-spacing:.08em;color:var(--color-primary);font-size:.62rem;font-weight:700}.fcls-clue{color:var(--color-dark-secondary);font-size:.82rem;line-height:1.5}.fcls-hint{color:var(--color-muted);align-items:center;gap:4px;font-size:.6rem;display:flex}.fcls-back{margin-top:var(--space-3);padding-top:var(--space-3);border-top:1px solid var(--color-border-light);flex-direction:column;gap:4px;display:flex}.fcls-word{letter-spacing:-.02em;color:var(--wf-root);font-size:1.2rem;font-weight:800}.fcls-phonetic{color:var(--color-muted);margin-bottom:6px;font-size:.68rem}.fcls-members{flex-direction:column;gap:2px;display:flex}.fcls-member{border-radius:8px;align-items:center;gap:8px;padding:6px 10px;font-size:.7rem;font-weight:600;display:flex;position:relative;overflow:hidden}.fcls-member .fcls-member-pos{opacity:.7;flex-shrink:0;min-width:24px;font-size:.6rem}.fcls-member .fcls-member-word{flex:1;min-width:0}.fcls-member .fcls-member-example{opacity:.65;text-align:right;flex-shrink:1;margin-left:4px;font-size:.6rem;font-style:italic;font-weight:400}.fm-l0{background:var(--wf-root);color:var(--wf-root-text)}.fm-l0 .fcls-member-example{color:var(--wf-root-example)}.fm-l1{background:var(--wf-l1);color:var(--wf-l1-text)}.fm-l1 .fcls-member-example{color:var(--wf-l1-example)}.fm-l2{background:var(--wf-l2);color:var(--wf-l2-text)}.fm-l2 .fcls-member-example{color:var(--wf-l2-example)}.fm-l3{background:var(--wf-l3);color:var(--wf-l3-text)}.fm-l3 .fcls-member-example{color:var(--wf-l3-example)}.fcls-actions{border-top:1px solid var(--color-border-light);gap:8px;margin-top:10px;padding-top:10px;display:flex}.fcls-btn{border:1.5px solid var(--color-border);background:var(--color-surface);cursor:pointer;border-radius:12px;flex:1;justify-content:center;align-items:center;gap:6px;padding:10px;font-family:inherit;font-size:.75rem;font-weight:600;transition:all .15s;display:flex}.fcls-btn:hover{transform:translateY(-1px)}.fcls-btn--mastered{border-color:var(--color-correct);color:var(--color-correct)}.fcls-btn--mastered:hover{background:var(--color-correct-bg)}.fcls-btn--review{border-color:var(--color-review);color:var(--color-review)}.fcls-btn--review:hover{background:var(--color-review-bg)}.fcls-swipe-hint{color:var(--color-muted);justify-content:space-between;padding:4px 2px 0;font-size:.58rem;display:flex}.fcls-done{text-align:center;flex-direction:column;align-items:center;gap:12px;padding:2rem 1rem;display:flex}.fcls-done p{color:var(--color-dark);font-size:1rem;font-weight:700}.fcls-btn--restart{background:var(--color-primary);color:#fff;cursor:pointer;border:none;border-radius:12px;padding:10px 20px;font-family:inherit;font-size:.78rem;font-weight:700}.fcls-btn--restart:hover{background:var(--color-primary-hover)}.fcls-review-link{background:var(--color-review-bg);color:#92400e;cursor:pointer;border:1px solid #fde68a;border-radius:12px;justify-content:space-between;align-items:center;margin-top:8px;padding:10px 14px;font-size:.75rem;font-weight:600;display:flex}.fcls-review-link .count{background:var(--color-review);color:#fff;border-radius:50%;justify-content:center;align-items:center;width:22px;height:22px;font-size:.65rem;font-weight:800;display:flex}@media (width<=480px){.fcls-member-example{display:none}}:root{--color-primary:#ff8c42;--color-primary-hover:#e67a35;--color-primary-light:#ffb788;--color-primary-ghost:#ff8c421f;--color-bg:#fff5ee;--color-bg-alt:#fffaf6;--color-surface:#fff;--color-surface-hover:#fff0e5;--color-dark:#2d1b10;--color-dark-secondary:#5c3d2e;--color-correct:#4caf50;--color-correct-bg:#e8f5e9;--color-wrong:#e07070;--color-wrong-bg:#fce4e4;--color-muted:#8c7b6e;--color-border:#e8d5c4;--color-border-light:#f0e5d8;--gl-bg:var(--color-bg);--gl-bg-alt:var(--color-bg-alt);--gl-surface:var(--color-surface);--gl-text:var(--color-dark);--gl-text-secondary:var(--color-muted);--gl-primary:var(--color-primary);--gl-primary-hover:var(--color-primary-hover);--gl-primary-light:var(--color-primary-ghost);--gl-border:var(--color-border);--gl-border-light:var(--color-border-light);--gl-shadow-card:var(--shadow-lg);--gl-shadow-sm:var(--shadow-sm);--gl-shadow-md:var(--shadow-md);--gl-shadow-lg:var(--shadow-lg);--gl-radius-sm:var(--radius-sm);--gl-radius-md:var(--radius-md);--gl-radius-lg:var(--radius-lg);--gl-radius-xl:var(--radius-xl);--gl-radius-full:var(--radius-full);--gl-space-1:var(--space-1);--gl-space-2:var(--space-2);--gl-space-3:var(--space-3);--gl-space-4:var(--space-4);--gl-space-5:var(--space-5);--gl-space-6:var(--space-6);--gl-space-8:var(--space-8);--gl-duration-fast:var(--duration-fast);--gl-duration-normal:var(--duration-normal);--font-heading-en:"Baloo 2", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-heading-zh:"YouYuan", "幼圆", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-body:system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono:"Cascadia Code", "Fira Code", "Consolas", monospace;--text-xs:.75rem;--text-sm:.875rem;--text-base:1rem;--text-lg:1.125rem;--text-xl:1.25rem;--text-2xl:1.5rem;--text-3xl:1.875rem;--text-4xl:2.25rem;--leading-tight:1.25;--leading-normal:1.5;--leading-relaxed:1.75;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-8:2rem;--space-10:2.5rem;--space-12:3rem;--space-16:4rem;--space-20:5rem;--radius-sm:6px;--radius-md:10px;--radius-lg:16px;--radius-xl:24px;--radius-full:9999px;--shadow-sm:0 1px 2px #2d1b100f;--shadow-md:0 4px 12px #2d1b1014;--shadow-lg:0 8px 24px #2d1b101a;--shadow-focus:0 0 0 3px #ff8c424d;--duration-fast:.15s;--duration-normal:.25s;--duration-slow:.4s;--ease-out:cubic-bezier(.16, 1, .3, 1);--ease-in-out:cubic-bezier(.65, 0, .35, 1);--ease-bounce:cubic-bezier(.34, 1.56, .64, 1);--spring-gentle:cubic-bezier(.34, 1.56, .64, 1);--spring-bouncy:cubic-bezier(.34, 1.8, .64, 1);--max-width:980px;--header-height:64px;--tap-target:44px;--safe-top:env(safe-area-inset-top,0px);--safe-right:env(safe-area-inset-right,0px);--safe-bottom:env(safe-area-inset-bottom,0px);--safe-left:env(safe-area-inset-left,0px)}@media (prefers-reduced-motion:reduce){:root{--duration-fast:0s;--duration-normal:0s;--duration-slow:0s}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes scaleIn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes gramlinBounce{0%,to{transform:translateY(0)}30%{transform:translateY(-8px)}50%{transform:translateY(0)}70%{transform:translateY(-4px)}}@keyframes shake{0%,to{transform:translate(0)}20%{transform:translate(-6px)}40%{transform:translate(6px)}60%{transform:translate(-4px)}80%{transform:translate(4px)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes starPop{0%{opacity:0;transform:scale(0)rotate(-15deg)}60%{transform:scale(1.2)rotate(5deg)}to{opacity:1;transform:scale(1)rotate(0)}}.animate-fade-in{animation:fadeIn var(--duration-normal) var(--ease-out) forwards}.animate-slide-up{animation:slideUp var(--duration-normal) var(--ease-out) forwards}.animate-scale-in{animation:scaleIn var(--duration-normal) var(--ease-bounce) forwards}.animate-bounce{animation:gramlinBounce var(--duration-slow) var(--ease-bounce)}.animate-shake{animation:shake var(--duration-normal) var(--ease-out)}.animate-pulse{animation:pulse 1.5s var(--ease-in-out) infinite}.animate-star-pop{animation:starPop var(--duration-slow) var(--ease-bounce) forwards}.stagger>*{opacity:0;animation:slideUp var(--duration-normal) var(--ease-out) forwards}.stagger>:first-child{animation-delay:0s}.stagger>:nth-child(2){animation-delay:80ms}.stagger>:nth-child(3){animation-delay:.16s}.stagger>:nth-child(4){animation-delay:.24s}.stagger>:nth-child(5){animation-delay:.32s}.stagger>:nth-child(6){animation-delay:.4s}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;font-size:16px}body{font-family:var(--font-body);font-size:var(--text-base);line-height:var(--leading-normal);color:var(--color-dark);background:var(--color-bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-height:100dvh;padding-left:env(safe-area-inset-left,0px);padding-right:env(safe-area-inset-right,0px);-webkit-tap-highlight-color:transparent}#root{flex-direction:column;min-height:100dvh;display:flex}h1,h2,h3,h4{font-family:var(--font-heading-en);font-weight:700;line-height:var(--leading-tight);color:var(--color-dark)}h1{font-size:var(--text-4xl)}h2{font-size:var(--text-3xl)}h3{font-size:var(--text-2xl)}h4{font-size:var(--text-xl)}:lang(zh) h1,:lang(zh) h2,:lang(zh) h3,:lang(zh) h4{font-family:var(--font-heading-zh)}p{line-height:var(--leading-relaxed)}a{color:var(--color-primary);transition:color var(--duration-fast) var(--ease-out);text-decoration:none}a:hover{color:var(--color-primary-hover)}:focus-visible{box-shadow:var(--shadow-focus);border-radius:var(--radius-sm);outline:none}@media (hover:none) and (pointer:coarse){.btn,.card,[role=button]{-webkit-tap-highlight-color:transparent}}::selection{color:var(--color-dark);background:#ff8c4233}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--radius-full)}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}
