/* The reading viewport leaves a separate shelf for controls on narrow screens. */
html,body.article-page{height:100%;overflow:hidden}
.page-scroll{height:100dvh;overflow-y:auto;overflow-x:hidden;scroll-behavior:smooth;scroll-padding-top:40px;position:relative}
.source-dialog-open .page-scroll{overflow:hidden}
.page-scroll>#top{position:absolute;top:0;left:0}
.article-tools{display:flex;align-items:center;flex-wrap:wrap;gap:16px;margin-top:25px}
.language-choice{display:flex;gap:3px;border:1px solid var(--line);padding:3px;border-radius:999px}
.language-choice a{font-size:12px;padding:6px 12px;line-height:1.5;border-radius:999px}
.language-choice a[aria-current]{background:var(--wash);color:var(--method-heading);font-weight:600}
.listen-open{display:inline-flex;align-items:center;gap:8px;font:inherit;font-size:12px;cursor:pointer;border:0;border-radius:999px;background:var(--ink);color:var(--paper);padding:9px 17px;min-height:40px}
.listen-open svg{width:15px;height:15px}.listen-open:hover{background:var(--method-heading)}
.listen-open:focus-visible,.article-listener button:focus-visible,.article-listener input:focus-visible{outline:2px solid var(--section-heading);outline-offset:4px}
.article-listener{color:var(--ink);font:14px/1.5 var(--sans);text-align:left;box-sizing:border-box}
.article-listener[hidden]{display:none!important}
.listener-inline{position:relative;margin-top:28px;width:100%;border:0;border-radius:22px;background:transparent;animation:reader-unfold .26s ease-out}
.listener-transport{display:flex;align-items:center;gap:12px;min-width:0}
.article-listener button{display:inline-flex;align-items:center;justify-content:center;font:inherit;color:inherit;border:0;background:transparent;cursor:pointer;min-width:40px;height:40px;padding:0;border-radius:50%;transition:background .15s,color .15s,transform .15s;flex-shrink:0}
.article-listener button:hover{background:#263c280a}.article-listener button:active{transform:scale(.94)}
.article-listener .listener-play{background:#e9ede5;width:48px;height:48px;min-width:48px}
.article-listener .listener-play:hover{background:#dce5d6}
.listener-play:disabled{opacity:.45;cursor:wait}.listener-play svg{display:block;flex:none}
.article-listener .listener-speed{border:1.2px solid #71806b;border-radius:15px;min-width:59px;height:36px;padding:0 11px;font-size:15px;font-weight:500;margin-left:5px;white-space:nowrap}
.article-listener .listener-voice{width:38px;min-width:38px;height:38px;background:#263c2806}
.listener-clock{font-variant-numeric:tabular-nums;margin-left:auto;font-size:12px;color:var(--muted);white-space:nowrap;letter-spacing:.2px}
.article-listener .listener-close{min-width:28px;width:28px;height:28px;color:var(--muted);font-size:22px;margin-left:3px}
.listener-seek{-webkit-appearance:none;appearance:none;display:block;width:100%;height:24px;padding:0;margin:17px 0 0;border:0;background:transparent;cursor:pointer;--seek-progress:0%}
.listener-seek::-webkit-slider-runnable-track{height:3px;border-radius:999px;background:linear-gradient(to right,var(--ink) var(--seek-progress),#d9dfd4 var(--seek-progress))}
.listener-seek::-moz-range-track{height:3px;border-radius:999px;background:#d9dfd4}
.listener-seek::-moz-range-progress{height:3px;border-radius:999px;background:var(--ink)}
.listener-seek::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;margin-top:-4.5px;border:0;border-radius:50%;background:var(--ink);transition:box-shadow .15s}
.listener-seek::-moz-range-thumb{width:12px;height:12px;border:0;border-radius:50%;background:var(--ink)}
.listener-seek:hover::-webkit-slider-thumb{box-shadow:0 0 0 4px #263c2810}
.reader-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
.listener-dock{position:fixed;right:24px;bottom:24px;width:220px;z-index:30;background:#fafcf5f5;backdrop-filter:blur(16px);border:1px solid #c5d0bd99;border-radius:22px;box-shadow:0 10px 40px #263c2814;opacity:0;transform:translateY(14px) scale(.97);filter:blur(2px);transform-origin:bottom right;transition:opacity .27s ease,transform .32s cubic-bezier(.16,1,.3,1),filter .27s ease}
.listener-dock.is-visible{opacity:1;transform:translateY(0) scale(1);filter:blur(0)}
.listener-head{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:10px 13px 0;color:var(--section-heading)}
.listener-head>div{display:flex;align-items:center;gap:1px}
.listener-dock-name{display:flex;align-items:center;gap:7px;font-size:10px;white-space:nowrap}
.listener-head button{font-size:19px;min-width:24px!important;width:24px!important;height:24px!important;color:var(--muted)}
.listener-body{padding:12px 13px 14px}
.listener-dock .listener-transport{gap:4px;flex-wrap:wrap}
.listener-dock .listener-play{width:37px;height:37px;min-width:37px}
.listener-dock .listener-previous,.listener-dock .listener-next{min-width:32px;width:32px;height:36px}
.listener-dock .listener-speed{margin-left:auto;min-width:47px;height:32px;padding:0 7px;font-size:12px;border-radius:13px}
.listener-dock .listener-clock{width:100%;margin:9px 0 0;font-size:10px;text-align:center}
.dock-follow{display:flex;align-items:center;justify-content:center;gap:5px;font-size:10px;color:var(--muted);margin-top:8px}
.listener-follow{accent-color:var(--method-heading);border-radius:4px}
.listener-dock .dock-mini-play{display:none}
.listener-dock.collapsed .listener-body{display:none}.listener-dock.collapsed .listener-head{padding-bottom:10px}
.listener-dock.collapsed .dock-mini-play{display:inline-flex;background:transparent;margin-right:2px}
.dock-mini-play svg{width:15px;height:15px}
.reader-waves{display:flex;align-items:center;gap:2px;height:15px}.reader-waves i{display:block;width:2px;height:5px;border-radius:2px;background:var(--method-heading)}.reader-waves i:nth-child(2){height:10px}
.reader-playing .reader-waves i{animation:reader-wave 1.1s ease-in-out infinite}.reader-playing .reader-waves i:nth-child(2){animation-delay:.13s}.reader-playing .reader-waves i:nth-child(3){animation-delay:.27s}
.listener-side .toc-inner{max-height:calc(100dvh - var(--reader-side-reserve,230px) - 65px);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}
.listener-shelf .page-scroll{height:calc(100dvh - var(--reader-shelf-height,150px))}
.listener-dock.narrow{bottom:max(10px,env(safe-area-inset-bottom));right:16px;width:calc(100vw - 32px);max-width:520px}
.listener-dock.narrow .listener-transport{flex-wrap:nowrap;gap:8px}
.listener-dock.narrow .listener-clock{width:auto;margin:0 0 0 auto}
.listener-dock.narrow .listener-speed{margin-left:3px}
.listener-dock.narrow .dock-follow{margin-top:9px;justify-content:flex-end}
.reading-word,.reading-formula{border-radius:3px;box-decoration-break:clone;-webkit-box-decoration-break:clone}
.listener-visible .reading-word,.listener-visible .reading-formula{cursor:pointer}
.reading-active{background:#d8ebcc!important;box-shadow:0 0 0 2px #d8ebcc}
.article-page:lang(en) .title-chinese{font-size:34px;letter-spacing:0}.article-page:lang(en) .post-body{line-height:1.9}
@keyframes reader-unfold{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
@keyframes reader-wave{0%,100%{transform:scaleY(.65)}50%{transform:scaleY(1.2)}}
@media(max-width:600px){.page-scroll{scroll-padding-top:24px}.article-tools{gap:14px;margin-top:20px}.listener-inline{margin-top:23px}.listener-inline .listener-transport{gap:7px}.listener-inline .listener-play{width:42px;height:42px;min-width:42px}.listener-inline .listener-previous,.listener-inline .listener-next{min-width:30px;width:30px}.listener-inline .listener-speed{min-width:47px;padding:0 8px;font-size:13px;margin-left:2px}.listener-inline .listener-voice{min-width:30px;width:30px}.listener-inline .listener-clock{font-size:9px;letter-spacing:0}.listener-inline .listener-close{width:20px;min-width:20px;margin-left:0}.listener-seek{margin-top:12px}.article-page:lang(en) .title-chinese{font-size:26px}.listener-dock.narrow{right:8px;width:calc(100vw - 16px)}.listener-dock.narrow .listener-clock{font-size:10px}.listener-dock.narrow.collapsed{width:220px}}
@media(max-width:360px){.listener-inline .listener-transport{gap:5px}.listener-inline .listener-clock{font-size:8px}.listener-inline .listener-close{display:none}}
@media(prefers-reduced-motion:reduce){.page-scroll{scroll-behavior:auto;transition:none}.listener-inline,.reader-waves i{animation:none!important}.listener-dock{transition:none;filter:none;transform:none}}

/* Semantic heading restatements highlight the title words, preserving layout. */
:is(h1,h2,h3,h4,h5,h6).reading-active{background:transparent!important;box-shadow:none}
:is(h1,h2,h3,h4,h5,h6).reading-active .reading-word{background:#d8ebcc;box-shadow:0 0 0 2px #d8ebcc}
