:root {
	--ink: #24201a;
	--ink-soft: #5c554c;
	--muted: #82786b;
	--paper: #f7f2e9;
	--paper-2: #fffaf1;
	--surface: #fffdf8;
	--surface-warm: #fbf4e8;
	--line: #ddd1bf;
	--line-soft: #eee5d8;
	--accent: #8f2f28;
	--accent-ink: #6f231e;
	--focus: #284f7a;
	--shadow: 0 20px 60px rgba(57, 42, 25, 0.09);

	/* Translation locale colors: restrained bookmark colors, not full-page themes. */
	--lang-zh-CN: #b53f32; /* cinnabar */
	--lang-es: #bd7a18; /* amber */
	--lang-pt-BR: #247a64; /* Brazilian green-teal */
	--lang-ja: #345f90; /* indigo */
	--lang-ko: #7d416b; /* plum */

	--reader-width: 900px;
	--side-rail: 76px;
	--header-offset: 96px;
}

* {
	box-sizing: border-box;
}

html {
	background: var(--paper);
}

body {
	margin: 0;
	font:
		16px/1.62 ui-serif,
		Georgia,
		Cambria,
		"Times New Roman",
		serif;
	color: var(--ink);
	min-height: 100vh;
	display: flow-root;
	background:
		linear-gradient(90deg, rgba(143, 47, 40, 0.05) 0 1px, transparent 1px 100%),
		linear-gradient(180deg, rgba(255, 253, 248, 0.94), rgba(247, 242, 233, 0.96));
	background-size: 72px 100%, auto;
}

button,
input {
	font: inherit;
}

button {
	color: inherit;
}

.app-header {
	position: sticky;
	top: 0;
	z-index: 30;
	padding: 14px clamp(14px, 3vw, 28px) 12px;
	background: rgba(255, 250, 241, 0.9);
	border-bottom: 1px solid var(--line);
	box-shadow: 0 1px 0 rgba(255, 255, 255, 0.7) inset;
	backdrop-filter: saturate(145%) blur(18px);
}

.bar {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 14px;
	width: min(100%, calc(var(--reader-width) + var(--side-rail)));
	max-width: calc(var(--reader-width) + var(--side-rail));
	margin: 0 auto;
}

/* Logo lockup, far left, links home. "PolyDict" inherits ink, ".cc" picks up the
   brand red so the two read as one mark in two colors. */
.brand {
	flex: 0 0 auto;
	display: inline-flex;
	align-items: center;
	gap: 8px;
	text-decoration: none;
	transition: opacity 160ms ease;
}

.brand:hover {
	opacity: 0.82;
}

.brand:hover,
.brand:focus,
.brand:focus-visible {
	text-decoration: none;
}

/* Replace the browser's default focus ring (a tight blue line that reads like an
   underline on this inline-flex link) with a soft rounded ring around the lockup. */
.brand:focus-visible {
	outline: 3px solid color-mix(in oklch, var(--accent) 26%, transparent);
	outline-offset: 4px;
	border-radius: 8px;
}

.brand-logo {
	display: block;
	width: 28px;
	height: 28px;
}

.brand-name {
	font: 800 18px/1 ui-sans-serif, system-ui, sans-serif;
	letter-spacing: -0.01em;
	color: var(--ink);
}

.brand-tld {
	color: var(--accent);
}

.dev-badge {
	justify-self: start;
	padding: 4px 8px 3px;
	border: 1px solid color-mix(in oklch, var(--accent) 54%, black);
	border-radius: 4px;
	background: var(--accent);
	color: var(--paper-2);
	font: 700 11px/1.1 ui-sans-serif, system-ui, sans-serif;
	letter-spacing: 0;
	text-transform: uppercase;
}

.dev-badge[hidden] {
	display: none;
}

.dict-picker {
	display: inline-flex;
	align-items: center;
	gap: 3px;
	width: fit-content;
	max-width: 100%;
	padding: 3px;
	border: 1px solid var(--line);
	border-radius: 7px;
	background: #eee3d2;
	overflow-x: auto;
}

.dict-picker:empty {
	display: none;
}

.dict-picker button {
	min-height: 32px;
	padding: 0 11px;
	border: 0;
	border-radius: 5px;
	background: transparent;
	color: var(--ink-soft);
	cursor: pointer;
	white-space: nowrap;
	font: 650 13px/1 ui-sans-serif, system-ui, sans-serif;
	letter-spacing: 0;
	transition:
		background 160ms ease,
		color 160ms ease,
		box-shadow 160ms ease;
}

.dict-picker button:hover {
	color: var(--ink);
	background: rgba(255, 253, 248, 0.46);
}

.dict-picker button.active {
	background: var(--surface);
	color: var(--accent-ink);
	box-shadow: 0 1px 5px rgba(57, 42, 25, 0.12);
}

.single-dict .bar {
	grid-template-columns: minmax(280px, 1fr);
}

/* Search column: the form and its status line stacked, so #status aligns to the
   input's left edge (not the logo's). Takes the flexible remaining width in .bar. */
.search-col {
	position: relative;
	flex: 1 1 280px;
	min-width: 0;
}

#search-form {
	position: relative;
	display: grid;
	grid-template-columns: minmax(0, 1fr) auto;
	align-items: stretch;
	gap: 8px;
	min-width: 0;
	width: 100%;
}

#search-input {
	width: 100%;
	min-width: 0;
	height: 44px;
	padding: 0 15px;
	border: 1px solid color-mix(in oklch, var(--accent) 24%, var(--line));
	border-radius: 7px;
	outline: none;
	background: var(--surface);
	color: var(--ink);
	box-shadow:
		0 1px 0 rgba(255, 255, 255, 0.7) inset,
		0 8px 24px rgba(57, 42, 25, 0.05);
	font: 500 16px/1 ui-sans-serif, system-ui, sans-serif;
	transition:
		border-color 160ms ease,
		box-shadow 160ms ease,
		background 160ms ease;
}

#search-input::placeholder {
	color: #9a8e80;
}

#search-input:focus {
	border-color: color-mix(in oklch, var(--accent) 72%, var(--line));
	background: #fffefa;
	box-shadow:
		0 0 0 3px rgba(143, 47, 40, 0.13),
		0 10px 28px rgba(143, 47, 40, 0.08);
}

#search-form button[type="submit"] {
	position: relative;
	min-width: 96px;
	height: 44px;
	padding: 0 16px;
	border: 1px solid color-mix(in oklch, var(--accent) 78%, black);
	border-radius: 7px;
	background: var(--accent);
	color: var(--paper-2);
	cursor: pointer;
	font: 750 14px/1 ui-sans-serif, system-ui, sans-serif;
	letter-spacing: 0;
	box-shadow: 0 10px 24px rgba(143, 47, 40, 0.18);
	transition:
		transform 130ms ease,
		background 160ms ease,
		box-shadow 160ms ease;
}

/* Busy: button is non-interactive the moment a search starts (belt-and-suspenders
   with the JS `navigating` guard), with no visual change so the fast path can't flash. */
#search-form.is-busy button[type="submit"] {
	pointer-events: none;
}

/* Loading: only after the request crosses the spinner threshold — the label goes
   transparent (keeping the button width, no layout shift) and a spinner shows. The
   spinner IS the disabled state; we don't grey the button (that fights the spinner),
   just settle it slightly. pointer-events:none above already kills hover/active. */
#search-form.is-loading button[type="submit"] {
	color: transparent;
	opacity: 0.92;
	box-shadow: none;
}

#search-form.is-loading button[type="submit"]::after {
	content: "";
	position: absolute;
	inset: 0;
	width: 16px;
	height: 16px;
	margin: auto;
	border: 2px solid color-mix(in oklch, var(--paper-2) 42%, transparent);
	border-top-color: var(--paper-2);
	border-radius: 50%;
	animation: pd-spin 0.6s linear infinite;
}

@keyframes pd-spin {
	to {
		transform: rotate(360deg);
	}
}

#search-form button[type="submit"]:hover {
	background: #7f2923;
	box-shadow: 0 12px 28px rgba(143, 47, 40, 0.22);
}

#search-form button[type="submit"]:active {
	transform: translateY(1px);
}

#suggest {
	position: absolute;
	top: calc(100% + 8px);
	left: 0;
	right: 104px;
	display: none;
	max-height: min(380px, 70vh);
	margin: 0;
	padding: 6px;
	overflow: auto;
	list-style: none;
	border: 1px solid var(--line);
	border-radius: 8px;
	background: var(--surface);
	box-shadow: var(--shadow);
	font: 500 15px/1.25 ui-sans-serif, system-ui, sans-serif;
}

#suggest.open {
	display: block;
}

#suggest li {
	padding: 9px 10px;
	border-radius: 5px;
	color: var(--ink-soft);
	cursor: pointer;
}

#suggest li:hover,
#suggest li.active {
	background: var(--surface-warm);
	color: var(--accent-ink);
}

/* Short-lived ("Looking up…") — absolutely positioned just under the input so it
   never adds height to the bar, keeping logo / input / button centered on one line.
   Left edge tracks the input; pointer-events off so it can't block anything below. */
#status {
	position: absolute;
	top: calc(100% + 5px);
	left: 2px;
	right: 0;
	margin: 0;
	color: var(--muted);
	font: 500 13px/1.4 ui-sans-serif, system-ui, sans-serif;
	pointer-events: none;
}

#entry {
	width: min(var(--reader-width), calc(100% - 28px));
	margin: clamp(20px, 3vw, 36px) auto;
	padding: clamp(18px, 3vw, 34px) clamp(18px, 3.5vw, 42px) clamp(32px, 5vw, 48px);
	background: rgba(255, 253, 248, 0.82);
	border: 1px solid rgba(221, 209, 191, 0.76);
	border-radius: 8px;
	box-shadow: var(--shadow);
}

#entry:empty {
	display: none;
}

#entry img {
	max-width: 100%;
	vertical-align: middle;
}

#entry a {
	color: var(--accent-ink);
	text-decoration-thickness: 1px;
	text-underline-offset: 0.18em;
}

.error {
	padding: 34px 18px;
	color: var(--muted);
	text-align: center;
	font: 500 16px/1.5 ui-sans-serif, system-ui, sans-serif;
}

.page-kicker {
	margin: 0 0 12px;
	color: var(--accent-ink);
	font: 850 12px/1 ui-sans-serif, system-ui, sans-serif;
	letter-spacing: 0.08em;
	text-transform: uppercase;
}

.page-lede,
.landing-lede {
	max-width: 780px;
	margin: 0;
	color: var(--ink-soft);
	font-size: clamp(20px, 2.5vw, 27px);
	line-height: 1.45;
}

.landing,
.about-page {
	padding: clamp(22px, 4vw, 48px) clamp(12px, 2vw, 28px) clamp(8px, 2vw, 20px);
}

.landing h1,
.about-page h1 {
	max-width: 820px;
	margin: 0 0 clamp(18px, 3vw, 28px);
	color: var(--ink);
	font-size: clamp(48px, 7vw, 86px);
	line-height: 0.96;
	letter-spacing: 0;
}

.landing-languages {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin: clamp(24px, 4vw, 42px) 0;
}

.landing-languages span {
	display: inline-flex;
	min-height: 34px;
	align-items: center;
	padding: 0 12px;
	border: 1px solid color-mix(in oklch, var(--accent) 22%, var(--line));
	border-radius: 999px;
	background: var(--surface-warm);
	color: var(--accent-ink);
	font: 750 13px/1 ui-sans-serif, system-ui, sans-serif;
}

.landing-panel,
.about-grid {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 1px;
	margin: clamp(28px, 5vw, 54px) 0;
	border-block: 1px solid var(--line);
	background: var(--line);
}

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

.landing-panel > div,
.about-grid > div {
	padding: clamp(18px, 3vw, 28px);
	background: color-mix(in oklch, var(--surface) 88%, var(--paper));
}

.landing-panel strong,
.about-grid h2 {
	display: block;
	margin: 0 0 8px;
	color: var(--ink);
	font: 850 15px/1.25 ui-sans-serif, system-ui, sans-serif;
	letter-spacing: 0;
}

.landing-panel span,
.about-grid p {
	display: block;
	margin: 0;
	color: var(--ink-soft);
	font-size: 15px;
	line-height: 1.55;
}

.landing-popular {
	margin: clamp(28px, 5vw, 44px) 0 0;
}

.landing-popular h2 {
	margin: 0 0 12px;
	color: var(--muted);
	font: 750 13px/1.2 ui-sans-serif, system-ui, sans-serif;
	letter-spacing: 0;
}

.landing-popular ul,
.related-words ul {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.landing-popular a,
.related-words a,
.page-links a {
	display: inline-flex;
	align-items: center;
	min-height: 36px;
	padding: 0 12px;
	border: 1px solid color-mix(in oklch, var(--accent) 25%, var(--line));
	border-radius: 999px;
	background: color-mix(in oklch, var(--accent) 5%, var(--surface));
	color: var(--accent-ink) !important;
	font: 750 14px/1 ui-sans-serif, system-ui, sans-serif;
	text-decoration: none;
	transition:
		background 160ms ease,
		border-color 160ms ease,
		transform 130ms ease;
}

.landing-popular a:hover,
.related-words a:hover,
.page-links a:hover {
	border-color: color-mix(in oklch, var(--accent) 54%, var(--line));
	background: color-mix(in oklch, var(--accent) 9%, var(--surface));
	transform: translateY(-1px);
}

.page-links {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
	margin-top: clamp(30px, 5vw, 56px);
}

.about-page h2 {
	font-size: 18px;
}

.about-page code,
.landing-panel code {
	padding: 2px 5px;
	border: 1px solid var(--line-soft);
	border-radius: 4px;
	background: var(--surface-warm);
	color: var(--accent-ink);
	font: 700 0.9em/1 ui-sans-serif, system-ui, sans-serif;
}

.related-words {
	margin-top: clamp(28px, 4vw, 44px);
	padding-top: clamp(18px, 3vw, 26px);
	border-top: 1px solid var(--line);
	text-align: center;
}

.related-words h2 {
	margin: 0 0 12px;
	color: var(--muted);
	font: 750 13px/1.2 ui-sans-serif, system-ui, sans-serif;
	letter-spacing: 0;
}

.related-words ul {
	justify-content: center;
}

/* Dictionary reset layer. The vendor CSS is useful, but these rules make it read
   like a modern reference page and keep translated lines optically subordinate. */
#entry .entry,
#entry .entry.lozenge,
#entry .verbtable {
	display: block !important;
	margin: 0 !important;
	color: var(--ink) !important;
	font-family: inherit !important;
	line-height: 1.62 !important;
}

#entry .entryhead {
	display: block;
	margin: 0 0 24px;
	padding: 0 0 18px;
	border-bottom: 1px solid var(--line);
}

#entry .hwd {
	display: inline !important;
	color: var(--ink) !important;
	font-size: clamp(38px, 7vw, 68px);
	font-weight: 700;
	line-height: 0.95;
	letter-spacing: 0;
}

#entry .hyphenation {
	display: inline-block;
	margin-left: 10px;
	color: var(--muted);
	font-size: 18px;
}

#entry .variant,
#entry .proncodes,
#entry .gram,
#entry .pos,
#entry .geo,
#entry .registerlab {
	color: var(--ink-soft) !important;
	font-family: ui-sans-serif, system-ui, sans-serif;
	font-size: 14px;
	font-style: normal !important;
	font-weight: 560;
}

#entry .pos {
	color: var(--accent-ink) !important;
}

#entry .gram,
#entry .geo,
#entry .registerlab {
	display: inline-block;
	margin: 0 3px;
	padding: 1px 6px;
	border: 1px solid var(--line-soft);
	border-radius: 999px;
	background: var(--surface-warm);
	vertical-align: middle;
}

#entry .proncodes {
	display: inline-block;
	margin-left: 8px;
	color: #6a6259 !important;
}

#entry .entryhead a {
	display: inline-flex;
	width: 28px;
	height: 28px;
	margin: 0 0 0 4px;
	align-items: center;
	justify-content: center;
	border: 1px solid var(--line);
	border-radius: 999px;
	background: var(--surface);
	vertical-align: middle;
	transition:
		transform 130ms ease,
		background 160ms ease,
		border-color 160ms ease;
}

#entry .entryhead a:hover {
	transform: translateY(-1px);
	border-color: color-mix(in oklch, var(--accent) 34%, var(--line));
	background: #fffaf4;
}

#entry .entryhead a img {
	display: block;
	max-width: 18px;
	max-height: 18px;
	margin: 0 !important;
}

#entry .example a img {
	display: inline-block;
	max-width: 18px;
	max-height: 18px;
	margin: 0 !important;
	vertical-align: -3px;
}

#entry .sense {
	position: relative;
	display: block !important;
	margin: 0;
	padding: 18px 0 18px 46px;
	border-top: 1px solid var(--line-soft);
}

#entry .entryhead + a + .sense,
#entry .entryhead + .sense {
	border-top: 0;
}

#entry .sense > span.sensenum {
	position: absolute;
	left: 0;
	top: 20px;
	display: inline-grid;
	width: 28px;
	height: 28px;
	place-items: center;
	border: 1px solid var(--line);
	border-radius: 999px;
	background: var(--surface-warm);
	color: var(--accent-ink) !important;
	font: 750 13px/1 ui-sans-serif, system-ui, sans-serif;
}

#entry .subsense > span.sensenum {
	position: static;
	display: inline;
	width: auto;
	height: auto;
	margin: 0 6px 0 0;
	border: 0;
	border-radius: 0;
	background: transparent;
	color: var(--accent-ink) !important;
	font: 760 0.95em/1 ui-sans-serif, system-ui, sans-serif;
}

#entry .lexunit,
#entry .exp,
#entry .collocate,
#entry .exponent .display {
	color: var(--ink) !important;
	font-weight: 760 !important;
}

#entry .lexunit,
#entry .exp.display {
	font-size: 1.04em;
}

#entry .def {
	color: var(--ink) !important;
	font-weight: 500;
}

#entry .defbold,
#entry .abbr,
#entry .colloinexa,
#entry .collo,
#entry .colloc,
#entry .expr,
#entry .lexvar,
#entry .orthvar,
#entry .propform,
#entry .propformprep,
#entry .deriv,
#entry .syn,
#entry .opp,
#entry .relatedwd,
#entry .refhwd,
#entry .reflex,
#entry .phrvbhwd,
#entry .amequiv,
#entry .brequiv,
#entry .pluralform,
#entry .ptandpp,
#entry .prespart,
#entry .pasttense,
#entry .pastpart,
#entry .t3perssing,
#entry .comp,
#entry .superl,
#entry .thespropform,
#entry .goodcollo,
#entry .nodeword,
#entry .phrv,
#entry .phrasetext,
#entry .fullform,
#entry .bookfilm {
	color: var(--accent-ink);
	font-weight: 720;
}

#entry .gloss,
#entry .collgloss,
#entry .linkword,
#entry .pron,
#entry .amevarpron,
#entry .amevariant,
#entry .brevariant,
#entry .italic,
#entry .hintitalic,
#entry .infllab,
#entry .pronstrong {
	color: var(--ink-soft) !important;
	font-style: italic;
}

#entry .gramexa,
#entry .colloexa,
#entry .subsense,
#entry .runon,
#entry .phrvbentry,
#entry .thesref,
#entry .phrase,
#entry .grammar,
#entry .compareword,
#entry .gramrefcont,
#entry .expl,
#entry .inflections {
	display: block;
	margin-top: 9px;
}

#entry .expl,
#entry .hint {
	color: var(--ink-soft);
}

#entry .phrvbentry {
	margin-left: 0 !important;
	padding-left: 18px;
	border-left: 2px solid var(--line);
}

#entry .signpost,
#entry .synopp,
#entry .ac,
#entry .crossref,
#entry .suffix,
#entry .collorange {
	display: inline-block;
	margin: 0 4px;
	padding: 2px 6px;
	border: 1px solid color-mix(in oklch, var(--accent) 28%, var(--line));
	border-radius: 999px;
	background: var(--surface-warm);
	color: var(--accent-ink) !important;
	font: 800 11px/1.25 ui-sans-serif, system-ui, sans-serif;
	text-transform: uppercase;
}

#entry .warning,
#entry .cross {
	color: var(--accent-ink) !important;
	font-weight: 760;
}

#entry .badexa,
#entry .badcollo {
	color: var(--muted);
	text-decoration: line-through;
}

#entry .goodexa {
	color: var(--ink);
	font-style: italic;
}

#entry .frequent,
#entry .last,
#entry .newline,
#entry .no_convert,
#entry .nondv,
#entry .thesaurus {
	color: inherit;
}

#entry .object,
#entry .hintbold {
	color: var(--accent-ink);
	font-weight: 720;
}

#entry .hs0::before {
	content: "·";
	color: var(--muted);
}

#entry .homnum,
#entry .refhomnum,
#entry .refsensenum {
	color: var(--accent-ink) !important;
	font-size: 0.72em;
	font-weight: 760;
	vertical-align: super;
}

#entry .example {
	display: block !important;
	margin: 10px 0 0;
	padding-left: 18px;
	color: #425366 !important;
	font-style: italic !important;
	line-height: 1.58;
}

#entry .example a {
	display: inline;
	margin-left: -18px;
	margin-right: 4px;
}

#entry .neutral {
	color: color-mix(in oklch, var(--muted) 70%, var(--paper));
}

#entry .tail {
	display: block;
	margin-top: 26px;
}

#entry .collobox,
#entry .thescollobox,
#entry .thesbox,
#entry .usagebox,
#entry .grambox,
#entry .f2nbox {
	display: block !important;
	clear: both;
	margin: 18px 0 !important;
	padding: 16px 18px !important;
	border: 1px solid var(--line) !important;
	border-radius: 8px !important;
	background: #fbf6ee !important;
	color: var(--ink) !important;
}

#entry .thesbox {
	background: #f8f3fb !important;
}

#entry .collobox,
#entry .thescollobox,
#entry .grambox {
	background: #edf6f2 !important;
}

#entry .f2nbox {
	background: #eef5fb !important;
}

#entry .heading {
	display: block;
	width: fit-content;
	margin: 0 0 10px;
	padding: 0 !important;
	background: transparent !important;
	color: var(--accent-ink) !important;
	font: 800 13px/1.2 ui-sans-serif, system-ui, sans-serif;
	letter-spacing: 0;
	text-transform: uppercase;
}

#entry .f2nbox .heading {
	color: var(--focus) !important;
}

#entry .section {
	display: block;
	margin-top: 12px;
	padding: 0 !important;
	background: transparent !important;
}

#entry .secheading,
#entry .subheading {
	display: block !important;
	margin: 18px 0 8px !important;
	padding: 7px 9px !important;
	border-radius: 5px;
	background: #e7dccb !important;
	color: var(--ink) !important;
	font: 800 12px/1 ui-sans-serif, system-ui, sans-serif;
	letter-spacing: 0;
	text-transform: uppercase;
}

#entry .exponent,
#entry .collocate {
	display: block !important;
	margin: 14px 0 0 !important;
}

#entry .imgholder {
	display: inline-block;
	max-width: 100%;
	padding: 8px;
	border: 1px solid var(--line);
	border-radius: 8px;
	background: var(--surface);
	cursor: zoom-in;
}

#entry .chwd {
	display: block;
	margin-top: 12px;
}

#entry .normal,
#entry .crossreftype {
	color: inherit;
	font-weight: inherit;
}

#entry a.no-sound {
	opacity: 0.58;
	cursor: default;
}

#entry a.no-sound img {
	filter: grayscale(1);
}

#entry .chwd a {
	display: inline-block;
	margin: 0 5px 6px 0;
	padding: 3px 7px;
	border: 1px solid color-mix(in oklch, var(--accent) 28%, var(--line));
	border-radius: 999px;
	background: var(--surface-warm);
	color: var(--accent-ink) !important;
	font: 750 12px/1.25 ui-sans-serif, system-ui, sans-serif;
	text-decoration: none;
}

#entry .spokensect,
#entry .errorbox {
	display: block;
	margin: 16px 0;
	padding: 12px 14px;
	border: 1px solid var(--line);
	border-radius: 8px;
	background: var(--surface-warm);
}

#entry .spokensecthead {
	display: block;
	margin-bottom: 8px;
	color: var(--focus);
	font: 800 13px/1.25 ui-sans-serif, system-ui, sans-serif;
	text-transform: uppercase;
}

#entry .verbtable {
	overflow-x: auto;
}

#entry .verbtable table {
	width: max-content;
	max-width: 100%;
	border-collapse: collapse;
	margin-top: 10px;
}

#entry .verbtable td {
	padding: 4px 7px;
	border: 1px solid var(--line);
}

/* Multilingual overlay. Translation blocks are siblings inserted after English
   fragments, so the visual system has to work with flat inline markup. */
.def-tr,
.example-tr,
.expl-tr,
.gloss-tr,
.registerlab-tr,
.secheading-tr,
.heading-tr {
	--lang-color: var(--muted);
	color: color-mix(in oklch, var(--lang-color) 82%, var(--ink)) !important;
	font-family: ui-sans-serif, system-ui, sans-serif;
	font-style: normal;
	letter-spacing: 0;
}

.def-tr,
.example-tr,
.expl-tr,
.gloss-tr {
	display: block;
	position: relative;
	margin-top: 6px;
	padding: 7px 10px 7px 54px;
	border: 1px solid color-mix(in oklch, var(--lang-color) 24%, var(--line));
	border-radius: 6px;
	background: color-mix(in oklch, var(--lang-color) 8%, var(--surface));
	font-size: 0.9em;
	line-height: 1.5;
}

.example-tr {
	margin-left: 18px;
	font-size: 0.86em;
}

.expl-tr,
.gloss-tr {
	font-size: 0.86em;
}

.registerlab-tr,
.secheading-tr,
.heading-tr {
	display: inline-block;
	margin: 3px 4px 3px 0;
	padding: 2px 6px;
	border: 1px solid color-mix(in oklch, var(--lang-color) 24%, var(--line));
	border-radius: 999px;
	background: color-mix(in oklch, var(--lang-color) 8%, var(--surface));
	font-size: 0.78em;
	font-weight: 720;
	line-height: 1.4;
}

.def-tr::before,
.example-tr::before,
.expl-tr::before,
.gloss-tr::before {
	content: attr(data-short);
	position: absolute;
	top: 50%;
	left: 14px;
	display: inline-flex;
	min-width: 22px;
	height: 21px;
	align-items: center;
	justify-content: center;
	padding: 0 6px;
	border-radius: 999px;
	background: var(--lang-color);
	color: #fffaf1;
	font: 800 10px/1 ui-sans-serif, system-ui, sans-serif;
	text-align: center;
	transform: translateY(-50%);
}

#entry [data-lang="zh-CN"] {
	--lang-color: var(--lang-zh-CN);
}

#entry [data-lang="es"] {
	--lang-color: var(--lang-es);
}

#entry [data-lang="pt-BR"] {
	--lang-color: var(--lang-pt-BR);
}

#entry [data-lang="ja"] {
	--lang-color: var(--lang-ja);
}

#entry [data-lang="ko"] {
	--lang-color: var(--lang-ko);
}

#entry [data-lang="zh-CN"]::before {
	content: "中";
}

#entry [data-lang="es"]::before {
	content: "ES";
}

#entry [data-lang="pt-BR"]::before {
	content: "PT";
}

#entry [data-lang="ja"]::before {
	content: "日";
}

#entry [data-lang="ko"]::before {
	content: "한";
}

.registerlab-tr::before,
.secheading-tr::before,
.heading-tr::before {
	content: none !important;
}

body:not(.lang-zh-CN) #entry [data-lang="zh-CN"],
body:not(.lang-es) #entry [data-lang="es"],
body:not(.lang-pt-BR) #entry [data-lang="pt-BR"],
body:not(.lang-ja) #entry [data-lang="ja"],
body:not(.lang-ko) #entry [data-lang="ko"] {
	display: none !important;
}

[data-lang="ko"] + .neutral,
[data-lang="ko"] + span.neutral {
	display: none;
}

.lang-toggles {
	position: fixed;
	left: max(14px, calc((100vw - var(--reader-width)) / 2 - var(--side-rail)));
	top: 50%;
	z-index: 25;
	display: flex;
	flex-direction: column;
	gap: 8px;
	transform: translateY(-50%);
}

.lang-toggle {
	--lang-color: var(--muted);
	position: relative;
	display: grid;
	width: 42px;
	height: 42px;
	place-items: center;
	padding: 0;
	border: 1px solid color-mix(in oklch, var(--lang-color) 50%, var(--line));
	border-radius: 6px;
	background: color-mix(in oklch, var(--lang-color) 7%, var(--surface));
	color: var(--lang-color);
	cursor: pointer;
	font: 850 13px/1 ui-sans-serif, system-ui, sans-serif;
	letter-spacing: 0;
	box-shadow: 0 8px 22px rgba(57, 42, 25, 0.08);
	transition:
		transform 130ms ease,
		background 160ms ease,
		color 160ms ease,
		box-shadow 160ms ease;
}

.lang-toggle[data-lang="zh-CN"] {
	--lang-color: var(--lang-zh-CN);
}

.lang-toggle[data-lang="es"] {
	--lang-color: var(--lang-es);
}

.lang-toggle[data-lang="pt-BR"] {
	--lang-color: var(--lang-pt-BR);
}

.lang-toggle[data-lang="ja"] {
	--lang-color: var(--lang-ja);
}

.lang-toggle[data-lang="ko"] {
	--lang-color: var(--lang-ko);
}

.lang-toggle:hover {
	transform: translateX(2px);
	box-shadow: 0 10px 26px rgba(57, 42, 25, 0.12);
}

.lang-toggle:focus-visible {
	outline: 3px solid color-mix(in oklch, var(--lang-color) 26%, transparent);
	outline-offset: 2px;
}

.lang-toggle[aria-pressed="true"] {
	background: var(--lang-color);
	color: #fffaf1;
}

.lang-toggle[aria-pressed="false"] {
	opacity: 0.72;
}

.lang-toggle::after {
	content: attr(title);
	position: absolute;
	left: calc(100% + 8px);
	top: 50%;
	width: max-content;
	max-width: 220px;
	padding: 6px 8px;
	border: 1px solid var(--line);
	border-radius: 5px;
	background: var(--surface);
	color: var(--ink-soft);
	box-shadow: 0 10px 24px rgba(57, 42, 25, 0.12);
	font: 650 12px/1.2 ui-sans-serif, system-ui, sans-serif;
	opacity: 0;
	pointer-events: none;
	transform: translate(-4px, -50%);
	transition:
		opacity 120ms ease,
		transform 120ms ease;
}

.lang-toggle:hover::after,
.lang-toggle:focus-visible::after {
	opacity: 1;
	transform: translate(0, -50%);
}

@media (max-width: 1040px) {
	.lang-toggles {
		position: static;
		flex-direction: row;
		justify-content: center;
		width: min(var(--reader-width), calc(100% - 28px));
		margin: 12px auto 0;
		padding: 6px;
		border: 1px solid var(--line);
		border-radius: 8px;
		background: rgba(255, 250, 241, 0.86);
		backdrop-filter: blur(12px);
		transform: none;
	}

	.lang-toggle:hover {
		transform: translateY(-1px);
	}

	.lang-toggle::after {
		display: none;
	}
}

@media (max-width: 700px) {
	:root {
		--header-offset: 218px;
	}

	body {
		font-size: 15px;
		background-size: 48px 100%, auto;
	}

	.app-header {
		padding: 10px 12px;
		/* iOS Safari mis-renders a position:sticky element that also carries
		   backdrop-filter (header detaches / clips mid-scroll). Drop the blur
		   and use an opaque background so sticky pins reliably on mobile. */
		background: var(--paper-2);
		backdrop-filter: none;
		-webkit-backdrop-filter: none;
	}

	.bar {
		grid-template-columns: 1fr;
		gap: 8px;
	}

	.dev-badge {
		grid-row: 1;
	}

	#search-form {
		grid-template-columns: minmax(0, 1fr);
	}

	/* Narrow screens: the keyboard's Go/Search key already submits the form,
	   so the standalone button is redundant — hide it for a cleaner layout. */
	#search-form button[type="submit"] {
		display: none;
	}

	#suggest {
		right: 0;
	}

	#entry {
		margin-top: 8px;
		padding: 16px 12px 44px;
		border-radius: 7px;
	}

	.landing,
	.about-page {
		padding: 18px 6px 0;
	}

	.landing h1,
	.about-page h1 {
		font-size: clamp(40px, 13vw, 58px);
	}

	.page-lede,
	.landing-lede {
		font-size: 18px;
	}

	.landing-panel,
	.about-grid {
		grid-template-columns: 1fr;
	}

	.landing-panel > div,
	.about-grid > div {
		padding: 16px 14px;
	}

	.landing-popular a,
	.related-words a,
	.page-links a {
		min-height: 34px;
		font-size: 13px;
	}

	#entry .entryhead {
		margin-bottom: 18px;
	}

	#entry .hwd {
		display: block !important;
		font-size: clamp(34px, 15vw, 52px);
	}

	#entry .sense {
		padding-left: 38px;
	}

	#entry .sense > span.sensenum {
		width: 25px;
		height: 25px;
	}

	.def-tr,
	.example-tr,
	.expl-tr,
	.gloss-tr {
		padding-left: 54px;
	}

	.example-tr {
		margin-left: 0;
	}
}

@media (prefers-reduced-motion: reduce) {
	*,
	*::before,
	*::after {
		scroll-behavior: auto !important;
		transition-duration: 0.01ms !important;
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
	}
}
