/**
 * Artificial Immersion Speak.
 * Everything is scoped under .ais-app so it never leaks into the host theme.
 *
 * Design notes:
 * The passage is the interface, so it gets a reading serif and generous measure.
 * Everything the student operates gets a tight grotesk so the two never blur.
 * Sentence ordinals are real information here: evidence is cited by sentence,
 * so the numbers are labels, not decoration.
 */

.ais-app {
	--ais-ink: #191c22;
	--ais-ink-soft: #5c6470;
	--ais-ink-faint: #8e96a2;
	--ais-line: #e0e4df;
	--ais-surface: #ffffff;
	--ais-field: #f4f6f3;
	--ais-accent: #0e6b57;
	--ais-accent-soft: #d9ece5;
	--ais-mark: #ffd15c;
	--ais-mark-soft: #fff0c4;
	--ais-wrong: #b3261e;
	--ais-wrong-soft: #fbe6e4;

	--ais-serif: "Iowan Old Style", "Source Serif Pro", Charter, Georgia, serif;
	--ais-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;

	--ais-radius: 4px;
	--ais-gap: 1.5rem;

	box-sizing: border-box;
	color: var(--ais-ink);
	font-family: var(--ais-sans);
	line-height: 1.5;
	margin: 0 auto;
	max-width: 1120px;
	width: 100%;
}

.ais-app *,
.ais-app *::before,
.ais-app *::after {
	box-sizing: inherit;
}

/* ---------- Type ---------- */

.ais-app .ais-eyebrow {
	color: var(--ais-ink-faint);
	font-size: 0.72rem;
	font-weight: 600;
	letter-spacing: 0.14em;
	margin: 0 0 0.4rem;
	text-transform: uppercase;
}

.ais-app .ais-h1 {
	font-family: var(--ais-serif);
	font-size: clamp( 1.6rem, 3.4vw, 2.3rem );
	font-weight: 600;
	letter-spacing: -0.01em;
	line-height: 1.15;
	margin: 0;
}

.ais-app .ais-h2 {
	font-family: var(--ais-serif);
	font-size: 1.45rem;
	font-weight: 600;
	line-height: 1.2;
	margin: 0 0 0.6rem;
}

.ais-app .ais-lede {
	color: var(--ais-ink-soft);
	margin: 0 0 1.2rem;
}

.ais-app .ais-fineprint {
	color: var(--ais-ink-faint);
	font-size: 0.82rem;
	margin: 0.6rem 0 0;
}

.ais-app .ais-loading,
.ais-app .ais-empty {
	color: var(--ais-ink-faint);
	font-size: 0.92rem;
	padding: 2rem 0;
}

.ais-app .ais-loading::after {
	animation: ais-ellipsis 1.4s steps(4, end) infinite;
	content: "";
}

@keyframes ais-ellipsis {
	0% { content: ""; }
	25% { content: "."; }
	50% { content: ".."; }
	75% { content: "..."; }
}

@media ( prefers-reduced-motion: reduce ) {
	.ais-app .ais-loading::after {
		animation: none;
		content: "...";
	}
}

/* ---------- Buttons ---------- */

.ais-app .ais-btn {
	background: var(--ais-surface);
	border: 1px solid var(--ais-line);
	border-radius: var(--ais-radius);
	color: var(--ais-ink);
	cursor: pointer;
	display: inline-block;
	font: inherit;
	font-size: 0.92rem;
	font-weight: 600;
	padding: 0.7rem 1.3rem;
	text-decoration: none;
	transition: background-color 0.15s ease, border-color 0.15s ease;
}

.ais-app .ais-btn:hover {
	border-color: var(--ais-ink-soft);
}

.ais-app .ais-btn--primary {
	background: var(--ais-accent);
	border-color: var(--ais-accent);
	color: #fff;
}

.ais-app .ais-btn--primary:hover {
	background: #0b5646;
	border-color: #0b5646;
}

.ais-app .ais-btn--ghost {
	background: transparent;
	border-color: transparent;
	color: var(--ais-ink-soft);
	padding-left: 0.4rem;
	padding-right: 0.4rem;
	text-decoration: underline;
	text-underline-offset: 3px;
}

.ais-app .ais-btn[disabled] {
	cursor: default;
	opacity: 0.55;
}

.ais-app .ais-btn:focus-visible,
.ais-app .ais-sentence:focus-visible,
.ais-app .ais-option:focus-visible,
.ais-app input:focus-visible,
.ais-app select:focus-visible {
	outline: 2px solid var(--ais-accent);
	outline-offset: 2px;
}

.ais-app .ais-link-quiet {
	color: var(--ais-ink-faint);
	font-size: 0.85rem;
	text-decoration: none;
}

.ais-app .ais-link-quiet:hover {
	color: var(--ais-ink);
	text-decoration: underline;
}

/* ---------- Auth ---------- */

.ais-app.ais-auth,
.ais-app .ais-auth__panel {
	max-width: 30rem;
}

.ais-app .ais-auth__panel {
	background: var(--ais-surface);
	border: 1px solid var(--ais-line);
	border-radius: var(--ais-radius);
	margin: 0 auto;
	padding: 2rem;
}

.ais-app .ais-auth__panel--message {
	text-align: left;
}

.ais-app .ais-tabs {
	border-bottom: 1px solid var(--ais-line);
	display: flex;
	gap: 1.4rem;
	margin-bottom: 1.5rem;
}

.ais-app .ais-tab {
	background: none;
	border: 0;
	border-bottom: 2px solid transparent;
	color: var(--ais-ink-faint);
	cursor: pointer;
	font: inherit;
	font-size: 0.9rem;
	font-weight: 600;
	margin-bottom: -1px;
	padding: 0 0 0.7rem;
}

.ais-app .ais-tab.is-active {
	border-bottom-color: var(--ais-accent);
	color: var(--ais-ink);
}

.ais-app .ais-field {
	display: block;
	margin-bottom: 1rem;
}

.ais-app .ais-field > span {
	display: block;
	font-size: 0.82rem;
	font-weight: 600;
	margin-bottom: 0.35rem;
}

.ais-app .ais-field input {
	background: var(--ais-field);
	border: 1px solid var(--ais-line);
	border-radius: var(--ais-radius);
	font: inherit;
	padding: 0.65rem 0.8rem;
	width: 100%;
}

.ais-app .ais-field small {
	color: var(--ais-ink-faint);
	display: block;
	font-size: 0.78rem;
	margin-top: 0.3rem;
}

.ais-app .ais-check {
	align-items: center;
	display: flex;
	font-size: 0.86rem;
	gap: 0.5rem;
	margin-bottom: 1.2rem;
}

.ais-app .ais-notice {
	border-left: 3px solid var(--ais-line);
	font-size: 0.88rem;
	margin-bottom: 1.2rem;
	padding: 0.7rem 0.9rem;
}

.ais-app .ais-notice.is-error {
	background: var(--ais-wrong-soft);
	border-left-color: var(--ais-wrong);
}

.ais-app .ais-notice.is-success {
	background: var(--ais-accent-soft);
	border-left-color: var(--ais-accent);
}

/* ---------- Dashboard ---------- */

.ais-app .ais-dash__head {
	align-items: flex-end;
	border-bottom: 1px solid var(--ais-line);
	display: flex;
	flex-wrap: wrap;
	gap: var(--ais-gap);
	justify-content: space-between;
	padding-bottom: 1.6rem;
}

.ais-app .ais-xp {
	min-width: 15rem;
}

.ais-app .ais-xp__figure {
	font-family: var(--ais-serif);
	font-size: 2.2rem;
	font-weight: 600;
	line-height: 1;
}

.ais-app .ais-xp__figure span {
	color: var(--ais-ink-faint);
	font-family: var(--ais-sans);
	font-size: 0.75rem;
	font-weight: 600;
	letter-spacing: 0.1em;
	margin-left: 0.4rem;
}

.ais-app .ais-meter {
	background: var(--ais-line);
	height: 3px;
	margin-top: 0.7rem;
	overflow: hidden;
	width: 100%;
}

.ais-app .ais-meter__fill {
	background: var(--ais-accent);
	display: block;
	height: 100%;
	transition: width 0.5s ease;
}

.ais-app .ais-stats {
	display: grid;
	gap: 1px;
	grid-template-columns: repeat( auto-fit, minmax( 9rem, 1fr ) );
	margin: 2rem 0;
}

.ais-app .ais-stat {
	border-left: 1px solid var(--ais-line);
	padding: 0 0 0 1rem;
}

.ais-app .ais-stat:first-child {
	border-left: 0;
	padding-left: 0;
}

.ais-app .ais-stat__num {
	display: block;
	font-family: var(--ais-serif);
	font-size: 1.75rem;
	font-weight: 600;
	line-height: 1.1;
}

.ais-app .ais-stat__label {
	color: var(--ais-ink-faint);
	font-size: 0.78rem;
}

.ais-app .ais-badges__list,
.ais-app .ais-results__badges {
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem;
	list-style: none;
	margin: 0 0 2rem;
	padding: 0;
}

.ais-app .ais-badge {
	align-items: center;
	background: var(--ais-field);
	border-radius: 100px;
	display: inline-flex;
	font-size: 0.82rem;
	font-weight: 600;
	gap: 0.45rem;
	padding: 0.35rem 0.85rem;
}

.ais-app .ais-badge__dot {
	background: var(--ais-mark);
	border-radius: 50%;
	height: 0.55rem;
	width: 0.55rem;
}

.ais-app .ais-badge.is-new .ais-badge__dot {
	background: var(--ais-accent);
}

.ais-app .ais-library__head {
	align-items: center;
	display: flex;
	justify-content: space-between;
	margin-bottom: 1rem;
}

.ais-app .ais-filter select {
	background: var(--ais-surface);
	border: 1px solid var(--ais-line);
	border-radius: var(--ais-radius);
	font: inherit;
	font-size: 0.85rem;
	padding: 0.4rem 0.6rem;
}

.ais-app .ais-library__grid {
	display: grid;
	gap: 1rem;
	grid-template-columns: repeat( auto-fill, minmax( 15rem, 1fr ) );
}

.ais-app .ais-card {
	background: var(--ais-surface);
	border: 1px solid var(--ais-line);
	border-radius: var(--ais-radius);
	color: inherit;
	display: flex;
	flex-direction: column;
	gap: 0.6rem;
	padding: 1.1rem;
	text-decoration: none;
	transition: border-color 0.15s ease, transform 0.15s ease;
}

.ais-app .ais-card:hover {
	border-color: var(--ais-accent);
	transform: translateY(-2px);
}

@media ( prefers-reduced-motion: reduce ) {
	.ais-app .ais-card:hover {
		transform: none;
	}
}

.ais-app .ais-card__meta {
	align-items: center;
	display: flex;
	gap: 0.6rem;
	margin: 0;
}

.ais-app .ais-tag {
	background: var(--ais-accent-soft);
	border-radius: 2px;
	color: var(--ais-accent);
	font-size: 0.7rem;
	font-weight: 700;
	letter-spacing: 0.06em;
	padding: 0.15rem 0.4rem;
}

.ais-app .ais-card__topic {
	color: var(--ais-ink-faint);
	font-size: 0.78rem;
}

.ais-app .ais-card__title {
	font-family: var(--ais-serif);
	font-size: 1.1rem;
	font-weight: 600;
	line-height: 1.25;
	margin: 0;
}

.ais-app .ais-card__foot {
	color: var(--ais-ink-faint);
	display: flex;
	font-size: 0.78rem;
	justify-content: space-between;
	margin: auto 0 0;
}

.ais-app .ais-card__xp {
	color: var(--ais-accent);
	font-weight: 600;
}

/* ---------- Player ---------- */

.ais-app .ais-player__head {
	align-items: flex-start;
	display: flex;
	gap: 1rem;
	justify-content: space-between;
	margin-bottom: 1rem;
}

.ais-app .ais-progress {
	background: var(--ais-line);
	height: 2px;
	margin-bottom: 2rem;
	width: 100%;
}

.ais-app .ais-progress__fill {
	background: var(--ais-accent);
	display: block;
	height: 100%;
	transition: width 0.4s ease;
	width: 0;
}

.ais-app .ais-player__grid {
	align-items: start;
	display: grid;
	gap: 2.5rem;
	grid-template-columns: minmax( 0, 1.35fr ) minmax( 0, 1fr );
}

@media ( max-width: 860px ) {
	.ais-app .ais-player__grid {
		gap: 1.8rem;
		grid-template-columns: 1fr;
	}
}

/* The passage. Serif, wide leading, sentences as targets. */

.ais-app .ais-passage {
	font-family: var(--ais-serif);
	font-size: 1.12rem;
	line-height: 1.85;
}

.ais-app .ais-passage__para {
	margin: 0 0 1.3rem;
}

.ais-app .ais-sentence {
	background: none;
	border: 0;
	border-radius: 2px;
	color: inherit;
	cursor: pointer;
	display: inline;
	font: inherit;
	padding: 0.1em 0.05em;
	position: relative;
	text-align: left;
	transition: background-color 0.12s ease;
}

.ais-app .ais-sentence:hover {
	background: var(--ais-field);
}

.ais-app .ais-sentence__ord {
	color: var(--ais-ink-faint);
	font-family: var(--ais-sans);
	font-size: 0.6em;
	font-weight: 600;
	margin-right: 0.25em;
	vertical-align: super;
}

/* Signature: marking a sentence lays a highlighter sweep behind the words. */
.ais-app .ais-sentence.is-marked {
	background: linear-gradient(
		100deg,
		rgba( 255, 209, 92, 0 ) 0%,
		var(--ais-mark) 2%,
		var(--ais-mark-soft) 40%,
		var(--ais-mark) 92%,
		rgba( 255, 209, 92, 0.35 ) 100%
	);
	box-decoration-break: clone;
	-webkit-box-decoration-break: clone;
}

.ais-app .ais-sentence.is-marked .ais-sentence__ord {
	color: #7a5c00;
}

.ais-app .ais-sentence.is-correct {
	background: var(--ais-accent-soft);
	box-decoration-break: clone;
	-webkit-box-decoration-break: clone;
	box-shadow: inset 0 -2px 0 var(--ais-accent);
}

.ais-app .ais-sentence.is-wrong {
	background: var(--ais-wrong-soft);
	box-decoration-break: clone;
	-webkit-box-decoration-break: clone;
	box-shadow: inset 0 -2px 0 var(--ais-wrong);
}

/* Quiz column */

.ais-app .ais-quiz {
	background: var(--ais-field);
	border-radius: var(--ais-radius);
	padding: 1.4rem;
	position: sticky;
	top: 1.5rem;
}

@media ( max-width: 860px ) {
	.ais-app .ais-quiz {
		position: static;
	}
}

.ais-app .ais-quiz__counter {
	color: var(--ais-ink-faint);
	font-size: 0.75rem;
	font-weight: 600;
	letter-spacing: 0.1em;
	margin: 0 0 0.5rem;
	text-transform: uppercase;
}

.ais-app .ais-quiz__question {
	font-family: var(--ais-serif);
	font-size: 1.18rem;
	font-weight: 600;
	line-height: 1.3;
	margin: 0 0 1.2rem;
}

.ais-app .ais-options {
	display: flex;
	flex-direction: column;
	gap: 0.5rem;
	margin-bottom: 1rem;
}

.ais-app .ais-option {
	align-items: flex-start;
	background: var(--ais-surface);
	border: 1px solid var(--ais-line);
	border-radius: var(--ais-radius);
	cursor: pointer;
	display: flex;
	font: inherit;
	font-size: 0.92rem;
	gap: 0.65rem;
	padding: 0.7rem 0.85rem;
	text-align: left;
	transition: border-color 0.12s ease;
	width: 100%;
}

.ais-app .ais-option:hover {
	border-color: var(--ais-ink-faint);
}

.ais-app .ais-option__key {
	color: var(--ais-ink-faint);
	flex: 0 0 auto;
	font-size: 0.75rem;
	font-weight: 700;
	line-height: 1.6;
}

.ais-app .ais-option.is-picked {
	border-color: var(--ais-ink);
	box-shadow: inset 0 0 0 1px var(--ais-ink);
}

.ais-app .ais-option.is-correct {
	background: var(--ais-accent-soft);
	border-color: var(--ais-accent);
	box-shadow: none;
}

.ais-app .ais-option.is-correct .ais-option__key {
	color: var(--ais-accent);
}

.ais-app .ais-option.is-wrong {
	background: var(--ais-wrong-soft);
	border-color: var(--ais-wrong);
	box-shadow: none;
}

.ais-app .ais-proof {
	color: var(--ais-ink-faint);
	font-size: 0.82rem;
	margin: 0 0 1rem;
}

.ais-app .ais-proof.is-set {
	color: #7a5c00;
	font-weight: 600;
}

.ais-app .ais-feedback {
	border-left: 3px solid var(--ais-line);
	font-size: 0.88rem;
	margin-bottom: 1rem;
	padding: 0.7rem 0.9rem;
}

.ais-app .ais-feedback.is-good {
	background: var(--ais-accent-soft);
	border-left-color: var(--ais-accent);
}

.ais-app .ais-feedback.is-bad {
	background: var(--ais-wrong-soft);
	border-left-color: var(--ais-wrong);
}

.ais-app .ais-feedback.is-nudge {
	background: var(--ais-mark-soft);
	border-left-color: var(--ais-mark);
}

.ais-app .ais-feedback p {
	margin: 0 0 0.35rem;
}

.ais-app .ais-feedback p:last-child {
	margin-bottom: 0;
}

.ais-app .ais-feedback__points {
	font-weight: 700;
}

.ais-app .ais-feedback__why,
.ais-app .ais-feedback__tries {
	color: var(--ais-ink-soft);
	font-size: 0.82rem;
}

.ais-app .ais-quiz__actions {
	align-items: center;
	display: flex;
	gap: 0.5rem;
}

.ais-app .ais-hint {
	background: var(--ais-mark-soft);
	font-size: 0.85rem;
	margin: 0.9rem 0 0;
	padding: 0.7rem 0.9rem;
}

/* ---------- Results ---------- */

.ais-app .ais-results__panel {
	border: 1px solid var(--ais-line);
	border-radius: var(--ais-radius);
	margin: 0 auto;
	max-width: 32rem;
	padding: 2.2rem;
	text-align: center;
}

.ais-app .ais-results__score {
	font-family: var(--ais-serif);
	font-size: 4rem;
	font-weight: 600;
	line-height: 1;
	margin: 0 0 0.4rem;
}

.ais-app .ais-results__line {
	color: var(--ais-ink-soft);
	margin: 0 0 0.8rem;
}

.ais-app .ais-results__xp {
	color: var(--ais-accent);
	font-size: 1.1rem;
	font-weight: 700;
	margin: 0 0 1.4rem;
}

.ais-app .ais-results__badges {
	justify-content: center;
}

.ais-app .ais-results__actions {
	display: flex;
	gap: 0.6rem;
	justify-content: center;
}

/* ---------- Leaderboard ---------- */

.ais-app .ais-board__list {
	list-style: none;
	margin: 0;
	padding: 0;
}

.ais-app .ais-board__row {
	align-items: baseline;
	border-bottom: 1px solid var(--ais-line);
	display: flex;
	gap: 1rem;
	padding: 0.65rem 0;
}

.ais-app .ais-board__place {
	color: var(--ais-ink-faint);
	font-size: 0.8rem;
	font-weight: 700;
	min-width: 1.5rem;
}

.ais-app .ais-board__name {
	flex: 1;
	font-weight: 600;
}

.ais-app .ais-board__xp {
	color: var(--ais-accent);
	font-size: 0.85rem;
	font-weight: 700;
}

/* ---------- Self serve picker ---------- */

.ais-app .ais-picker {
	background: var(--ais-field);
	border-radius: var(--ais-radius);
	margin-bottom: 2.5rem;
	padding: 1.5rem;
}

.ais-app .ais-picker__title {
	font-family: var(--ais-serif);
	font-size: 1.3rem;
	font-weight: 600;
	margin: 0 0 1.1rem;
}

.ais-app .ais-picker__row {
	align-items: flex-end;
	display: flex;
	flex-wrap: wrap;
	gap: 0.8rem;
}

.ais-app .ais-picker__field {
	display: block;
	flex: 1 1 12rem;
}

.ais-app .ais-picker__field > span {
	display: block;
	font-size: 0.75rem;
	font-weight: 600;
	letter-spacing: 0.06em;
	margin-bottom: 0.3rem;
	text-transform: uppercase;
}

.ais-app .ais-picker__field select {
	background: var(--ais-surface);
	border: 1px solid var(--ais-line);
	border-radius: var(--ais-radius);
	font: inherit;
	font-size: 0.92rem;
	padding: 0.62rem 0.7rem;
	width: 100%;
}

.ais-app .ais-picker__status:empty {
	display: none;
}

.ais-app .ais-picker__status {
	font-size: 0.85rem;
	margin: 0.9rem 0 0;
}

.ais-app .ais-picker__status.is-busy {
	color: var(--ais-ink-soft);
}

.ais-app .ais-picker__status.is-error {
	color: var(--ais-wrong);
}
