:root {
	--bg: #0c1224;
	--panel: #0f172e;
	--card: #111c37;
	--muted: #8fa0bf;
	--text: #f3f5fb;
	--accent: #4ad4a0;
	--accent-strong: #22c38a;
	--accent-soft: #14302b;
	--stroke: #1d2a46;
	--warn: #f5a524;
	--header-bg: rgba(12,18,36,0.9);
	--chat-surface: #0d1428;
	--input-bg: #0b1122;
	--bubble-important-bg: #1b243d;
	--shadow: 0 10px 30px rgba(0,0,0,0.35);
	--radius: 14px;
	--font-sans: 'Sora', 'Manrope', system-ui, -apple-system, sans-serif;
	--font-display: 'Sora', 'Manrope', system-ui, -apple-system, sans-serif;
}

[data-theme="light"] {
	--bg: #f6f8fc;
	--panel: #ffffff;
	--card: #ffffff;
	--muted: #5c6475;
	--text: #0f1729;
	--accent: #22c38a;
	--accent-strong: #18a16f;
	--accent-soft: #e4f7ef;
	--stroke: #d5deeb;
	--warn: #d28a00;
	--header-bg: rgba(255,255,255,0.9);
	--chat-surface: #f0f3f9;
	--input-bg: #ffffff;
	--bubble-important-bg: #e9eef7;
	--shadow: 0 10px 30px rgba(0,0,0,0.12);
}

[data-theme="notebook"] {
	--bg: #fdfcf7;
	--panel: #ffffff;
	--card: #ffffff;
	--muted: #64748b;
	--text: #1f2933;
	--accent: #2f73da;
	--accent-strong: #1f5fb8;
	--accent-soft: #e3edff;
	--stroke: #d9e0ec;
	--warn: #d28a00;
	--header-bg: rgba(255,255,255,0.92);
	--chat-surface: linear-gradient(180deg, #fdfcf7 0%, #f9fafc 100%);
	--input-bg: #ffffff;
	--bubble-important-bg: #eef3ff;
	--shadow: 0 12px 30px rgba(58,80,107,0.12);
	--radius: 12px;
	--font-sans: 'Sora', 'Manrope', system-ui, -apple-system, 'Comic Neue', 'Patrick Hand', sans-serif;
	--font-display: 'Sora', 'Manrope', system-ui, -apple-system, 'Comic Neue', 'Patrick Hand', sans-serif;
	/* Notebook lines overlay (used in backgrounds where desired) */
	--notebook-lines: repeating-linear-gradient(
		to bottom,
		rgba(73, 124, 201, 0.08),
		rgba(73, 124, 201, 0.08) 1px,
		transparent 1px,
		transparent 28px
	);
	--notebook-margin: linear-gradient(to right, rgba(240, 115, 128, 0.25) 52px, transparent 52px);
}

[data-theme="chalkboard"] {
	--bg: #0b0c0d;
	--panel: #101214;
	--card: #111418;
	--muted: #c3c8d0;
	--text: #f8f8f7;
	--accent: #9ab6da;
	--accent-strong: #6f9ad8;
	--accent-soft: rgba(154, 182, 218, 0.18);
	--stroke: #2f333b;
	--warn: #e8c680;
	--header-bg: rgba(11, 12, 13, 0.9);
	--chat-surface: #0b0c0d;
	--input-bg: #111317;
	--bubble-important-bg: #181b21;
	--shadow: 0 10px 30px rgba(0,0,0,0.52);
	--radius: 12px;
	--font-sans: 'Sora', 'Manrope', 'Gloria Hallelujah', system-ui, -apple-system, sans-serif;
	--font-display: 'Sora', 'Manrope', 'Gloria Hallelujah', system-ui, -apple-system, sans-serif;
	/* Seamless chalkboard tile (fractal noise tinted green) used as a repeating background. */
	--chalk-texture: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='480' height='480'> <defs> <filter id='n'> <feTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='3' seed='12'/> <feColorMatrix type='matrix' values='0 0 0 0 0.10  0 0 0 0 0.16  0 0 0 0 0.12  0 0 0 0.9 0'/> </filter> </defs> <rect width='100%' height='100%' fill='#0c110d'/> <rect width='100%' height='100%' filter='url(%23n)' opacity='0.75'/> </svg>");
	--chalk-noise:
		repeating-linear-gradient(180deg, rgba(255,255,255,0.015) 0 2px, transparent 2px 9px),
		repeating-linear-gradient(90deg, rgba(255,255,255,0.012) 0 6px, transparent 6px 16px),
		radial-gradient(circle at 18% 22%, rgba(255,255,255,0.04), transparent 28%),
		radial-gradient(circle at 72% 28%, rgba(255,255,255,0.035), transparent 26%),
		radial-gradient(circle at 38% 68%, rgba(255,255,255,0.03), transparent 30%),
		radial-gradient(circle at 68% 82%, rgba(255,255,255,0.022), transparent 24%);
}

* { box-sizing: border-box; }
body {
	font-family: var(--font-sans);
	margin: 0;
	background: var(--bg);
	color: var(--text);
	min-height: 100vh;
}

body[data-theme="notebook"],
[data-theme="notebook"] body {
	background: var(--bg), var(--notebook-lines), var(--notebook-margin);
	background-blend-mode: normal;
}

body[data-theme="chalkboard"],
[data-theme="chalkboard"] body,
html[data-theme="chalkboard"],
[data-theme="chalkboard"] html {
	background: #0a0b0d, var(--chalk-texture), var(--chalk-noise);
	background-blend-mode: normal, soft-light, normal;
	background-attachment: fixed;
	background-size: 512px 512px, 220px 220px, 240px 240px;
	background-repeat: repeat;
}

a { color: var(--accent); text-decoration: none; }
a:hover { color: var(--accent-strong); }

.container { max-width: 1280px; margin: 0 auto; padding: 0 1.2rem; }
main.container { padding: 1.8rem 1.2rem; }

header {
	background: var(--header-bg);
	backdrop-filter: blur(10px);
	position: sticky;
	top: 0;
	z-index: 10;
	border-bottom: 1px solid var(--stroke);
}

header .container {
	display: flex;
	align-items: center;
	gap: 16px;
	padding: 1rem 0.25rem;
}

.brand {
	display: flex;
	align-items: center;
	gap: 10px;
	text-decoration: none;
}

.brand-mark {
	width: 36px; height: 36px;
	border-radius: 12px;
	background: linear-gradient(135deg, var(--accent), var(--warn));
	display: inline-flex; align-items: center; justify-content: center;
	font-weight: 800; color: #0b1020;
	box-shadow: var(--shadow);
}

.brand-text {
	display: flex; flex-direction: column; gap: 2px;
}
.brand-text .title { font-weight: 800; letter-spacing: -0.4px; color: var(--text); }
.brand-text .subtitle { color: var(--muted); font-size: 0.9rem; }

.top-nav { margin-left: auto; display: flex; gap: 14px; align-items: center; }
.pill {
	padding: 8px 14px;
	border-radius: 999px;
	border: 1px solid var(--stroke);
	background: var(--panel);
	color: var(--text);
	font-weight: 600;
	transition: all 0.15s ease;
}
.pill button,
button.pill {
	background: var(--panel);
	color: var(--text);
	border: 1px solid var(--stroke);
	cursor: pointer;
	font-family: var(--font-sans);
}
.pill:hover { border-color: var(--accent); color: var(--accent); }
.pill.primary { background: linear-gradient(135deg, var(--accent), var(--accent-strong)); color: #08131a; border-color: transparent; box-shadow: var(--shadow); }
.pill.primary:hover { transform: translateY(-1px); }

footer { border-top: 1px solid var(--stroke); background: var(--panel); color: var(--muted); padding: 1rem 0; }

.hero {
	background: linear-gradient(145deg, rgba(17,28,55,0.92), rgba(74,212,160,0.14));
	border: 1px solid var(--stroke);
	border-radius: 18px;
	padding: 1.6rem;
	box-shadow: var(--shadow);
	margin-bottom: 1.5rem;
}
.hero h2 { margin: 0 0 0.35rem 0; font-size: 1.8rem; letter-spacing: -0.3px; }
.hero p { margin: 0; color: var(--muted); }

.badge-row { display: flex; gap: 8px; margin-bottom: 8px; }
.badge.demo { background: linear-gradient(135deg, var(--accent), var(--accent-strong)); color: #08131a; border: none; box-shadow: var(--shadow); }

.grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 1rem; }
.lesson-list { list-style: none; padding: 0; margin: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 1rem; }
.lesson-list li { margin: 0; }

.card, .lesson-card {
	background: var(--card);
	border: 1px solid var(--stroke);
	border-radius: var(--radius);
	padding: 1rem;
	box-shadow: var(--shadow);
	display: flex;
	gap: 12px;
	justify-content: space-between;
	align-items: flex-start;
}

#practice-shell {
	display: flex;
	flex-direction: column;
	gap: 12px;
	align-items: stretch;
}

.card.form { flex-direction: column; align-items: stretch; }

.lesson-meta h3, .lesson-meta h4 { margin: 0; font-size: 1.05rem; }
.lesson-meta .small, .hint, .subtitle { color: var(--muted); }

.lesson-actions { display: flex; gap: 8px; flex-wrap: wrap; }
.lesson-actions .primary { background: linear-gradient(135deg, var(--accent), var(--accent-strong)); color: #08131a; border: none; }
.lesson-actions .ghost { background: transparent; border: 1px solid var(--stroke); color: var(--text); }
.lesson-actions a { padding: 8px 12px; border-radius: 10px; font-weight: 700; text-decoration: none; display: inline-flex; align-items: center; gap: 6px; }
.lesson-actions a:hover { border-color: var(--accent); color: var(--accent); }
.lesson-actions .ghost { border-radius: 12px; }

.plotly-block {
	width: 100%;
	margin: 8px 0 14px;
}

.plotly-block .plotly-frame {
	width: 100%;
	min-height: 320px;
}

.plotly-frame {
	width: 100%;
	min-height: 320px;
}

.plotly-controls {
	display: flex;
	gap: 8px;
	margin-top: 6px;
	flex-wrap: wrap;
}

.plotly-control {
	background: var(--panel);
	color: var(--text);
	border: 1px solid var(--stroke);
	border-radius: 999px;
	padding: 6px 12px;
	font-size: 0.85rem;
	font-weight: 600;
	cursor: pointer;
}

.plotly-control:hover {
	border-color: var(--accent);
	color: var(--accent);
}

/* Forms */
.form { display: flex; flex-direction: column; gap: 12px; }
.form label { font-weight: 700; color: var(--muted); }
.form input, .form textarea { width: 100%; padding: 10px 12px; border-radius: 10px; border: 1px solid var(--stroke); background: var(--input-bg); color: var(--text); font-family: var(--font-sans); }
.form textarea#tex { min-height: 520px; font-family: 'Courier New', 'SFMono-Regular', 'Consolas', monospace; line-height: 1.4; width: 100%; }
.form button { align-self: flex-start; }

.feedback { margin-top: 1.25rem; border: 1px solid var(--stroke); border-radius: var(--radius); padding: 1rem; background: var(--panel); box-shadow: var(--shadow); }
.feedback h3 { margin: 0 0 4px 0; }
.feedback form { display: grid; gap: 12px; }
.feedback label { display: flex; flex-direction: column; gap: 6px; color: var(--muted); font-weight: 700; }
.feedback input, .feedback textarea, .feedback select { width: 100%; padding: 10px 12px; border-radius: 10px; border: 1px solid var(--stroke); background: var(--input-bg); color: var(--text); font-family: var(--font-sans); }
.feedback select { height: 44px; }
.feedback button { align-self: flex-start; }
#demo-feedback { margin-top: 24px; }
#demo-feedback .feedback-status { color: #2f855a; font-weight: 700; }
#demo-feedback .pill.primary { padding: 10px 18px; }

.course-hero { margin-bottom: 1.25rem; }
.course-hero h2 { margin: 0; font-size: 1.6rem; letter-spacing: -0.25px; }
.course-hero .subtitle { margin-top: 6px; }

[data-theme="chalkboard"] .student-home-hero {
	position: relative;
	padding: 1.25rem 1.4rem;
	border-radius: 16px;
	background: rgba(0, 0, 0, 0.92);
	box-shadow: 0 10px 32px rgba(0,0,0,0.55), inset 0 0 0 2px rgba(255,255,255,0.06);
	color: #f5f7fa;
}

[data-theme="chalkboard"] .student-home-hero h2,
[data-theme="chalkboard"] .student-home-hero .subtitle {
	color: #f5f7fa;
	text-shadow: 0 1px 0 rgba(0,0,0,0.5);
}

.subtitle-underlined {
	color: var(--accent);
	position: relative;
}

.subtitle-underlined::after {
	content: '';
	display: block;
	margin-top: 6px;
	width: 100%;
	height: 2px;
	background: linear-gradient(90deg, var(--accent), color-mix(in srgb, var(--accent) 20%, transparent));
	border-radius: 999px;
}

.syllabus, .lesson-listing, .course-section { margin-bottom: 1.5rem; }

.list-header { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 0.5rem; }

[data-theme="chalkboard"] .list-header {
	position: relative;
	margin-bottom: 0.85rem;
}

[data-theme="chalkboard"] .list-header h3 {
	color: #0a0a0a;
	text-shadow: none;
}

[data-theme="chalkboard"] .list-header::after {
	content: '';
	position: absolute;
	left: 0;
	right: 0;
	bottom: -6px;
	height: 3px;
	background: #0a0a0a;
	border-radius: 999px;
	opacity: 0.9;
}

.badge { display: inline-flex; align-items: center; gap: 6px; padding: 6px 10px; border-radius: 12px; border: 1px solid var(--stroke); background: var(--panel); font-weight: 600; color: var(--text); }
.badge.success { background: var(--accent-soft); color: var(--accent); border-color: rgba(74,212,160,0.3); }
.badge.review { background: rgba(245, 165, 36, 0.18); color: var(--warn); border-color: rgba(245, 165, 36, 0.35); }

.search-bar { display: flex; gap: 10px; align-items: center; margin: 12px 0 24px 0; background: var(--panel); border: 1px solid var(--stroke); border-radius: var(--radius); padding: 10px 12px; }
.search-bar label { font-weight: 700; color: var(--muted); }
.search-bar input { flex: 1; padding: 10px 12px; border: 1px solid var(--stroke); border-radius: 10px; background: var(--input-bg); color: var(--text); }
.search-bar button { padding: 10px 14px; border-radius: 10px; border: none; background: linear-gradient(135deg, var(--accent), var(--accent-strong)); color: #08131a; font-weight: 800; cursor: pointer; box-shadow: var(--shadow); }
.search-bar button:hover { transform: translateY(-1px); }

.syllabus .markdown, .markdown { background: var(--panel); border: 1px solid var(--stroke); border-radius: var(--radius); padding: 1rem; box-shadow: var(--shadow); }
.markdown p { line-height: 1.65; color: var(--text); }
.markdown h1, .markdown h2, .markdown h3 { margin-top: 1rem; }
.markdown code { background: rgba(255,255,255,0.05); padding: 2px 6px; border-radius: 6px; }
.prompt { margin-top: 0.25rem; color: var(--muted); }

.lesson-list .empty-state {
	color: #0a0a0a;
}

/* Chat */
.chat-lesson { display: flex; flex-direction: column; gap: 1rem; }
.lesson-nav { display: flex; gap: 10px; flex-wrap: wrap; }
.lesson-nav a { border: 1px solid var(--stroke); border-radius: 999px; padding: 8px 12px; color: var(--text); background: var(--panel); }
.lesson-nav a:hover { border-color: var(--accent); color: var(--accent); }

.lesson-nav a:focus-visible,
.controls button:focus-visible,
.chat-input-row button:focus-visible,
.chat-actions button:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }

.chat-header { display: flex; align-items: center; gap: 0.9rem; margin-bottom: 0.5rem; padding: 0.75rem 0; border-bottom: 1px solid var(--stroke); }
.avatar { width: 40px; height: 40px; border-radius: 12px; display: flex; align-items: center; justify-content: center; font-weight: 800; background: linear-gradient(135deg, var(--accent), var(--accent-strong)); color: #08131a; box-shadow: var(--shadow); }
.titles h2 { margin: 0; font-size: 1.25rem; }
.titles .subtitle { margin: 0; color: var(--muted); font-size: 0.95rem; }
.controls { margin-left: auto; display: flex; gap: 0.5rem; }
.controls button { border-radius: 12px; padding: 0.55rem 0.85rem; cursor: pointer; border: 1px solid var(--stroke); font-weight: 700; background: var(--panel); color: var(--text); }
.controls .ghost:hover { border-color: var(--accent); color: var(--accent); }
.controls .primary { background: linear-gradient(135deg, var(--accent), var(--accent-strong)); color: #08131a; border: none; box-shadow: var(--shadow); }

.lesson-player { position: relative; display: flex; flex-direction: column; gap: 12px; }
.player-stage { position: relative; border: 1px solid var(--stroke); border-radius: 16px; background: var(--chat-surface); box-shadow: var(--shadow); overflow: hidden; min-height: 420px; display: flex; flex-direction: column; }
.player-stage .chat-log { border: none; border-radius: 0; box-shadow: none; background: transparent; max-height: none; min-height: 420px; padding-bottom: 3.5rem; flex: 1; overflow-y: auto; }
.player-stage.is-paused::after {
	content: 'Paused';
	position: absolute;
	left: 16px;
	top: 16px;
	background: rgba(0,0,0,0.6);
	color: #fff;
	padding: 6px 10px;
	border-radius: 999px;
	font-size: 0.85rem;
	letter-spacing: 0.02em;
	z-index: 4;
}

.lesson-overlay {
	position: absolute;
	inset: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	background: radial-gradient(circle at 50% 50%, rgba(12,18,36,0.45), rgba(5,7,12,0.7));
	z-index: 5;
	border-radius: 16px;
}
.overlay-content { text-align: center; display: flex; flex-direction: column; gap: 12px; align-items: center; }
.overlay-title { color: var(--text); font-weight: 700; }
.play-btn { width: 86px; height: 86px; border-radius: 50%; border: none; background: linear-gradient(135deg, #111827, #0b0f19); box-shadow: var(--shadow); cursor: pointer; display: flex; align-items: center; justify-content: center; }
.play-icon { display: block; margin-left: 6px; width: 0; height: 0; border-top: 14px solid transparent; border-bottom: 14px solid transparent; border-left: 22px solid #f8fafc; }

.player-click-overlay { position: absolute; inset: 0; border: none; background: transparent; pointer-events: none; z-index: 2; }

.player-controls {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	padding: 10px 14px 12px;
	background: linear-gradient(180deg, rgba(5,7,12,0), rgba(5,7,12,0.85) 30%, rgba(5,7,12,0.95));
	color: #f8fafc;
	display: flex;
	flex-direction: column;
	align-items: stretch;
	gap: 10px;
	z-index: 3;
}
.player-stage.is-idle .player-controls {
	opacity: 0;
	transform: translateY(8px);
	pointer-events: none;
}
.player-controls-left { display: flex; align-items: center; gap: 12px; flex: 1; order: 2; }
.player-controls-right { display: flex; align-items: center; gap: 10px; justify-content: flex-end; order: 1; }
.player-btn { width: 36px; height: 36px; border-radius: 999px; border: 1px solid rgba(255,255,255,0.2); background: rgba(0,0,0,0.35); display: inline-flex; align-items: center; justify-content: center; cursor: pointer; color: #fff; }
.player-btn:hover { border-color: rgba(255,255,255,0.6); }

#player-play-btn .icon-play { width: 0; height: 0; border-top: 6px solid transparent; border-bottom: 6px solid transparent; border-left: 10px solid #fff; }
#player-play-btn .icon-pause { position: relative; width: 12px; height: 12px; display: none; }
#player-play-btn .icon-pause::before,
#player-play-btn .icon-pause::after { content: ''; position: absolute; top: 0; width: 4px; height: 12px; background: #fff; border-radius: 2px; }
#player-play-btn .icon-pause::before { left: 0; }
#player-play-btn .icon-pause::after { right: 0; }
#player-play-btn[data-state="playing"] .icon-play { display: none; }
#player-play-btn[data-state="playing"] .icon-pause { display: block; }

.icon-fullscreen { width: 14px; height: 14px; border: 2px solid #fff; border-radius: 2px; }
.icon-gear { width: 14px; height: 14px; border-radius: 50%; border: 2px solid #fff; position: relative; }
.icon-gear::before { content: ''; position: absolute; inset: 3px; border-radius: 50%; background: #fff; }

.player-progress { display: flex; align-items: center; gap: 10px; flex: 1; width: 100%; }
#player-progress { width: 100%; -webkit-appearance: none; height: 5px; border-radius: 999px; background: linear-gradient(90deg, rgba(255,255,255,0.2), rgba(255,255,255,0.8)); outline: none; }
#player-progress::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 14px; height: 14px; border-radius: 50%; background: #fff; border: 2px solid rgba(0,0,0,0.4); }
.player-progress-label { font-size: 0.85rem; color: rgba(255,255,255,0.8); min-width: 42px; text-align: right; }

.player-menu { position: absolute; right: 12px; bottom: 52px; background: rgba(6,8,12,0.95); border: 1px solid rgba(255,255,255,0.12); border-radius: 12px; padding: 10px; box-shadow: 0 12px 28px rgba(0,0,0,0.45); z-index: 6; }
.player-menu[aria-hidden="true"] { display: none; }
.player-menu-title { font-size: 0.85rem; color: rgba(255,255,255,0.7); margin-bottom: 8px; }
.player-menu-grid { display: grid; grid-template-columns: repeat(3, minmax(60px, 1fr)); gap: 6px; }
.player-menu-item { background: rgba(255,255,255,0.06); color: #fff; border: 1px solid rgba(255,255,255,0.14); border-radius: 8px; padding: 6px 8px; cursor: pointer; font-size: 0.85rem; }
.player-menu-item:hover { border-color: rgba(255,255,255,0.4); }

.chat-panel { display: flex; flex-direction: column; gap: 12px; }
.chat-panel-actions { display: flex; gap: 8px; flex-wrap: wrap; }

#lesson-player:fullscreen,
#lesson-player.is-fullscreen {
	background: var(--bg);
	width: 100%;
	height: 100%;
	padding: 0;
	margin: 0;
	--player-chat-height: clamp(160px, 20vh, 260px);
}

#lesson-player:fullscreen .player-stage,
#lesson-player.is-fullscreen .player-stage {
	height: 100%;
	border-radius: 0;
}

#lesson-player:fullscreen .chat-panel,
#lesson-player.is-fullscreen .chat-panel {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	background: color-mix(in srgb, var(--chat-surface) 85%, transparent);
	backdrop-filter: blur(10px);
	border-top: 1px solid color-mix(in srgb, var(--stroke) 70%, transparent);
	padding: 10px 12px;
	max-height: var(--player-chat-height, 16vh);
	overflow-y: auto;
	z-index: 7;
}

#lesson-player:fullscreen .player-controls,
#lesson-player.is-fullscreen .player-controls {
	bottom: var(--player-chat-height, 16vh);
}

#lesson-player:fullscreen .player-stage .chat-log,
#lesson-player.is-fullscreen .player-stage .chat-log {
	padding-bottom: calc(var(--player-chat-height, 16vh) + 64px);
}

.chat-log { min-height: 320px; max-height: 75vh; overflow-y: auto; border: 1px solid var(--stroke); border-radius: 16px; padding: 1rem; background: var(--chat-surface); display: flex; flex-direction: column; gap: 0.6rem; box-shadow: var(--shadow); }
.bubble { padding: 0.75rem 0.85rem; border-radius: 16px; margin: 0.1rem 0; max-width: 80%; white-space: pre-wrap; border: 1px solid transparent; line-height: 1.5; position: relative; font-size: calc(1rem + 2pt); }
.bubble.user { background: var(--accent-soft); color: var(--text); border-color: rgba(74,212,160,0.3); align-self: flex-end; }
.bubble.assistant { background: var(--panel); border-color: var(--stroke); }
.bubble.important { background: var(--bubble-important-bg); border: 1px dashed var(--warn); color: var(--text); }
.bubble p { margin: 0; line-height: 1.4; }
.bubble p + p { margin-top: 0.3rem; }
.bubble ul, .bubble ol { margin: 0.2rem 0 0.3rem 1.05rem; padding: 0; }
.bubble li { margin: 0.08rem 0; }

[data-theme="chalkboard"] .chat-header {
	position: relative;
	margin: 0 -0.15rem 0.3rem -0.15rem;
	padding: 1rem 1.1rem;
	border: 1px solid rgba(255,255,255,0.08);
	border-radius: 18px;
	background:
		radial-gradient(circle at 14% 18%, rgba(255,255,255,0.08), transparent 36%),
		radial-gradient(circle at 82% 26%, rgba(255,255,255,0.07), transparent 38%),
		linear-gradient(180deg, rgba(20,24,30,0.9), rgba(11,12,13,0.92));
	box-shadow:
		0 12px 40px rgba(0,0,0,0.55),
		0 1px 0 rgba(255,255,255,0.04) inset,
		0 -1px 0 rgba(0,0,0,0.4) inset;
	backdrop-filter: blur(6px);
	border-bottom: none;
}

[data-theme="chalkboard"] .chat-header::after {
	content: '';
	position: absolute;
	inset: -12px -18px 8px -18px;
	background: radial-gradient(circle at 50% 10%, rgba(0,0,0,0.45), transparent 60%);
	z-index: -1;
	filter: blur(12px);
}

/* Notebook theme: handwriting bubbles on lined paper */
[data-theme="notebook"] .bubble {
	background: transparent;
	border: none;
	box-shadow: none;
	border-radius: 0;
	font-family: 'Patrick Hand', 'Comic Neue', 'Manrope', system-ui, -apple-system, sans-serif;
	font-size: calc(1.05rem + 2pt);
	line-height: 1.6;
	padding: 0.45rem 0.2rem;
	color: var(--text);
	border-bottom: 1px solid rgba(73, 124, 201, 0.45);
}
[data-theme="notebook"] .bubble.user {
	align-self: flex-end;
	color: #19345a;
	border-bottom-color: rgba(240, 115, 128, 0.45);
}
[data-theme="notebook"] .bubble.assistant {
	color: #1f2933;
}
[data-theme="notebook"] .bubble.important {
	border-bottom: 1px solid rgba(210, 138, 0, 0.7);
	color: #2b1f05;
}

[data-theme="chalkboard"] .chat-log {
	background-color: #0b0c0d;
	background-image:
		radial-gradient(circle at 22% 26%, rgba(255,255,255,0.07), transparent 32%),
		radial-gradient(circle at 74% 30%, rgba(255,255,255,0.06), transparent 30%),
		radial-gradient(circle at 36% 72%, rgba(255,255,255,0.05), transparent 36%),
		radial-gradient(circle at 68% 84%, rgba(255,255,255,0.04), transparent 30%),
		radial-gradient(ellipse at center, rgba(255,255,255,0.045) 0%, rgba(255,255,255,0) 65%),
		repeating-linear-gradient(110deg, rgba(255,255,255,0.018) 0 4px, transparent 4px 14px),
		repeating-linear-gradient(70deg, rgba(255,255,255,0.015) 0 5px, transparent 5px 16px),
		url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'>\n<filter id='gnoise'>\n  <feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' seed='8' result='noise'/>\n  <feGaussianBlur in='noise' stdDeviation='0.5' result='blur'/>\n</filter>\n<rect width='100%' height='100%' filter='url(%23gnoise)' opacity='0.45'/>\n</svg>");
		/* url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='120' height='120'>\n<filter id='gn'>\n  <feTurbulence type='fractalNoise' baseFrequency='0.82' numOctaves='2' seed='11' result='n'/>\n  <feGaussianBlur in='n' stdDeviation='0.55' result='b'/>\n</filter>\n<rect width='100%' height='100%' filter='url(%23gn)' opacity='0.28'/>\n</svg>"); */
	background-blend-mode: soft-light, soft-light, soft-light, normal;
	background-size: 100% 100%, 100% 100%, 100% 100%, 100% 100%, 100% 100%, 220px 220px, 240px 220px, 120px 120px;
	background-repeat: repeat;
	background-attachment: local;
	border: 1px solid rgba(255,255,255,0.1);
	box-shadow: inset 0 0 0 1px rgba(255,255,255,0.06), inset 0 -14px 70px rgba(0,0,0,0.38), 0 16px 40px rgba(0,0,0,0.66);
	position: relative;
	overflow-x: hidden;
	overflow-y: auto;
}

[data-theme="chalkboard"] .chat-log::before {
	content: '';
	position: absolute;
	inset: 0;
	background-image:
		repeating-linear-gradient(120deg, rgba(255,255,255,0.03) 0 6px, transparent 6px 18px),
		repeating-linear-gradient(60deg, rgba(255,255,255,0.025) 0 5px, transparent 5px 16px),
		radial-gradient(circle at 18% 24%, rgba(255,255,255,0.05), transparent 32%),
		radial-gradient(circle at 72% 62%, rgba(255,255,255,0.04), transparent 34%);
	background-size: 220px 220px, 240px 200px, 100% 100%, 100% 100%;
	background-repeat: repeat;
	opacity: 0.24;
	filter: blur(0.35px) saturate(0.92);
	mix-blend-mode: screen;
	pointer-events: none;
	z-index: 1;
}

[data-theme="chalkboard"] .chat-log::after {
	content: '';
	position: absolute;
	inset: 0;
	background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'>\n<filter id='gnoise'>\n  <feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' seed='8' result='noise'/>\n  <feGaussianBlur in='noise' stdDeviation='0.5' result='blur'/>\n</filter>\n<rect width='100%' height='100%' filter='url(%23gnoise)' opacity='0.45'/>\n</svg>");
	background-size: cover;
	background-repeat: repeat;
	background-blend-mode: screen;
	opacity: 0.24;
	filter: blur(0.35px) saturate(0.92);
	pointer-events: none;
	z-index: 1;
}

/* [data-theme="chalkboard"] .chat-log::after {
  content: "";
  position: absolute;
  inset: 0;

  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='600' height='600'>, <filter id='chalk'>, <feTurbulence type='fractalNoise' baseFrequency='0.12' numOctaves='4' seed='13'/>, <feGaussianBlur stdDeviation='2.8'/>, </filter>, <rect width='100%' height='100%' filter='url(%23chalk)' opacity='0.85'/>, </svg>");

  background-size: 160% 160%;
  transform: scale(1.1);

  mix-blend-mode: overlay;
  opacity: 0.45;

  pointer-events: none;
  z-index: 1;
} */


[data-theme="chalkboard"] .bubble {
	background: transparent;
	border: none;
	box-shadow: none;
	padding: 0.35rem 0.15rem;
	max-width: 100%;
	color: #f7f7f5;
	text-shadow: 0 0 1px rgba(255,255,255,0.55), 0 0 6px rgba(255,255,255,0.12);
	font-family: 'Gloria Hallelujah', 'Patrick Hand', 'Manrope', system-ui, -apple-system, sans-serif;
	font-size: calc(1.05rem + 2pt);
	letter-spacing: 0.01em;
}

[data-theme="chalkboard"] .bubble.user {
	align-self: flex-end;
	color: #d8e7ff;
	text-shadow: 0 0 1px rgba(216,231,255,0.7), 0 0 7px rgba(216,231,255,0.2);
}

[data-theme="chalkboard"] .bubble.important {
	background: transparent;
	border: none;
	color: #c7e4ff;
}

[data-theme="chalkboard"] .bubble::before {
	content: '';
	position: absolute;
	left: 0;
	top: 52%;
	width: 100%;
	height: 1px;
	background: radial-gradient(circle, rgba(255,255,255,0.06) 0 18%, transparent 70%);
	opacity: 0.38;
	transform: translateY(-50%);
	pointer-events: none;
}

[data-theme="chalkboard"] .bubble p,
[data-theme="chalkboard"] .bubble li,
[data-theme="chalkboard"] .bubble { line-height: 1.75; }

[data-theme="chalkboard"] .chat-log::-webkit-scrollbar-thumb {
	background: rgba(255,255,255,0.12);
	border-radius: 999px;
}

[data-theme="notebook"] .handwriting-char,
[data-theme="chalkboard"] .handwriting-char {
	display: inline-block;
	position: relative;
	opacity: 0.03;
	transform: translateY(-1px) rotate(-0.4deg);
	color: currentColor;
	background: linear-gradient(90deg, currentColor 0 0);
	background-size: 0% 100%;
	background-repeat: no-repeat;
	-webkit-background-clip: text;
	-webkit-text-fill-color: transparent;
	filter: blur(0.35px) saturate(0.9);
}

[data-theme="notebook"] .handwriting-anim,
[data-theme="chalkboard"] .handwriting-anim {
	animation: handwriting-reveal 0.5s ease-out forwards;
}

@keyframes handwriting-reveal {
	from {
		opacity: 0;
		background-size: 0% 100%;
		filter: blur(0.45px);
		transform: translateY(-4px) rotate(-1deg);
	}
	70% {
		opacity: 0.95;
		background-size: 82% 100%;
		filter: blur(0.18px);
		transform: translateY(1px) rotate(0.35deg);
	}
	to {
		opacity: 1;
		background-size: 100% 100%;
		filter: blur(0);
		transform: translateY(0) rotate(0deg);
	}
}

.chat-input-row {
	display: flex;
	gap: 0.6rem;
	align-items: center;
	padding: 0.35rem 0.5rem;
	background: var(--panel);
	border: 1px solid var(--stroke);
	border-radius: var(--radius);
	box-shadow: var(--shadow);
	font-size: calc(1rem + 2pt);
}
#chat-input {
	flex: 1;
	background: var(--input-bg);
	border: 1px solid var(--stroke);
	border-radius: 12px;
	color: var(--text);
	padding: 0.7rem 0.85rem;
	font-size: inherit;
}
.chat-actions { display: flex; gap: 0.4rem; }
.chat-input-row button, .chat-actions button {
	background: linear-gradient(135deg, var(--accent), var(--accent-strong));
	color: #08131a;
	border: none;
	border-radius: 12px;
	padding: 0.7rem 0.9rem;
	cursor: pointer;
	font-weight: 800;
	font-size: inherit;
	box-shadow: var(--shadow);
	transition: transform 120ms ease, box-shadow 120ms ease;
}
.chat-input-row button:hover, .chat-actions button:hover { transform: translateY(-1px); }
.chat-input-row button.ghost, .chat-actions .ghost {
	background: var(--panel);
	color: var(--text);
	border: 1px solid var(--stroke);
	box-shadow: none;
}

.record-icon-btn {
	width: 42px;
	height: 42px;
	padding: 0;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	border-radius: 12px;
}

.record-icon-btn svg {
	width: 20px;
	height: 20px;
	fill: currentColor;
}

#record-btn.recording,
#record-btn[data-state="recording"] {
	background: rgba(239, 68, 68, 0.18);
	border-color: rgba(239, 68, 68, 0.7);
	color: #fca5a5;
}

#record-btn[data-state="transcribing"] {
	background: rgba(59, 130, 246, 0.18);
	border-color: rgba(59, 130, 246, 0.6);
	color: #93c5fd;
}

button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
a:focus-visible {
	outline: 2px solid var(--accent);
	outline-offset: 2px;
	border-color: var(--accent);
}

.chat-options {
	display: flex;
	gap: 12px;
	align-items: center;
	color: var(--muted);
	padding: 0.5rem 0.75rem;
	background: var(--panel);
	border: 1px solid var(--stroke);
	border-radius: var(--radius);
	box-shadow: var(--shadow);
	font-size: calc(1rem + 2pt);
}
.chat-panel.is-idle .chat-options {
	opacity: 0;
	transform: translateY(8px);
	pointer-events: none;
	transition: opacity 220ms ease, transform 220ms ease;
}
.chat-panel .chat-options {
	transition: opacity 220ms ease, transform 220ms ease;
}
.chat-options select, .chat-options input[type="checkbox"], .chat-options input[type="range"] { accent-color: var(--accent); }

.voice-picker {
	display: flex;
	align-items: center;
	gap: 10px;
	flex-wrap: wrap;
}

.voice-label {
	font-weight: 700;
	color: var(--muted);
	font-size: inherit;
}

.voice-buttons {
	display: flex;
	gap: 8px;
	flex-wrap: wrap;
}

.voice-btn {
	padding: 6px 12px;
	border-radius: 999px;
	border: 1px solid var(--stroke);
	background: var(--panel);
	color: var(--text);
	font-weight: 700;
	box-shadow: none;
	font-size: inherit;
}

.voice-btn.active {
	background: linear-gradient(135deg, var(--accent), var(--accent-strong));
	color: #08131a;
	border-color: transparent;
}

.speed-control { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; }
.speed-control label { color: var(--muted); font-weight: 700; margin-top: 4px; }
.speed-control .slider-wrap { display: flex; flex-direction: column; gap: 6px; min-width: 220px; max-width: 320px; position: relative; padding-bottom: 18px; margin-top: 4px; }
.speed-control input[type="range"] { width: 100%; -webkit-appearance: none; height: 6px; border-radius: 999px; background: linear-gradient(90deg, var(--accent-soft), var(--accent)); outline: none; box-shadow: inset 0 0 0 1px var(--stroke); }
.speed-control input[type="range"]::-webkit-slider-thumb {
	-webkit-appearance: none;
	appearance: none;
	width: 22px;
	height: 22px;
	border-radius: 50%;
	background: var(--accent);
	border: 2px solid var(--accent-strong);
	box-shadow: 0 2px 6px rgba(0,0,0,0.25);
	cursor: pointer;
	transition: transform 120ms ease, box-shadow 120ms ease;
}
.speed-control input[type="range"]::-moz-range-thumb {
	width: 22px;
	height: 22px;
	border-radius: 50%;
	background: var(--accent);
	border: 2px solid var(--accent-strong);
	box-shadow: 0 2px 6px rgba(0,0,0,0.25);
	cursor: pointer;
	transition: transform 120ms ease, box-shadow 120ms ease;
}
.speed-control input[type="range"]::-webkit-slider-thumb:hover,
.speed-control input[type="range"]::-moz-range-thumb:hover { transform: translateY(-1px); box-shadow: 0 4px 10px rgba(0,0,0,0.28); }
.speed-control input[type="range"]::-moz-range-track { height: 6px; border-radius: 999px; background: linear-gradient(90deg, var(--accent-soft), var(--accent)); border: 1px solid var(--stroke); }
.speed-control .tick-labels { position: absolute; left: 0; right: 0; bottom: 0; height: 16px; font-size: 0.78rem; color: var(--muted); pointer-events: none; }
.speed-control .tick-labels span { position: absolute; transform: translateX(-50%); white-space: nowrap; }
.speed-control #typing-speed-value { font-weight: 700; color: var(--accent-strong); min-width: 2.5rem; text-align: right; }

.practice-cta {
	margin-top: 1rem;
	padding: 0.9rem 1rem;
	background: linear-gradient(135deg, rgba(74,212,160,0.08), rgba(74,212,160,0));
	border: 1px solid var(--stroke);
	border-radius: var(--radius);
	display: flex;
	align-items: center;
	gap: 12px;
	flex-wrap: wrap;
}

.audio-unlock-banner {
	position: fixed;
	left: 50%;
	transform: translateX(-50%);
	bottom: 18px;
	background: var(--panel);
	border: 1px solid var(--stroke);
	border-radius: 999px;
	box-shadow: var(--shadow);
	padding: 10px 14px;
	display: flex;
	gap: 12px;
	align-items: center;
	color: var(--text);
	font-weight: 700;
	z-index: 9999;
}

.audio-unlock-banner button {
	background: linear-gradient(135deg, var(--accent), var(--accent-strong));
	border: none;
	color: #08131a;
	border-radius: 999px;
	padding: 6px 12px;
	font-weight: 800;
	cursor: pointer;
}

.tts-loading {
	background: var(--chat-surface);
	border: 1px dashed var(--stroke);
	color: var(--muted);
}

.tts-loading-text {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font-weight: 700;
}

.tts-loading-dots::after {
	content: '...';
	display: inline-block;
	letter-spacing: 2px;
	animation: ttsDots 1.2s infinite steps(4, end);
}

@keyframes ttsDots {
	0% { content: ''; }
	25% { content: '.'; }
	50% { content: '..'; }
	75% { content: '...'; }
	100% { content: ''; }
}

/* Utility */
.small { font-size: 0.9rem; }
.hint { color: var(--muted); }
.subtitle { color: var(--muted); }

@media (max-width: 960px) {
	.container { padding: 0 1rem; }
	header .container { flex-wrap: wrap; gap: 10px; align-items: flex-start; }
	.brand-mark { width: 32px; height: 32px; }
	.brand-text .title { font-size: 1rem; }
	.top-nav { width: 100%; flex-wrap: wrap; gap: 8px; }
	.list-header { flex-wrap: wrap; gap: 8px; }
	.lesson-list, .grid { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); }
	.lesson-card, .card { flex-direction: column; align-items: flex-start; }
	.controls { width: 100%; justify-content: flex-end; flex-wrap: wrap; }
	.chat-options { flex-wrap: wrap; }
	.practice-cta { flex-direction: column; align-items: flex-start; }
}

@media (max-width: 640px) {
	header { position: sticky; }
	.container { padding: 0 0.9rem; }
	.top-nav { overflow-x: auto; padding-bottom: 6px; }
	.top-nav .pill { white-space: nowrap; }
	.course-hero h2 { font-size: 1.35rem; }
	.lesson-list, .grid { grid-template-columns: 1fr; }
	.search-bar { flex-direction: column; align-items: stretch; }
	.search-bar input, .search-bar button { width: 100%; }
	.lesson-actions { width: 100%; justify-content: flex-start; }
	.chat-header { flex-direction: column; align-items: flex-start; gap: 0.6rem; }
	.controls { width: 100%; justify-content: flex-start; gap: 6px; }
	.chat-input-row { flex-direction: column; align-items: stretch; }
	#chat-input { width: 100%; }
	.chat-actions { width: 100%; justify-content: flex-end; }
	.chat-log { max-height: 55vh; }
}