/* ── theme variables ── */
:root {
    --bg: #f0f2f5;
    --bg-card: #fff;
    --bg-input: #fff;
    --bg-code: #f8f9fa;
    --bg-tag: #e8ecff;
    --bg-nav: #fff;
    --text: #333;
    --text-secondary: #666;
    --text-hint: #999;
    --text-muted: #888;
    --border: #e0e0e0;
    --accent: #4f6ef7;
    --accent-hover: #3d5bd9;
    --accent-light: #eef1ff;
    --shadow: rgba(0,0,0,.06);
    --shadow-lg: rgba(0,0,0,.08);
    --error-bg: #fef2f2;
    --error: #e74c3c;
    --success: #28a745;
    --warn: #ffc107;
    --login-bg: linear-gradient(135deg,#4f6ef7 0%,#764ba2 100%);
    --login-shadow: rgba(0,0,0,.25);
    --chart-grad: linear-gradient(180deg,#4f6ef7,#764ba2);
    --overlay: rgba(0,0,0,.7);
}

body.dark {
    --bg: #1a1a2e;
    --bg-card: #16213e;
    --bg-input: #1a1a2e;
    --bg-code: #0f3460;
    --bg-tag: #0f3460;
    --bg-nav: #16213e;
    --text: #e0e0e0;
    --text-secondary: #b0b0b0;
    --text-hint: #888;
    --text-muted: #999;
    --border: #2a2a4a;
    --accent: #7b8cff;
    --accent-hover: #5c6eef;
    --accent-light: #1e2a5e;
    --shadow: rgba(0,0,0,.2);
    --shadow-lg: rgba(0,0,0,.3);
    --error-bg: #2d1515;
    --error: #ff6b6b;
    --success: #51cf66;
    --warn: #ffd43b;
    --login-bg: linear-gradient(135deg,#1a1a2e 0%,#16213e 100%);
    --login-shadow: rgba(0,0,0,.5);
    --chart-grad: linear-gradient(180deg,#7b8cff,#a78bfa);
    --overlay: rgba(0,0,0,.85);
}

/* ── reset ── */
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;background:var(--bg);color:var(--text);min-height:100vh;transition:background .3s,color .3s}
a{color:var(--accent);text-decoration:none}
a:hover{text-decoration:underline}

/* ── screens ── */
.screen{display:none}.screen.active{display:block}
.view{display:none}.view.active{display:block}
.container{max-width:800px;margin:0 auto;padding:24px 16px}

/* ── toggle bar (dark mode + language) ── */
.toggle-bar{position:fixed;top:12px;right:16px;display:flex;gap:8px;z-index:200}
.toggle-btn{background:var(--bg-card);border:1px solid var(--border);border-radius:8px;padding:6px 12px;cursor:pointer;font-size:.85em;color:var(--text-secondary);transition:all .2s;display:flex;align-items:center;gap:4px}
.toggle-btn:hover{border-color:var(--accent);color:var(--accent)}

/* ── login ── */
#login-screen.active{display:flex;align-items:center;justify-content:center;min-height:100vh;background:var(--login-bg)}
.login-card{background:var(--bg-card);border-radius:20px;padding:48px 36px;max-width:420px;width:100%;text-align:center;box-shadow:0 16px 48px var(--login-shadow)}
.login-card h1{font-size:1.8em;color:var(--accent);margin-bottom:8px}
.subtitle{color:var(--text-muted);margin-bottom:32px}
.auth-form input,.auth-form select{width:100%;padding:14px;margin-bottom:12px;border:2px solid var(--border);border-radius:10px;font-size:1em;background:var(--bg-input);color:var(--text);transition:border .2s}
.auth-form input:focus,.auth-form select:focus{outline:none;border-color:var(--accent)}
.select-label{display:block;text-align:left;font-weight:600;margin-bottom:6px;color:var(--text-secondary);font-size:.9em}
.switch-auth{margin-top:16px;color:var(--text-muted);font-size:.9em}
.switch-auth a{font-weight:600}

/* ── buttons ── */
.btn{padding:14px 28px;border:none;border-radius:10px;font-size:1em;cursor:pointer;font-weight:600;transition:all .2s}
.btn-primary{background:var(--accent);color:#fff;width:100%}
.btn-primary:hover{background:var(--accent-hover)}
.btn-primary:disabled{background:#b0b0b0;cursor:not-allowed}
.btn-link{background:none;color:var(--accent);padding:8px 0;font-size:.95em;border:none;cursor:pointer}

/* ── navbar ── */
.navbar{background:var(--bg-nav);box-shadow:0 1px 6px var(--shadow);padding:12px 24px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:100;transition:background .3s}
.nav-brand{font-size:1.25em;font-weight:700;color:var(--accent)}
.nav-tabs{display:flex;gap:4px;flex-wrap:wrap}
.tab{background:none;border:none;padding:8px 16px;border-radius:8px;font-size:.9em;cursor:pointer;color:var(--text-secondary);font-weight:500;transition:all .2s}
.tab:hover,.tab.active{background:var(--accent);color:#fff}
.tab-logout{color:var(--error)}
.tab-logout:hover{background:var(--error);color:#fff}

/* ── scenario grid ── */
.scenario-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;margin-top:20px}
.scenario-card{background:var(--bg-card);padding:24px;border-radius:14px;border:2px solid transparent;cursor:pointer;transition:all .2s;box-shadow:0 2px 8px var(--shadow)}
.scenario-card:hover{border-color:var(--accent);transform:translateY(-3px);box-shadow:0 6px 20px rgba(79,110,247,.15)}
.scenario-card h3{color:var(--accent);margin-bottom:8px;font-size:1.1em}
.scenario-card p{color:var(--text-secondary);line-height:1.5;font-size:.95em}
.scenario-badge{display:inline-block;padding:3px 10px;border-radius:12px;font-size:.8em;font-weight:600;margin-top:10px}
.badge-beginner{background:#d4edda;color:#155724}
.badge-intermediate{background:#fff3cd;color:#856404}
.badge-advanced{background:#f8d7da;color:#721c24}
body.dark .badge-beginner{background:#1b4332;color:#95d5b2}
body.dark .badge-intermediate{background:#3d2e00;color:#ffd43b}
body.dark .badge-advanced{background:#3d0f0f;color:#ff8787}

/* ── scenario prompt ── */
.scenario-prompt-card{background:var(--bg-card);padding:28px;border-radius:14px;border-left:4px solid var(--accent);margin:16px 0;box-shadow:0 2px 8px var(--shadow)}
.scenario-prompt-card h3{color:var(--accent);margin-bottom:8px}
.scenario-prompt-card p{line-height:1.7;color:var(--text-secondary);font-size:1.05em}

/* ── recorder ── */
.recorder{text-align:center;margin:40px 0}
.btn-mic{width:120px;height:120px;border-radius:50%;border:none;background:var(--accent);color:#fff;font-size:2.5em;cursor:pointer;transition:all .2s;box-shadow:0 4px 20px rgba(79,110,247,.3);display:flex;align-items:center;justify-content:center;margin:0 auto}
.btn-mic:hover{transform:scale(1.05)}
.btn-mic.recording{background:var(--error);animation:pulse 1.5s infinite;box-shadow:0 4px 20px rgba(231,76,60,.4)}
.record-status{margin-top:16px;color:var(--text-muted);font-size:1em}
.timer{font-size:1.8em;font-weight:700;color:var(--error);margin-top:8px;font-variant-numeric:tabular-nums}
@keyframes pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.08)}}

/* ── scores ── */
.score-row{display:flex;justify-content:center;gap:20px;margin:28px 0;flex-wrap:wrap}
.score-circle{width:100px;height:100px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--bg-card);box-shadow:0 2px 10px var(--shadow-lg)}
.sc-num{font-size:1.8em;font-weight:700;color:var(--accent);line-height:1}
.sc-lbl{font-size:.75em;color:var(--text-muted);margin-top:4px}

/* ── result cards ── */
.result-card{background:var(--bg-card);padding:24px;border-radius:14px;margin-bottom:16px;box-shadow:0 2px 8px var(--shadow)}
.result-card h4{color:var(--accent);margin-bottom:12px;font-size:1.05em}
.result-card p{line-height:1.7;color:var(--text-secondary)}
.result-card.good{border-left:4px solid var(--success)}
.result-card.good h4{color:var(--success)}
.result-card.warn{border-left:4px solid var(--error)}
.result-card.warn h4{color:var(--error)}
.transcript-text{font-style:italic;background:var(--bg-code);padding:16px;border-radius:8px;color:var(--text)}

.error-item{background:var(--error-bg);padding:14px;border-radius:8px;margin-bottom:10px}
.error-item .err-said{color:var(--error);font-weight:600}
.error-item .err-better{color:var(--success);font-weight:600}
.error-item .err-why{color:var(--text-secondary);font-size:.9em;margin-top:4px}

.grammar-tag{display:inline-block;padding:6px 14px;border-radius:20px;margin:4px;font-size:.88em;font-weight:500}
.grammar-tag.correct{background:#d4edda;color:#155724}
.grammar-tag.incorrect{background:#f8d7da;color:#721c24}
body.dark .grammar-tag.correct{background:#1b4332;color:#95d5b2}
body.dark .grammar-tag.incorrect{background:#3d0f0f;color:#ff8787}

.vocab-tag{display:inline-block;padding:5px 12px;border-radius:8px;margin:3px;font-size:.88em;background:var(--bg-tag);color:var(--accent)}

/* ── progress ── */
.stats-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:16px;margin:20px 0}
.stat-box{background:var(--bg-card);padding:24px;border-radius:14px;text-align:center;box-shadow:0 2px 8px var(--shadow)}
.stat-num{font-size:2.2em;font-weight:700;color:var(--accent);display:block}
.stat-lbl{font-size:.85em;color:var(--text-muted);margin-top:4px}

.chart-card{background:var(--bg-card);padding:24px;border-radius:14px;margin:20px 0;box-shadow:0 2px 8px var(--shadow)}
.chart-card h4{color:var(--accent);margin-bottom:16px}

.chart-bars{display:flex;align-items:flex-end;gap:6px;height:120px;padding-top:8px}
.chart-bar{flex:1;min-width:20px;border-radius:4px 4px 0 0;background:var(--chart-grad);position:relative;transition:height .3s}
.chart-bar-label{position:absolute;top:-18px;left:50%;transform:translateX(-50%);font-size:.7em;color:var(--text-muted);white-space:nowrap}

.weakness-item{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:var(--bg-card);border-radius:10px;margin-bottom:8px;box-shadow:0 1px 4px var(--shadow)}
.weakness-name{font-weight:600;color:var(--text)}
.weakness-type{font-size:.8em;color:var(--text-muted);margin-left:8px}
.weakness-bar{width:100px;height:8px;background:var(--border);border-radius:4px;overflow:hidden}
.weakness-fill{height:100%;border-radius:4px;transition:width .3s}

/* ── words tab ── */
.tab-switcher{display:flex;gap:8px;margin-bottom:20px}
.tab-sw{padding:10px 20px;border:2px solid var(--border);border-radius:10px;background:var(--bg-card);cursor:pointer;font-weight:600;color:var(--text-muted);transition:all .2s}
.tab-sw.active{border-color:var(--accent);color:var(--accent);background:var(--accent-light)}

.word-row{display:flex;justify-content:space-between;align-items:center;padding:14px 16px;background:var(--bg-card);border-radius:10px;margin-bottom:8px;box-shadow:0 1px 4px var(--shadow)}
.word-name{font-weight:600;color:var(--accent);font-size:1.05em}
.word-pos{color:var(--text-muted);font-size:.8em;margin-left:6px}
.word-mastery{display:flex;align-items:center;gap:8px}
.mini-bar{width:80px;height:6px;background:var(--border);border-radius:3px;overflow:hidden}
.mini-fill{height:100%;border-radius:3px}
.word-pct{font-size:.85em;color:var(--text-muted);min-width:36px;text-align:right}

/* ── settings ── */
.settings-card{background:var(--bg-card);padding:32px;border-radius:14px;max-width:500px;box-shadow:0 2px 8px var(--shadow)}
.form-group{margin-bottom:24px}
.form-group label{display:block;font-weight:600;margin-bottom:8px;color:var(--text)}
.form-group input,.form-group select{width:100%;padding:14px;border:2px solid var(--border);border-radius:10px;font-size:1em;background:var(--bg-input);color:var(--text)}
.form-group input:focus,.form-group select:focus{outline:none;border-color:var(--accent)}
.hint{font-size:.85em;color:var(--text-hint);margin-top:6px;line-height:1.5}
.settings-msg{margin-top:12px;font-weight:600;color:var(--success)}

/* ── loading ── */
#loading{position:fixed;inset:0;background:var(--overlay);display:flex;align-items:center;justify-content:center;z-index:9999}
.loading-inner{text-align:center;color:#fff}
.spinner{width:56px;height:56px;border:4px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin 1s linear infinite;margin:0 auto 16px}
@keyframes spin{to{transform:rotate(360deg)}}

h2{color:var(--accent);margin-bottom:8px;font-size:1.6em}

/* ── teacher scenario management ── */
.form-group textarea{width:100%;padding:14px;border:2px solid var(--border);border-radius:10px;font-size:1em;font-family:inherit;background:var(--bg-input);color:var(--text);resize:vertical}
.form-group textarea:focus{outline:none;border-color:var(--accent)}
.scenario-manage-card{background:var(--bg-card);padding:20px;border-radius:14px;margin-bottom:12px;box-shadow:0 2px 8px var(--shadow);display:flex;justify-content:space-between;align-items:flex-start;gap:16px}
.scenario-manage-card.inactive{opacity:.55}
.scenario-manage-info{flex:1;min-width:0}
.scenario-manage-info h4{color:var(--accent);margin-bottom:4px}
.scenario-manage-info p{color:var(--text-secondary);font-size:.9em;line-height:1.5}
.scenario-manage-meta{display:flex;gap:8px;margin-top:8px;flex-wrap:wrap}
.scenario-manage-actions{display:flex;gap:6px;flex-shrink:0;flex-wrap:wrap}
.btn-sm{padding:6px 14px;border:1px solid var(--border);border-radius:8px;font-size:.85em;cursor:pointer;background:var(--bg-card);color:var(--text-secondary);transition:all .2s}
.btn-sm:hover{border-color:var(--accent);color:var(--accent)}
.btn-sm.btn-danger{color:var(--error);border-color:var(--error)}
.btn-sm.btn-danger:hover{background:var(--error);color:#fff}
.btn-sm.btn-success{color:var(--success);border-color:var(--success)}
.btn-sm.btn-success:hover{background:var(--success);color:#fff}

/* ── responsive ── */
@media(max-width:640px){
    .navbar{flex-direction:column;gap:10px;padding:12px 16px}
    .nav-tabs{justify-content:center}
    .score-row{gap:12px}
    .score-circle{width:80px;height:80px}
    .sc-num{font-size:1.4em}
    .login-card{margin:16px;padding:32px 24px}
    .scenario-grid{grid-template-columns:1fr}
    .btn-mic{width:100px;height:100px;font-size:2em}
    .toggle-bar{top:auto;bottom:12px;right:12px}
}
