:root{--corner-lift: 60px;--paper: #f3f2ee;--ink: #141414;--ink-soft: #55534e;--ink-faint: #6e6c66;--rule: #d9d7d0;--sans: "Inter", system-ui, -apple-system, sans-serif;--serif-cjk: "Noto Serif TC", "Songti TC", "PMingLiU", serif}*{box-sizing:border-box}html,body{margin:0;height:100%;background:var(--paper);color:var(--ink);font-family:var(--sans);overflow:hidden;-webkit-font-smoothing:antialiased}.stage{position:fixed;inset:0;touch-action:none;-webkit-user-select:none;user-select:none}.stage[data-cursor=grab]{cursor:grab}.stage[data-cursor=grabbing]{cursor:grabbing}.stage canvas{display:block}.glyph-layer{position:fixed;inset:0;pointer-events:none;z-index:1}.glyph-key{position:absolute;left:0;top:0;padding:0;border:0;background:none;color:transparent;pointer-events:none}.glyph-key:focus{outline:none}.glyph-key:focus-visible{outline:1px solid var(--ink);outline-offset:6px}.glyph-key.is-held:focus-visible{outline-style:dashed}.masthead{position:fixed;top:0;left:0;right:0;display:flex;justify-content:space-between;align-items:baseline;padding:28px 36px;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft);pointer-events:none;z-index:2}.masthead__title{color:var(--ink);font-weight:500}.masthead__actions{display:flex;gap:28px}.masthead__button{pointer-events:auto;font:inherit;letter-spacing:inherit;text-transform:inherit;color:inherit;background:none;border:0;padding:4px 0;border-bottom:1px solid transparent;cursor:pointer;transition:color .2s,border-color .2s}.masthead__button.is-on:before{content:"";display:inline-block;width:6px;height:6px;margin-right:8px;border-radius:50%;background:var(--ink);vertical-align:1px}.masthead__button:hover,.masthead__button:focus-visible,.masthead__button.is-hand-hover{color:var(--ink);border-bottom-color:var(--ink);outline:none}.reveal{position:fixed;left:36px;bottom:36px;width:min(400px,calc(100vw - 72px));max-height:calc(100vh - 160px);overflow-y:auto;overflow-x:hidden;background:var(--paper);padding:18px 20px 16px;box-shadow:0 0 0 1px var(--rule),0 12px 40px #1414120f;border-top:1px solid var(--ink);opacity:0;transform:translateY(8px);transition:opacity .5s ease,transform .6s cubic-bezier(.2,.7,.2,1);pointer-events:none;z-index:2}.reveal.is-visible{opacity:1;transform:none;pointer-events:auto}.reveal{--text: 14px;font-size:var(--text);line-height:1.55;color:var(--ink-soft)}.reveal p{margin:0}.reveal .sep{margin:0 .45em}.reveal__origin{margin-bottom:12px!important}.han{white-space:normal}.han__char,.han__pinyin{white-space:nowrap}.han__char{font-family:var(--serif-cjk);color:var(--ink)}.han__gloss{margin-left:.3em}.reveal__head{--char-size: 28px;display:flex;align-items:baseline;gap:14px}.reveal__char{font-family:var(--serif-cjk);font-size:var(--char-size);font-weight:500;line-height:1}.reveal__pinyin{font-size:calc(var(--char-size) * 1.269);font-weight:300;letter-spacing:-.01em;line-height:1;position:relative;top:calc(var(--char-size) * .081)}.reveal__gloss{margin-top:10px!important;color:var(--ink);font-weight:500}.reveal__meta{margin-top:12px!important}.reveal__note{margin-top:6px!important}.reveal__word{margin-top:12px!important;padding-top:12px;border-top:1px solid var(--rule)}.reveal__word-han{font-family:var(--serif-cjk);color:var(--ink)}.reveal__tip,.reveal__sources{margin-top:12px!important}.reveal__sources summary{cursor:pointer;list-style:none}.reveal__sources summary::-webkit-details-marker{display:none}.reveal__sources summary:before{content:"+ "}.reveal__sources[open] summary:before{content:"− "}.reveal__sources summary:hover,.reveal__sources summary.is-hand-hover{color:var(--ink)}.reveal__sources summary:focus-visible{outline:1px solid var(--ink);outline-offset:2px}.reveal__sources p{margin-top:6px!important}.reveal__listen{pointer-events:auto;align-self:center;margin-left:auto;font:inherit;font-size:var(--text);color:var(--ink-soft);background:none;border:0;border-bottom:1px solid var(--rule);padding:2px 0;cursor:pointer}.reveal__listen:hover,.reveal__listen:focus-visible{color:var(--ink);border-bottom-color:var(--ink);outline:none}.page{position:fixed;top:72px;left:36px;max-width:min(420px,calc(100vw - 72px));pointer-events:none;z-index:2}.page p,.page h1{margin:0}.page__count{font-size:12px;letter-spacing:.08em;color:var(--ink)}.page__count span{color:var(--ink-faint)}.page__title{margin-top:6px!important;font-size:34px;font-weight:400;letter-spacing:-.01em;line-height:1.1}.page__description{margin-top:8px!important;font-size:15px;line-height:1.45;color:var(--ink-soft)}.minimap{position:fixed;right:28px;bottom:calc(var(--corner-lift) + 70px);padding:0;background:var(--paper);border:0;box-shadow:0 0 0 1px var(--rule),0 12px 40px #1414120f;cursor:pointer;opacity:0;pointer-events:none;transition:opacity .3s,box-shadow .2s;z-index:2}.minimap.is-visible{opacity:1;pointer-events:auto}.minimap canvas{display:block}.minimap:hover,.minimap:focus-visible,.minimap.is-hand-hover{box-shadow:0 0 0 1px var(--ink),0 12px 40px #1414120f;outline:none}.legend{position:fixed;top:72px;right:28px;width:260px;max-height:calc(100vh - 272px - var(--corner-lift));overflow-y:auto;font-size:14px;line-height:1.45;color:var(--ink-soft);background:var(--paper);box-shadow:0 0 0 1px var(--rule),0 12px 40px #1414120f;padding:12px 16px 14px;z-index:2}.legend:not(.is-open){width:auto;padding:8px 14px}.legend:not(.is-open) .legend__head{margin:-4px -8px}.legend__head{display:flex;min-height:40px;align-items:center;justify-content:space-between;gap:16px;margin:-6px -8px 0;padding:6px 8px;width:calc(100% + 16px);font:inherit;text-align:left;color:inherit;background:none;border:1px solid transparent;cursor:pointer;transition:border-color .2s,background .2s}.legend__title{font-weight:500;color:var(--ink)}.legend__toggle{color:var(--ink-soft);border-bottom:1px solid var(--rule)}.legend__head:hover,.legend__head:focus-visible,.legend__head.is-hand-hover{border-color:var(--ink);outline:none}.legend__head:hover .legend__toggle,.legend__head:focus-visible .legend__toggle,.legend__head.is-hand-hover .legend__toggle{color:var(--ink);border-bottom-color:var(--ink)}.legend__note{margin:10px 0 0}.legend__list{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:10px}.legend__item{display:grid;grid-template-columns:28px 1fr;gap:12px;align-items:start}.legend__icon{width:28px;height:24px;color:var(--ink);stroke:currentColor;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round}.legend__hand{display:block;color:var(--ink)}.legend__other{display:block}.pager{position:fixed;left:50%;bottom:28px;transform:translate(-50%);display:flex;align-items:center;gap:14px;z-index:2}.pager__step{font:inherit;font-size:18px;width:40px;height:34px;color:var(--ink);background:none;border:1px solid var(--rule);cursor:pointer;transition:border-color .2s,color .2s}.pager__step:hover,.pager__step:focus-visible,.pager__step.is-hand-hover{border-color:var(--ink);outline:none}.pager__step:disabled{color:var(--rule);border-color:transparent;cursor:default}.pager__dots{display:flex;gap:4px}.pager__dot{width:22px;height:22px;padding:0;background:none;border:0;cursor:pointer;position:relative}.pager__dot:after{content:"";position:absolute;inset:8px;border-radius:50%;border:1px solid var(--ink-faint);transition:background .2s,border-color .2s,inset .2s}.pager__dot.is-current:after{background:var(--ink);border-color:var(--ink);inset:7px}.pager__dot:hover:after,.pager__dot:focus-visible:after,.pager__dot.is-hand-hover:after{border-color:var(--ink)}.pager__dot:focus-visible{outline:1px solid var(--ink);outline-offset:1px}.zoom{position:fixed;right:28px;bottom:calc(var(--corner-lift) + 28px);display:flex;align-items:center;gap:2px;z-index:2}.zoom button{font:inherit;font-size:12px;letter-spacing:.08em;text-transform:uppercase;min-width:34px;height:30px;padding:0 10px;color:var(--ink-soft);background:none;border:1px solid transparent;cursor:pointer;transition:color .2s,border-color .2s}.zoom button:first-child,.zoom button:last-child{font-size:18px;line-height:1}.zoom button:hover,.zoom button:focus-visible,.zoom button.is-hand-hover{color:var(--ink);border-color:var(--ink);outline:none}.ending{position:fixed;right:36px;bottom:calc(var(--corner-lift) + 200px);max-width:280px;text-align:right;opacity:0;transform:translateY(8px);transition:opacity .8s ease,transform .9s cubic-bezier(.2,.7,.2,1);pointer-events:none;z-index:2}.ending.is-visible{opacity:1;transform:none;pointer-events:auto}.ending__text{margin:0 0 14px;font-size:14px;line-height:1.5;color:var(--ink-soft)}.ending__button{font:inherit;font-size:12px;letter-spacing:.08em;text-transform:uppercase;padding:9px 16px;border:1px solid var(--ink);background:var(--ink);color:var(--paper);cursor:pointer;transition:background .2s,color .2s}.ending__button+.ending__button{margin-left:10px}.ending__button.is-quiet{background:none;color:var(--ink-soft);border-color:transparent}.ending__button:hover,.ending__button:focus-visible,.ending__button.is-hand-hover{background:transparent;color:var(--ink);outline:none}.caption{position:fixed;top:72px;left:50%;transform:translate(-50%,-4px);width:min(460px,calc(100vw - 72px));text-align:center;opacity:0;pointer-events:none;transition:opacity .4s ease,transform .5s cubic-bezier(.2,.7,.2,1);z-index:3}.caption.is-visible{opacity:1;transform:translate(-50%);pointer-events:auto}.caption p{margin:0}.caption__text{font-size:15px;color:var(--ink)}.caption__text.is-busy{animation:breathe 1.6s ease-in-out infinite}.caption__note{margin-top:4px!important;font-size:12px;color:var(--ink-faint)}.caption__actions{margin-top:14px!important;display:flex;justify-content:center;gap:20px}.caption__actions button{font:inherit;font-size:12px;letter-spacing:.08em;text-transform:uppercase;padding:9px 16px;border:1px solid var(--ink);background:var(--ink);color:var(--paper);cursor:pointer;transition:background .2s,color .2s}.caption__actions button:hover,.caption__actions button:focus-visible{background:transparent;color:var(--ink);outline:none}.caption__actions button.is-quiet{background:none;border-color:transparent;color:var(--ink-soft);padding-left:0;padding-right:0}.caption__actions button.is-quiet:hover,.caption__actions button.is-quiet:focus-visible{color:var(--ink);border-bottom-color:var(--ink)}@keyframes breathe{50%{opacity:.45}}@media(prefers-reduced-motion:reduce){.caption__text.is-busy{animation:none}}.camera-video{position:fixed;width:1px;height:1px;opacity:0;pointer-events:none;left:-10px;top:-10px}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
