/* Talesmith Lang (.tsl) — universal reader namespace (node, reader, standalone) */

@font-face {
    font-family: "OpenDyslexic";
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url("fonts/OpenDyslexic-Regular.woff") format("woff");
}

.tsl-root {
    --tsl-page-w: 210mm;
    --tsl-page-h: 297mm;
    --tsl-pad-t: 12mm;
    --tsl-pad-b: 12mm;
    --tsl-pad-out: 15mm;
    --tsl-pad-gutter: 15mm;
    --tsl-doc-font: Georgia, "Times New Roman", serif;
    --tsl-font: var(--tsl-doc-font);
    --tsl-size: 11pt;
    --tsl-lh: 1.45;
    --tsl-text-align: left;
    --tsl-indent: 0;
    --tsl-para-space: 0;
    --tsl-bg: #f0ebe3;
    --tsl-paper: #fffef9;
    --tsl-ink: #1a1a1a;
    --tsl-muted: #555;
    --tsl-rule: #ccc;
    --tsl-row-gap: 0.35rem;
    box-sizing: border-box;
    min-height: 100vh;
    margin: 0;
    padding: 2rem 1rem 4rem;
    background: var(--tsl-bg);
    color: var(--tsl-ink);
    --tsl-font-read: Georgia, "Iowan Old Style", "Palatino Linotype", Palatino, "Times New Roman", serif;
    --tsl-font-ui: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
    --tsl-font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
    --tsl-reader-measure: 66ch;
    --tsl-reader-scale: 1;
    font-family: var(--tsl-font);
    font-size: calc(var(--tsl-size-base, 11pt) * var(--tsl-reader-scale, 1));
    line-height: var(--tsl-lh);
    -webkit-font-smoothing: antialiased;
}

.tsl-root[data-tsl-theme="dark"] {
    --tsl-bg: #1c1c1e;
    --tsl-paper: #2c2c2e;
    --tsl-ink: #f2f2f7;
    --tsl-muted: #aeaeb2;
    --tsl-rule: #48484a;
}

.tsl-root[data-tsl-reader-theme="light"] {
    --tsl-bg: #e8e4dc;
    --tsl-paper: #fffef9;
    --tsl-ink: #1a1a1a;
    --tsl-muted: #555;
    --tsl-rule: #ccc;
}

.tsl-root[data-tsl-reader-theme="sepia"] {
    --tsl-bg: #e8dfd0;
    --tsl-paper: #f4ecdd;
    --tsl-ink: #433a2e;
    --tsl-muted: #6e6150;
    --tsl-rule: #e3d7c2;
}

.tsl-root[data-tsl-reader-theme="dark"] {
    --tsl-bg: #121110;
    --tsl-paper: #1e1c19;
    --tsl-ink: #d2cdc4;
    --tsl-muted: #a39d92;
    --tsl-rule: #34312c;
}

.tsl-root[data-tsl-reader-width="narrow"] { --tsl-reader-measure: 58ch; }
.tsl-root[data-tsl-reader-width="medium"] { --tsl-reader-measure: 66ch; }
.tsl-root[data-tsl-reader-width="wide"] { --tsl-reader-measure: 76ch; }

.tsl-root[data-tsl-layout="scroll"] {
    padding-bottom: 2rem;
}

.tsl-root[data-tsl-layout="scroll"] .tsl-pages {
    align-items: stretch;
    gap: 0;
    max-width: var(--tsl-reader-measure);
    margin: 0 auto;
}

.tsl-root[data-tsl-layout="scroll"] .tsl-page {
    width: 100%;
    min-height: auto;
    max-width: none;
    box-shadow: none;
    border: 0;
    margin: 0;
    padding: 0;
    background: transparent;
}

.tsl-root[data-tsl-layout="scroll"] .tsl-page .tsl-body {
    padding: 0;
}

.tsl-root[data-tsl-layout="scroll"] .tsl-page[data-tsl-side="left"],
.tsl-root[data-tsl-layout="scroll"] .tsl-page[data-tsl-side="right"],
.tsl-root[data-tsl-layout="scroll"] .tsl-page[data-tsl-side="any"] {
    padding: 0;
}

.tsl-root[data-tsl-layout="scroll"] .tsl-region {
    display: none;
}

.tsl-root[data-tsl-layout="scroll"] .tsl-block--front-cover {
    min-height: auto;
}

.tsl-root[data-tsl-theme="serif"] {
    --tsl-font: "Palatino Linotype", Palatino, Georgia, serif;
}

.tsl-root[data-tsl-theme="compact"] {
    --tsl-size: 10pt;
    --tsl-lh: 1.35;
    --tsl-row-gap: 0.2rem;
}

/* Reading overrides after document theme (reader:prefs + tsl:layout) */
.tsl-root[data-tsl-reader-font="serif"] { --tsl-font: var(--tsl-font-read); }
.tsl-root[data-tsl-reader-font="sans"] { --tsl-font: var(--tsl-font-ui); }
.tsl-root[data-tsl-reader-font="mono"] { --tsl-font: var(--tsl-font-mono); }
.tsl-root[data-tsl-reader-dyslexia="1"] {
    --tsl-font: "OpenDyslexic", var(--tsl-font-read);
}

.tsl-root[data-tsl-reader-dyslexia="1"] .tsl-body,
.tsl-root[data-tsl-reader-dyslexia="1"] .tsl-region,
.tsl-root[data-tsl-reader-dyslexia="1"] .tsl-block {
    font-family: var(--tsl-font);
}

.tsl-root[data-tsl-reader-contrast="high"] {
    --tsl-bg: #000;
    --tsl-paper: #000;
    --tsl-ink: #fff;
    --tsl-muted: #f0f0f0;
    --tsl-rule: #fff;
}

.tsl-root[data-tsl-reader-contrast="high"][data-tsl-reader-theme="sepia"] {
    --tsl-bg: #1a1408;
    --tsl-paper: #1a1408;
    --tsl-ink: #ffe066;
    --tsl-muted: #e6c200;
    --tsl-rule: #ffe066;
}

.tsl-reading-ruler-band {
    position: fixed;
    z-index: 120;
    pointer-events: none;
    box-sizing: border-box;
    background: transparent;
    border: 0;
    box-shadow: none;
    overflow: hidden;
    max-height: calc(var(--tsl-ruler-line-h, 1.45em) * 3);
    transition: top 0.06s ease, height 0.06s ease, left 0.06s ease, width 0.06s ease;
}

/* Top and bottom thirds: soft shade; centre third stays clear for the focus line. */
.tsl-reading-ruler-band::before,
.tsl-reading-ruler-band::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    height: 33.333%;
    pointer-events: none;
}

.tsl-reading-ruler-band::before {
    top: 0;
    background: linear-gradient(
        to bottom,
        color-mix(in srgb, var(--tsl-ink) 14%, transparent),
        transparent
    );
}

.tsl-reading-ruler-band::after {
    bottom: 0;
    background: linear-gradient(
        to top,
        color-mix(in srgb, var(--tsl-ink) 14%, transparent),
        transparent
    );
}

.tsl-reading-ruler-line {
    position: static;
    z-index: auto;
    display: inline;
    font: inherit !important;
    font-size: inherit !important;
    line-height: inherit !important;
    letter-spacing: inherit !important;
    font-weight: inherit !important;
    vertical-align: baseline;
    padding: 0;
    margin: 0;
    border: 0;
    background: transparent !important;
    box-decoration-break: clone;
    -webkit-box-decoration-break: clone;
}

.tsl-root[data-tsl-layout="pages"] .tsl-body .tsl-reading-ruler-line,
.tsl-root .tsl-body .tsl-reading-ruler-line,
.document-tsl .tsl-reading-ruler-line {
    font: inherit !important;
    font-size: inherit !important;
    line-height: inherit !important;
}

.tsl-root[data-tsl-reader-theme="light"] .tsl-body .tsl-reading-ruler-line,
.tsl-root[data-tsl-reader-theme="sepia"] .tsl-body .tsl-reading-ruler-line,
.document-tsl[data-tsl-reader-theme="light"] .tsl-reading-ruler-line,
.document-tsl[data-tsl-reader-theme="sepia"] .tsl-reading-ruler-line {
    color: #000 !important;
    text-shadow:
        0 0 1px #fff,
        0 0 10px rgba(255, 255, 255, 0.95),
        0 1px 2px rgba(255, 255, 255, 0.85);
}

.tsl-root[data-tsl-reader-theme="dark"] .tsl-body .tsl-reading-ruler-line,
.document-tsl[data-tsl-reader-theme="dark"] .tsl-reading-ruler-line {
    color: #fff !important;
    text-shadow:
        0 0 2px #000,
        0 0 12px rgba(255, 255, 255, 0.65),
        0 1px 3px #000;
}

.tsl-root[data-tsl-reader-contrast="high"] .tsl-reading-ruler-line,
.document-tsl[data-tsl-reader-contrast="high"] .tsl-reading-ruler-line {
    color: #fff;
    text-shadow:
        0 0 2px #000,
        0 0 14px #fff,
        0 0 3px #000;
}

.tsl-root[data-tsl-reader-contrast="high"][data-tsl-reader-theme="sepia"] .tsl-reading-ruler-line {
    color: #fff;
}

.tsl-root[data-tsl-reading-ruler="1"][data-tsl-compact-pager="1"] .tsl-pager-viewport::before,
.tsl-root[data-tsl-reading-ruler="1"][data-tsl-compact-pager="1"] .tsl-pager-viewport::after {
    content: "";
    position: absolute;
    top: 0;
    bottom: 0;
    width: 12%;
    z-index: 3;
    pointer-events: none;
}

.tsl-root[data-tsl-reading-ruler="1"][data-tsl-compact-pager="1"] .tsl-pager-viewport::before {
    left: 0;
    background: linear-gradient(90deg, color-mix(in srgb, var(--tsl-ink) 6%, transparent), transparent);
}

.tsl-root[data-tsl-reading-ruler="1"][data-tsl-compact-pager="1"] .tsl-pager-viewport::after {
    right: 0;
    background: linear-gradient(270deg, color-mix(in srgb, var(--tsl-ink) 6%, transparent), transparent);
}

.tsl-root[data-tsl-compact-pager="1"][data-tsl-page-chrome-footer="1"] .tsl-pager-status {
    display: none !important;
}

.tsl-root[data-tsl-hyphenate="1"] .tsl-body {
    hyphens: auto;
}


[data-tsl-fit-container] {
    flex: 1 1 auto;
    min-height: 0;
    display: flex;
    flex-direction: column;
    max-width: 100%;
}

.tsl-root[data-tsl-layout="pages"] {
    display: flex;
    flex-direction: column;
    padding-left: 0.35rem;
    padding-right: 0.35rem;
    padding-bottom: 1.5rem;
    --tsl-pager-gutter: 0.65rem;
    --tsl-page-fit-w: min(var(--tsl-page-w), 100%);
}

/* Reader line width (narrow/medium/wide) does not resize pages: a page is the spec's
   fixed trim, paginated at that width. Width applies to the scroll layout only
   (--tsl-reader-measure); the reader UI disables it in pages (readingPrefApplies). */

.tsl-root[data-tsl-page-fit="native"] {
    --tsl-page-fit-w: var(--tsl-page-w);
}

.tsl-root[data-tsl-page-fit="native"] .tsl-page {
    max-width: none;
}

.tsl-pager-wrap {
    width: 100%;
    max-width: 100%;
    flex: 1 1 auto;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.tsl-pager {
    position: relative;
    width: 100%;
    max-width: 100%;
    flex: 1 1 auto;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.tsl-pager-viewport {
    position: relative;
    width: 100%;
    flex: 1 1 auto;
    min-height: 12rem;
    display: flex;
    justify-content: center;
    align-items: flex-start;
    overflow: auto;
    -webkit-overflow-scrolling: touch;
    padding: 0 0.15rem;
    box-sizing: border-box;
}

.tsl-root[data-tsl-layout="pages"] .tsl-pager-viewport {
    padding: 0;
}

.tsl-root[data-tsl-layout="pages"][data-tsl-page-fit="fit"]:not([data-tsl-stage-cramped]):not([data-tsl-scale-unreasonable]) .tsl-pager-wrap,
.tsl-root[data-tsl-layout="pages"][data-tsl-page-fit="scale"]:not([data-tsl-stage-cramped]):not([data-tsl-scale-unreasonable]) .tsl-pager-wrap {
    flex: 1 1 0;
    min-height: 0;
    max-height: 100%;
    overflow: hidden;
}

.tsl-root[data-tsl-layout="pages"][data-tsl-page-fit="fit"]:not([data-tsl-stage-cramped]):not([data-tsl-scale-unreasonable]) .tsl-pager-viewport,
.tsl-root[data-tsl-layout="pages"][data-tsl-page-fit="scale"]:not([data-tsl-stage-cramped]):not([data-tsl-scale-unreasonable]) .tsl-pager-viewport {
    overflow: hidden;
    flex: 1 1 0;
    min-height: 0;
    max-height: 100%;
}

.tsl-root[data-tsl-page-fit="scale"] .tsl-pager-wrap {
    flex: 1 1 0;
    min-height: 0;
    max-height: 100%;
    overflow: hidden;
}

.tsl-root[data-tsl-page-fit="scale"] .tsl-pager-viewport {
    overflow: hidden;
    flex: 1 1 0;
    min-height: 0;
    max-height: 100%;
}

.tsl-root[data-tsl-stage-cramped],
.tsl-root[data-tsl-scale-unreasonable] {
    --tsl-page-fit-w: var(--tsl-page-w);
}

.tsl-root[data-tsl-stage-cramped] .tsl-pager-viewport,
.tsl-root[data-tsl-scale-unreasonable] .tsl-pager-viewport {
    overflow: auto;
    flex: 1 1 auto;
    min-height: 12rem;
    max-height: none;
}

.tsl-root[data-tsl-layout="pages"][data-tsl-page-view="spread"] {
    --tsl-page-fit-w: min(var(--tsl-page-w), calc((100% - var(--tsl-pager-gutter)) / 2));
}

/* Actual size (print trim): overrides fit-width, spread halving, and reader width prefs */
.tsl-root[data-tsl-page-fit="native"][data-tsl-layout="pages"],
.tsl-root[data-tsl-page-fit="native"][data-tsl-layout="pages"][data-tsl-page-view="spread"],
.tsl-root[data-tsl-page-fit="native"][data-tsl-reader-width="narrow"],
.tsl-root[data-tsl-page-fit="native"][data-tsl-reader-width="wide"] {
    --tsl-page-fit-w: var(--tsl-page-w);
}

.tsl-root[data-tsl-page-fit="native"][data-tsl-layout="pages"] .tsl-page:not([aria-hidden="true"]) {
    width: var(--tsl-page-w);
    min-height: var(--tsl-page-h);
    max-width: none;
}

.tsl-root[data-tsl-page-fit="native"][data-tsl-layout="pages"][data-tsl-page-view="spread"] .tsl-spread.is-active .tsl-page {
    flex: 0 0 auto;
    width: var(--tsl-page-w);
    max-width: none;
}

.tsl-root[data-tsl-page-fit="native"] .tsl-pager-viewport {
    overflow: auto;
    flex: 1 1 0;
    min-height: 0;
}

[data-tsl-mount] > .tsl-root[data-tsl-layout="pages"],
[data-tsl-fit-container] > .tsl-root[data-tsl-layout="pages"],
[data-tsl-fit-container] [data-tsl-mount] > .tsl-root[data-tsl-layout="pages"] {
    min-height: 0;
    flex: 1 1 auto;
}

@media (max-width: 959px) {
    .tsl-root[data-tsl-layout="pages"][data-tsl-page-view="single"]:not([data-tsl-page-fit="native"]) {
        --tsl-page-fit-w: min(var(--tsl-page-w), 100%);
    }
}

/* Lab / narrow viewports: full-bleed pager (tsl.js data-tsl-compact-pager, fit → fit screen). */
.tsl-root[data-tsl-compact-pager="1"][data-tsl-layout="pages"] {
    padding-left: 0;
    padding-right: 0;
    padding-bottom: 0;
    --tsl-pager-gutter: 0;
    --tsl-pad-edge: max(12px, 0.875rem);
    --tsl-pad-out: var(--tsl-pad-edge);
    --tsl-pad-gutter: var(--tsl-pad-edge);
}

.tsl-root[data-tsl-compact-pager="1"] .tsl-page[data-tsl-side="left"],
.tsl-root[data-tsl-compact-pager="1"] .tsl-page[data-tsl-side="right"],
.tsl-root[data-tsl-compact-pager="1"] .tsl-page[data-tsl-side="any"],
.tsl-root[data-tsl-compact-pager="1"] .tsl-page:not([data-tsl-side]) {
    padding: var(--tsl-pad-t) var(--tsl-pad-edge) var(--tsl-pad-b) var(--tsl-pad-edge);
}

.tsl-lab-mount .tsl-root[data-tsl-compact-pager="1"][data-tsl-layout="pages"] {
    padding-bottom: 0;
    height: 100%;
    max-height: 100%;
}

.tsl-root[data-tsl-compact-pager="1"] .tsl-pager-wrap {
    height: 100%;
    max-height: 100%;
}

.tsl-root[data-tsl-compact-pager="1"] .tsl-pager {
    flex: 1 1 0;
    min-height: 0;
    max-height: 100%;
}

.tsl-root[data-tsl-compact-pager="1"] .tsl-pager-status {
    flex-shrink: 0;
    margin: 0;
    padding: 0.35rem 0.5rem max(0.35rem, env(safe-area-inset-bottom, 0));
}

.tsl-root[data-tsl-compact-pager="1"] .tsl-pager-viewport {
    padding: 0;
    overflow: hidden;
    touch-action: manipulation;
}

/* Horizontal slides: each page fills the viewport; index shifts pages sideways (incl. inside spreads). */
.tsl-root[data-tsl-compact-pager="1"][data-tsl-pager-flow="horizontal"] .tsl-pager-viewport {
    flex: 1 1 0;
    min-height: 0;
    max-height: 100%;
    overflow: hidden;
    align-items: stretch;
    justify-content: flex-start;
}

.tsl-root[data-tsl-compact-pager="1"][data-tsl-pager-flow="horizontal"] .tsl-pages {
    position: relative;
    display: block;
    width: 100%;
    height: 100%;
    max-width: none;
    gap: 0;
    transform: none;
    transition: none;
}

.tsl-root[data-tsl-compact-pager="1"][data-tsl-pager-flow="horizontal"] .tsl-spread {
    display: contents;
}

.tsl-root[data-tsl-compact-pager="1"][data-tsl-pager-flow="horizontal"][data-tsl-layout="pages"] .tsl-page:not([aria-hidden="true"]) {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    min-width: 0;
    max-width: 100%;
    display: grid;
    grid-template-rows: auto minmax(0, 1fr) auto;
    align-content: stretch;
    align-items: stretch;
    justify-items: stretch;
    overflow: hidden;
    margin: 0;
    max-width: none;
    box-sizing: border-box;
    box-shadow: none;
    border: 0;
    background: var(--tsl-bg, var(--tsl-paper, #fff));
    transform: translate3d(
        calc((var(--tsl-pager-slide-i, 0) - var(--tsl-pager-index, 0)) * 100%),
        0,
        0
    );
    opacity: calc(1 - 0.07 * var(--tsl-pager-slide-off, 0));
    transition:
        transform 0.42s cubic-bezier(0.22, 1, 0.36, 1),
        opacity 0.42s cubic-bezier(0.22, 1, 0.36, 1);
    backface-visibility: hidden;
    will-change: transform, opacity;
}

.tsl-root[data-tsl-compact-pager="1"][data-tsl-layout="pages"] .tsl-page:not([data-tsl-full-bleed="1"]) {
    height: 100%;
    min-height: 100%;
    max-height: 100%;
}

.tsl-root[data-tsl-compact-pager="1"] .tsl-page:not([data-tsl-full-bleed="1"]) .tsl-region--header {
    grid-row: 1;
}

.tsl-root[data-tsl-compact-pager="1"] .tsl-page:not([data-tsl-full-bleed="1"]) .tsl-region--header,
.tsl-root[data-tsl-compact-pager="1"] .tsl-page:not([data-tsl-full-bleed="1"]) .tsl-body,
.tsl-root[data-tsl-compact-pager="1"] .tsl-page:not([data-tsl-full-bleed="1"]) .tsl-region--footer {
    min-width: 0;
    max-width: 100%;
    width: 100%;
    box-sizing: border-box;
}

.tsl-root[data-tsl-compact-pager="1"] .tsl-page:not([data-tsl-full-bleed="1"]) .tsl-body {
    grid-row: 2;
    min-height: 0;
    overflow: hidden;
}

.tsl-root[data-tsl-compact-pager="1"] .tsl-page:not([data-tsl-full-bleed="1"]) .tsl-region--footer {
    grid-row: 3;
    align-self: end;
}

/* Full-bleed pages have no header/footer rows; lone .tsl-body must span the 3-row grid or it stays
   in the auto-sized first row and the cover image can collapse to zero height. */
.tsl-root[data-tsl-compact-pager="1"][data-tsl-pager-flow="horizontal"][data-tsl-layout="pages"]
    .tsl-page[data-tsl-full-bleed="1"]:not([aria-hidden="true"]) .tsl-body {
    grid-row: 1 / -1;
    min-height: 0;
    height: 100%;
    align-self: stretch;
}

.tsl-root[data-tsl-compact-pager="1"] .tsl-block--table {
    width: 100%;
    max-width: 100%;
    table-layout: fixed;
}

.tsl-root[data-tsl-compact-pager="1"] .tsl-block--table th,
.tsl-root[data-tsl-compact-pager="1"] .tsl-block--table td {
    overflow-wrap: anywhere;
    word-break: break-word;
    hyphens: auto;
}

.tsl-root[data-tsl-compact-pager="1"] .tsl-pager-zoom-shell {
    width: 100%;
    height: 100%;
    max-width: none;
    margin: 0;
}

@media (prefers-reduced-motion: reduce) {
    .tsl-root[data-tsl-compact-pager="1"][data-tsl-pager-flow="horizontal"][data-tsl-layout="pages"] .tsl-page:not([aria-hidden="true"]) {
        transition: none;
    }
}

.tsl-root[data-tsl-compact-pager="1"][data-tsl-pager-flow="horizontal"][data-tsl-layout="pages"] .tsl-page.is-active {
    z-index: 2;
}

.tsl-root[data-tsl-compact-pager="1"]:not([data-tsl-pager-flow="horizontal"]) .tsl-pages {
    display: flex;
    flex-direction: column;
    align-items: center;
    width: 100%;
}

.tsl-pager-zoom-shell {
    flex-shrink: 0;
    box-sizing: border-box;
}

.tsl-root[data-tsl-compact-pager="1"] .tsl-pager-wrap {
    flex: 1 1 0;
    min-height: 0;
    max-height: 100%;
    overflow: hidden;
}

.tsl-root[data-tsl-compact-pager="1"][data-tsl-page-fit="fit"] .tsl-pager-viewport,
.tsl-root[data-tsl-compact-pager="1"][data-tsl-page-fit="scale"] .tsl-pager-viewport {
    overflow: hidden;
    flex: 1 1 0;
    min-height: 0;
    max-height: 100%;
}

.tsl-root[data-tsl-compact-pager="1"] .tsl-pager-arrow {
    display: none;
}

.tsl-root[data-tsl-compact-pager="1"] .tsl-pager-status {
    margin: 0.3rem 0 0;
    padding: 0 max(0.5rem, env(safe-area-inset-right, 0)) max(0.2rem, env(safe-area-inset-bottom, 0))
        max(0.5rem, env(safe-area-inset-left, 0));
}

.tsl-pager-arrow {
    position: absolute;
    top: 50%;
    z-index: 10;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.5rem;
    height: 2.5rem;
    margin-top: -1.25rem;
    padding: 0;
    border: 1px solid color-mix(in srgb, var(--tsl-rule) 70%, transparent);
    border-radius: 999px;
    background: color-mix(in srgb, var(--tsl-paper) 90%, transparent);
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    color: var(--tsl-ink);
    font: inherit;
    cursor: pointer;
    box-shadow: 0 2px 12px rgba(0, 0, 0, 0.12);
    transition: border-color 0.15s ease, background 0.15s ease, opacity 0.15s ease;
}

.tsl-pager-arrow--prev {
    left: 0.25rem;
}

.tsl-pager-arrow--next {
    right: 0.25rem;
}

.tsl-pager-arrow:hover:not(:disabled) {
    border-color: var(--tsl-muted);
    background: color-mix(in srgb, var(--tsl-paper) 96%, var(--tsl-ink));
}

.tsl-pager-arrow:focus-visible {
    outline: 2px solid var(--tsl-muted);
    outline-offset: 2px;
}

.tsl-pager-arrow:disabled {
    opacity: 0.25;
    cursor: default;
    box-shadow: none;
    pointer-events: none;
}

.tsl-pager-glyph {
    font-size: 1.65rem;
    line-height: 1;
    font-weight: 600;
}

.tsl-pager-status {
    margin: 0.55rem 0 0;
    text-align: center;
    font-size: 0.75rem;
    color: var(--tsl-muted);
    font-family: var(--tsl-font-ui, ui-sans-serif, system-ui, sans-serif);
}

.tsl-root[data-tsl-layout="pages"] .tsl-pages {
    display: block;
    width: 100%;
    gap: 0;
}

.tsl-root[data-tsl-layout="pages"] .tsl-page:not([aria-hidden="true"]) {
    width: var(--tsl-page-fit-w);
}

.tsl-root[data-tsl-layout="pages"] .tsl-spread,
.tsl-root[data-tsl-layout="pages"] .tsl-pages > .tsl-page:not([aria-hidden="true"]) {
    display: none;
}

.tsl-root[data-tsl-layout="pages"][data-tsl-page-view="spread"] .tsl-spread.is-active {
    --tsl-page-fit-w: min(var(--tsl-page-w), calc((100% - var(--tsl-pager-gutter)) / 2));
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
    justify-content: center;
    align-items: stretch;
    gap: var(--tsl-pager-gutter);
    width: 100%;
    max-width: 100%;
    margin: 0 auto;
}

/* Paired spread pages: fixed trim column width (do not flex-shrink empty pages). */
.tsl-root[data-tsl-layout="pages"][data-tsl-page-view="spread"] .tsl-spread.is-active .tsl-page {
    flex: 0 1 var(--tsl-page-fit-w);
    min-width: 0;
    width: var(--tsl-page-fit-w);
    max-width: calc((100% - var(--tsl-pager-gutter)) / 2);
}

/* One page in a spread (missing pair): same width as paired pages, no flex shrink */
.tsl-root[data-tsl-layout="pages"][data-tsl-page-view="spread"] .tsl-spread.is-active .tsl-page:only-child {
    flex: 0 0 auto;
    min-width: auto;
    width: var(--tsl-page-fit-w);
    max-width: var(--tsl-page-fit-w);
}

/* Fit screen: trim-sized spread box (JS sets width), then viewport scale — not stage-half columns. */
.tsl-root[data-tsl-page-fit="scale"][data-tsl-layout="pages"][data-tsl-page-view="spread"] .tsl-spread.is-active {
    --tsl-page-fit-w: var(--tsl-page-w);
    width: auto;
    max-width: none;
}

.tsl-root[data-tsl-page-fit="scale"][data-tsl-layout="pages"][data-tsl-page-view="spread"] .tsl-spread.is-active .tsl-page,
.tsl-root[data-tsl-page-fit="scale"][data-tsl-layout="pages"][data-tsl-page-view="spread"] .tsl-spread.is-active .tsl-page:only-child {
    flex: 0 0 auto;
    min-width: auto;
    width: var(--tsl-page-w);
    max-width: var(--tsl-page-w);
}

.tsl-root[data-tsl-layout="pages"][data-tsl-page-view="spread"] .tsl-pages > .tsl-page.is-active {
    display: flex;
    width: var(--tsl-page-fit-w);
    max-width: 100%;
    margin: 0 auto;
}

.tsl-root[data-tsl-layout="pages"][data-tsl-page-view="single"] .tsl-spread {
    display: block;
    width: 100%;
    max-width: 100%;
    margin: 0 auto;
}

.tsl-root[data-tsl-layout="pages"][data-tsl-page-view="single"] .tsl-spread .tsl-page {
    display: none;
    width: var(--tsl-page-fit-w);
    max-width: 100%;
    margin: 0 auto;
}

.tsl-root[data-tsl-layout="pages"][data-tsl-page-view="single"] .tsl-spread .tsl-page.is-active {
    display: flex;
}

.tsl-root[data-tsl-layout="pages"][data-tsl-page-view="single"] .tsl-pages > .tsl-page.is-active {
    display: flex;
    width: var(--tsl-page-fit-w);
    max-width: 100%;
    margin: 0 auto;
}

/* Compact carousel: every slide stays in the deck (overrides single-view display:none). */
.tsl-root[data-tsl-compact-pager="1"][data-tsl-layout="pages"] .tsl-spread {
    display: contents !important;
}

.tsl-root[data-tsl-compact-pager="1"][data-tsl-pager-flow="horizontal"][data-tsl-layout="pages"] .tsl-pages > .tsl-page:not([aria-hidden="true"]),
.tsl-root[data-tsl-compact-pager="1"][data-tsl-pager-flow="horizontal"] .tsl-spread .tsl-page:not([aria-hidden="true"]) {
    display: grid !important;
}

.tsl-pages {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 1.5rem;
}

.tsl-page {
    box-sizing: border-box;
    width: var(--tsl-page-w);
    min-height: var(--tsl-page-h);
    max-width: 100%;
    background: var(--tsl-paper);
    color: var(--tsl-ink);
    box-shadow: 0 4px 24px rgba(0, 0, 0, 0.12), 0 0 0 1px var(--tsl-rule);
    display: flex;
    flex-direction: column;
    position: relative;
    overflow: hidden;
}

.tsl-page[data-tsl-side="left"] {
    padding: var(--tsl-pad-t) var(--tsl-pad-gutter) var(--tsl-pad-b) var(--tsl-pad-out);
}

.tsl-page[data-tsl-side="right"] {
    padding: var(--tsl-pad-t) var(--tsl-pad-out) var(--tsl-pad-b) var(--tsl-pad-gutter);
}

.tsl-page[data-tsl-side="any"],
.tsl-page:not([data-tsl-side]) {
    padding: var(--tsl-pad-t) var(--tsl-pad-out) var(--tsl-pad-b);
}

.tsl-page[data-tsl-full-bleed="1"] {
    padding: 0;
}

.tsl-page[data-tsl-full-bleed="1"] .tsl-region {
    display: none;
}

.tsl-page[data-tsl-full-bleed="1"] .tsl-body {
    padding: 0;
    flex: 1 1 auto;
    display: flex;
    flex-direction: column;
}

.tsl-page[data-tsl-full-bleed="1"] .tsl-block--front-cover {
    flex: 1 1 auto;
    min-height: 100%;
    margin: 0;
    width: 100%;
}

.tsl-page[data-tsl-full-bleed="1"] .tsl-block--front-cover img {
    display: block;
    width: 100%;
    height: 100%;
    min-height: var(--tsl-page-h);
    object-fit: cover;
}

.tsl-page[data-tsl-full-bleed="1"] .tsl-block--comic-page,
.tsl-page[data-tsl-full-bleed="1"] .studio-lean-comic-page {
    flex: 1 1 auto;
    min-height: 100%;
    min-height: var(--tsl-page-h);
    margin: 0;
    width: 100%;
}

/* Comic page block (panels + speech; matches Studio lean HTML / studio_publisher). */
.tsl-block--comic-page,
.document-tsl .studio-lean-comic-page {
    position: relative;
    width: 100%;
    box-sizing: border-box;
    aspect-ratio: var(--comic-aspect, 2 / 3);
    background: var(--tsl-paper, #fff);
    overflow: hidden;
    margin: 1.5rem 0;
}

.studio-lean-comic-panel {
    position: absolute;
    overflow: hidden;
}

.studio-lean-comic-panel img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    transform-origin: center center;
}

.studio-lean-comic-frame {
    position: absolute;
    overflow: hidden;
}

.studio-lean-comic-outline {
    position: absolute;
    overflow: visible;
    pointer-events: none;
}

.studio-lean-comic-vo {
    position: absolute;
    left: 14px;
    right: 14px;
    z-index: 2;
    background: #fffdf6;
    border: 2.5px solid #141414;
    padding: 8px 11px;
    font-family: Georgia, "Times New Roman", serif;
    line-height: 1.18;
    color: #111;
    white-space: pre-wrap;
    overflow: hidden;
    word-break: break-word;
    box-shadow: 2px 2px 0 rgba(0, 0, 0, 0.14);
}

.studio-lean-comic-vo.is-top {
    top: 14px;
    bottom: auto;
}

.studio-lean-comic-vo.is-bottom {
    top: auto;
    bottom: 14px;
}

.studio-lean-comic-overlay {
    position: absolute;
    z-index: 3;
    pointer-events: none;
    touch-action: none;
}

.studio-lean-comic-oshape {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    overflow: visible;
    pointer-events: none;
}

.studio-lean-comic-otext {
    position: absolute;
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    overflow: hidden;
    line-height: 1.14;
    color: #111;
    font-family: "Comic Sans MS", "Chalkboard SE", "Segoe Print", cursive, sans-serif;
    word-break: break-word;
    padding: 2px;
}

.studio-lean-comic-overlay-speech .studio-lean-comic-otext,
.studio-lean-comic-overlay-whisper .studio-lean-comic-otext {
    inset: 14% 14% 20% 14%;
}

.studio-lean-comic-overlay-oval .studio-lean-comic-otext {
    inset: 14% 14%;
}

.studio-lean-comic-overlay-rect .studio-lean-comic-otext {
    inset: 12% 10%;
}

.studio-lean-comic-overlay-cloud .studio-lean-comic-otext {
    inset: 18% 18%;
}

.studio-lean-comic-overlay-thought .studio-lean-comic-otext {
    inset: 8% 16% 38% 16%;
}

.studio-lean-comic-overlay-shout .studio-lean-comic-otext,
.studio-lean-comic-overlay-spiky .studio-lean-comic-otext,
.studio-lean-comic-overlay-emanata-burst .studio-lean-comic-otext {
    inset: 18% 18%;
}

.studio-lean-comic-overlay-caption .studio-lean-comic-otext {
    inset: 8% 8%;
    justify-content: flex-start;
    text-align: left;
    align-items: flex-start;
    font-family: Georgia, "Iowan Old Style", serif;
}

.tsl-region {
    flex: 0 0 auto;
    display: grid;
    grid-template-columns: 1fr auto 1fr;
    align-items: center;
    font-size: 0.75em;
    color: var(--tsl-muted);
    min-height: 1.2em;
}

.tsl-region--header {
    margin-bottom: var(--tsl-row-gap);
    border-bottom: 1px solid transparent;
    flex-shrink: 0;
}

.tsl-region--header[data-tsl-rule="1"] {
    border-bottom-color: var(--tsl-rule);
    padding-bottom: 0.25em;
}

.tsl-region--footer {
    margin-top: 0;
    padding-top: 0.5em;
    border-top: 1px solid transparent;
    flex-shrink: 0;
}

.tsl-region--footer[data-tsl-rule="1"] {
    border-top-color: var(--tsl-rule);
}

.tsl-region-slot--center {
    text-align: center;
}

.tsl-region-slot--right {
    text-align: right;
}

.tsl-body,
.tsl-region,
.tsl-block {
    font-family: var(--tsl-font);
}

.tsl-body {
    flex: 1 1 auto;
    min-height: 0;
    text-align: var(--tsl-text-align);
}

.tsl-root[data-tsl-layout="pages"] .tsl-page:not([data-tsl-full-bleed="1"]) {
    height: var(--tsl-page-h);
    min-height: var(--tsl-page-h);
    max-height: var(--tsl-page-h);
    display: grid;
    grid-template-rows: auto minmax(0, 1fr) auto;
    align-content: stretch;
}

.tsl-root[data-tsl-layout="pages"] .tsl-page:not([data-tsl-full-bleed="1"]) .tsl-body {
    flex: none;
    min-height: 0;
    overflow: hidden;
}

.tsl-page.tsl-measure-page {
    position: absolute;
    left: -10000px;
    top: 0;
    visibility: hidden;
    pointer-events: none;
    box-sizing: border-box;
    overflow: hidden;
    display: grid !important;
    grid-template-rows: auto minmax(0, 1fr) auto !important;
    align-content: stretch !important;
    height: var(--tsl-page-h) !important;
    min-height: var(--tsl-page-h) !important;
    max-height: var(--tsl-page-h) !important;
    width: var(--tsl-page-w) !important;
}

.tsl-measure-page .tsl-measure-chrome:first-child {
    grid-row: 1;
}

.tsl-measure-page .tsl-body {
    grid-row: 2;
    min-height: 0 !important;
    overflow: hidden;
    flex: none !important;
}

.tsl-measure-page .tsl-measure-chrome:last-child {
    grid-row: 3;
}

.tsl-measure-page .tsl-measure-stack {
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
}

.tsl-measure-chrome {
    flex: 0 0 auto;
}

.tsl-measure {
    position: absolute;
    left: -10000px;
    top: 0;
    visibility: hidden;
    pointer-events: none;
    box-sizing: border-box;
}

/* Block width: cols=2 (default) = full row; cols=1 = half row, paired like Studio print layout */
.tsl-row {
    display: flex;
    flex-wrap: wrap;
    gap: var(--tsl-col-gap, 1.5rem);
    margin: 0 0 var(--tsl-para-space);
    align-items: flex-start;
}

.tsl-row--full .tsl-col {
    flex: 1 1 100%;
    min-width: 0;
}

.tsl-row--two .tsl-col {
    flex: 1 1 calc(50% - 0.75rem);
    min-width: min(12rem, 100%);
}

.tsl-row--one .tsl-col {
    flex: 0 1 calc(50% - 0.75rem);
    min-width: 0;
    max-width: calc(50% - 0.75rem);
}

.document-tsl .studio-lean-row,
.studio-lean-tsl .studio-lean-row {
    display: flex;
    flex-wrap: wrap;
    gap: 1.5rem;
    margin: 0 0 0.35rem;
}

.document-tsl .studio-lean-row--two .studio-lean-col,
.studio-lean-tsl .studio-lean-row--two .studio-lean-col {
    flex: 1 1 calc(50% - 0.75rem);
    min-width: min(12rem, 100%);
}

.document-tsl .studio-lean-col,
.studio-lean-tsl .studio-lean-col {
    flex: 1 1 100%;
    min-width: 0;
}

.tsl-block {
    margin: 0 0 var(--tsl-para-space);
}

.tsl-block--title {
    font-size: 2em;
    font-weight: 700;
    line-height: 1.15;
    margin: 0 0 1em;
    letter-spacing: -0.01em;
}

.tsl-block--h1 {
    font-size: 1.55em;
    font-weight: 700;
    margin: 1.4em 0 0.5em;
}

.tsl-block--h2 {
    font-size: 1.25em;
    font-weight: 700;
    margin: 1.2em 0 0.4em;
}

.tsl-block--h3 {
    font-size: 1.1em;
    font-weight: 700;
    font-style: italic;
    margin: 1em 0 0.35em;
}

.tsl-block--h1:first-child,
.tsl-block--h2:first-child,
.tsl-block--h3:first-child,
.tsl-block--title:first-child {
    margin-top: 0;
}

.tsl-block--paragraph {
    margin-bottom: 0.85em;
    text-indent: var(--tsl-indent);
}

/* Ruleset flag: paragraph noIndent (spec §6.2 — empty text suppresses indent).
   .tsl-block--no-indent kept as a legacy alias. */
.tsl-block--paragraph.no-indent,
.tsl-block--paragraph.tsl-block--no-indent,
.studio-lean-tsl p.no-indent {
    text-indent: 0;
}

.tsl-block--quote {
    margin: 1em 0;
    padding: 0.2em 1.1em;
    border-left: 3px solid var(--tsl-rule);
    font-style: italic;
}

.tsl-block--code {
    font-family: ui-monospace, "Courier New", monospace;
    font-size: 0.88em;
    line-height: 1.45;
    background: color-mix(in srgb, var(--tsl-rule) 35%, transparent);
    padding: 0.75em 1em;
    border-radius: 4px;
    box-sizing: border-box;
    white-space: pre-wrap;
    tab-size: 4;
}

.tsl-root[data-tsl-layout="pages"] .tsl-block--code,
.tsl-root[data-tsl-layout="pages"] .tsl-block--code code,
.document-tsl[data-tsl-layout="pages"] .studio-lean-code,
.document-tsl[data-tsl-layout="pages"] .studio-lean-code code {
    overflow-wrap: anywhere;
    word-break: break-word;
}

.tsl-block--code-wrap,
.studio-lean-code-wrap {
    margin: 0.75em 0;
}

.tsl-block--code-wrap .tsl-block--code,
.studio-lean-code-wrap .studio-lean-code {
    margin: 0;
}

.tsl-block--code code,
.studio-lean-code code {
    display: block;
    font-family: inherit;
    font-size: inherit;
    line-height: inherit;
}

.tsl-code-caption,
.studio-lean-code-wrap figcaption {
    margin-top: 0.35em;
    font-size: 0.82em;
    font-style: italic;
    color: var(--tsl-muted);
}

.tsl-block--table,
.studio-lean-table {
    width: 100%;
    max-width: 100%;
    border-collapse: collapse;
    table-layout: fixed;
    font-size: 0.92em;
    margin: 0.75em 0;
    box-sizing: border-box;
}

.tsl-block--table-part {
    margin-top: 0;
}

.tsl-block--table-part + .tsl-block--table-part {
    margin-top: 0;
}

.tsl-root[data-tsl-layout="pages"] .tsl-block--table th,
.tsl-root[data-tsl-layout="pages"] .tsl-block--table td,
.document-tsl[data-tsl-layout="pages"] .studio-lean-table th,
.document-tsl[data-tsl-layout="pages"] .studio-lean-table td,
.document-tsl[data-tsl-layout="scroll"] .studio-lean-table th,
.document-tsl[data-tsl-layout="scroll"] .studio-lean-table td,
.tsl-root[data-tsl-layout="scroll"] .tsl-block--table th,
.tsl-root[data-tsl-layout="scroll"] .tsl-block--table td {
    overflow-wrap: anywhere;
    word-break: break-word;
}

.tsl-block--table th,
.tsl-block--table td,
.studio-lean-table th,
.studio-lean-table td {
    border: 1px solid color-mix(in srgb, var(--tsl-rule) 70%, transparent);
    padding: 0.35em 0.55em;
    vertical-align: top;
    text-align: left;
}

.tsl-block--table th,
.studio-lean-table th {
    font-weight: 600;
    background: color-mix(in srgb, var(--tsl-rule) 25%, transparent);
}

.tsl-block--aside {
    display: flex;
    gap: 0.5em;
    padding: 0.75em 1em;
    margin: 1em 0;
    background: color-mix(in srgb, var(--tsl-rule) 25%, transparent);
    border: 1px solid var(--tsl-rule);
    border-radius: 6px;
}

.tsl-block--divider {
    border: 0;
    border-top: 1px solid var(--tsl-rule);
    margin: 1.5em 0;
    height: 0;
}

.tsl-list {
    margin: 0 0 0.85em;
    padding-left: 1.4em;
}

.tsl-list--todo {
    list-style: none;
    padding-left: 0;
}

.tsl-list--todo li {
    display: flex;
    gap: 0.5em;
    align-items: flex-start;
    margin-bottom: 0.35em;
}

.tsl-list--todo input {
    margin-top: 0.25em;
}

.tsl-list--todo .tsl-done {
    text-decoration: line-through;
    color: var(--tsl-muted);
}

.tsl-md-strike {
    text-decoration: line-through;
}

.tsl-figure {
    margin: 1em 0;
    text-align: center;
}

.tsl-figure img {
    max-width: 100%;
    height: auto;
}

.tsl-figure figcaption {
    font-size: 0.85em;
    color: var(--tsl-muted);
    margin-top: 0.35em;
}

.tsl-block--front-cover {
    min-height: calc(var(--tsl-page-h) - var(--tsl-pad-t) - var(--tsl-pad-b));
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    text-align: center;
}

/* ==========================================================================
 * TSL block rules (spec/tsl-spec.tsl §5, §5.5)
 *
 * tsl.js validates each block against TSL_BLOCK_RULES and maps the JSON
 * properties to rule classes; these selectors impose the rule for each class.
 * Renderers never write presentation values themselves.
 *
 *   full-page  { hAlign, vAlign }  → .halign-{left|center|right} .valign-{top|center|bottom}
 *   any block  { align }           → .align-{left|center|right|justify}
 *   bullet     { bulletStyle }     → .bullet-{disc|circle|square|dash|number|lower-alpha|upper-alpha}
 *   image      { width }           → --tsl-image-width (10–100 %)
 * ======================================================================== */

/* full-page: the box only — position comes from the halign / valign rules below. */
.tsl-block--full-page,
.document-tsl .studio-lean-full-page {
    box-sizing: border-box;
    width: 100%;
    min-height: calc(var(--tsl-page-h) - var(--tsl-pad-t) - var(--tsl-pad-b));
    display: flex;
    flex-direction: column;
}

.tsl-full-page-inner,
.studio-lean-full-page-inner {
    max-width: 100%;
    white-space: pre-wrap;
}

/* full-page vAlign → vertical position on the page (main axis). */
.tsl-block--full-page.valign-top,
.document-tsl .studio-lean-full-page.valign-top {
    justify-content: flex-start;
}

.tsl-block--full-page.valign-center,
.document-tsl .studio-lean-full-page.valign-center {
    justify-content: center;
}

.tsl-block--full-page.valign-bottom,
.document-tsl .studio-lean-full-page.valign-bottom {
    justify-content: flex-end;
}

/* full-page hAlign → horizontal position (cross axis) and text alignment of the inner text. */
.tsl-block--full-page.halign-left,
.document-tsl .studio-lean-full-page.halign-left {
    align-items: flex-start;
}

.tsl-block--full-page.halign-center,
.document-tsl .studio-lean-full-page.halign-center {
    align-items: center;
}

.tsl-block--full-page.halign-right,
.document-tsl .studio-lean-full-page.halign-right {
    align-items: flex-end;
}

.tsl-block--full-page.halign-left .tsl-full-page-inner,
.document-tsl .studio-lean-full-page.halign-left .studio-lean-full-page-inner {
    text-align: left;
    width: 100%;
}

.tsl-block--full-page.halign-center .tsl-full-page-inner,
.document-tsl .studio-lean-full-page.halign-center .studio-lean-full-page-inner {
    text-align: center;
    width: 100%;
}

.tsl-block--full-page.halign-right .tsl-full-page-inner,
.document-tsl .studio-lean-full-page.halign-right .studio-lean-full-page-inner {
    text-align: right;
    width: 100%;
}

/* Legacy compat: Lean HTML published before rule classes (studio_publisher.php writes only
 * data-halign / data-valign). tsl.js upgrades it to rule classes (applyLeanRuleClasses);
 * these keep the same rule when the player script has not run. */
.document-tsl .studio-lean-full-page[data-valign="top"]:not([class*="valign-"]) { justify-content: flex-start; }
.document-tsl .studio-lean-full-page[data-valign="center"]:not([class*="valign-"]) { justify-content: center; }
.document-tsl .studio-lean-full-page[data-valign="bottom"]:not([class*="valign-"]) { justify-content: flex-end; }
.document-tsl .studio-lean-full-page[data-halign="left"]:not([class*="halign-"]) { align-items: flex-start; }
.document-tsl .studio-lean-full-page[data-halign="center"]:not([class*="halign-"]) { align-items: center; }
.document-tsl .studio-lean-full-page[data-halign="right"]:not([class*="halign-"]) { align-items: flex-end; }
.document-tsl .studio-lean-full-page[data-halign="left"]:not([class*="halign-"]) .studio-lean-full-page-inner { text-align: left; width: 100%; }
.document-tsl .studio-lean-full-page[data-halign="center"]:not([class*="halign-"]) .studio-lean-full-page-inner { text-align: center; width: 100%; }
.document-tsl .studio-lean-full-page[data-halign="right"]:not([class*="halign-"]) .studio-lean-full-page-inner { text-align: right; width: 100%; }

.tsl-block--front-cover img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    min-height: var(--tsl-page-h);
}

/* align (common to all blocks). In the paginated renderer align-left is not emitted, so
 * blocks inherit typography.paragraphAlign via --tsl-text-align. */
.tsl-root .align-left,
.studio-lean-tsl .align-left {
    text-align: left;
}

.tsl-root .align-center,
.studio-lean-tsl .align-center {
    text-align: center;
}

.tsl-root .align-right,
.studio-lean-tsl .align-right {
    text-align: right;
}

.tsl-root .align-justify,
.studio-lean-tsl .align-justify {
    text-align: justify;
}

/* image width (percent of the text column). Unset → natural size, as before. */
.tsl-figure img,
.studio-lean-tsl .studio-lean-figure img {
    width: var(--tsl-image-width, auto);
}

/* bulletStyle → list marker. number / lower-alpha / upper-alpha render as <ol> (lean lists
 * continue the count with start=); disc / circle / square / dash render as <ul>. */
.tsl-list.bullet-disc, .studio-lean-tsl .bullet-disc { list-style-type: disc; }
.tsl-list.bullet-circle, .studio-lean-tsl .bullet-circle { list-style-type: circle; }
.tsl-list.bullet-square, .studio-lean-tsl .bullet-square { list-style-type: square; }
.tsl-list.bullet-number, .studio-lean-tsl .bullet-number { list-style-type: decimal; }
.tsl-list.bullet-lower-alpha, .studio-lean-tsl .bullet-lower-alpha { list-style-type: lower-alpha; }
.tsl-list.bullet-upper-alpha, .studio-lean-tsl .bullet-upper-alpha { list-style-type: upper-alpha; }
.tsl-list.bullet-dash, .studio-lean-tsl .bullet-dash { list-style-type: "\2013\00a0\00a0"; }

.tsl-block a {
    color: inherit;
    text-decoration: underline;
    text-underline-offset: 2px;
}

/* Lean HTML reading copy (node / Reader / lab) — same semantics as publish tsl → lean_html */
.document-tsl {
    padding: 1.5rem 1rem 3rem;
    background: var(--tsl-bg, #e8e4dc);
    --tsl-font-read: Georgia, "Iowan Old Style", "Palatino Linotype", Palatino, "Times New Roman", serif;
    --tsl-font-ui: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
    --tsl-font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
    --tsl-font: var(--tsl-font-read);
    --tsl-reader-scale: 1;
}

.document-tsl[data-tsl-reader-font="sans"] {
    --tsl-font: var(--tsl-font-ui);
}

.document-tsl[data-tsl-reader-font="mono"] {
    --tsl-font: var(--tsl-font-mono);
}

.document-tsl .post-lean-html-article-wrap {
    max-width: var(--tsl-page-w, 210mm);
    margin: 0 auto;
}

.document-tsl .studio-lean-tsl {
    box-sizing: border-box;
    width: 100%;
    max-width: var(--tsl-page-w, 210mm);
    margin: 0 auto 1.25rem;
    padding: var(--tsl-pad-t, 12mm) var(--tsl-pad-o, 15mm) var(--tsl-pad-b, 12mm);
    font-family: var(--tsl-font, var(--tsl-font-read));
    font-size: calc(var(--tsl-size-base, var(--tsl-size-pt, 11pt)) * var(--tsl-reader-scale, 1));
    line-height: var(--tsl-lh, 1.55);
    background: var(--tsl-paper, #fffef9);
    color: var(--tsl-ink, #1a1a1a);
    box-shadow: 0 2px 12px color-mix(in srgb, var(--tsl-ink) 10%, transparent);
    border: 1px solid var(--tsl-rule, #ccc);
    overflow-wrap: break-word;
}

.document-tsl .studio-lean-tsl[data-tsl-hyphenate="1"] {
    hyphens: auto;
}

.document-tsl .studio-lean-pagebreak {
    break-after: page;
    page-break-after: always;
    height: 0;
    margin: 0;
    border: 0;
}

.document-tsl .studio-lean-title {
    font-size: 2em;
    font-weight: 700;
    line-height: 1.15;
    margin: 0 0 1.2em;
}

.document-tsl .studio-lean-tsl h1,
.document-tsl .studio-lean-tsl h2,
.document-tsl .studio-lean-tsl h3 {
    font-weight: 700;
    color: inherit;
}

.document-tsl .studio-lean-tsl p {
    margin: 0 0 0.9em;
}

.document-tsl .studio-lean-aside {
    margin: 1em 0;
    padding: 0.7em 0.9em;
    background: color-mix(in srgb, var(--tsl-rule) 25%, transparent);
    border: 1px solid var(--tsl-rule);
    border-radius: 8px;
}

.document-tsl .studio-lean-tsl[data-tsl-reader-font="serif"] { font-family: var(--tsl-font-read); }
.document-tsl .studio-lean-tsl[data-tsl-reader-font="sans"] { font-family: var(--tsl-font-ui); }
.document-tsl .studio-lean-tsl[data-tsl-reader-font="mono"] { font-family: var(--tsl-font-mono); }

.document-tsl[data-tsl-reader-dyslexia="1"] .studio-lean-tsl,
.studio-lean-tsl[data-tsl-reader-dyslexia="1"] {
    font-family: "OpenDyslexic", var(--tsl-font-read);
}

.document-tsl[data-tsl-reader-dyslexia="1"] {
    --tsl-font: "OpenDyslexic", var(--tsl-font-read);
}

.document-tsl[data-tsl-reader-contrast="high"] {
    --tsl-bg: #000;
    --tsl-paper: #000;
    --tsl-ink: #fff;
    --tsl-muted: #f0f0f0;
    --tsl-rule: #fff;
    background: var(--tsl-bg);
    color: var(--tsl-ink);
}

.document-tsl[data-tsl-reader-contrast="high"] .studio-lean-tsl,
.studio-lean-tsl[data-tsl-reader-contrast="high"] {
    --tsl-bg: #000;
    --tsl-paper: #000;
    --tsl-ink: #fff;
    --tsl-muted: #f0f0f0;
    --tsl-rule: #fff;
    background: var(--tsl-paper);
    color: var(--tsl-ink);
    border-color: var(--tsl-rule);
    box-shadow: 0 2px 12px rgba(255, 255, 255, 0.08);
}

.document-tsl[data-tsl-reader-contrast="high"] .studio-lean-tsl[data-tsl-reader-theme="light"],
.document-tsl[data-tsl-reader-contrast="high"] .studio-lean-tsl[data-tsl-reader-theme="sepia"],
.document-tsl[data-tsl-reader-contrast="high"] .studio-lean-tsl[data-tsl-reader-theme="dark"] {
    --tsl-bg: #000;
    --tsl-paper: #000;
    --tsl-ink: #fff;
    --tsl-muted: #f0f0f0;
    --tsl-rule: #fff;
    background: var(--tsl-paper);
    color: var(--tsl-ink);
}

.document-tsl[data-tsl-reader-contrast="high"][data-tsl-reader-theme="sepia"] .studio-lean-tsl {
    --tsl-ink: #ffe066;
    --tsl-muted: #e6c200;
    --tsl-rule: #ffe066;
}

.document-tsl .studio-lean-tsl[data-tsl-reader-theme="light"] {
    --tsl-bg: #e8e4dc;
    --tsl-paper: #fffef9;
    --tsl-ink: #1a1a1a;
    --tsl-rule: #ccc;
}

.document-tsl .studio-lean-tsl[data-tsl-reader-theme="sepia"] {
    --tsl-bg: #e8dfd0;
    --tsl-paper: #f4ecdd;
    --tsl-ink: #433a2e;
    --tsl-rule: #e3d7c2;
}

.document-tsl .studio-lean-tsl[data-tsl-reader-theme="dark"] {
    --tsl-bg: #121110;
    --tsl-paper: #1e1c19;
    --tsl-ink: #d2cdc4;
    --tsl-rule: #34312c;
}

.document-tsl[data-tsl-reader-theme="light"] {
    --tsl-bg: #e8e4dc;
    --tsl-ink: #1a1a1a;
    --tsl-muted: #555;
    --tsl-rule: #ccc;
}

.document-tsl[data-tsl-reader-theme="sepia"] {
    --tsl-bg: #e8dfd0;
    --tsl-ink: #433a2e;
    --tsl-muted: #7a6552;
    --tsl-rule: #e3d7c2;
}

.document-tsl[data-tsl-reader-theme="dark"] {
    --tsl-bg: #121110;
    --tsl-ink: #d2cdc4;
    --tsl-muted: #aeaeb2;
    --tsl-rule: #34312c;
}

.document-tsl[data-tsl-reader-width="narrow"] { --tsl-reader-measure: 58ch; }
.document-tsl[data-tsl-reader-width="medium"] { --tsl-reader-measure: 66ch; }
.document-tsl[data-tsl-reader-width="wide"] { --tsl-reader-measure: 76ch; }

.document-tsl[data-tsl-layout="scroll"] {
    color: var(--tsl-ink);
}

.document-tsl[data-tsl-layout="scroll"] .post-lean-html-article-wrap {
    max-width: var(--tsl-reader-measure, 66ch);
    margin-left: auto;
    margin-right: auto;
    width: 100%;
    box-sizing: border-box;
}

.document-tsl[data-tsl-layout="scroll"] .studio-lean-tsl {
    max-width: none;
    margin-bottom: 0;
    padding: 0;
    box-shadow: none;
    border: 0;
    background: transparent;
    color: inherit;
}

.document-tsl[data-tsl-layout="scroll"] .studio-lean-pagebreak {
    display: none;
}

/* Scroll: min-width 0 for flex children; do not override reading measure on the wrap / .tsl-pages. */
.document-tsl[data-tsl-layout="scroll"] .studio-lean-tsl,
.tsl-root[data-tsl-layout="scroll"] .tsl-pages {
    min-width: 0;
}

.document-tsl[data-tsl-layout="scroll"] .studio-lean-tsl {
    max-width: 100%;
    box-sizing: border-box;
}

.tsl-root[data-tsl-layout="scroll"] .tsl-pages {
    box-sizing: border-box;
}

.document-tsl[data-tsl-layout="scroll"] pre,
.document-tsl[data-tsl-layout="scroll"] .studio-lean-code,
.tsl-root[data-tsl-layout="scroll"] .tsl-block--code {
    max-width: 100%;
    min-width: 0;
    overflow-x: visible;
    overflow-wrap: anywhere;
    word-break: break-word;
    white-space: pre-wrap;
    box-sizing: border-box;
}

.document-tsl[data-tsl-layout="scroll"] pre code,
.document-tsl[data-tsl-layout="scroll"] .studio-lean-code code,
.tsl-root[data-tsl-layout="scroll"] .tsl-block--code code {
    display: block;
    max-width: 100%;
    white-space: pre-wrap;
    overflow-wrap: anywhere;
    word-break: break-word;
}

/* Drop caps (lean HTML + paginated .tsl-root) */
.studio-lean-tsl p.studio-has-dropcap,
.tsl-root p.studio-has-dropcap,
.tsl-root .tsl-block--paragraph.studio-has-dropcap {
    overflow: visible;
    text-indent: 0;
}

.dropcap,
.studio-dropcap {
    float: left;
    line-height: 1;
    margin-top: var(--ts-dc-margin-top, 0);
    margin-right: var(--ts-dc-margin-right, 0.08em);
    margin-left: var(--ts-dc-margin-left, 0);
}

/* The float box is exactly --ts-dc-lines body lines tall (cap-size × cap-height ratio), so
   text wraps beside the cap for the configured number of lines. A letter cap's line-height
   equals the cap-height ratio, which puts the cap's ink inside that box. */
.dropcap:not(.be-dc-glyph-cap),
.studio-dropcap:not(.be-dc-glyph-cap) {
    font-size: var(--ts-dc-cap-size, 2.5em);
    line-height: var(--ts-dc-cap-height-ratio, 0.703);
    height: calc(var(--ts-dc-cap-height-ratio, 0.703) * 1em);
}

.dropcap.be-dc-glyph-cap,
.studio-dropcap.be-dc-glyph-cap {
    height: calc(var(--ts-dc-cap-size, 2.5em) * var(--ts-dc-cap-height-ratio, 0.703));
    color: inherit;
}

.dropcap.be-dc-glyph-cap .be-dc-glyph-svg,
.studio-dropcap.be-dc-glyph-cap .be-dc-glyph-svg {
    display: block;
    width: auto;
    height: 100%;
    fill: currentColor;
}

.rd-article--tsl[data-tsl-layout="pages"] .tsl-reader-player-mount,
.rd-article--tsl[data-tsl-layout="pages"] .tsl-root {
    width: 100%;
    max-width: none;
}

.rd-article--tsl[data-tsl-layout="pages"] .tsl-pager-wrap {
    margin: 0 auto;
}

.rd-article--tsl[data-tsl-layout="pages"] .document-tsl {
    padding: 0;
    background: transparent;
}

.document-tsl .studio-lean-full-page {
    break-after: page;
    page-break-after: always;
}

.document-tsl[data-tsl-layout="scroll"] .studio-lean-full-page {
    max-width: var(--tsl-page-w, 210mm);
    margin: 0 auto 1.5rem;
    break-after: auto;
    page-break-after: auto;
}

.document-tsl .studio-lean-front-cover {
    margin: 0 0 1.25rem;
    padding: 0;
    max-width: var(--tsl-page-w, 210mm);
}

.document-tsl .studio-lean-front-cover img {
    display: block;
    width: 100%;
    height: auto;
    vertical-align: top;
}

.rd-article--tsl .document-tsl,
.rd-article--tsl .post-lean-html-article-wrap {
    background: transparent;
}

.rd-article--tsl[data-tsl-layout="scroll"] .document-tsl {
    padding: 0;
    max-width: none;
}

.rd-article--tsl .tsl-root {
    min-height: 0;
    padding: 0;
    background: transparent;
}

.rd-article--tsl .tsl-root[data-tsl-reader-theme="light"] {
    --tsl-paper: var(--reader-bg, #fffef9);
    --tsl-ink: var(--reader-text, #1a1a1a);
    --tsl-muted: var(--reader-muted, #555);
    --tsl-rule: var(--reader-rule, #ccc);
}

.rd-article--tsl .tsl-root[data-tsl-reader-theme="sepia"] {
    --tsl-paper: var(--reader-bg, #f4ecd8);
    --tsl-ink: var(--reader-text, #5b4636);
    --tsl-muted: var(--reader-muted, #7a6552);
    --tsl-rule: var(--reader-rule, #c4b5a0);
}

.rd-article--tsl .tsl-root[data-tsl-reader-theme="dark"] {
    --tsl-paper: var(--reader-bg, #2c2c2e);
    --tsl-ink: var(--reader-text, #f2f2f7);
    --tsl-muted: var(--reader-muted, #aeaeb2);
    --tsl-rule: var(--reader-rule, #48484a);
}

.rd-article--tsl[data-tsl-layout="pages"] .tsl-page {
    box-shadow: var(--rd-shadow-2, 0 4px 24px rgba(0, 0, 0, 0.12));
    border: 1px solid var(--reader-rule, var(--tsl-rule));
}

.rd-article--tsl[data-tsl-layout="pages"] .tsl-root {
    flex: 1 1 auto;
    min-height: 0;
    padding: 0 0 1.5rem;
    background: transparent;
}

.tsl-toc,
.studio-lean-toc {
    margin: 0.5em 0 1em;
}

.studio-lean-toc-list,
.tsl-toc .studio-lean-toc-list {
    list-style: none;
    margin: 0;
    padding: 0;
}

.studio-lean-toc-item {
    margin: 0.15em 0;
}

.studio-lean-toc-item--h2 {
    padding-left: 1em;
}

.studio-lean-toc-item--h3 {
    padding-left: 2em;
    font-size: 0.95em;
}

.studio-lean-toc-link {
    display: flex;
    align-items: baseline;
    gap: 0.35em;
    text-decoration: none;
    color: inherit;
}

.studio-lean-toc-link:hover .studio-lean-toc-label {
    text-decoration: underline;
}

.studio-lean-toc-label {
    flex: 0 1 auto;
    min-width: 0;
}

.studio-lean-toc-leader {
    flex: 1 1 0;
    min-width: 0;
    overflow: hidden;
    white-space: nowrap;
    opacity: 0.45;
    letter-spacing: 0.08em;
}

.studio-lean-toc-page,
.studio-lean-image-index-page {
    flex: 0 0 auto;
    font-variant-numeric: tabular-nums;
}

.studio-lean-toc-empty,
.studio-lean-image-index-empty {
    color: var(--tsl-muted, #6b7280);
    font-style: italic;
}

.studio-lean-image-index-title {
    font-size: 1.1em;
    margin: 0 0 0.75em;
}

.studio-lean-image-index-list {
    margin: 0;
    padding-left: 1.25em;
}

.studio-lean-image-index-item {
    display: flex;
    align-items: baseline;
    gap: 0.35em;
    margin: 0.2em 0;
}

.studio-lean-image-index-label {
    flex: 0 1 auto;
    min-width: 0;
}

.studio-lean-image-index-leader {
    flex: 1 1 0;
    min-width: 0;
    overflow: hidden;
    white-space: nowrap;
    opacity: 0.45;
}

@media print {
    @page {
        margin: 0;
    }

    html[data-tsl-printing] .tsl-lab-fab-root,
    html[data-tsl-printing] .tsl-lab-float,
    html[data-tsl-printing] .rd-tb,
    html[data-tsl-printing] .rd-foot,
    html[data-tsl-printing] .rd-panel,
    html[data-tsl-printing] .rd-mbar,
    html[data-tsl-printing] .rd-mprog {
        display: none !important;
    }

    html[data-tsl-printing] .rd-article--tsl,
    html[data-tsl-printing] .rd-article--tsl .document-tsl,
    html[data-tsl-printing] .rd-article--tsl .post-lean-html-article-wrap,
    html[data-tsl-printing] .rd-article--tsl .tsl-reader-player-mount,
    html[data-tsl-printing] .rd-article--tsl .tsl-pager-wrap,
    html[data-tsl-printing] .rd-article--tsl .tsl-pager,
    html[data-tsl-printing] .rd-article--tsl .tsl-pager-viewport {
        height: auto !important;
        max-height: none !important;
        min-height: 0 !important;
        overflow: visible !important;
        position: static !important;
        flex: none !important;
        transform: none !important;
    }

    .tsl-pager-arrow,
    .tsl-pager-status {
        display: none !important;
    }

    html[data-tsl-printing] .tsl-root {
        padding: 0;
        background: #fff;
        --tsl-font: var(--tsl-doc-font) !important;
        --tsl-reader-scale: 1 !important;
        --tsl-page-fit-w: var(--tsl-page-w) !important;
        font-size: var(--tsl-size-base, 11pt) !important;
    }

    .tsl-root {
        padding: 0;
        background: #fff;
        --tsl-reader-scale: 1 !important;
        --tsl-page-fit-w: var(--tsl-page-w) !important;
    }

    .tsl-pager-wrap,
    .tsl-pager,
    .tsl-pager-viewport {
        height: auto !important;
        max-height: none !important;
        min-height: 0 !important;
        overflow: visible !important;
        flex: none !important;
    }

    .tsl-pager-viewport > .tsl-pages,
    .tsl-root[data-tsl-page-fit="scale"] .tsl-pager-viewport > .tsl-pages {
        transform: none !important;
        width: auto !important;
        height: auto !important;
        margin: 0 !important;
    }

    .tsl-pages {
        display: block !important;
        gap: 0;
    }

    .tsl-root[data-tsl-layout="pages"] .tsl-spread,
    html[data-tsl-printing] .tsl-root[data-tsl-layout="pages"] .tsl-spread,
    .tsl-root[data-tsl-print-all="1"][data-tsl-layout="pages"] .tsl-spread {
        display: block !important;
        width: auto !important;
        height: auto !important;
        max-height: none !important;
        transform: none !important;
        overflow: visible !important;
    }

    .tsl-root[data-tsl-layout="pages"] .tsl-pages > .tsl-page:not([aria-hidden="true"]):not([data-tsl-full-bleed="1"]),
    html[data-tsl-printing] .tsl-root[data-tsl-layout="pages"] .tsl-pages > .tsl-page:not([aria-hidden="true"]):not([data-tsl-full-bleed="1"]),
    .tsl-root[data-tsl-print-all="1"][data-tsl-layout="pages"] .tsl-pages > .tsl-page:not([aria-hidden="true"]):not([data-tsl-full-bleed="1"]),
    .tsl-root[data-tsl-layout="pages"] .tsl-spread .tsl-page:not([aria-hidden="true"]):not([data-tsl-full-bleed="1"]),
    html[data-tsl-printing] .tsl-root[data-tsl-layout="pages"] .tsl-spread .tsl-page:not([aria-hidden="true"]):not([data-tsl-full-bleed="1"]),
    .tsl-root[data-tsl-print-all="1"][data-tsl-layout="pages"] .tsl-spread .tsl-page:not([aria-hidden="true"]):not([data-tsl-full-bleed="1"]),
    .tsl-root[data-tsl-layout="pages"] .tsl-page:not([aria-hidden="true"]):not([data-tsl-full-bleed="1"]),
    html[data-tsl-printing] .tsl-root[data-tsl-layout="pages"] .tsl-page:not([aria-hidden="true"]):not([data-tsl-full-bleed="1"]),
    .tsl-root[data-tsl-print-all="1"][data-tsl-layout="pages"] .tsl-page:not([aria-hidden="true"]):not([data-tsl-full-bleed="1"]) {
        display: grid !important;
        grid-template-rows: auto minmax(0, 1fr) auto !important;
        align-content: stretch !important;
        flex: none !important;
        width: var(--tsl-page-w) !important;
        height: var(--tsl-page-h) !important;
        min-height: var(--tsl-page-h) !important;
        max-height: var(--tsl-page-h) !important;
        max-width: none !important;
        min-width: 0 !important;
        margin: 0 auto !important;
        transform: none !important;
        visibility: visible !important;
        overflow: hidden !important;
    }

    .tsl-page:not([data-tsl-full-bleed="1"]) .tsl-region--header {
        grid-row: 1;
    }

    .tsl-page:not([data-tsl-full-bleed="1"]) .tsl-body {
        grid-row: 2;
        min-height: 0 !important;
        overflow: visible !important;
    }

    .tsl-page:not([data-tsl-full-bleed="1"]) .tsl-region--footer {
        grid-row: 3;
        align-self: end;
    }

    .tsl-root[data-tsl-layout="pages"] .tsl-page[data-tsl-full-bleed="1"]:not([aria-hidden="true"]),
    html[data-tsl-printing] .tsl-root[data-tsl-layout="pages"] .tsl-page[data-tsl-full-bleed="1"]:not([aria-hidden="true"]) {
        display: flex !important;
        flex-direction: column !important;
    }

    .tsl-page[aria-hidden="true"] {
        display: none !important;
    }

    .tsl-page {
        box-shadow: none;
        border: 0;
        width: var(--tsl-page-w) !important;
        height: var(--tsl-page-h) !important;
        min-height: var(--tsl-page-h) !important;
        max-width: none !important;
        page-break-after: always;
        break-after: page;
        page-break-inside: avoid;
        break-inside: avoid;
    }

    .tsl-page:last-child {
        page-break-after: auto;
        break-after: auto;
    }
}

/* -------------------------------------------------------------------------
   §6.23 Studio extension blocks — screenplay, stage, MathML.
   Class hooks are per type (.studio-lean-<type>, shared by paged and lean);
   values follow the Studio plugin print CSS (block-editor-script.css,
   block-editor-stage.css, block-editor-math.css). Casing is display-only.
   Intrinsic alignment (transition right, stage direction centred) matches
   Studio, which ignores block align for these types; kept after the
   align-* rule classes so it wins.
   ------------------------------------------------------------------------- */
.tsl-root .studio-lean-script-scene,
.tsl-root .studio-lean-script-shot,
.tsl-root .studio-lean-script-character,
.tsl-root .studio-lean-script-transition,
.tsl-root .studio-lean-stage-scene,
.tsl-root .studio-lean-stage-action,
.tsl-root .studio-lean-stage-direction,
.studio-lean-tsl .studio-lean-script-scene,
.studio-lean-tsl .studio-lean-script-shot,
.studio-lean-tsl .studio-lean-script-character,
.studio-lean-tsl .studio-lean-script-transition,
.studio-lean-tsl .studio-lean-stage-scene,
.studio-lean-tsl .studio-lean-stage-action,
.studio-lean-tsl .studio-lean-stage-direction {
    text-transform: uppercase;
}

.tsl-root .studio-lean-script-scene,
.tsl-root .studio-lean-script-shot,
.studio-lean-tsl .studio-lean-script-scene,
.studio-lean-tsl .studio-lean-script-shot {
    font-weight: 700;
    margin-top: 1em;
}

/* Ruleset flag: script-scene showSceneNumbers → margin scene numbers. */
.tsl-root .studio-lean-script-scene.tsl-scene-numbered,
.studio-lean-tsl .studio-lean-script-scene.tsl-scene-numbered {
    display: grid;
    grid-template-columns: minmax(2rem, 2.75rem) minmax(0, 1fr) minmax(2rem, 2.75rem);
    column-gap: 0.5rem;
    align-items: start;
}

.studio-lean-scene-num {
    font-size: 0.92em;
    text-align: center;
}

.tsl-root .studio-lean-script-action,
.studio-lean-tsl .studio-lean-script-action {
    margin-top: 0.15em;
}

.tsl-root .studio-lean-script-character,
.studio-lean-tsl .studio-lean-script-character {
    margin-top: 1em;
    margin-left: 37%;
    max-width: 70%;
}

.tsl-root .studio-lean-script-dialogue,
.studio-lean-tsl .studio-lean-script-dialogue {
    margin-left: 17%;
    margin-right: 15%;
}

.tsl-root .studio-lean-script-parenthetical,
.studio-lean-tsl .studio-lean-script-parenthetical {
    margin-left: 28%;
    margin-right: 27%;
}

.tsl-root .studio-lean-script-transition,
.studio-lean-tsl .studio-lean-script-transition {
    margin-top: 1em;
    text-align: right;
}

.tsl-root .studio-lean-stage-scene,
.studio-lean-tsl .studio-lean-stage-scene {
    font-weight: 700;
    margin-top: 1.4em;
}

.tsl-root .studio-lean-stage-action,
.studio-lean-tsl .studio-lean-stage-action {
    margin-top: 1em;
}

.tsl-root .studio-lean-stage-direction,
.studio-lean-tsl .studio-lean-stage-direction {
    margin-top: 1.2em;
    font-weight: 700;
    text-align: center;
}

.tsl-root .studio-lean-stage-speech,
.studio-lean-tsl .studio-lean-stage-speech {
    display: grid;
    grid-template-columns: 11.5em minmax(0, 1fr);
    column-gap: 0.85em;
    align-items: start;
    margin-top: 0.35em;
}

.studio-lean-stage-name {
    text-transform: uppercase;
    font-weight: 700;
}

/* Ruleset flag: mathml display (block layout); without it the math sits inline. */
.tsl-root .studio-lean-mathml.tsl-math-display,
.studio-lean-tsl .studio-lean-mathml.tsl-math-display {
    text-align: center;
}

/* Pages: a drop-cap paragraph contains its floated cap, so a short first fragment is
   measured (and paginated) at the cap's full height instead of overflowing the page. */
.tsl-root .tsl-block--paragraph.studio-has-dropcap {
    display: flow-root;
}

/* Pages: continuation fragment of a split paragraph (no drop cap, no first-line indent). */
.tsl-root .tsl-block--paragraph.tsl-block--continued {
    text-indent: 0;
}
