/* ═══════════════════════════════════════════
   KET Word Up! — Hip-hop Street Style
   Dark Theme + All Animation Keyframes
   ═══════════════════════════════════════════ */

/* ── Google Fonts ── */
/* Bungee, Poppins, Permanent Marker loaded via <link> */

/* ── CSS Variables ── */
:root {
    /* Colors — VIBRANT edition */
    --bg-primary: #0a0a1a;
    --bg-secondary: #111133;
    --bg-card: #151535;
    --bg-card-hover: #1a1a45;
    --accent-red: #FF2D55;
    --accent-blue: #5856D6;
    --accent-purple: #AF52DE;
    --accent-orange: #FF9500;
    --accent-cyan: #00D4FF;
    --neon-green: #00FF88;
    --neon-red: #FF5252;
    --gold: #FFD700;
    --silver: #C0C0C0;
    --bronze: #CD7F32;
    --text-primary: #FFFFFF;
    --text-secondary: #D4DEE8;
    --text-dim: #8FA3B7;

    /* Spacing */
    --space-xs: 4px;
    --space-sm: 8px;
    --space-md: 16px;
    --space-lg: 24px;
    --space-xl: 32px;
    --space-2xl: 48px;

    /* Radius */
    --radius-sm: 8px;
    --radius-md: 12px;
    --radius-lg: 16px;
    --radius-xl: 24px;
    --radius-full: 9999px;

    /* Fonts */
    --font-title: 'Bungee', 'Permanent Marker', cursive;
    --font-body: "Poppins", "Noto Sans", sans-serif;
    --font-marker: 'Permanent Marker', cursive;

    /* Transitions */
    --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
    --ease-out: cubic-bezier(0.25, 0.46, 0.45, 0.94);
    --ease-in-out: cubic-bezier(0.42, 0, 0.58, 1);
}

/* ── Reset ── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

html {
    font-size: 17px;
    -webkit-text-size-adjust: 100%;
    -webkit-tap-highlight-color: transparent;
}

body {
    font-family: var(--font-body);
    color: var(--text-primary);
    line-height: 1.55;
    min-height: 100vh;
    overflow-x: hidden;
    position: relative;
    background: linear-gradient(135deg, #0a0a1a 0%, #0d0d2b 25%, #1a0a2e 50%, #0d1b2a 75%, #0a0a1a 100%);
    background-size: 400% 400%;
    animation: gradientShift 15s ease infinite;
}

/* Animated background gradient */
@keyframes gradientShift {
    0% { background-position: 0% 50%; }
    25% { background-position: 100% 0%; }
    50% { background-position: 100% 100%; }
    75% { background-position: 0% 100%; }
    100% { background-position: 0% 50%; }
}

/* Floating glow orbs */
body::before, body::after {
    content: '';
    position: fixed;
    border-radius: 50%;
    pointer-events: none;
    z-index: 0;
    filter: blur(80px);
    opacity: 0.15;
}
body::before {
    width: 300px; height: 300px;
    background: var(--accent-red);
    top: -50px; left: -50px;
    animation: orbFloat1 8s ease-in-out infinite;
}
body::after {
    width: 250px; height: 250px;
    background: var(--accent-cyan);
    bottom: -50px; right: -50px;
    animation: orbFloat2 10s ease-in-out infinite;
}
@keyframes orbFloat1 {
    0%, 100% { transform: translate(0, 0); }
    50% { transform: translate(100px, 80px); }
}
@keyframes orbFloat2 {
    0%, 100% { transform: translate(0, 0); }
    50% { transform: translate(-80px, -100px); }
}

/* ── Overlays ── */
#fx-canvas {
    position: fixed;
    top: 0; left: 0;
    width: 100vw; height: 100vh;
    pointer-events: none;
    z-index: 1000;
}

#combo-layer {
    position: fixed;
    top: 0; left: 0;
    width: 100vw; height: 100vh;
    pointer-events: none;
    z-index: 999;
}

#flash-overlay {
    position: fixed;
    top: 0; left: 0;
    width: 100vw; height: 100vh;
    background: white;
    opacity: 0;
    pointer-events: none;
    z-index: 998;
    transition: opacity 0.05s ease;
}

#crack-overlay {
    position: fixed;
    top: 0; left: 0;
    width: 100vw; height: 100vh;
    pointer-events: none;
    z-index: 997;
    opacity: 0;
}

#slowmo-overlay {
    position: fixed;
    top: 0; left: 0;
    width: 100vw; height: 100vh;
    display: none;
    align-items: center;
    justify-content: center;
    font-family: var(--font-title);
    font-size: 4rem;
    color: var(--gold);
    text-shadow: 0 0 20px var(--gold), 0 0 40px var(--accent-red);
    pointer-events: none;
    z-index: 996;
    background: rgba(0,0,0,0.3);
}

/* ── App Container ── */
#app {
    max-width: 520px;
    margin: 0 auto;
    padding: var(--space-md);
    min-height: 100vh;
    position: relative;
    z-index: 1;
}

/* ── Page Transitions ── */
.page { display: none; }
.page.active {
    display: block;
    animation: fadeIn 0.3s var(--ease-out);
}
.page.slide-in {
    animation: slideInRight 0.35s var(--ease-spring);
}
.page.slide-out {
    animation: slideOutLeft 0.35s var(--ease-out);
}

/* ══════════════════════════════════════
   COMPONENTS
   ══════════════════════════════════════ */

/* ── Header Bar ── */
.header-bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: var(--space-sm) 0;
    margin-bottom: var(--space-lg);
}

.header-bar .logo {
    font-family: var(--font-title);
    font-size: 1.5rem;
    color: var(--accent-red);
    text-shadow: 0 0 10px rgba(255,45,85,0.5), 0 0 20px rgba(255,45,85,0.3), 2px 2px 0 rgba(0,0,0,0.5);
    letter-spacing: 1px;
}

/* Neon text glow */
.neon-text {
    animation: neonPulse 2s ease-in-out infinite;
}

.neon-text-cyan {
    color: var(--accent-cyan);
    text-shadow: 0 0 10px rgba(0,212,255,0.5), 0 0 20px rgba(0,212,255,0.3);
    animation: neonPulseCyan 2s ease-in-out infinite;
}

.header-bar .user-info {
    display: flex;
    align-items: center;
    gap: var(--space-sm);
    font-size: 0.85rem;
    color: var(--text-secondary);
}

.header-bar .coin-display {
    display: flex;
    align-items: center;
    gap: 4px;
    background: rgba(255,215,0,0.15);
    padding: 4px 12px;
    border-radius: var(--radius-full);
    font-weight: 700;
    color: var(--gold);
    font-size: 0.9rem;
}

/* ── Buttons ── */
.btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--space-sm);
    padding: 12px 24px;
    border: none;
    border-radius: var(--radius-md);
    font-family: var(--font-body);
    font-size: 1rem;
    font-weight: 700;
    cursor: pointer;
    transition: all 0.15s var(--ease-spring);
    user-select: none;
    -webkit-user-select: none;
    position: relative;
    overflow: hidden;
}

.btn:active {
    transform: scale(0.95);
}

.btn-primary {
    background: linear-gradient(135deg, var(--accent-red), #FF6B6B);
    color: white;
    box-shadow: 0 4px 15px rgba(255,45,85,0.4), 0 0 20px rgba(255,45,85,0.15);
    text-shadow: 0 1px 2px rgba(0,0,0,0.3);
}
.btn-primary:active {
    box-shadow: 0 2px 8px rgba(255,45,85,0.3);
    filter: brightness(0.9);
}

.btn-secondary {
    background: linear-gradient(135deg, var(--accent-blue), var(--accent-purple));
    color: white;
    box-shadow: 0 4px 15px rgba(88,86,214,0.4), 0 0 20px rgba(88,86,214,0.15);
}

.btn-success {
    background: linear-gradient(135deg, var(--neon-green), #00CC6A);
    color: #0a0a1a;
    box-shadow: 0 4px 15px rgba(0,255,136,0.3), 0 0 20px rgba(0,255,136,0.1);
    font-weight: 800;
}

.btn-ghost {
    background: transparent;
    color: var(--text-secondary);
    border: 2px solid var(--text-dim);
}

.btn-large {
    padding: 16px 32px;
    font-size: 1.2rem;
    border-radius: var(--radius-lg);
    transform: rotate(-1deg);
}

.btn-large:nth-child(even) {
    transform: rotate(1deg);
}

.btn-icon {
    width: 44px; height: 44px;
    padding: 0;
    border-radius: var(--radius-full);
    font-size: 1.2rem;
}

/* ── Cards — with neon glow ── */
.card {
    background: var(--bg-card);
    border-radius: var(--radius-lg);
    padding: var(--space-lg);
    border: 1px solid rgba(255,255,255,0.08);
    position: relative;
    overflow: hidden;
    box-shadow: 0 4px 24px rgba(0,0,0,0.3);
}

.card::before {
    content: '';
    position: absolute;
    top: -2px; right: -2px;
    width: 80px; height: 80px;
    background: radial-gradient(circle at top right, rgba(255,45,85,0.2), transparent 70%);
    pointer-events: none;
}

.card::after {
    content: '';
    position: absolute;
    bottom: -2px; left: -2px;
    width: 60px; height: 60px;
    background: radial-gradient(circle at bottom left, rgba(0,212,255,0.15), transparent 70%);
    pointer-events: none;
}

/* ── Flash Card (Word Learning) ── */
.flash-card-container {
    perspective: 1000px;
    width: 100%;
    height: 320px;
    margin: var(--space-lg) 0;
}

.flash-card {
    width: 100%;
    height: 100%;
    position: relative;
    transform-style: preserve-3d;
    transition: transform 0.6s var(--ease-spring);
    cursor: pointer;
}

.flash-card.flipped {
    transform: rotateY(180deg);
}

.flash-card-face {
    position: absolute;
    width: 100%;
    height: 100%;
    backface-visibility: hidden;
    -webkit-backface-visibility: hidden;
    border-radius: var(--radius-xl);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: var(--space-xl);
    background: var(--bg-card);
    border: 2px solid rgba(255,45,85,0.25);
    overflow: hidden;
    box-shadow: 0 8px 32px rgba(0,0,0,0.4), inset 0 0 30px rgba(255,45,85,0.05);
}

.flash-card-front::after {
    content: '';
    position: absolute;
    bottom: 0; left: 0; right: 0;
    height: 4px;
    background: linear-gradient(90deg, var(--accent-red), var(--gold), var(--accent-blue));
}

.flash-card-back {
    transform: rotateY(180deg);
    background: linear-gradient(135deg, var(--bg-card), #0a1628);
}

.flash-card .emoji {
    font-size: 3.5rem;
    margin-bottom: var(--space-md);
}

.flash-card .word {
    font-family: var(--font-title);
    font-size: 2.5rem;
    line-height: 1.14;
    color: var(--text-primary);
    margin-bottom: var(--space-sm);
    text-shadow: 2px 2px 0 rgba(0,0,0,0.3);
    overflow-wrap: anywhere;
    word-break: normal;
}

.flash-card .phonetic {
    display: block;
    font-family: "Noto Sans", "Segoe UI", "Lucida Sans Unicode", serif;
    font-size: 1.1rem;
    line-height: 1.35;
    min-height: 1.35em;
    color: var(--text-secondary);
    margin-bottom: var(--space-md);
    overflow-wrap: anywhere;
}

.flash-card .meaning {
    font-size: 1.8rem;
    color: var(--accent-red);
    font-weight: 700;
    margin-bottom: var(--space-sm);
}

.flash-card .pos {
    font-size: 0.85rem;
    color: var(--text-dim);
    margin-bottom: var(--space-md);
}

.flash-card .example {
    font-size: 0.95rem;
    color: var(--text-secondary);
    text-align: center;
    line-height: 1.6;
    font-style: italic;
}

.flash-card .tap-hint {
    position: absolute;
    bottom: var(--space-md);
    font-size: 0.75rem;
    color: var(--text-dim);
}

/* ── Progress Bar ── */
.progress-bar {
    width: 100%;
    height: 8px;
    background: rgba(255,255,255,0.08);
    border-radius: var(--radius-full);
    overflow: hidden;
    position: relative;
}

.progress-bar .fill {
    height: 100%;
    border-radius: var(--radius-full);
    background: linear-gradient(90deg, var(--accent-red), var(--accent-orange), var(--gold));
    transition: width 0.5s var(--ease-spring);
    position: relative;
}

.progress-bar .fill::after {
    content: '';
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    background: linear-gradient(90deg, transparent, rgba(255,255,255,0.3), transparent);
    animation: shimmer 2s infinite;
}

.progress-large {
    height: 12px;
}

/* ── Combo Counter ── */
.combo-display {
    position: fixed;
    top: 20px;
    right: 20px;
    z-index: 100;
    text-align: right;
    pointer-events: none;
}

.combo-number {
    font-family: var(--font-title);
    font-size: 3rem;
    line-height: 1;
    color: var(--gold);
    text-shadow: 0 0 20px rgba(255,215,0,0.5);
    animation: comboPopIn 0.3s var(--ease-spring);
}

.combo-label {
    font-family: var(--font-marker);
    font-size: 1rem;
    color: var(--accent-red);
    text-transform: uppercase;
}

/* ── Quiz Options ── */
.quiz-options {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: var(--space-md);
    margin-top: var(--space-lg);
}

.quiz-option {
    background: var(--bg-card);
    border: 2px solid rgba(255,255,255,0.08);
    border-radius: var(--radius-md);
    padding: var(--space-lg);
    text-align: center;
    font-size: 1.1rem;
    font-weight: 600;
    cursor: pointer;
    transition: all 0.15s var(--ease-spring);
    user-select: none;
    -webkit-user-select: none;
    position: relative;
    overflow: hidden;
}

.quiz-option:active {
    transform: scale(0.95);
}

.quiz-option:hover {
    border-color: rgba(233,69,96,0.4);
    background: var(--bg-card-hover);
}

.quiz-option.correct {
    border-color: var(--neon-green);
    background: rgba(0,230,118,0.2);
    color: var(--neon-green);
    box-shadow: 0 0 20px rgba(0,230,118,0.4), 0 0 40px rgba(0,230,118,0.15), inset 0 0 15px rgba(0,230,118,0.1);
    animation: correctBounce 0.5s var(--ease-spring);
    transform: scale(1);
}

.quiz-option.correct::after {
    content: '';
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    background: radial-gradient(circle, rgba(0,230,118,0.4) 0%, transparent 70%);
    animation: impactFlash 0.4s ease-out;
    pointer-events: none;
}

.quiz-option.wrong {
    border-color: var(--neon-red);
    background: rgba(255,82,82,0.2);
    color: var(--neon-red);
    box-shadow: 0 0 20px rgba(255,82,82,0.4), 0 0 40px rgba(255,82,82,0.15);
    animation: wrongShake 0.5s ease;
}

.quiz-option.disabled {
    pointer-events: none;
    opacity: 0.5;
}

/* ── Spelling Input ── */
.spelling-input-container {
    display: flex;
    gap: 8px;
    justify-content: center;
    margin-top: var(--space-lg);
}

.spelling-visible-input {
    width: 100%;
    max-width: 280px;
    padding: 16px var(--space-md);
    border: 2px solid rgba(255,255,255,0.15);
    border-radius: var(--radius-md);
    background: var(--bg-card);
    color: var(--text-primary);
    font-size: 1.3rem;
    font-family: var(--font-body);
    font-weight: 700;
    text-align: center;
    outline: none;
    transition: border-color 0.2s, box-shadow 0.2s;
    letter-spacing: 4px;
    text-transform: lowercase;
}

.spelling-visible-input:focus {
    border-color: var(--accent-red);
    box-shadow: 0 0 15px rgba(255,45,85,0.2);
}

.spelling-visible-input::placeholder {
    color: var(--text-dim);
    font-size: 1rem;
    letter-spacing: normal;
}

.letter-box {
    width: 40px; height: 48px;
    border: 2px solid rgba(255,255,255,0.15);
    border-radius: var(--radius-sm);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.3rem;
    font-weight: 700;
    font-family: var(--font-body);
    text-transform: lowercase;
    background: var(--bg-card);
    color: var(--text-primary);
    transition: border-color 0.2s;
}

.letter-box.active {
    border-color: var(--accent-red);
    box-shadow: 0 0 10px rgba(233,69,96,0.3);
}

.letter-box.filled {
    border-color: var(--accent-blue);
}

.letter-box.hint {
    color: var(--text-dim);
}

.letter-box.correct-letter {
    border-color: var(--neon-green);
    color: var(--neon-green);
}

.letter-box.wrong-letter {
    border-color: var(--neon-red);
    color: var(--neon-red);
    animation: wrongShake 0.3s ease;
}

/* ── Matching Game ── */
.match-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: var(--space-md);
}

.match-column {
    display: flex;
    flex-direction: column;
    gap: var(--space-sm);
}

.match-item {
    padding: var(--space-md);
    border: 2px solid rgba(255,255,255,0.1);
    border-radius: var(--radius-md);
    text-align: center;
    cursor: pointer;
    font-size: 1rem;
    transition: all 0.15s var(--ease-spring);
    background: var(--bg-card);
    user-select: none;
}

.match-item.selected {
    border-color: var(--gold);
    background: rgba(255,215,0,0.1);
    transform: scale(1.05);
}

.match-item.matched {
    border-color: var(--neon-green);
    background: rgba(0,230,118,0.1);
    opacity: 0.6;
    pointer-events: none;
}

.match-item.wrong-match {
    border-color: var(--neon-red);
    background: rgba(255,82,82,0.1);
    animation: wrongShake 0.3s ease;
}

/* ── Bubble Grid (消消乐) ── */
.bubble-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: var(--space-sm);
}

.bubble-item {
    aspect-ratio: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    border: 2px solid rgba(255,255,255,0.1);
    border-radius: var(--radius-md);
    font-size: 0.9rem;
    font-weight: 600;
    cursor: pointer;
    background: var(--bg-card);
    transition: all 0.15s var(--ease-spring);
    user-select: none;
}

.bubble-item.selected {
    border-color: var(--gold);
    background: rgba(255,215,0,0.15);
    transform: scale(1.08);
}

.bubble-item.matched {
    animation: bubblePop 0.4s var(--ease-spring) forwards;
}

/* ── Boss HP Bar ── */
.boss-container {
    text-align: center;
    margin-bottom: var(--space-lg);
}

.boss-name {
    font-family: var(--font-title);
    font-size: 1.3rem;
    color: var(--accent-red);
    margin-bottom: var(--space-sm);
    text-shadow: 0 0 10px rgba(233,69,96,0.3);
}

.boss-emoji {
    font-size: 4rem;
    margin-bottom: var(--space-sm);
    animation: bossIdle 2s ease-in-out infinite;
}

.boss-hp-bar {
    width: 100%;
    height: 16px;
    background: rgba(255,255,255,0.08);
    border-radius: var(--radius-full);
    overflow: hidden;
    border: 1px solid rgba(255,255,255,0.1);
}

.boss-hp-fill {
    height: 100%;
    background: linear-gradient(90deg, var(--neon-red), var(--accent-red));
    border-radius: var(--radius-full);
    transition: width 0.5s var(--ease-spring);
}

.boss-hp-text {
    font-size: 0.8rem;
    color: var(--text-secondary);
    margin-top: 4px;
}

/* ── Rank Display ── */
.rank-display {
    text-align: center;
    padding: var(--space-2xl) 0;
}

.rank-letter {
    font-family: var(--font-title);
    font-size: 6rem;
    line-height: 1;
    text-shadow: 0 0 30px currentColor;
}

.rank-s-plus { color: var(--gold); animation: rankGoldPulse 1s infinite; }
.rank-s { color: var(--gold); }
.rank-a { color: var(--silver); }
.rank-b { color: var(--bronze); }
.rank-c { color: var(--accent-blue); }
.rank-d { color: var(--text-dim); }

.rank-title {
    font-family: var(--font-marker);
    font-size: 1.5rem;
    margin-top: var(--space-md);
}

.result-summary {
    margin: -18px 16px 20px;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.result-alert {
    background: rgba(255,82,82,0.1);
    border: 1px solid rgba(255,82,82,0.24);
    border-radius: var(--radius-sm);
    padding: 12px 14px;
}

.result-alert.result-good {
    background: rgba(0,255,136,0.08);
    border-color: rgba(0,255,136,0.18);
}

.result-alert-title {
    font-weight: 800;
    color: var(--text-primary);
    font-size: 0.92rem;
}

.result-alert-desc {
    color: var(--text-secondary);
    font-size: 0.8rem;
    margin-top: 3px;
    line-height: 1.45;
}

.result-line {
    display: flex;
    justify-content: space-between;
    align-items: center;
    background: rgba(255,255,255,0.045);
    border: 1px solid rgba(255,255,255,0.07);
    border-radius: var(--radius-sm);
    padding: 10px 14px;
    color: var(--text-secondary);
    font-size: 0.86rem;
}

.result-line strong {
    color: var(--gold);
    font-size: 1rem;
}

/* ── Login Screen ── */
.login-screen {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    width: 100%;
    min-height: 100vh;
    text-align: center;
    padding: var(--space-xl);
}

.login-title {
    font-family: var(--font-title);
    font-size: 2.5rem;
    color: var(--accent-red);
    text-shadow: 0 0 20px rgba(255,45,85,0.5), 0 0 40px rgba(255,45,85,0.3), 3px 3px 0 rgba(0,0,0,0.5);
    margin-bottom: var(--space-xs);
    animation: neonPulse 2s ease-in-out infinite;
}

.login-subtitle {
    font-family: var(--font-marker);
    font-size: 1.2rem;
    color: var(--accent-cyan);
    margin-bottom: var(--space-2xl);
    text-shadow: 0 0 10px rgba(0,212,255,0.3);
    animation: neonPulseCyan 3s ease-in-out infinite;
}

.user-avatar-list {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-md);
    justify-content: center;
    margin-bottom: var(--space-xl);
}

.user-avatar {
    width: 64px; height: 64px;
    border-radius: var(--radius-full);
    background: var(--accent-blue);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.5rem;
    cursor: pointer;
    border: 3px solid transparent;
    transition: all 0.2s var(--ease-spring);
}

.user-avatar:hover, .user-avatar:active {
    border-color: var(--accent-red);
    transform: scale(1.1);
}

.user-avatar-name {
    font-size: 0.7rem;
    color: var(--text-secondary);
    text-align: center;
    margin-top: 4px;
}

/* ── Name Input ── */
.name-input-container {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--space-md);
    width: 100%;
    max-width: 280px;
}

.name-input {
    width: 100%;
    padding: 14px var(--space-md);
    border: 2px solid rgba(255,255,255,0.15);
    border-radius: var(--radius-md);
    background: var(--bg-card);
    color: var(--text-primary);
    font-size: 1.1rem;
    font-family: var(--font-body);
    text-align: center;
    outline: none;
    transition: border-color 0.2s;
}

.name-input:focus {
    border-color: var(--accent-red);
}

.name-input::placeholder {
    color: var(--text-dim);
}

/* ── Dashboard (Today's Tasks) ── */
.dashboard {
    padding-bottom: var(--space-2xl);
}

.dashboard-greeting {
    font-family: var(--font-marker);
    font-size: 1.3rem;
    color: var(--text-secondary);
    margin-bottom: var(--space-sm);
}

.dashboard-title {
    font-family: var(--font-title);
    font-size: 1.8rem;
    margin-bottom: var(--space-lg);
}

.task-list {
    display: flex;
    flex-direction: column;
    gap: var(--space-md);
}

.task-card {
    background: var(--bg-card);
    border-radius: var(--radius-lg);
    padding: var(--space-lg);
    display: flex;
    align-items: center;
    gap: var(--space-md);
    cursor: pointer;
    border: 1px solid rgba(255,255,255,0.08);
    transition: all 0.2s var(--ease-spring);
    position: relative;
    overflow: hidden;
    box-shadow: 0 2px 12px rgba(0,0,0,0.2);
}

.task-card:active {
    transform: scale(0.98);
}

.task-card:hover, .task-card:active {
    border-color: rgba(255,45,85,0.4);
    box-shadow: 0 4px 20px rgba(255,45,85,0.15);
}

.task-card .task-icon {
    font-size: 2rem;
    width: 50px;
    text-align: center;
    flex-shrink: 0;
}

.task-card .task-info {
    flex: 1;
}

.task-card .task-name {
    font-weight: 700;
    font-size: 1rem;
    margin-bottom: 4px;
}

.task-card .task-desc {
    font-size: 0.8rem;
    color: var(--text-secondary);
}

.task-card .task-badge {
    font-size: 0.75rem;
    padding: 4px 10px;
    border-radius: var(--radius-full);
    font-weight: 700;
    flex-shrink: 0;
}

.badge-new {
    background: rgba(233,69,96,0.2);
    color: var(--accent-red);
}

.badge-review {
    background: rgba(15,52,96,0.3);
    color: var(--accent-blue);
}

.badge-done {
    background: rgba(0,230,118,0.15);
    color: var(--neon-green);
}

.badge-locked {
    background: rgba(255,255,255,0.05);
    color: var(--text-dim);
}

/* ── Stats Row ── */
.stats-row {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: var(--space-sm);
    margin: var(--space-lg) 0;
}

.stat-box {
    background: var(--bg-card);
    border-radius: var(--radius-md);
    padding: var(--space-md);
    text-align: center;
    border: 1px solid rgba(255,255,255,0.06);
    box-shadow: 0 2px 8px rgba(0,0,0,0.2);
}

.stat-value {
    font-family: var(--font-title);
    font-size: 1.5rem;
    color: var(--gold);
}

.stat-label {
    font-size: 0.7rem;
    color: var(--text-dim);
    margin-top: 4px;
}

/* ── Streak Flame ── */
.streak-display {
    display: flex;
    align-items: center;
    gap: var(--space-sm);
    padding: var(--space-md);
    background: linear-gradient(135deg, rgba(255,149,0,0.12), rgba(255,45,85,0.08));
    border-radius: var(--radius-md);
    margin-bottom: var(--space-lg);
    border: 1px solid rgba(255,149,0,0.15);
}

.streak-fire {
    font-size: 1.5rem;
    animation: fireFlicker 0.5s ease-in-out infinite alternate;
}

.streak-count {
    font-family: var(--font-title);
    font-size: 1.3rem;
    color: var(--gold);
}

.streak-label {
    font-size: 0.8rem;
    color: var(--text-secondary);
}

/* ── Achievement Wall ── */
.achievement-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: var(--space-sm);
}

.achievement-item {
    aspect-ratio: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    background: var(--bg-card);
    border-radius: var(--radius-md);
    border: 1px solid rgba(255,255,255,0.06);
    position: relative;
}

.achievement-item.locked {
    opacity: 0.3;
    filter: grayscale(1);
}

.achievement-item .ach-icon {
    font-size: 1.5rem;
    margin-bottom: 4px;
}

.achievement-item .ach-name {
    font-size: 0.55rem;
    color: var(--text-dim);
    text-align: center;
    line-height: 1.2;
}

/* ── Shop ── */
.shop-grid {
    display: flex;
    flex-direction: column;
    gap: var(--space-md);
}

.shop-item {
    background: var(--bg-card);
    border-radius: var(--radius-md);
    padding: var(--space-md);
    display: flex;
    align-items: center;
    gap: var(--space-md);
    border: 1px solid rgba(255,255,255,0.06);
}

.shop-item .shop-icon {
    font-size: 2rem;
    width: 50px;
    text-align: center;
}

.shop-item .shop-info {
    flex: 1;
}

.shop-item .shop-name {
    font-weight: 700;
    font-size: 0.95rem;
}

.shop-item .shop-desc {
    font-size: 0.75rem;
    color: var(--text-secondary);
}

.shop-item .shop-price {
    display: flex;
    align-items: center;
    gap: 4px;
    font-weight: 700;
    color: var(--gold);
    font-size: 0.9rem;
    white-space: nowrap;
}

/* ── Speed Challenge Timer ── */
.timer-display {
    text-align: center;
    margin: var(--space-md) 0;
}

.timer-value {
    font-family: var(--font-title);
    font-size: 2.5rem;
    color: var(--accent-red);
}

.timer-label {
    font-size: 0.8rem;
    color: var(--text-dim);
}

/* ── Sentence Ordering ── */
.sentence-words {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-sm);
    justify-content: center;
    min-height: 60px;
    padding: var(--space-md);
    background: var(--bg-card);
    border-radius: var(--radius-md);
    margin-bottom: var(--space-md);
}

.word-chip {
    padding: 8px 16px;
    background: var(--accent-blue);
    border-radius: var(--radius-full);
    font-size: 0.95rem;
    font-weight: 600;
    cursor: pointer;
    transition: all 0.15s var(--ease-spring);
    user-select: none;
}

.word-chip:active { transform: scale(0.95); }
.word-chip.placed { opacity: 0.3; }

.sentence-answer {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-sm);
    justify-content: center;
    min-height: 50px;
    padding: var(--space-md);
    border: 2px dashed rgba(255,255,255,0.15);
    border-radius: var(--radius-md);
}

/* ── Floating Text ── */
.float-text {
    position: fixed;
    pointer-events: none;
    z-index: 999;
    font-family: var(--font-title);
    font-size: 2rem;
    animation: floatUp 1s var(--ease-out) forwards;
}

.float-text.nice { color: var(--bronze); font-size: 1.5rem; }
.float-text.great { color: var(--silver); font-size: 2rem; }
.float-text.amazing { color: var(--gold); font-size: 2.5rem; }
.float-text.incredible {
    font-size: 3rem;
    background: linear-gradient(90deg, #FF6B6B, #FFD93D, #6BCB77, #4D96FF);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
}
.float-text.legendary {
    font-size: 3.5rem;
    color: var(--gold);
    text-shadow: 0 0 30px var(--gold), 0 0 60px var(--accent-red);
    animation: legendaryFloat 1.5s var(--ease-out) forwards;
}

/* ── Chest (宝箱) ── */
.chest-container {
    position: fixed;
    bottom: 80px;
    right: 20px;
    z-index: 50;
    cursor: pointer;
    animation: chestBounce 2s ease-in-out infinite;
}

.chest-icon {
    font-size: 2.5rem;
}

/* ── TTS Button ── */
.tts-btn {
    width: 48px; height: 48px;
    min-width: 48px;
    min-height: 48px;
    flex: 0 0 48px;
    border-radius: var(--radius-full);
    border: 2px solid rgba(255,255,255,0.15);
    background: var(--bg-card);
    color: var(--text-primary);
    font-size: 1.3rem;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all 0.15s var(--ease-spring);
}

.tts-btn:active { transform: scale(0.9); }
.tts-btn.speaking {
    border-color: var(--accent-red);
    animation: pulse 0.6s infinite;
}

/* ── Back Button ── */
.back-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--space-xs);
    flex: 0 0 auto;
    background: none;
    border: none;
    color: var(--text-secondary);
    font-size: 0.9rem;
    cursor: pointer;
    min-height: 44px;
    padding: 0 var(--space-xs);
    font-family: var(--font-body);
    line-height: 1.1;
    white-space: nowrap;
    border-radius: 999px;
    touch-action: manipulation;
}

.back-btn:active { color: var(--text-primary); }

.back-btn:focus-visible {
    outline: 3px solid rgba(88, 204, 2, 0.35);
    outline-offset: 2px;
}

/* ── Section Title ── */
.section-title {
    font-family: var(--font-title);
    font-size: 1.3rem;
    margin-bottom: var(--space-md);
    color: var(--text-primary);
}

/* ── Divider ── */
.divider {
    height: 1px;
    background: rgba(255,255,255,0.06);
    margin: var(--space-lg) 0;
}

/* ── Empty State ── */
.empty-state {
    text-align: center;
    padding: var(--space-2xl);
    color: var(--text-dim);
}

.empty-state .empty-icon {
    font-size: 3rem;
    margin-bottom: var(--space-md);
}

/* ── Modal ── */
.modal-overlay {
    position: fixed;
    top: 0; left: 0;
    width: 100vw; height: 100vh;
    background: rgba(0,0,0,0.7);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 500;
    animation: fadeIn 0.2s ease;
}

.modal-content {
    background: var(--bg-secondary);
    border-radius: var(--radius-xl);
    padding: var(--space-xl);
    max-width: 400px;
    width: 90%;
    text-align: center;
    animation: modalPopIn 0.3s var(--ease-spring);
}

.modal-title {
    font-family: var(--font-title);
    font-size: 1.3rem;
    margin-bottom: var(--space-md);
}

/* ══════════════════════════════════════
   ANIMATION KEYFRAMES
   ══════════════════════════════════════ */

@keyframes fadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}

@keyframes fadeOut {
    from { opacity: 1; }
    to { opacity: 0; }
}

@keyframes slideInRight {
    from { transform: translateX(100%); opacity: 0; }
    to { transform: translateX(0); opacity: 1; }
}

@keyframes slideOutLeft {
    from { transform: translateX(0); opacity: 1; }
    to { transform: translateX(-100%); opacity: 0; }
}

@keyframes slideInUp {
    from { transform: translateY(30px); opacity: 0; }
    to { transform: translateY(0); opacity: 1; }
}

/* Screen Shakes */
@keyframes shakeSmall {
    0%, 100% { transform: translate(0); }
    15% { transform: translate(-4px, 2px) rotate(-0.5deg); }
    30% { transform: translate(4px, -2px) rotate(0.5deg); }
    45% { transform: translate(-3px, 3px); }
    60% { transform: translate(3px, -3px); }
    75% { transform: translate(-2px, 1px); }
    90% { transform: translate(2px, -1px); }
}

@keyframes shakeMedium {
    0%, 100% { transform: translate(0); }
    10% { transform: translate(-7px, 4px) rotate(-1deg); }
    25% { transform: translate(7px, -5px) rotate(1deg); }
    40% { transform: translate(-6px, 6px) rotate(-0.5deg); }
    55% { transform: translate(6px, -6px) rotate(0.5deg); }
    70% { transform: translate(-4px, 5px); }
    85% { transform: translate(4px, -3px); }
}

@keyframes shakeBig {
    0%, 100% { transform: translate(0); }
    8% { transform: translate(-10px, 6px) rotate(-1.5deg); }
    16% { transform: translate(10px, -7px) rotate(1.5deg); }
    24% { transform: translate(-9px, 8px) rotate(-1deg); }
    32% { transform: translate(9px, -8px) rotate(1deg); }
    40% { transform: translate(-8px, 9px); }
    48% { transform: translate(8px, -9px); }
    56% { transform: translate(-7px, 7px); }
    64% { transform: translate(7px, -7px); }
    72% { transform: translate(-5px, 5px); }
    80% { transform: translate(5px, -4px); }
    90% { transform: translate(-2px, 2px); }
}

@keyframes quake {
    0%, 100% { transform: translate(0); }
    5% { transform: translate(-14px, 8px) rotate(-2deg); }
    10% { transform: translate(14px, -10px) rotate(2deg); }
    15% { transform: translate(-12px, 10px) rotate(-1.5deg); }
    20% { transform: translate(12px, -10px) rotate(1.5deg); }
    30% { transform: translate(-10px, 12px) rotate(-1deg); }
    40% { transform: translate(10px, -12px) rotate(1deg); }
    50% { transform: translate(-8px, 10px); }
    60% { transform: translate(8px, -10px); }
    70% { transform: translate(-6px, 8px); }
    80% { transform: translate(6px, -6px); }
    90% { transform: translate(-3px, 3px); }
}

/* Impact Flash */
@keyframes impactFlash {
    0% { opacity: 0.8; }
    100% { opacity: 0; }
}

/* Correct Bounce — 狠！*/
@keyframes correctBounce {
    0% { transform: scale(1); }
    15% { transform: scale(0.85); }
    30% { transform: scale(1.25); }
    50% { transform: scale(0.92); }
    70% { transform: scale(1.08); }
    85% { transform: scale(0.98); }
    100% { transform: scale(1); }
}

/* Wrong Shake */
@keyframes wrongShake {
    0%, 100% { transform: translateX(0); }
    10% { transform: translateX(-8px); }
    30% { transform: translateX(8px); }
    50% { transform: translateX(-6px); }
    70% { transform: translateX(6px); }
    90% { transform: translateX(-3px); }
}

/* Combo Pop In */
@keyframes comboPopIn {
    0% { transform: scale(0.5); opacity: 0; }
    50% { transform: scale(1.3); }
    100% { transform: scale(1); opacity: 1; }
}

/* Float Up (Floating Text) */
@keyframes floatUp {
    0% { transform: translateY(0) scale(0.5); opacity: 0; }
    15% { transform: translateY(-10px) scale(1.2); opacity: 1; }
    30% { transform: translateY(-20px) scale(1); }
    100% { transform: translateY(-100px) scale(0.8); opacity: 0; }
}

@keyframes legendaryFloat {
    0% { transform: translateY(0) scale(0) rotate(-20deg); opacity: 0; }
    15% { transform: translateY(-20px) scale(1.5) rotate(5deg); opacity: 1; }
    30% { transform: translateY(-40px) scale(1.2) rotate(-3deg); }
    50% { transform: translateY(-60px) scale(1.3) rotate(2deg); }
    100% { transform: translateY(-150px) scale(0.5) rotate(0deg); opacity: 0; }
}

/* Shimmer */
@keyframes shimmer {
    0% { transform: translateX(-100%); }
    100% { transform: translateX(100%); }
}

/* Pulse */
@keyframes pulse {
    0%, 100% { box-shadow: 0 0 0 0 rgba(233,69,96,0.4); }
    50% { box-shadow: 0 0 0 8px rgba(233,69,96,0); }
}

/* Neon Pulse */
@keyframes neonPulse {
    0%, 100% {
        text-shadow: 0 0 5px currentColor, 0 0 10px currentColor, 2px 2px 0 rgba(0,0,0,0.5);
        opacity: 1;
    }
    50% {
        text-shadow: 0 0 15px currentColor, 0 0 30px currentColor, 0 0 45px currentColor, 2px 2px 0 rgba(0,0,0,0.5);
        opacity: 0.95;
    }
}

@keyframes neonPulseCyan {
    0%, 100% {
        text-shadow: 0 0 5px rgba(0,212,255,0.5), 0 0 10px rgba(0,212,255,0.3);
    }
    50% {
        text-shadow: 0 0 15px rgba(0,212,255,0.8), 0 0 30px rgba(0,212,255,0.5), 0 0 45px rgba(0,212,255,0.3);
    }
}

/* Rank Gold Pulse */
@keyframes rankGoldPulse {
    0%, 100% { text-shadow: 0 0 20px var(--gold), 0 0 40px var(--gold); }
    50% { text-shadow: 0 0 40px var(--gold), 0 0 80px var(--gold), 0 0 120px rgba(255,215,0,0.3); }
}

/* Bubble Pop (消消乐消除) */
@keyframes bubblePop {
    0% { transform: scale(1); opacity: 1; }
    50% { transform: scale(1.3); opacity: 0.5; }
    100% { transform: scale(0); opacity: 0; }
}

/* Boss Idle */
@keyframes bossIdle {
    0%, 100% { transform: translateY(0) scale(1); }
    50% { transform: translateY(-5px) scale(1.05); }
}

/* Boss Hit */
@keyframes bossHit {
    0% { transform: scale(1); }
    20% { transform: scale(0.85) rotate(-5deg); }
    40% { transform: scale(1.1) rotate(3deg); }
    60% { transform: scale(0.95); }
    100% { transform: scale(1); }
}

/* Coin Rain */
@keyframes coinFall {
    0% { transform: translateY(-20px) rotate(0deg); opacity: 1; }
    100% { transform: translateY(100vh) rotate(720deg); opacity: 0; }
}

/* Fire Flicker (Streak) */
@keyframes fireFlicker {
    from { transform: scale(1) rotate(-3deg); }
    to { transform: scale(1.1) rotate(3deg); }
}

/* Chest Bounce */
@keyframes chestBounce {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-8px); }
}

/* Modal Pop In */
@keyframes modalPopIn {
    0% { transform: scale(0.7); opacity: 0; }
    100% { transform: scale(1); opacity: 1; }
}

/* Screen Crack (答错裂痕) */
@keyframes screenCrack {
    0% { opacity: 0; }
    20% { opacity: 0.8; }
    100% { opacity: 0; }
}

/* Pixel Transition */
@keyframes pixelIn {
    0% { filter: blur(10px) brightness(2); opacity: 0; }
    50% { filter: blur(5px) brightness(1.5); opacity: 0.5; }
    100% { filter: blur(0) brightness(1); opacity: 1; }
}

/* Slow Mo Effect */
@keyframes slowMoTrigger {
    0% { transform: scale(1); }
    50% { transform: scale(1.02); }
    100% { transform: scale(1); }
}

/* Spring Bounce */
@keyframes springBounce {
    0% { transform: scale(0); }
    60% { transform: scale(1.1); }
    80% { transform: scale(0.95); }
    100% { transform: scale(1); }
}

/* Warning Flash (Boss进入) */
@keyframes warningFlash {
    0%, 100% { background: transparent; }
    50% { background: rgba(255,0,0,0.15); }
}

/* Screen shake classes — 砸！*/
.shake-small { animation: shakeSmall 0.3s ease; }
.shake-medium { animation: shakeMedium 0.35s ease; }
.shake-big { animation: shakeBig 0.4s ease; }
.quake { animation: quake 0.5s ease; }

/* Impact flash */
.flash-active { opacity: 0.6 !important; }

/* Slow-mo body class */
body.slowmo * {
    animation-duration: 500ms !important;
    transition-duration: 500ms !important;
}

/* Pixel in transition */
.pixel-in { animation: pixelIn 0.5s ease-out; }

/* Warning flash */
.warning-flash { animation: warningFlash 0.15s ease 3; }

/* ══════════════════════════════════════
   RESPONSIVE
   ══════════════════════════════════════ */

@media (max-width: 360px) {
    .flash-card-container { height: 280px; }
    .flash-card .word { font-size: 2rem; }
    .flash-card .meaning { font-size: 1.5rem; }
    .quiz-options { gap: var(--space-sm); }
    .quiz-option { padding: var(--space-md); font-size: 1rem; }
    .login-title { font-size: 2rem; }
    .rank-letter { font-size: 4.5rem; }
}

@media (min-width: 768px) {
    .flash-card-container { height: 380px; }
}

/* ── Safe Area (for notched devices) ── */
@supports (padding-bottom: env(safe-area-inset-bottom)) {
    body {
        padding-bottom: env(safe-area-inset-bottom);
    }
}

/* ── Touch Optimizations ── */
@media (hover: none) {
    .quiz-option:hover {
        border-color: rgba(255,255,255,0.08);
        background: var(--bg-card);
    }
    .task-card:hover {
        border-color: rgba(255,255,255,0.06);
    }
}

/* ── Reduced Motion ── */
@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
    }
}

/* ══════════════════════════════════════
   UTILITIES
   ══════════════════════════════════════ */
.text-center { text-align: center; }
.text-gold { color: var(--gold); }
.text-green { color: var(--neon-green); }
.text-red { color: var(--neon-red); }
.text-dim { color: var(--text-dim); }
.mt-sm { margin-top: var(--space-sm); }
.mt-md { margin-top: var(--space-md); }
.mt-lg { margin-top: var(--space-lg); }
.mt-xl { margin-top: var(--space-xl); }
.mb-sm { margin-bottom: var(--space-sm); }
.mb-md { margin-bottom: var(--space-md); }
.mb-lg { margin-bottom: var(--space-lg); }
.gap-sm { gap: var(--space-sm); }
.gap-md { gap: var(--space-md); }
.flex-center { display: flex; align-items: center; justify-content: center; }
.flex-between { display: flex; align-items: center; justify-content: space-between; }
.w-full { width: 100%; }
.hidden { display: none !important; }

/* Listening practice */
.listening-summary,
.listening-player-head,
.listening-audio-panel,
.listening-practice-card {
  background: rgba(255,255,255,0.045);
  border: 1px solid rgba(255,255,255,0.08);
  border-radius: var(--radius-md);
  padding: 16px;
  margin-bottom: 14px;
}

.listening-summary {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 78px;
  align-items: center;
  gap: 12px;
}

.listening-kicker {
  color: var(--gold);
  font-size: 0.72rem;
  font-weight: 800;
  text-transform: uppercase;
}

.listening-title {
  font-size: 1.35rem;
  font-weight: 900;
  color: rgba(255,255,255,0.94);
  margin-top: 3px;
}

.listening-sub,
.listening-practice-desc,
.listening-score-line {
  color: var(--text-secondary);
  font-size: 0.82rem;
  line-height: 1.45;
  margin-top: 4px;
}

.listening-ring {
  width: 72px;
  height: 72px;
  border: 6px solid rgba(0,212,255,0.26);
  border-radius: 50%;
  display: flex;
  align-items: baseline;
  justify-content: center;
  gap: 2px;
  color: var(--accent-cyan);
}

.listening-ring strong {
  font-size: 1.35rem;
  color: var(--text-primary);
}

.listening-audio-panel audio {
  width: 100%;
}

.listening-speed-row,
.listening-cloze-row {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 8px;
  margin-top: 10px;
}

.listening-speed-row .btn,
.listening-cloze-row .btn {
  padding: 10px 8px;
  font-size: 0.82rem;
}

.listening-steps {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
  margin-bottom: 14px;
}

.listening-steps div {
  min-height: 70px;
  background: rgba(255,255,255,0.04);
  border: 1px solid rgba(255,255,255,0.07);
  border-radius: var(--radius-sm);
  padding: 10px;
}

.listening-steps strong {
  display: inline-flex;
  width: 24px;
  height: 24px;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--accent-cyan);
  color: #07121c;
  font-size: 0.76rem;
}

.listening-steps span {
  display: block;
  color: var(--text-secondary);
  font-size: 0.78rem;
  line-height: 1.35;
  margin-top: 8px;
}

.listening-practice-title {
  font-weight: 900;
  color: var(--text-primary);
  margin-bottom: 4px;
}

.listening-textarea,
.listening-input {
  width: 100%;
  background: rgba(0,0,0,0.22);
  border: 1px solid rgba(255,255,255,0.12);
  border-radius: var(--radius-sm);
  color: var(--text-primary);
  font-family: var(--font-body);
  font-size: 1rem;
  outline: none;
}

.listening-textarea {
  resize: vertical;
  min-height: 104px;
  padding: 12px;
  margin: 12px 0;
}

.listening-input {
  padding: 12px;
}

.listening-cloze-row {
  grid-template-columns: minmax(0, 1fr) 88px;
}

.listening-feedback {
  margin-top: 10px;
}

.listening-result {
  display: flex;
  gap: 8px;
  align-items: center;
  color: var(--neon-red);
  font-size: 0.86rem;
}

.listening-result.good {
  color: var(--neon-green);
}

.listening-keyword-bank {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-top: 8px;
}

.listening-keyword-bank span {
  border: 1px solid rgba(255,255,255,0.1);
  border-radius: var(--radius-full);
  color: var(--text-dim);
  font-size: 0.78rem;
  padding: 4px 8px;
}

.listening-keyword-bank span.hit {
  color: var(--neon-green);
  border-color: rgba(0,255,136,0.32);
  background: rgba(0,255,136,0.08);
}

.listening-cloze-item {
  border: 1px solid rgba(255,255,255,0.08);
  border-radius: var(--radius-sm);
  padding: 12px;
  margin-top: 10px;
  background: rgba(0,0,0,0.14);
}

.listening-cloze-item.correct {
  border-color: rgba(0,255,136,0.36);
}

.listening-cloze-item.wrong {
  border-color: rgba(255,82,82,0.4);
}

.listening-segment-list {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(86px, 1fr));
  gap: 8px;
  margin-top: 12px;
  max-height: 260px;
  overflow: auto;
  padding-right: 2px;
}

.listening-segment-chip {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 6px;
  border: 1px solid rgba(255,255,255,0.1);
  border-radius: var(--radius-sm);
  background: rgba(255,255,255,0.045);
  color: var(--text-primary);
  padding: 9px 10px;
  font-family: var(--font-body);
  font-size: 0.78rem;
  font-weight: 800;
  cursor: pointer;
}

.listening-segment-chip small {
  color: var(--text-dim);
  font-size: 0.68rem;
}

.listening-segment-chip.active {
  border-color: rgba(255,215,0,0.45);
  background: rgba(255,215,0,0.09);
}

.listening-segment-chip.ready small {
  color: var(--neon-green);
}

.listening-segment-drill {
  border: 1px solid rgba(255,255,255,0.08);
  border-radius: var(--radius-sm);
  padding: 12px;
  margin-top: 12px;
  background: rgba(0,0,0,0.14);
}

.listening-sentence-item {
  border: 1px solid rgba(255,255,255,0.08);
  border-radius: var(--radius-sm);
  padding: 12px;
  margin-top: 10px;
  background: rgba(0,0,0,0.14);
}

.listening-sentence-item.correct {
  border-color: rgba(0,255,136,0.36);
}

.listening-sentence-item.wrong {
  border-color: rgba(255,82,82,0.4);
}

.listening-sentence-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  color: var(--text-secondary);
  font-size: 0.82rem;
  font-weight: 800;
}

.listening-sentence-top .btn {
  padding: 8px 12px;
  font-size: 0.8rem;
}

.listening-sentence-input {
  min-height: 72px;
}

.listening-cloze-feedback span {
  color: var(--text-primary);
}

.writing-audio-list {
  display: grid;
  gap: 12px;
}

.writing-audio-item {
  padding: 10px;
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 8px;
  background: rgba(255, 255, 255, 0.03);
}

.writing-audio-item audio {
  width: 100%;
  margin-top: 8px;
}

.writing-level-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
  margin: 12px 0;
}

.writing-level-card {
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 8px;
  background: rgba(255, 255, 255, 0.03);
  color: var(--text-primary);
  padding: 12px;
  text-align: left;
  cursor: pointer;
}

.writing-level-card.active {
  border-color: var(--accent-cyan);
  box-shadow: 0 0 0 1px rgba(76, 201, 240, 0.35);
}

.writing-level-card span,
.writing-level-card em {
  display: block;
  color: var(--text-secondary);
  font-style: normal;
  font-size: 0.78rem;
}

.writing-level-card strong {
  display: block;
  margin: 4px 0;
  font-size: 1rem;
}

.writing-model {
  color: var(--text-primary);
  line-height: 1.65;
}

.writing-model p {
  margin: 0 0 6px;
}

.writing-model-muted {
  margin-top: 10px;
  color: var(--text-secondary);
}

.writing-list {
  margin: 0;
  padding-left: 20px;
  color: var(--text-primary);
  line-height: 1.55;
}

.writing-list li {
  margin-bottom: 6px;
}

.writing-draft {
  width: 100%;
  min-height: 180px;
  resize: vertical;
  border: 1px solid rgba(255, 255, 255, 0.1);
  border-radius: 8px;
  background: rgba(255, 255, 255, 0.04);
  color: var(--text-primary);
  padding: 12px;
  margin-bottom: 10px;
  font: inherit;
  line-height: 1.5;
}

.writing-checklist {
  display: grid;
  gap: 8px;
}

.writing-checklist label {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  color: var(--text-primary);
  line-height: 1.45;
}

.path-hero {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 14px;
  align-items: center;
  padding: 18px;
  border-radius: 12px;
  background: linear-gradient(135deg, rgba(0, 212, 255, 0.14), rgba(255, 45, 85, 0.1));
  border: 1px solid rgba(255, 255, 255, 0.08);
  margin-bottom: 14px;
}

.path-compass {
  width: 92px;
  height: 92px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  text-align: center;
  background: rgba(0, 0, 0, 0.22);
  border: 1px solid rgba(255, 255, 255, 0.12);
}

.path-compass strong,
.path-compass span {
  display: block;
}

.path-compass strong {
  font-size: 1.3rem;
}

.path-compass span {
  color: var(--text-secondary);
  font-size: 0.72rem;
  padding: 0 8px;
}

.ket-target-card,
.ket-route-card,
.ket-mission,
.ket-part-card,
.ket-week-card,
.ket-audit-card {
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 8px;
  background: rgba(255, 255, 255, 0.035);
}

.ket-target-card {
  padding: 14px;
  margin: 12px 0 16px;
  color: var(--text-secondary);
}

.ket-target-card strong {
  color: var(--text-primary);
}

.ket-target-card p {
  margin: 6px 0 0;
  line-height: 1.5;
}

.ket-mobile-more-note {
  display: none;
  padding: 14px 16px;
  margin: 12px 0 18px;
  border-radius: 8px;
  border: 1px solid rgba(0,229,255,0.14);
  background: rgba(0,229,255,0.07);
}

.ket-mobile-more-note strong,
.ket-mobile-more-note span {
  display: block;
}

.ket-mobile-more-note strong {
  color: var(--text-primary);
  font-size: 1rem;
}

.ket-mobile-more-note span {
  margin-top: 5px;
  color: var(--text-secondary);
  font-size: 0.92rem;
  line-height: 1.55;
}

.library-focus-note {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 10px 16px;
  margin: 0 0 14px;
  padding: 14px 16px;
  border: 1px solid rgba(255, 255, 255, 0.12);
  border-radius: 16px;
  background: rgba(9, 18, 35, 0.56);
}

.library-focus-note strong,
.library-focus-note span {
  display: block;
}

.library-focus-note strong {
  color: var(--text-primary);
  font-size: 1rem;
}

.library-focus-note span {
  margin-top: 4px;
  color: var(--text-secondary);
  line-height: 1.45;
}

.library-focus-note .btn {
  grid-row: 1 / span 2;
  grid-column: 2;
  white-space: nowrap;
}

.ket-route-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px;
}

.ket-route-card {
  padding: 12px;
  display: grid;
  gap: 10px;
  align-content: start;
}

.ket-route-card.active {
  border-color: rgba(0, 212, 255, 0.45);
  background: rgba(0, 212, 255, 0.08);
}

.ket-route-top {
  display: grid;
  gap: 4px;
}

.ket-route-top strong {
  color: var(--text-primary);
  font-size: 0.98rem;
}

.ket-route-top span,
.ket-route-card p,
.ket-route-card em {
  color: var(--text-secondary);
  font-size: 0.8rem;
  line-height: 1.45;
  font-style: normal;
  margin: 0;
}

.ket-route-card em {
  color: var(--accent-cyan);
}

.ket-status-strip {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 8px;
  margin: 0 0 16px;
}

.ket-path-alert {
  display: grid;
  grid-template-columns: 1fr auto auto;
  gap: 10px;
  align-items: center;
  margin: 12px 0;
  padding: 12px;
  border: 1px solid rgba(0, 212, 255, 0.2);
  border-radius: 8px;
  background: rgba(0, 212, 255, 0.055);
}

.ket-path-alert.status-high {
  border-color: rgba(255, 82, 82, 0.32);
  background: rgba(255, 82, 82, 0.08);
}

.ket-path-alert.status-warm {
  border-color: rgba(255, 149, 0, 0.32);
  background: rgba(255, 149, 0, 0.08);
}

.ket-path-alert strong,
.ket-path-alert span,
.ket-path-alert p {
  display: block;
}

.ket-path-alert strong {
  color: var(--text-primary);
}

.ket-path-alert p,
.ket-path-alert span {
  margin: 3px 0 0;
  color: var(--text-secondary);
  font-size: 0.78rem;
  line-height: 1.45;
}

.ket-path-alert > div:not(:first-child) {
  min-width: 76px;
  text-align: center;
  padding: 8px;
  border-radius: 8px;
  background: rgba(255, 255, 255, 0.035);
}

.ket-status-strip div {
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 8px;
  background: rgba(255, 255, 255, 0.035);
  padding: 10px;
}

.ket-status-strip strong,
.ket-status-strip span {
  display: block;
}

.ket-status-strip strong {
  color: var(--text-primary);
  font-size: 1.1rem;
}

.ket-status-strip span {
  color: var(--text-secondary);
  font-size: 0.75rem;
}

.ket-mission-list {
  display: grid;
  gap: 10px;
}

.ket-mission {
  display: grid;
  grid-template-columns: 32px minmax(0, 1fr) auto auto;
  gap: 10px;
  align-items: center;
  padding: 12px;
}

.ket-mission.done {
  opacity: 0.72;
  border-color: rgba(0, 255, 136, 0.24);
}

.ket-mission-index {
  width: 32px;
  height: 32px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  background: rgba(0, 212, 255, 0.14);
  color: var(--accent-cyan);
  font-weight: 900;
}

.ket-mission-title {
  color: var(--text-primary);
  font-weight: 800;
}

.ket-mission-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: 6px 0;
}

.ket-mission-meta span {
  display: inline-flex;
  align-items: center;
  min-height: 24px;
  padding: 2px 8px;
  border-radius: 999px;
  border: 1px solid rgba(255, 255, 255, 0.08);
  background: rgba(255, 255, 255, 0.045);
  color: var(--text-secondary);
  font-size: 0.72rem;
}

.ket-mission-actions {
  display: grid;
  grid-template-columns: repeat(2, max-content);
  gap: 8px;
}

.ket-mission-title span,
.ket-mission-desc,
.ket-xp {
  color: var(--text-secondary);
  font-size: 0.8rem;
}

.ket-xp {
  white-space: nowrap;
}

.ket-part-group {
  margin-top: 12px;
}

.ket-part-title {
  color: var(--text-primary);
  font-weight: 800;
  margin-bottom: 8px;
}

.ket-part-grid,
.ket-week-grid,
.ket-audit-grid {
  display: grid;
  gap: 8px;
}

.ket-part-grid {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.ket-week-grid {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

.ket-audit-grid {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.ket-part-card,
.ket-week-card,
.ket-audit-card {
  padding: 12px;
}

.ket-part-card strong,
.ket-week-card strong,
.ket-audit-card strong {
  display: block;
  color: var(--text-primary);
  margin-bottom: 4px;
}

.ket-part-card span,
.ket-week-card span,
.ket-audit-card span,
.ket-week-card em,
.ket-audit-card p {
  display: block;
  color: var(--text-secondary);
  font-style: normal;
  font-size: 0.82rem;
  line-height: 1.45;
}

.ket-part-card em,
.ket-audit-card em {
  display: inline-block;
  margin-top: 8px;
  padding: 3px 8px;
  border-radius: 999px;
  font-style: normal;
  font-size: 0.72rem;
}

.status-strong em,
.verdict-good em {
  background: rgba(0, 255, 136, 0.16);
  color: var(--neon-green);
}

.status-usable em,
.verdict-ok em {
  background: rgba(0, 212, 255, 0.16);
  color: var(--accent-cyan);
}

.status-needs-more em,
.status-weak em,
.verdict-gap em {
  background: rgba(255, 149, 0, 0.16);
  color: var(--gold);
}

.ket-week-card.active {
  border-color: var(--accent-cyan);
  box-shadow: 0 0 0 1px rgba(76, 201, 240, 0.35);
}

.ket-week-num {
  color: var(--accent-cyan);
  font-size: 0.78rem;
  font-weight: 800;
  margin-bottom: 4px;
}

.account-login-card {
  box-sizing: border-box;
  width: 100%;
  max-width: 420px;
  margin: 18px auto 16px;
  padding: 14px;
  border: 1px solid rgba(0, 212, 255, 0.2);
  border-radius: 8px;
  background: rgba(255, 255, 255, 0.045);
  display: grid;
  gap: 10px;
}

.account-login-card *,
.local-create-row * {
  box-sizing: border-box;
}

.account-login-title,
.local-login-title {
  color: var(--text-primary);
  font-weight: 900;
  text-align: center;
}

.account-login-sub,
.account-sync-note {
  color: var(--text-secondary);
  font-size: 0.82rem;
  line-height: 1.45;
  text-align: center;
}

.account-input {
  width: 100%;
  min-height: 42px;
  padding: 9px 12px;
  border-radius: 8px;
  border: 1px solid rgba(255, 255, 255, 0.12);
  background: rgba(0, 0, 0, 0.22);
  color: var(--text-primary);
  outline: none;
}

.account-input:focus {
  border-color: rgba(0, 212, 255, 0.55);
  box-shadow: 0 0 0 2px rgba(0, 212, 255, 0.12);
}

.account-login-actions,
.local-create-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
}

.local-create-row {
  box-sizing: border-box;
  width: 100%;
  max-width: 420px;
  margin: 12px auto 0;
}

.exam-hero,
.exam-text-card,
.exam-feedback-card,
.mock-card,
.mock-section {
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 8px;
  background: rgba(255, 255, 255, 0.04);
}

.exam-hero {
  padding: 16px;
  margin-bottom: 14px;
}

.exam-text-card {
  padding: 24px 28px;
  font-size: 1.12rem;
  line-height: 1.85;
  font-weight: 500;
  color: var(--text-primary);
  white-space: pre-line;
  margin-bottom: 14px;
}

.exam-text-card.compact {
  margin-bottom: 0;
}

.cloze-input {
  width: 88px;
  min-height: 44px;
  border-radius: 8px;
  border: 1px solid rgba(255, 255, 255, 0.16);
  background: rgba(0, 0, 0, 0.24);
  color: var(--text-primary);
  padding: 8px 10px;
  font-size: 1.05rem;
  font-weight: 800;
}

.cloze-result {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  min-height: 30px;
  padding: 3px 8px;
  border-radius: 8px;
  font-weight: 800;
}

.cloze-result.correct {
  background: rgba(0, 255, 136, 0.14);
  color: var(--neon-green);
}

.cloze-result.wrong {
  background: rgba(255, 149, 0, 0.16);
  color: var(--gold);
}

.cloze-result em {
  color: var(--text-secondary);
  font-size: 0.72rem;
  font-style: normal;
}

.exam-feedback-card {
  padding: 14px;
  margin-bottom: 14px;
}

.exam-feedback-card strong {
  display: block;
  color: var(--text-primary);
  margin-bottom: 8px;
}

.exam-feedback-card p,
.mock-note {
  color: var(--text-secondary);
  line-height: 1.55;
  margin: 6px 0;
}

.exam-focus-list {
  display: grid;
  gap: 6px;
  margin: 10px 0 14px;
}

.exam-focus-list span {
  color: var(--text-secondary);
  font-size: 0.82rem;
}

.mock-grid {
  display: grid;
  gap: 10px;
}

.mock-card {
  padding: 14px;
  display: grid;
  gap: 10px;
}

.mock-card strong,
.mock-section-title,
.writing-task strong {
  color: var(--text-primary);
  font-weight: 900;
}

.mock-card span,
.writing-task p {
  color: var(--text-secondary);
  line-height: 1.5;
}

.mock-section {
  padding: 14px;
  margin-bottom: 12px;
}

.mock-section-title {
  margin-bottom: 10px;
}

.placement-row {
  display: grid;
  grid-template-columns: 34px minmax(0, 1fr) auto;
  gap: 10px;
  align-items: start;
  padding: 12px 0;
  border-top: 1px solid rgba(255,255,255,0.07);
}

.placement-row:first-of-type {
  border-top: 0;
  padding-top: 2px;
}

.placement-score {
  width: 26px;
  height: 26px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: rgba(255,255,255,0.1);
  color: var(--text-secondary);
  font-size: 0.75rem;
  font-weight: 900;
}

.placement-title {
  color: var(--text-primary);
  font-weight: 900;
  font-size: 0.96rem;
}

.placement-desc {
  color: var(--text-dim);
  font-size: 0.78rem;
  line-height: 1.45;
  margin-top: 3px;
}

.placement-badge {
  color: var(--gold);
  font-size: 0.72rem;
  font-weight: 900;
}

.placement-band {
  display: grid;
  gap: 8px;
  padding: 12px 0;
  border-top: 1px solid rgba(255,255,255,0.07);
}

.placement-band:first-of-type {
  border-top: 0;
  padding-top: 0;
}

.placement-band strong {
  color: var(--text-primary);
  font-weight: 900;
}

.placement-band span {
  color: var(--text-secondary);
  line-height: 1.5;
}

.placement-hero {
  margin-bottom: 14px;
}

.placement-panel,
.placement-summary-card {
  border-radius: 8px;
}

.placement-test-header {
  align-items: center;
  gap: 12px;
}

.placement-progress {
  display: grid;
  gap: 5px;
  width: min(220px, 42vw);
}

.placement-progress-meta {
  display: flex;
  justify-content: space-between;
  color: var(--text-dim);
  font-size: 0.72rem;
  font-weight: 800;
}

.placement-question-shell {
  display: grid;
  gap: 18px;
  max-width: 920px;
  margin: 0 auto;
}

.placement-question-top {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 12px;
  align-items: start;
  padding: 18px;
  border-radius: 8px;
  background: rgba(255,255,255,0.045);
  border: 1px solid rgba(255,255,255,0.08);
}

.placement-question-top h2 {
  margin: 4px 0 5px;
  color: var(--text-primary);
  font-size: 1.42rem;
  line-height: 1.18;
}

.placement-question-top p {
  margin: 0;
  color: var(--text-secondary);
  line-height: 1.45;
}

.placement-stage {
  color: var(--gold);
  font-size: 0.75rem;
  font-weight: 900;
  text-transform: uppercase;
}

.placement-phase-badge {
  padding: 7px 10px;
  border-radius: 999px;
  border: 1px solid rgba(255,255,255,0.12);
  background: rgba(0,212,255,0.1);
  color: var(--accent-cyan);
  font-size: 0.74rem;
  font-weight: 900;
  white-space: nowrap;
}

.placement-reading-card,
.placement-audio-card,
.placement-question-card,
.placement-feedback {
  border-radius: 8px;
  border: 1px solid rgba(255,255,255,0.09);
  background: rgba(255,255,255,0.04);
}

.placement-reading-card {
  overflow: hidden;
  background: rgba(255,255,255,0.045);
}

.placement-reading-head {
  display: flex;
  justify-content: space-between;
  gap: 10px;
  padding: 10px 14px;
  color: var(--text-dim);
  font-size: 0.72rem;
  font-weight: 900;
  border-bottom: 1px solid rgba(255,255,255,0.08);
}

.placement-passage {
  padding: 26px 30px;
  max-height: min(58vh, 560px);
  overflow: auto;
  color: #FFFFFF;
  font-family: "Segoe UI", Arial, sans-serif;
  font-size: 1.2rem;
  font-weight: 600;
  line-height: 1.9;
  letter-spacing: 0;
  max-width: 72ch;
  margin: 0 auto;
  background: transparent;
  scrollbar-width: thin;
}

.placement-passage-focus {
  max-height: none;
  background: rgba(255, 214, 10, 0.055);
}

.placement-passage-full {
  max-height: 180px;
  color: var(--text-secondary);
  font-size: 0.94rem;
}

.placement-passage p {
  margin: 0 0 1.05em;
}

.placement-passage p:last-child {
  margin-bottom: 0;
}

.placement-gap {
  display: inline-block;
  padding: 0 9px 3px;
  margin: 0 3px;
  border-radius: 6px;
  background: rgba(255, 214, 10, 0.16);
  color: var(--gold);
  border-bottom: 2px solid var(--gold);
  font-weight: 900;
}

.placement-audio-card {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 12px;
  align-items: center;
  padding: 14px;
}

.placement-audio-card strong,
.placement-audio-card span {
  display: block;
}

.placement-audio-card strong {
  color: var(--text-primary);
  font-size: 1rem;
}

.placement-audio-card span {
  margin-top: 4px;
  color: var(--text-secondary);
  line-height: 1.45;
  font-size: 0.86rem;
}

.placement-question-card {
  display: grid;
  gap: 14px;
  padding: 20px;
}

.placement-prompt {
  color: var(--text-primary);
  font-size: 1.14rem;
  font-weight: 900;
  line-height: 1.55;
}

.placement-options {
  display: grid;
  gap: 9px;
}

.placement-option {
  display: grid;
  grid-template-columns: 28px minmax(0, 1fr);
  gap: 12px;
  align-items: center;
  min-height: 58px;
  text-align: left;
  color: var(--text-primary);
  background: rgba(255,255,255,0.045);
  border: 1px solid rgba(255,255,255,0.09);
  border-radius: 8px;
  padding: 13px 15px;
  line-height: 1.5;
  font-size: 1.04rem;
  font-family: "Segoe UI", Arial, sans-serif;
  font-weight: 600;
}

.placement-option-letter {
  width: 28px;
  height: 28px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: rgba(255,255,255,0.09);
  color: var(--text-secondary);
  font-size: 0.75rem;
  font-weight: 900;
}

.placement-option.selected {
  border-color: var(--accent-cyan);
  background: rgba(0,212,255,0.12);
}

.placement-option.correct {
  border-color: rgba(0,255,136,0.55);
  background: rgba(0,255,136,0.14);
}

.placement-option.wrong {
  border-color: rgba(255,45,85,0.6);
  background: rgba(255,45,85,0.13);
}

.placement-feedback {
  padding: 14px 16px;
}

.placement-feedback strong {
  color: var(--text-primary);
  font-weight: 900;
}

.placement-feedback p {
  margin: 5px 0 0;
  color: var(--text-secondary);
  line-height: 1.5;
}

.placement-feedback-detail {
  display: grid;
  gap: 8px;
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px solid rgba(255,45,85,0.18);
}

.placement-feedback-detail p {
  margin: 0;
  color: var(--text-secondary);
  font-size: 0.92rem;
  line-height: 1.55;
  font-weight: 700;
}

.placement-feedback-detail strong {
  color: var(--text-primary);
}

.placement-feedback.is-correct {
  border-color: rgba(0,255,136,0.25);
}

.placement-feedback.is-wrong {
  border-color: rgba(255,45,85,0.28);
}

.placement-result-hero {
  border-radius: 8px;
}

.placement-simple-hero {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 18px;
  align-items: center;
  padding: 22px;
  margin-bottom: 14px;
  border: 1px solid rgba(255,255,255,0.1);
  border-radius: 8px;
  background: linear-gradient(135deg, rgba(255,255,255,0.06), rgba(0,229,255,0.08));
}

.placement-simple-title {
  margin-top: 6px;
  color: var(--text-primary);
  font-size: 1.65rem;
  font-weight: 900;
  line-height: 1.25;
}

.placement-simple-hero p,
.placement-next-card p {
  margin: 8px 0 0;
  color: var(--text-secondary);
  font-size: 1.02rem;
  line-height: 1.65;
}

.placement-simple-score {
  min-width: 110px;
  text-align: center;
  padding: 14px 16px;
  border-radius: 8px;
  background: rgba(255, 214, 10, 0.12);
  border: 1px solid rgba(255, 214, 10, 0.26);
}

.placement-simple-score strong {
  display: block;
  color: var(--gold);
  font-size: 2.6rem;
  line-height: 1;
}

.placement-simple-score span {
  color: var(--text-secondary);
  font-size: 0.95rem;
  font-weight: 800;
}

.placement-next-card {
  padding: 18px;
  margin-bottom: 14px;
  border: 1px solid rgba(255,255,255,0.09);
  border-radius: 8px;
  background: rgba(255,255,255,0.045);
}

.placement-next-card strong {
  display: block;
  color: var(--text-primary);
  font-size: 1.08rem;
  line-height: 1.35;
}

.placement-simple-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 12px;
}

.placement-chip-row {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 12px;
}

.placement-chip-row span {
  padding: 7px 10px;
  border-radius: 999px;
  color: var(--cyan);
  background: rgba(0, 229, 255, 0.1);
  border: 1px solid rgba(0, 229, 255, 0.22);
  font-size: 0.92rem;
  font-weight: 800;
}

.placement-mini-rows {
  display: grid;
  gap: 8px;
  margin-top: 12px;
}

.placement-mini-rows div {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  padding: 8px 0;
  border-bottom: 1px solid rgba(255,255,255,0.06);
}

.placement-mini-rows span {
  color: var(--text-secondary);
}

.placement-mini-rows b {
  color: var(--gold);
}

.placement-task-list.compact {
  margin-top: 12px;
}

.placement-cap-note {
  width: min(520px, 100%);
  margin: 12px auto 0;
  padding: 9px 12px;
  border-radius: 8px;
  border: 1px solid rgba(255, 215, 0, 0.22);
  background: rgba(255, 215, 0, 0.08);
  color: var(--text-secondary);
  font-size: 0.82rem;
  line-height: 1.45;
}

.placement-diagnostic-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(132px, 1fr));
  gap: 10px;
}

.placement-diagnostic-card {
  min-height: 98px;
  display: grid;
  align-content: space-between;
  gap: 7px;
  padding: 12px;
  border-radius: 8px;
  border: 1px solid rgba(0, 255, 136, 0.18);
  background: rgba(0, 255, 136, 0.08);
}

.placement-diagnostic-card.needs-work {
  border-color: rgba(255, 215, 0, 0.26);
  background: rgba(255, 215, 0, 0.08);
}

.placement-diagnostic-card span,
.placement-diagnostic-card small {
  color: var(--text-secondary);
  line-height: 1.35;
}

.placement-diagnostic-card span {
  font-size: 0.78rem;
  font-weight: 900;
}

.placement-diagnostic-card strong {
  color: var(--text-primary);
  font-size: 1.18rem;
  line-height: 1;
}

.placement-diagnostic-card small {
  font-size: 0.74rem;
}

.placement-task-list {
  display: grid;
  gap: 9px;
}

.placement-task {
  display: grid;
  grid-template-columns: 28px minmax(0, 1fr);
  gap: 10px;
  align-items: center;
  padding: 11px 12px;
  border-radius: 8px;
  border: 1px solid rgba(255,255,255,0.08);
  background: rgba(255,255,255,0.045);
}

.placement-task span {
  width: 28px;
  height: 28px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: rgba(0, 212, 255, 0.13);
  color: var(--accent-cyan);
  font-size: 0.75rem;
  font-weight: 900;
}

.placement-task strong {
  color: var(--text-primary);
  font-size: 0.94rem;
  line-height: 1.35;
}

.mock-option.correct {
  border-color: rgba(0,255,136,0.55);
  background: rgba(0,255,136,0.14);
}

.mock-option.wrong {
  border-color: rgba(255,45,85,0.6);
  background: rgba(255,45,85,0.13);
}

.exam-mini-text {
  color: var(--text-secondary);
  line-height: 1.55;
  font-size: 0.9rem;
  margin-bottom: 12px;
}

.mock-question {
  display: grid;
  gap: 8px;
  margin: 12px 0;
}

.mock-question strong {
  color: var(--text-primary);
  font-size: 0.9rem;
  line-height: 1.45;
}

.mock-options {
  display: grid;
  gap: 7px;
}

.mock-option {
  text-align: left;
  color: var(--text-primary);
  background: rgba(255, 255, 255, 0.045);
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 8px;
  padding: 10px 12px;
}

.mock-option.selected {
  border-color: var(--accent-cyan);
  background: rgba(0, 212, 255, 0.12);
}

.writing-task {
  display: grid;
  gap: 8px;
  margin: 12px 0;
}

.listening-cloze-prompt {
  color: var(--text-primary);
  font-weight: 700;
  line-height: 1.5;
}

.listening-cloze-feedback {
  color: var(--text-dim);
  font-size: 0.78rem;
  margin-top: 7px;
}

/* ── Screen readability pass ── */
.btn {
  min-height: 46px;
  font-size: 1.05rem;
}

.btn-large {
  min-height: 56px;
  font-size: 1.22rem;
}

.card,
.task-card,
.listening-practice-card,
.listening-audio-panel,
.writing-level-card,
.ket-target-card,
.ket-route-card,
.ket-part-card,
.ket-week-card,
.ket-audit-card,
.exam-feedback-card,
.placement-question-card,
.placement-reading-card {
  font-size: 1rem;
}

.task-card .task-name,
.listening-practice-title,
.ket-part-card strong,
.ket-week-card strong,
.ket-audit-card strong,
.writing-level-card strong {
  font-size: 1.08rem;
}

.task-card .task-desc,
.account-login-sub,
.account-sync-note,
.listening-sub,
.listening-practice-desc,
.listening-score-line,
.ket-route-card p,
.ket-route-card em,
.ket-part-card span,
.ket-week-card span,
.ket-audit-card span,
.ket-week-card em,
.ket-audit-card p,
.writing-level-card span,
.writing-level-card em {
  font-size: 0.95rem;
  line-height: 1.62;
}

.quiz-option,
.placement-option {
  font-size: 1.12rem;
  line-height: 1.58;
}

.quiz-question,
.question-text,
.placement-prompt,
.listening-cloze-prompt,
.writing-model,
.writing-list,
.writing-checklist label {
  font-size: 1.08rem;
  line-height: 1.7;
}

.reading-practice-title {
  text-align: center;
  margin-bottom: 12px;
  color: var(--gold);
  font-size: 1rem;
  font-weight: 800;
  line-height: 1.45;
}

.reading-passage-card {
  max-height: min(62vh, 620px);
  overflow-y: auto;
  margin-bottom: 18px;
  padding: 26px 30px;
}

.reading-passage-text {
  max-width: 72ch;
  margin: 0 auto;
  color: var(--text-primary);
  font-size: 1.15rem;
  line-height: 1.9;
  font-weight: 520;
  letter-spacing: 0;
  white-space: pre-line;
}

.reading-question-heading {
  font-size: 1.05rem;
  margin-bottom: 12px;
}

.reading-question-block {
  margin-bottom: 18px;
  padding: 0 4px;
}

.reading-question-text {
  margin-bottom: 10px;
  color: var(--text-primary);
  font-size: 1.08rem;
  line-height: 1.58;
  font-weight: 800;
}

.reading-option {
  padding: 15px 16px;
  font-size: 1.08rem;
  line-height: 1.58;
  text-align: left;
}

.listening-speed-row .btn,
.listening-cloze-row .btn,
.listening-sentence-top .btn {
  font-size: 0.95rem;
}

.listening-steps span,
.listening-result,
.listening-keyword-bank span,
.listening-segment-chip,
.listening-sentence-top,
.listening-cloze-feedback {
  font-size: 0.92rem;
  line-height: 1.55;
}

.listening-input,
.listening-textarea,
.writing-draft,
.account-input {
  font-size: 1.05rem;
  line-height: 1.6;
}

@media (max-width: 520px) {
  .placement-row {
    grid-template-columns: 30px minmax(0, 1fr);
  }
  .placement-row .placement-badge {
    grid-column: 2;
    justify-self: start;
  }
  .placement-test-header {
    grid-template-columns: auto minmax(0, 1fr);
  }
  .placement-progress {
    width: 100%;
  }
  .placement-question-top {
    grid-template-columns: 1fr;
    padding: 15px;
  }
  .placement-simple-hero,
  .placement-simple-grid {
    grid-template-columns: 1fr;
  }
  .placement-simple-score {
    width: 100%;
  }
  .placement-phase-badge {
    justify-self: start;
  }
  .placement-question-top h2 {
    font-size: 1.22rem;
  }
  .placement-passage {
    max-height: 54vh;
    padding: 19px 18px;
    font-size: 1.08rem;
    line-height: 1.82;
    max-width: none;
  }
  .placement-audio-card {
    grid-template-columns: 1fr;
  }
  .placement-audio-card .btn {
    width: 100%;
  }
  .placement-question-card {
    padding: 16px;
  }
  .placement-prompt {
    font-size: 1.04rem;
  }
  .placement-option {
    grid-template-columns: 26px minmax(0, 1fr);
    min-height: 54px;
    padding: 12px 12px;
    font-size: 0.98rem;
  }
  .reading-passage-card {
    max-height: 56vh;
    padding: 20px 18px;
  }
  .reading-passage-text,
  .exam-text-card {
    font-size: 1.04rem;
    line-height: 1.82;
  }
  .reading-option {
    padding: 13px 14px;
    font-size: 1rem;
  }
  .cloze-input {
    width: 76px;
    min-height: 40px;
  }
  .listening-summary {
    grid-template-columns: 1fr;
  }
  .listening-steps {
    grid-template-columns: 1fr;
  }
  .listening-speed-row {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

/* Speaking practice */
.speaking-summary,
.speaking-topic-head,
.speaking-question-card,
.speaking-timer-card,
.speaking-recorder-card,
.speaking-answer-card,
.speaking-score-card {
  background: rgba(255,255,255,0.045);
  border: 1px solid rgba(255,255,255,0.08);
  border-radius: var(--radius-md);
  padding: 16px;
  margin-bottom: 14px;
}

.speaking-ai-card {
  background: rgba(255,255,255,0.045);
  border: 1px solid rgba(255,255,255,0.08);
  border-radius: var(--radius-md);
  padding: 16px;
  margin-bottom: 14px;
}

.speaking-summary {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 78px;
  align-items: center;
  gap: 12px;
}

.speaking-kicker {
  color: var(--gold);
  font-size: 0.72rem;
  font-weight: 800;
  text-transform: uppercase;
}

.speaking-title {
  font-size: 1.35rem;
  font-weight: 900;
  color: var(--text-primary);
  margin-top: 3px;
}

.speaking-sub,
.speaking-rec-status {
  color: var(--text-secondary);
  font-size: 0.82rem;
  line-height: 1.45;
  margin-top: 4px;
}

.speaking-ring {
  width: 72px;
  height: 72px;
  border: 6px solid rgba(255,215,0,0.24);
  border-radius: 50%;
  display: flex;
  align-items: baseline;
  justify-content: center;
  gap: 2px;
  color: var(--gold);
}

.speaking-ring strong {
  font-size: 1.35rem;
  color: var(--text-primary);
}

.speaking-card-label {
  color: var(--neon-green);
  font-size: 0.78rem;
  font-weight: 800;
  margin-bottom: 8px;
}

.speaking-question-text {
  color: var(--text-primary);
  font-size: 1.28rem;
  font-weight: 800;
  line-height: 1.5;
}

.speaking-actions {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
  margin-top: 12px;
}

.speaking-actions .btn {
  padding: 10px 8px;
  font-size: 0.86rem;
}

.speaking-timer {
  font-family: var(--font-title);
  font-size: 3rem;
  line-height: 1;
  color: var(--gold);
  text-align: center;
  text-shadow: 0 0 18px rgba(255,215,0,0.24);
}

.speaking-answer-actions {
  margin-bottom: 14px;
}

.speaking-answer-text {
  color: var(--text-primary);
  font-size: 1rem;
  line-height: 1.65;
  margin-bottom: 12px;
}

.speaking-tip {
  color: var(--gold);
  background: rgba(255,215,0,0.08);
  border: 1px solid rgba(255,215,0,0.14);
  border-radius: var(--radius-sm);
  padding: 10px 12px;
  font-size: 0.82rem;
  line-height: 1.5;
  margin-top: 10px;
}

.speaking-score-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
}

.speaking-score-grid .btn {
  padding: 10px 8px;
  font-size: 0.82rem;
}

.speaking-draft {
  width: 100%;
  min-height: 100px;
  resize: vertical;
  background: rgba(0,0,0,0.22);
  border: 1px solid rgba(255,255,255,0.12);
  border-radius: var(--radius-sm);
  color: var(--text-primary);
  font-family: var(--font-body);
  font-size: 1rem;
  outline: none;
  padding: 12px;
  margin: 10px 0;
}

.speaking-local-score {
  margin-top: 10px;
}

.speaking-local-pill {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 72px;
  height: 36px;
  border-radius: var(--radius-full);
  background: rgba(255,215,0,0.12);
  border: 1px solid rgba(255,215,0,0.24);
  color: var(--gold);
  font-weight: 900;
}

@media (max-width: 520px) {
  .speaking-summary {
    grid-template-columns: 1fr;
  }
  .speaking-score-grid {
    grid-template-columns: 1fr;
  }
}

/* Weak review */
.weak-summary,
.weak-empty,
.weak-card {
  background: rgba(255,255,255,0.045);
  border: 1px solid rgba(255,255,255,0.08);
  border-radius: var(--radius-md);
  padding: 16px;
  margin-bottom: 14px;
}

.weak-summary {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 150px;
  gap: 12px;
  align-items: center;
}

.weak-kicker {
  color: var(--gold);
  font-size: 0.72rem;
  font-weight: 800;
  text-transform: uppercase;
}

.weak-title {
  font-size: 1.35rem;
  font-weight: 900;
  color: var(--text-primary);
  margin-top: 3px;
}

.weak-sub,
.weak-card-desc,
.weak-meta {
  color: var(--text-secondary);
  font-size: 0.82rem;
  line-height: 1.45;
}

.weak-mini-stats {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
}

.weak-mini-stats div {
  background: rgba(0,0,0,0.16);
  border: 1px solid rgba(255,255,255,0.07);
  border-radius: var(--radius-sm);
  padding: 10px;
  text-align: center;
}

.weak-mini-stats strong {
  display: block;
  color: var(--gold);
  font-size: 1.25rem;
}

.weak-mini-stats span {
  color: var(--text-dim);
  font-size: 0.76rem;
}

.weak-list {
  display: grid;
  gap: 10px;
}

.weak-card-top {
  display: flex;
  justify-content: space-between;
  gap: 10px;
  align-items: center;
  margin-bottom: 8px;
}

.weak-type {
  color: var(--neon-green);
  font-size: 0.76rem;
  font-weight: 900;
}

.weak-card-title {
  color: var(--text-primary);
  font-size: 1rem;
  font-weight: 850;
  line-height: 1.45;
  margin-bottom: 6px;
}

.weak-card .btn {
  margin-top: 12px;
}

.weak-empty {
  text-align: center;
  padding: 42px 18px;
}

@media (max-width: 520px) {
  .weak-summary {
    grid-template-columns: 1fr;
  }
}

/* Sentence dictation */
.dictation-card {
  background: rgba(255,255,255,0.045);
  border: 1px solid rgba(255,255,255,0.08);
  border-radius: var(--radius-md);
  padding: 16px;
  margin-bottom: 14px;
}

.dictation-kicker {
  color: var(--gold);
  font-size: 0.72rem;
  font-weight: 800;
  text-transform: uppercase;
}

.dictation-title {
  color: var(--text-primary);
  font-size: 1.35rem;
  font-weight: 900;
  margin-top: 3px;
}

.dictation-sub,
.dictation-label,
.dictation-tip {
  color: var(--text-secondary);
  font-size: 0.84rem;
  line-height: 1.5;
  margin-top: 4px;
}

.dictation-textarea {
  width: 100%;
  min-height: 112px;
  resize: vertical;
  background: rgba(0,0,0,0.22);
  border: 1px solid rgba(255,255,255,0.12);
  border-radius: var(--radius-sm);
  color: var(--text-primary);
  font-family: var(--font-body);
  font-size: 1rem;
  outline: none;
  padding: 12px;
  margin: 10px 0;
}

.dictation-score {
  color: var(--gold);
  font-family: var(--font-title);
  font-size: 2.4rem;
  line-height: 1;
}

.dictation-answer {
  color: var(--text-primary);
  font-weight: 800;
  line-height: 1.55;
  margin-top: 8px;
}

.dictation-good {
  border-color: rgba(0,255,136,0.35);
}

.dictation-warn {
  border-color: rgba(255,215,0,0.28);
}

/* Product health */
.health-hero,
.health-list {
  background: rgba(255,255,255,0.045);
  border: 1px solid rgba(255,255,255,0.08);
  border-radius: var(--radius-md);
  padding: 16px;
  margin-bottom: 14px;
}

.health-kicker {
  color: var(--gold);
  font-size: 0.72rem;
  font-weight: 800;
  text-transform: uppercase;
}

.health-title {
  color: var(--text-primary);
  font-size: 1.4rem;
  font-weight: 900;
  margin-top: 3px;
}

.health-sub {
  color: var(--text-secondary);
  font-size: 0.82rem;
  line-height: 1.5;
  margin-top: 4px;
}

/* IPA phonetic symbols — ensure proper rendering */
.phonetic, [class*="phonetic"], .word-detail .phonetic {
    font-family: "Noto Sans", "Segoe UI", "Lucida Sans Unicode", serif !important;
}

/* Inline phonetic display (quiz cards, mistake book) */
.phonetic-inline, .flash-card .phonetic {
    font-family: "Noto Sans", "Segoe UI", "Lucida Sans Unicode", serif !important;
    font-size: 0.8rem;
    color: var(--text-dim);
}
/* ═══════════════════════════════════════════
   Dashboard Redesign — Learning Path Layout
   ═══════════════════════════════════════════ */

/* ── Hero area (streak + greeting + stats) ── */
.dash-hero {
  text-align: center;
  padding-bottom: var(--space-lg);
}

.dash-greeting {
  font-family: var(--font-marker);
  font-size: 1.3rem;
  color: var(--text-secondary);
  margin-top: var(--space-sm);
}

.dash-stage {
  font-family: var(--font-title);
  font-size: 1.6rem;
  margin-bottom: var(--space-lg);
}

.progress-row {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
  margin-top: var(--space-md);
}

.progress-label {
  font-size: 0.8rem;
  color: var(--text-dim);
  white-space: nowrap;
}

.progress-pct {
  font-size: 0.85rem;
  font-weight: 700;
  color: var(--gold);
  white-space: nowrap;
}

.progress-row .progress-bar {
  flex: 1;
}

/* ── Section label (numbered stages) ── */
.dash-section {
  margin-bottom: var(--space-lg);
}

.section-label {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
  font-family: var(--font-marker);
  font-size: 1rem;
  color: var(--text-secondary);
  margin-bottom: var(--space-md);
  text-transform: uppercase;
  letter-spacing: 1px;
}

.section-num {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: var(--accent-red);
  color: white;
  font-size: 0.85rem;
  font-weight: 700;
  font-family: var(--font-body);
}

/* ── Task grid layouts ── */
.task-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-md);
}

.task-grid-2 {
  grid-template-columns: 1fr 1fr;
}

.task-grid-3 {
  grid-template-columns: 1fr;
}

/* ── Task card variants ── */
.task-core {
  border-left: 3px solid var(--accent-red);
}

.task-boss {
  border-left: 3px solid var(--neon-red);
  background: linear-gradient(135deg, var(--bg-card), rgba(233,69,96,0.08));
}

.badge-boss {
  background: rgba(233,69,96,0.3);
  color: #FF6B6B;
  font-size: 0.8rem;
  padding: 4px 12px;
  border-radius: var(--radius-full);
  font-weight: 700;
}

.task-train {
  border-left: 3px solid var(--accent-blue);
}

.task-exam {
  border-left: 3px solid var(--accent-cyan);
}

.task-review {
  border-left: 3px solid var(--gold);
  background: linear-gradient(135deg, var(--bg-card), rgba(255,215,0,0.07));
}

.task-done-soft {
  border-color: rgba(0,255,136,0.18);
  background: linear-gradient(135deg, rgba(0,255,136,0.055), rgba(255,255,255,0.035));
}

/* ── Bottom tools bar ── */
.dash-tools {
  display: flex;
  gap: var(--space-sm);
  margin-top: var(--space-lg);
  padding-top: var(--space-lg);
  border-top: 1px solid rgba(255,255,255,0.06);
}

.dash-tools .btn {
  flex: 1;
  font-size: 0.85rem;
  padding: 10px 8px;
}

/* ═══════════════════════════════════════════
   RESPONSIVE — Tablet & Desktop
   ═══════════════════════════════════════════ */

@media (min-width: 768px) {
  #app {
    max-width: 720px;
    padding: var(--space-lg) var(--space-xl);
  }

  .task-grid-3 {
    grid-template-columns: 1fr 1fr 1fr;
  }

  .task-card .task-icon {
    font-size: 2.2rem;
    width: 56px;
  }

  .task-card .task-name {
    font-size: 1.05rem;
  }

  .flash-card-container {
    height: 400px;
  }

  .dash-hero {
    padding-bottom: var(--space-xl);
  }
}

@media (min-width: 1024px) {
  #app {
    max-width: 900px;
    padding: var(--space-xl) var(--space-2xl);
  }

  body {
    font-size: 17px;
  }

  .header-bar .logo {
    font-size: 1.8rem;
  }

  .dash-stage {
    font-size: 1.8rem;
  }

  .section-label {
    font-size: 1.1rem;
  }

  .task-grid {
    grid-template-columns: 1fr 1fr;
  }

  .task-grid-2 {
    grid-template-columns: 1fr 1fr;
  }

  .task-grid-3 {
    grid-template-columns: 1fr 1fr 1fr;
  }

  .task-card {
    padding: 20px;
    border-radius: var(--radius-xl);
  }

  .task-card .task-icon {
    font-size: 2.5rem;
    width: 64px;
  }

  .task-card .task-name {
    font-size: 1.15rem;
  }

  .task-card .task-desc {
    font-size: 0.85rem;
  }

  .flash-card-container {
    height: 420px;
  }

  .flash-card .word {
    font-size: 3rem;
  }

  .flash-card .meaning {
    font-size: 2rem;
  }

  .stat-value {
    font-size: 1.8rem;
  }

  .quiz-options {
    gap: var(--space-lg);
  }

  .quiz-option {
    padding: var(--space-xl);
    font-size: 1.2rem;
  }

  .reading-option {
    padding: 15px 16px;
    font-size: 1.08rem;
  }

  .spelling-visible-input {
    max-width: 400px;
    font-size: 1.5rem;
    padding: 20px;
  }

  .dash-tools .btn {
    font-size: 0.95rem;
    padding: 12px 16px;
  }
}

@media (min-width: 1440px) {
  #app {
    max-width: 1000px;
  }

  .task-card .task-icon {
    font-size: 2.8rem;
    width: 72px;
  }
}
/* Boss player bar - compact */
.boss-player-bar{display:flex;align-items:center;gap:6px;padding:0 4px;margin:6px 0}
.boss-player-hp-track{flex:1;background:rgba(255,255,255,0.1);border-radius:4px;height:8px;overflow:hidden}
.boss-player-hp-fill{height:100%;border-radius:4px;transition:width 0.3s}
.boss-potion-btn{padding:2px 8px;font-size:0.7rem;border-color:var(--neon-green);border-radius:6px}
.boss-stats-line{text-align:center;font-size:0.75rem;color:var(--text-dim);margin-bottom:6px;padding:4px 0}

/* Boss mode: compact question area so everything fits on one screen */
#page-boss .quiz-options{gap:8px;margin-top:12px}
#page-boss .quiz-option{padding:10px 12px;font-size:0.9rem}
#page-boss .match-grid{gap:6px}
#page-boss .match-item{padding:8px;font-size:0.85rem}
#page-boss .bubble-grid{gap:3px;grid-template-columns:repeat(4,1fr)}
#page-boss .bubble-item{font-size:0.7rem;aspect-ratio:auto;padding:6px 4px;border-radius:6px}
#page-boss .spelling-visible-input{max-width:220px;font-size:1.1rem;padding:10px}
#page-boss .question-text{font-size:0.9rem;margin-bottom:8px}
#page-boss [style*="font-size:2rem"]{font-size:1.4rem !important}
#page-boss [style*="font-size:1.8rem"]{font-size:1.3rem !important}
#page-boss [style*="font-size:1.5rem"]{font-size:1.2rem !important}

/* Productized dashboard path */
.mission-panel {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: var(--space-md);
  background: linear-gradient(135deg, rgba(0,212,255,0.12), rgba(255,45,85,0.12));
  border: 1px solid rgba(255,255,255,0.08);
  border-radius: var(--radius-md);
  padding: 16px;
  margin-bottom: 14px;
  box-shadow: 0 10px 30px rgba(0,0,0,0.22);
}
.mission-danger { border-color: rgba(255,82,82,0.35); }
.mission-review { border-color: rgba(255,215,0,0.28); }
.mission-new { border-color: rgba(0,255,136,0.22); }
.mission-kicker,
.report-kicker {
  color: var(--gold);
  font-size: 0.72rem;
  font-weight: 800;
  text-transform: uppercase;
}
.mission-title {
  font-size: 1.25rem;
  font-weight: 800;
  margin-top: 2px;
}
.mission-desc {
  color: var(--text-secondary);
  font-size: 0.84rem;
  margin-top: 4px;
}
.mission-btn {
  min-width: 106px;
  padding-left: 16px;
  padding-right: 16px;
}
.mission-btn:disabled {
  opacity: 0.55;
  cursor: default;
}
.today-path {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(112px, 1fr));
  gap: 8px;
  margin-bottom: 16px;
}
.path-step {
  min-height: 88px;
  background: rgba(255,255,255,0.045);
  border: 1px solid rgba(255,255,255,0.07);
  border-radius: var(--radius-sm);
  padding: 10px;
  cursor: default;
}
.path-step[onclick] { cursor: pointer; }
.path-step.now {
  border-color: rgba(255,215,0,0.4);
  background: rgba(255,215,0,0.07);
}
.path-step.done {
  border-color: rgba(0,255,136,0.18);
}
.path-index {
  width: 24px;
  height: 24px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: rgba(255,255,255,0.1);
  color: var(--text-secondary);
  font-size: 0.75rem;
  font-weight: 800;
}
.path-title {
  margin-top: 8px;
  font-weight: 800;
  font-size: 0.92rem;
}
.path-desc {
  color: var(--text-dim);
  font-size: 0.72rem;
  line-height: 1.35;
  margin-top: 2px;
}
.path-badge {
  margin-top: 8px;
  color: var(--gold);
  font-size: 0.75rem;
  font-weight: 800;
}

/* Learning report */
.report-hero {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 108px;
  gap: var(--space-md);
  align-items: center;
  padding: 18px;
  background: var(--bg-card);
  border: 1px solid rgba(255,255,255,0.08);
  border-radius: var(--radius-md);
  margin-bottom: var(--space-md);
}
.report-title {
  font-family: var(--font-title);
  font-size: 1.45rem;
  margin-top: 4px;
}
.report-sub {
  color: var(--text-secondary);
  font-size: 0.86rem;
  line-height: 1.5;
  margin-top: 6px;
}
.report-ring {
  width: 92px;
  height: 92px;
  border-radius: 50%;
  border: 8px solid rgba(255,215,0,0.28);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}
.report-ring-value {
  color: var(--gold);
  font-weight: 900;
  font-size: 1.2rem;
}
.report-ring-label {
  color: var(--text-dim);
  font-size: 0.68rem;
}
.report-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
  margin-bottom: var(--space-lg);
}
.report-grid-compact {
  grid-template-columns: repeat(4, minmax(0, 1fr));
}
.report-card {
  background: rgba(255,255,255,0.045);
  border: 1px solid rgba(255,255,255,0.07);
  border-radius: var(--radius-sm);
  padding: 12px;
}
.report-card-label {
  color: var(--text-dim);
  font-size: 0.76rem;
}
.report-card-value {
  font-size: 1.25rem;
  font-weight: 900;
  margin-top: 4px;
}
.report-card-note {
  color: var(--text-secondary);
  font-size: 0.78rem;
  margin-top: 4px;
}
.mini-bar {
  height: 6px;
  background: rgba(255,255,255,0.08);
  border-radius: var(--radius-full);
  overflow: hidden;
  margin-top: 10px;
}
.mini-bar div {
  height: 100%;
  background: linear-gradient(90deg, var(--accent-cyan), var(--gold));
}
.report-section {
  margin-bottom: var(--space-lg);
}
.report-list {
  background: rgba(255,255,255,0.035);
  border: 1px solid rgba(255,255,255,0.07);
  border-radius: var(--radius-sm);
  overflow: hidden;
}
.report-row {
  display: flex;
  justify-content: space-between;
  gap: var(--space-md);
  padding: 12px 14px;
  border-bottom: 1px solid rgba(255,255,255,0.06);
}
.report-row:last-child { border-bottom: 0; }
.report-row span {
  color: var(--text-secondary);
}
.report-actions {
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding-bottom: var(--space-xl);
}

.real-paper-library {
  margin-top: var(--space-lg);
}
.real-paper-layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(280px, 360px);
  gap: var(--space-md);
  align-items: start;
}
.real-paper-pages {
  display: flex;
  flex-direction: column;
  gap: var(--space-md);
}
.real-paper-page {
  width: 100%;
  max-width: 980px;
  margin: 0 auto;
  display: block;
  border-radius: var(--radius-sm);
  border: 1px solid rgba(255,255,255,0.12);
  background: #fff;
}
.real-answer-sheet {
  position: sticky;
  top: 12px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  padding: 14px;
  border: 1px solid rgba(255,255,255,0.12);
  border-radius: var(--radius-md);
  background: rgba(10, 12, 34, 0.94);
  backdrop-filter: blur(16px);
}
.real-answer-part {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.real-answer-part strong {
  font-size: 0.9rem;
}
.real-answer-grid {
  display: grid;
  gap: 6px;
}
.real-answer-row {
  display: grid;
  grid-template-columns: 28px 1fr;
  gap: 8px;
  align-items: center;
}
.real-answer-row span,
.real-gap-grid span {
  color: var(--text-secondary);
  font-weight: 700;
  font-size: 0.85rem;
}
.real-answer-options {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 6px;
}
.mock-option.mini {
  min-height: 34px;
  padding: 6px 8px;
  text-align: center;
}
.real-gap-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
}
.real-gap-grid label {
  display: grid;
  grid-template-columns: 24px 1fr;
  gap: 6px;
  align-items: center;
}
.real-gap-grid .cloze-input {
  width: 100%;
  min-width: 0;
}
.stat-row {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  padding: 8px 0;
  border-bottom: 1px solid rgba(255,255,255,0.08);
}
.stat-row:last-of-type {
  border-bottom: 0;
}

@media (max-width: 520px) {
  .real-paper-layout {
    grid-template-columns: 1fr;
  }
  .real-answer-sheet {
    position: static;
  }
  .writing-level-grid {
    grid-template-columns: 1fr;
  }
  .library-focus-note {
    grid-template-columns: 1fr;
  }
  .library-focus-note .btn {
    grid-row: auto;
    grid-column: auto;
    width: 100%;
  }
  .path-hero,
  .ket-mission,
  .ket-path-alert {
    grid-template-columns: 1fr;
  }
  .ket-route-grid {
    grid-template-columns: 1fr;
  }
  .ket-status-strip {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  #page-ket-path .ket-target-card {
    display: none;
  }
  #page-ket-path .ket-path-secondary {
    display: none;
  }
  #page-ket-path .ket-mobile-more-note {
    display: block;
  }
  .path-compass {
    justify-self: start;
  }
  .ket-part-grid,
  .ket-week-grid,
  .ket-audit-grid {
    grid-template-columns: 1fr;
  }
  .mission-panel {
    grid-template-columns: 1fr;
  }
  .mission-btn {
    width: 100%;
  }
  .ket-mission-actions {
    grid-template-columns: 1fr;
  }
  .ket-mission-actions .btn,
  .ket-path-alert > div:not(:first-child) {
    width: 100%;
  }
  .account-login-actions,
  .local-create-row {
    grid-template-columns: 1fr;
  }
  .today-path {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .task-grid-2 {
    grid-template-columns: 1fr;
  }
  .report-hero {
    grid-template-columns: 1fr;
  }
  .report-ring {
    width: 84px;
    height: 84px;
    justify-self: start;
  }
  .report-grid,
  .report-grid-compact {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
/* v105 clean learning path and placement redesign */
.learning-home,
.ket-path-clean,
.placement-entry-clean,
.placement-result-clean {
  max-width: 1180px;
  margin: 0 auto;
  padding-bottom: 56px;
}

.home-header-actions {
  display: flex;
  align-items: center;
  gap: 12px;
}

.clean-hero,
.home-hero {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 24px;
  margin: 18px 0 24px;
  padding: 32px;
  border: 1px solid rgba(0, 212, 255, 0.22);
  border-radius: 18px;
  background:
    linear-gradient(135deg, rgba(12, 43, 74, 0.86), rgba(45, 18, 66, 0.72)),
    rgba(16, 18, 44, 0.86);
}

.clean-hero span,
.home-hero span,
.home-main-action span {
  display: block;
  margin-bottom: 8px;
  color: var(--gold);
  font-size: 0.9rem;
  font-weight: 800;
}

.clean-hero h1,
.home-hero h1,
.home-main-action h2 {
  margin: 0;
  color: var(--text-primary);
  font-size: clamp(2rem, 4vw, 3.3rem);
  line-height: 1.08;
  letter-spacing: 0;
}

.clean-hero p,
.home-hero p,
.home-main-action p,
.home-note p,
.path-progress-clean p,
.path-logic-note {
  margin: 12px 0 0;
  color: var(--text-secondary);
  font-size: 1.08rem;
  line-height: 1.75;
}

.home-status,
.path-layer-grid,
.placement-score-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 12px;
  margin-bottom: 22px;
}

.home-status div,
.path-layer-grid div,
.placement-score-tile {
  min-height: 94px;
  padding: 18px;
  border: 1px solid rgba(255, 255, 255, 0.1);
  border-radius: 14px;
  background: rgba(255, 255, 255, 0.055);
}

.home-status strong,
.path-layer-grid strong,
.placement-score-tile strong {
  display: block;
  color: var(--text-primary);
  font-size: 1.35rem;
  line-height: 1.25;
}

.home-status span,
.path-layer-grid span,
.placement-score-tile span {
  display: block;
  margin-top: 8px;
  color: var(--text-dim);
  font-size: 0.95rem;
}

.home-main-action,
.home-note,
.clean-section,
.path-progress-clean {
  margin: 22px 0;
  padding: 26px;
  border: 1px solid rgba(255, 255, 255, 0.09);
  border-radius: 16px;
  background: rgba(18, 20, 46, 0.78);
}

.home-main-action {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 20px;
  border-color: rgba(255, 215, 0, 0.22);
}

.home-module-section h2,
.clean-section h2 {
  margin: 0 0 16px;
  color: var(--text-primary);
  font-size: 1.45rem;
  line-height: 1.25;
}

.home-module-grid,
.placement-clean-grid,
.map-week-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 12px;
}

.home-module-grid button,
.clean-mini-card,
.map-week,
.route-pill {
  min-height: 112px;
  padding: 18px;
  border: 1px solid rgba(255, 255, 255, 0.1);
  border-radius: 14px;
  background: rgba(255, 255, 255, 0.055);
  color: var(--text-primary);
  text-align: left;
}

.home-module-grid button {
  cursor: pointer;
}

.home-module-grid button:hover,
.route-pill:hover {
  border-color: rgba(0, 212, 255, 0.48);
  background: rgba(0, 212, 255, 0.08);
}

.home-module-grid strong,
.clean-mini-card strong,
.map-week strong,
.route-pill strong {
  display: block;
  color: var(--text-primary);
  font-size: 1.2rem;
  line-height: 1.35;
}

.home-module-grid span,
.clean-mini-card span,
.map-week span,
.route-pill span {
  display: block;
  margin-top: 8px;
  color: var(--text-secondary);
  font-size: 0.96rem;
  line-height: 1.5;
}

.clean-mini-card p,
.map-week p {
  margin: 10px 0 0;
  color: var(--text-dim);
  font-size: 0.95rem;
  line-height: 1.65;
}

.today-mission-stack {
  display: grid;
  gap: 12px;
}

.today-mission {
  display: grid;
  grid-template-columns: 48px minmax(0, 1fr) auto;
  align-items: center;
  gap: 16px;
  padding: 18px;
  border: 1px solid rgba(255, 255, 255, 0.1);
  border-radius: 14px;
  background: rgba(255, 255, 255, 0.055);
}

.today-mission > span {
  display: grid;
  place-items: center;
  width: 42px;
  height: 42px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.12);
  color: var(--gold);
  font-weight: 900;
}

.today-mission strong {
  color: var(--text-primary);
  font-size: 1.18rem;
}

.today-mission p {
  margin: 6px 0 0;
  color: var(--text-secondary);
  font-size: 1rem;
  line-height: 1.6;
}

.mission-status {
  justify-self: end;
  min-width: 112px;
  padding: 12px 16px;
  border-radius: 999px;
  text-align: center;
  font-weight: 900;
  font-size: 1rem;
}

.mission-status.pending {
  color: var(--gold);
  background: rgba(255, 215, 0, 0.1);
  border: 1px solid rgba(255, 215, 0, 0.35);
}

.mission-status.complete {
  color: var(--neon-green);
  background: rgba(0, 255, 136, 0.1);
  border: 1px solid rgba(0, 255, 136, 0.35);
}

.today-mission.done {
  opacity: 0.68;
}

.route-pill-row {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 12px;
  margin-top: 16px;
}

.route-pill {
  cursor: pointer;
}

.route-pill.active {
  border-color: rgba(255, 215, 0, 0.55);
  background: rgba(255, 215, 0, 0.08);
}

.map-week.active {
  border-color: rgba(0, 212, 255, 0.5);
  background: rgba(0, 212, 255, 0.08);
}

.path-progress-clean > div:first-child {
  display: flex;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 12px;
  color: var(--text-primary);
}

.path-progress-clean strong,
.path-progress-clean span {
  font-size: 1.1rem;
}

.placement-big-score {
  display: flex;
  align-items: baseline;
  justify-content: center;
  min-width: 180px;
  padding: 22px;
  border-radius: 16px;
  background: rgba(0, 0, 0, 0.2);
}

.placement-big-score strong {
  color: var(--gold);
  font-size: 4rem;
  line-height: 1;
}

.placement-big-score span {
  color: var(--text-secondary);
  font-size: 1.4rem;
}

.placement-route-note {
  margin-top: 14px;
  padding: 18px;
  border-radius: 14px;
  background: rgba(0, 212, 255, 0.08);
  border: 1px solid rgba(0, 212, 255, 0.2);
}

.placement-route-note strong,
.placement-route-note span {
  display: inline-block;
  margin-right: 18px;
  color: var(--text-primary);
}

.placement-route-note p {
  margin: 10px 0 0;
  color: var(--text-secondary);
  line-height: 1.7;
}

.placement-rule-list {
  display: grid;
  gap: 10px;
}

.placement-rule-list div {
  display: grid;
  grid-template-columns: 96px minmax(0, 1fr);
  gap: 14px;
  align-items: center;
  padding: 12px 14px;
  border-radius: 12px;
  background: rgba(255, 255, 255, 0.05);
}

.placement-rule-list strong {
  color: var(--gold);
  font-size: 1.1rem;
}

.placement-rule-list span,
.placement-rule-list p {
  margin: 0;
  color: var(--text-secondary);
  line-height: 1.65;
}

.clean-task-list {
  display: grid;
  gap: 10px;
}

.clean-actions {
  display: flex;
  gap: 12px;
  margin-top: 18px;
}

@media (max-width: 860px) {
  .clean-hero,
  .home-hero,
  .home-main-action {
    grid-template-columns: 1fr;
    padding: 22px;
  }

  .home-status,
  .path-layer-grid,
  .placement-score-grid,
  .home-module-grid,
  .placement-clean-grid,
  .map-week-grid,
  .route-pill-row {
    grid-template-columns: 1fr;
  }

  .today-mission {
    grid-template-columns: 42px minmax(0, 1fr);
  }

  .today-mission .btn,
  .today-mission .mission-status {
    grid-column: 1 / -1;
    width: 100%;
  }

  .placement-big-score {
    justify-content: flex-start;
  }

  .clean-actions {
    flex-direction: column;
  }
}
