:root{--paper:#f7f2e7;--paper2:#fbf8f1;--ink:#3a2a20;--ink2:#6b5646;--line:#d8ccb6;--purple:#8e3f8c;--ochre:#c98a1b;--ochreL:#f3e3c0;--water:#dce7ea;--font:"PingFang SC","Microsoft YaHei","Noto Sans CJK SC","Source Han Sans SC","Hiragino Sans GB",sans-serif;font-size:clamp(13px,1.02vw,21px)}*{box-sizing:border-box}html,body{margin:0;height:100%;overflow:hidden}body{font-family:var(--font);color:var(--ink);background-color:var(--paper);background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' seed='4'/><feColorMatrix values='0 0 0 0 .42 0 0 0 0 .33 0 0 0 0 .22 0 0 0 .07 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");display:grid;grid-template-rows:auto 1fr auto;-webkit-font-smoothing:antialiased}button{font-family:inherit;color:inherit;cursor:pointer}button:focus-visible,[role=button]:focus-visible,.draggable:focus-visible{outline:3px solid var(--ochre);outline-offset:3px;border-radius:10px}.top{display:flex;align-items:center;gap:1.4rem;padding:.7rem 1.4rem .5rem;border-bottom:1.5px solid var(--line)}.top h1{font-size:1.55rem;margin:0;letter-spacing:.06em;font-weight:700;white-space:nowrap;display:flex;align-items:center;gap:.6rem}.pausedTag{display:none;font-size:.8rem;font-weight:500;background:var(--ink);color:var(--paper2);padding:.15rem .6rem;border-radius:1rem;letter-spacing:0}body.paused .pausedTag{display:inline-block}.steps{display:flex;gap:.3rem;flex:1;justify-content:center;flex-wrap:nowrap}.steps button{display:flex;align-items:center;gap:.4rem;background:none;border:0;padding:.4rem .7rem;border-radius:2rem;font-size:.95rem;color:var(--ink2);white-space:nowrap;position:relative}.steps button b{display:inline-grid;place-items:center;width:1.55rem;height:1.55rem;border-radius:50%;border:1.6px solid currentColor;font-size:.85rem}.steps button.past{color:var(--ink)}.steps button.past b{background:var(--ink);color:var(--paper2);border-color:var(--ink)}.steps button.cur{color:var(--ink);font-weight:700;background:var(--ochreL)}.steps button.cur b{background:var(--ochre);color:#fff;border-color:var(--ochre)}.steps button:hover{background:#efe6d3}.tools{display:flex;gap:.35rem}.tool{display:flex;align-items:center;gap:.3rem;background:var(--paper2);border:1.5px solid var(--ink2);border-radius:.6rem;padding:.35rem .65rem;font-size:.9rem}.tool .ic{font-size:.85rem;width:1rem;text-align:center}.tool.on{background:var(--ink);color:var(--paper2);border-color:var(--ink)}#tPause{border-color:var(--ink);font-weight:700}body.paused #tPause{background:var(--ochre);border-color:var(--ochre);color:#fff}main{display:grid;gap:1rem;padding:.8rem 1.2rem;min-height:0}.panel{display:none;min-height:0;min-width:0;position:relative}.panel>svg{width:100%;height:100%;display:block}main[data-layout=bench]{grid-template-columns:1fr}main[data-layout=bench] #pBench{display:block}main[data-layout=observe]{grid-template-columns:.36fr 1fr}main[data-layout=observe] #pBench,main[data-layout=observe] #pObserve{display:flex}main[data-layout=exchange]{grid-template-columns:1fr .92fr}main[data-layout=exchange] #pExchange,main[data-layout=exchange] #pObserve{display:flex}main[data-layout=compare] #pCompare{display:flex}#pBench,#pExchange{flex-direction:column}main.enter .panel{animation:enter .55s cubic-bezier(.2,.7,.2,1) both}main.enter .panel+.panel{animation-delay:.08s}@keyframes enter{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}body.reduced main.enter .panel{animation:none}@media(prefers-reduced-motion:reduce){main.enter .panel{animation:none}}#pObserve,#pCompare{flex-direction:column;background:var(--paper2);border:1.5px solid var(--line);border-radius:1rem;padding:.6rem .9rem .4rem;box-shadow:0 2px #e6dcc8}.phead{display:flex;align-items:center;gap:.8rem;flex-wrap:wrap}.tabs{display:inline-flex;background:#efe7d6;border-radius:.7rem;padding:.2rem}.tabs button{border:0;background:none;padding:.35rem .9rem;border-radius:.55rem;font-size:.95rem;color:var(--ink2)}.tabs button.on{background:var(--paper2);color:var(--ink);font-weight:700;box-shadow:0 1px #d4c6ad,0 0 0 1.5px var(--ink2)}.tagBadge{font-size:.82rem;border:1.5px dashed var(--ink2);padding:.1rem .55rem;border-radius:.4rem;color:var(--ink2)}.scale{font-size:.85rem;color:var(--ink2)}.views{flex:1;min-height:0;position:relative}.views>svg{position:absolute;inset:0;width:100%;height:100%;transition:opacity .35s}#pObserve[data-mode=micro] #schemaSvg,#pObserve[data-mode=schema] #microSvg{opacity:0;pointer-events:none}#pCompare[data-mode=micro] .cmpTag.schema,#pCompare[data-mode=schema] .cmpTag.micro{display:none}.cmpRow{flex:1;display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;padding:.6rem 0;min-height:0}.card{margin:0;display:flex;flex-direction:column;background:#fffdf8;border:1.5px solid var(--line);border-radius:.9rem;padding:.6rem;min-height:0;position:relative}.card figcaption{display:flex;align-items:baseline;gap:.5rem;font-size:1.15rem;font-weight:700;padding:.1rem .2rem .5rem}.card figcaption b{display:inline-grid;place-items:center;width:1.6rem;height:1.6rem;border-radius:50%;background:var(--ink);color:#fff;font-size:.85rem}.card figcaption span{font-size:.85rem;font-weight:400;color:var(--ink2);margin-left:auto}.card svg{flex:1;min-height:0;width:100%;border-radius:.6rem;background:#f6f1e6}.card.empty svg{opacity:.25}.emptyMsg{position:absolute;inset:auto 0 45%;text-align:center;color:var(--ink2);font-size:.95rem}.bar{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:1rem;align-items:center;padding:.6rem 1.4rem .8rem;border-top:1.5px solid var(--line);background:linear-gradient(#f3ecdd00,#efe6d3aa)}.q{display:grid;grid-template-columns:auto 1fr auto;gap:.2rem .7rem;align-items:center}.qk{background:var(--ink);color:var(--paper2);font-size:.8rem;padding:.15rem .5rem;border-radius:.35rem}.q p{margin:0;font-size:1.1rem;font-weight:700;line-height:1.35}.ans{border:1.5px solid var(--ink2);background:none;border-radius:.6rem;padding:.3rem .7rem;font-size:.85rem}.aText{grid-column:1/-1;font-weight:400!important;font-size:1rem!important;background:#fff8e6;border-left:4px solid var(--ochre);padding:.35rem .7rem;border-radius:.3rem}.acts{display:flex;gap:.45rem;align-items:center;flex-wrap:wrap;justify-content:center}.act{border:1.8px solid var(--ink);background:var(--paper2);border-radius:.7rem;padding:.5rem .9rem;font-size:1rem;font-weight:600;transition:transform .12s,background .2s}.act:active{transform:translateY(1px) scale(.98)}.act.primary{background:var(--ochre);border-color:var(--ochre);color:#fff;box-shadow:0 3px #9a6912}.act.done{border-color:#a6987f;color:#7c6d58;background:transparent;font-weight:500}.act kbd{font-size:.7rem;margin-left:.4rem;opacity:.7}.sep{width:1.5px;height:1.8rem;background:var(--line);margin:0 .2rem}.hint{color:var(--ink2);font-size:.95rem}.status{display:flex;flex-wrap:wrap;gap:.3rem .4rem;justify-content:flex-end;max-width:27rem}.chip{display:inline-flex;align-items:center;gap:.4rem;font-size:.88rem;background:var(--paper2);border:1.5px solid var(--line);border-radius:2rem;padding:.2rem .7rem;white-space:nowrap}.chip i{font-style:normal;color:var(--ink2);font-size:.78rem}.chip.rec b{font-weight:500;color:#b3a58e}.chip.rec b.y{color:var(--ink);font-weight:700}.chip.rec b.y:before{content:"\2713";color:var(--ochre);margin-right:.1rem}.chip.pace{border-style:dashed;color:var(--ink2)}#toast{position:fixed;left:50%;bottom:7.2rem;transform:translate(-50%,10px);background:var(--ink);color:var(--paper2);padding:.5rem 1.1rem;border-radius:2rem;font-size:1rem;opacity:0;pointer-events:none;transition:opacity .2s,transform .2s;max-width:70vw;text-align:center}#toast.show{opacity:.96;transform:translate(-50%)}#toast.warn{background:#8a4b12}.keys{position:fixed;right:1.4rem;bottom:.15rem;font-size:.68rem;color:#a69680}svg text{font-family:var(--font)}.lbl{font-size:19px;fill:var(--ink);font-weight:600}.lbl.sm{font-size:16px;font-weight:500}.lbl.c{font-size:16px}.lbl.flow{fill:#3f5f6c}.lbl.muted{fill:var(--ink2)}.tag{font-size:12px;fill:var(--ink);font-weight:700}.tag.sm{font-size:10.5px;font-weight:500}.tagw{font-size:16px;fill:#fff;font-weight:700}.ptitle{font-size:24px;font-weight:700;fill:var(--ink)}.pscale{font-size:16px;fill:var(--ink2)}.mlbl{font-size:24px;font-weight:700;fill:var(--ink)}.slbl{font-size:22px;font-weight:600;fill:var(--ink)}.slbl.sm{font-size:17px;font-weight:500;fill:var(--ink2)}.slbl.key{fill:#9a6912;font-size:24px;font-weight:800}.slbl.state{font-size:22px;fill:#2f5f78;font-weight:700}.draggable{cursor:grab;touch-action:none}.draggable.dragging{cursor:grabbing}.cellhit{cursor:pointer}.halo>ellipse:nth-child(2){animation:dash 1.6s linear infinite}@keyframes dash{to{stroke-dashoffset:-18}}body.reduced .halo>ellipse:nth-child(2){animation:none}@media(prefers-reduced-motion:reduce){.halo>ellipse:nth-child(2){animation:none}}#benchSvg,#xSvg,#microSvg{touch-action:none}#bEpi,#callout,#bSlideOnStage,#bHi,#bLabels,#xFall{pointer-events:none}:root{--ink:#231e16;--ink2:#5b4d3f;--line:#cdbfa4;--cream:#fff4d6;--yel:#f4b829;--yelD:#d39a12;--shadow:rgba(75,90,143,.38);--hatch:repeating-linear-gradient(-45deg,rgba(35,30,22,.38) 0 1px,transparent 1px 5px)}.top{border-bottom:2px solid var(--ink);position:relative}.top:after{content:"";position:absolute;left:0;right:0;bottom:-7px;height:5px;background:var(--hatch);opacity:.55;pointer-events:none}.top h1{font-weight:800}.pausedTag{background:var(--yel);color:var(--ink);border:1.5px solid var(--ink)}.steps button{border:1.5px solid transparent;transition:background .2s,transform .15s}.steps button b{border-width:1.8px}.steps button.past b{background:var(--ink);border-color:var(--ink)}.steps button.cur{background:var(--yel);border-color:var(--ink);box-shadow:2px 2px 0 var(--ink);color:var(--ink)}.steps button.cur b{background:var(--cream);color:var(--ink);border-color:var(--ink)}.steps button:hover:not(.cur){background:#efe4cc}.tool{border:1.6px solid var(--ink);border-radius:2rem;background:#fffaf0;box-shadow:2px 2px 0 var(--ink);font-weight:600;transition:transform .12s,box-shadow .12s}.tool:active{transform:translate(2px,2px);box-shadow:0 0 0 var(--ink)}.tool.on{background:var(--ink);color:var(--cream)}#tPause{background:var(--cream)}body.paused #tPause{background:var(--yel);border-color:var(--ink);color:var(--ink)}#pObserve,#pCompare{border:2px solid var(--ink);border-radius:1.1rem;box-shadow:6px 6px 0 var(--shadow);background:#fffaf0}.tabs{background:#f3e8cf;border:1.6px solid var(--ink);border-radius:2rem;padding:.18rem}.tabs button{border-radius:2rem;font-weight:600}.tabs button.on{background:var(--yel);color:var(--ink);box-shadow:none;outline:1.5px solid var(--ink)}.tagBadge{border:1.6px dashed var(--ink);color:var(--ink);background:var(--cream);border-radius:2rem;font-weight:600}.card{border:2px solid var(--ink);box-shadow:5px 5px 0 var(--shadow);border-radius:1rem}.card figcaption b{background:var(--yel);color:var(--ink);border:1.5px solid var(--ink)}.card svg{border:1.5px solid var(--ink)}.bar{border-top:2px solid var(--ink);background:#f6eedd;position:relative}.bar:before{content:"";position:absolute;left:0;right:0;top:-7px;height:5px;background:var(--hatch);opacity:.55;pointer-events:none}.qk{background:var(--ink);color:var(--cream);border-radius:2rem;padding:.15rem .6rem}.ans{border:1.6px solid var(--ink);border-radius:2rem;background:#fffaf0;box-shadow:2px 2px 0 var(--ink);font-weight:600}.ans:active{transform:translate(2px,2px);box-shadow:none}.aText{background:var(--cream);border:1.6px solid var(--ink);border-left:6px solid var(--yel);border-radius:.6rem}.act{border:2px solid var(--ink);border-radius:2rem;background:#fffaf0;box-shadow:3px 3px 0 var(--ink);font-weight:700;transition:transform .1s,box-shadow .1s,background .2s}.act:hover{background:#fff2cf}.act:active{transform:translate(3px,3px);box-shadow:0 0 0 var(--ink)}.act.primary{background:var(--yel);border-color:var(--ink);color:var(--ink);box-shadow:3px 3px 0 var(--ink)}.act.primary:hover{background:#ffc93d}.act.done{border:1.8px dashed #8c7d66;color:#6f614d;background:transparent;box-shadow:none;font-weight:500}.sep{width:6px;height:2rem;background:var(--hatch);opacity:.8}.chip{border:1.5px solid var(--ink);background:#fffaf0}.chip.rec b.y:before{color:var(--yelD)}.chip.pace{border-style:dashed}#toast{background:var(--cream);color:var(--ink);border:2px solid var(--ink);box-shadow:4px 4px 0 var(--ink);font-weight:600}#toast.warn{background:#ffd8bd;color:var(--ink)}.lbl{fill:var(--ink)}.lbl.onDark,.lbl.flow{paint-order:stroke;stroke:#fffaf0;stroke-width:5px;stroke-linejoin:round}.tagw{fill:var(--ink)}.halo>ellipse:first-child{transform-box:fill-box;transform-origin:center;animation:breathe 2.4s ease-in-out infinite}@keyframes breathe{0%,to{opacity:.08;transform:scale(1)}50%{opacity:.22;transform:scale(1.07)}}.halo .htag{animation:bob 2.4s ease-in-out infinite}@keyframes bob{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}.liq{transform-box:fill-box;transform-origin:center;animation:slosh 3.2s ease-in-out infinite}.liq.s{animation-delay:-1.3s}.liq.s1{animation-delay:-.6s}.liq.s5{animation-delay:-2.1s}@keyframes slosh{0%,to{transform:scale(1) translateY(0)}35%{transform:scale(1.01,.86) translateY(.6px)}70%{transform:scale(.995,1.06) translateY(-.4px)}}.settle{transform-box:fill-box;transform-origin:50% 100%;animation:settle .5s cubic-bezier(.2,.8,.3,1.2)}@keyframes settle{0%{transform:translateY(-4px) scale(1.03,.97)}55%{transform:translateY(1px) scale(.99,1.02)}to{transform:none}}#xDrop path:first-child{transform-box:fill-box;transform-origin:100% 50%;animation:wobble 1.6s ease-in-out infinite}@keyframes wobble{0%,to{transform:scale(1)}50%{transform:scale(1.04,.97)}}body.reduced .halo>ellipse:first-child,body.reduced .halo .htag,body.reduced .liq,body.reduced .settle,body.reduced #xDrop path:first-child{animation:none}@media(prefers-reduced-motion:reduce){.halo>ellipse:first-child,.halo .htag,.liq,.settle,#xDrop path:first-child{animation:none}}#bBottleText,#bLive{pointer-events:none}.lbl.xs{font-size:15px;font-weight:600}.lbl.xs.b{font-weight:800}.conc{display:inline-flex;align-items:center;gap:0;border:2px solid var(--ink);border-radius:2rem;background:#fffaf0;box-shadow:3px 3px 0 var(--ink);overflow:hidden}.conc button{border:0;border-right:1.5px solid var(--ink);background:none;padding:.42rem .55rem;font-size:.95rem;font-weight:700;font-variant-numeric:tabular-nums}.conc button.on{background:var(--yel)}.conc i{font-style:normal;font-size:.78rem;padding:0 .55rem 0 .4rem;color:var(--ink2)}.chip.rec b{border-radius:1rem;padding:0 .25rem;transition:background .3s}.chip.rec b.flash{animation:slotFlash 1.4s ease-out}@keyframes slotFlash{0%{background:var(--yel);transform:scale(1.25)}30%{background:var(--yel);transform:scale(1)}to{background:transparent}}.fly{position:fixed;z-index:50;pointer-events:none;background:var(--cream);border:2px solid var(--ink);border-radius:2rem;box-shadow:3px 3px 0 var(--ink);padding:.25rem .8rem;font-weight:800;font-size:1rem;white-space:nowrap}#tDemo{background:var(--cream)}body.demo #tDemo{background:var(--ink);color:var(--cream)}.demoTag{display:inline-flex;visibility:hidden;font-size:.8rem;font-weight:700;background:var(--cream);color:var(--ink);border:1.5px solid var(--ink);padding:.15rem .6rem;border-radius:1rem;letter-spacing:0;align-items:center;gap:.35rem}.demoTag:before{content:"";width:.55rem;height:.55rem;border-radius:50%;background:#e0543f;animation:dot 1.2s ease-in-out infinite}@keyframes dot{50%{opacity:.25}}body.demo .demoTag{visibility:visible}body.reduced .demoTag:before,body.reduced .chip.rec b.flash{animation:none}@media(prefers-reduced-motion:reduce){.demoTag:before{animation:none}}.tool{white-space:nowrap;padding:.32rem .55rem}.tools{gap:.3rem;flex-shrink:0}.steps{min-width:0}.steps button{padding:.38rem .5rem}@media(max-width:1700px){.steps button:not(.cur) span{display:none}.steps{gap:.15rem}}.tag.conc{font-size:13.5px;font-weight:800;letter-spacing:-.02em}body{grid-template-columns:minmax(0,1fr)}.top,.bar,.q{min-width:0}#tLanguage{min-width:4.3rem;justify-content:center;background:var(--cream)}@media(max-width:2200px){.steps button:not(.cur) span{display:none}}html[lang=en]{--font:"Segoe UI",Arial,sans-serif}html[lang=en] .top{gap:.7rem;padding-inline:1rem}html[lang=en] .top h1{font-size:1.25rem;letter-spacing:0;gap:.4rem}html[lang=en] .demoTag{font-size:.7rem}html[lang=en] .steps{gap:.12rem}html[lang=en] .steps button{gap:.25rem;padding:.4rem;font-size:.85rem}html[lang=en] .steps button b{flex-shrink:0}html[lang=en] .tool{font-size:.8rem;padding:.35rem .5rem;gap:.2rem}html[lang=en] .bar{grid-template-columns:minmax(0,1fr) minmax(0,1.45fr) minmax(0,.8fr);gap:.7rem}html[lang=en] .q,html[lang=en] .acts,html[lang=en] .status{min-width:0}html[lang=en] .q{gap:.3rem .55rem}html[lang=en] .q p{font-size:1rem;line-height:1.4}html[lang=en] .qk{font-size:.7rem}html[lang=en] .ans{font-size:.8rem;white-space:nowrap}html[lang=en] .act{font-size:.9rem;padding:.45rem .65rem}html[lang=en] .status{max-width:none}html[lang=en] .chip{font-size:.78rem;padding:.2rem .5rem;white-space:normal;flex-wrap:wrap}html[lang=en] .card figcaption{flex-wrap:wrap;font-size:1rem}html[lang=en] .card figcaption b{flex-shrink:0}html[lang=en] .card figcaption span{flex-basis:100%;margin-left:2.1rem;font-size:.78rem}html[lang=en] .emptyMsg{padding:0 1rem}html[lang=en] #cmpCard .muted{font-size:14px}html[lang=en] .slbl{font-size:20px}html[lang=en] .slbl.pl,html[lang=en] .slbl.key,html[lang=en] .slbl.legend{font-size:18px}html[lang=en] .slbl.sm{font-size:16px}html[lang=en] #toast{bottom:calc(var(--bar-height,7rem) + 1rem)}@media(max-width:1400px){.top{gap:.6rem;padding-inline:.8rem}.top h1{font-size:1.35rem}html[lang=en] .top{gap:.4rem;padding-inline:.7rem}html[lang=en] .top h1{font-size:1.15rem}html[lang=en] .tool{font-size:.76rem;padding-inline:.35rem}html[lang=en] .steps button{font-size:.8rem;padding-inline:.25rem}}
