@font-face{font-family:Playful One VN;src:url(/assets/fonts/PlayfulOneVN-Regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}:root{--paper:#e3e7e5;--paper-2:#d2d8d6;--paper-3:#a9b3b0;--ink:#0c0f10;--ink-2:#262e31;--ink-3:#4d5856;--jade:#1a9c83;--jade-2:#0d5f51;--jade-glow:#5fe3c0;--cinnabar:#b3372e;--poster:#efe7de;--poster-paper:none;--poster-art:none;--ink-wash:url(/assets/ui/ink-wash-band.svg);--ink-pool:url(/assets/ui/ink-wash-block.svg);--font-en:"Playful One VN";--font-vi:"Playful One VN";--font-han:"Ma Shan Zheng", "STKaiti", "KaiTi", serif;--font-lang:var(--font-en);--ease-ink:cubic-bezier(.65, 0, .35, 1);--gutter:clamp(1rem, 4vw, 2.5rem);color-scheme:light}*,:before,:after{box-sizing:border-box}:lang(en){--font-lang:var(--font-en);font-size:1.2rem}:lang(vi){--font-lang:var(--font-vi);font-size:1.2rem}:root,[lang]{--font-display:var(--font-lang), var(--font-han);--font-body:var(--font-lang), var(--font-han)}@view-transition{navigation:auto}::view-transition-old(root),::view-transition-new(root){animation-duration:.6s;animation-timing-function:var(--ease-ink)}.brand{view-transition-name:brand}.lang-switch{view-transition-name:lang-switch}@media (prefers-reduced-motion:reduce){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation-duration:0s!important}}html{-webkit-text-size-adjust:100%}html:not(.scene-on){scroll-behavior:smooth;scrollbar-gutter:stable}html.dialog-open{scroll-behavior:auto}body{background-color:var(--paper);min-height:100vh;color:var(--ink);font-family:var(--font-body);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9 0.04' numOctaves='3' seed='4'/%3E%3CfeColorMatrix values='0 0 0 0 0.18 0 0 0 0 0.22 0 0 0 0 0.23 0 0 0 0.08 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E"),radial-gradient(60% 40% at 70% 20%,#ffffffb3,#0000 70%),radial-gradient(50% 35% at 15% 65%,#ffffff80,#0000 70%),radial-gradient(130% 100% at 50% 40%,#0000 55%,#262e3138);background-attachment:scroll,fixed,fixed,fixed;margin:0;font-size:1rem;font-weight:300;line-height:1.75;overflow-x:clip}strong,b{font-weight:500}a{color:var(--jade-2);text-underline-offset:.2em}a:hover{color:var(--ink)}:focus-visible{outline:2px solid var(--jade);outline-offset:3px}h1,h2,h3{font-family:var(--font-display);margin:0 0 .5em;font-weight:500;line-height:1.2}.han{font-family:var(--font-han);letter-spacing:.05em;font-weight:400}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;overflow:hidden;position:absolute!important}.skip-link{z-index:100;background:var(--ink);color:var(--paper);padding:.5rem 1rem;position:absolute;top:-5rem;left:1rem}.skip-link:focus{top:1rem}.seal{background:var(--seal-color,var(--ink));color:var(--paper);font-family:var(--font-han);box-shadow:inset 0 0 0 2px var(--seal-color,var(--ink)), inset 0 0 0 3.5px var(--paper);writing-mode:vertical-rl;filter:url(#stamp);border-radius:3px;place-items:center;padding:.3em .35em;line-height:1;display:inline-grid}.topbar{padding:1rem var(--gutter);justify-content:space-between;align-items:center;gap:1rem;display:flex}.brand{color:var(--ink);font-family:var(--font-display);align-items:center;gap:.75rem;font-size:1.35rem;font-weight:500;text-decoration:none;display:flex}.brand .seal{--seal-color:var(--cinnabar);font-size:.85rem}.brand small{font-family:var(--font-body);color:var(--ink-3);letter-spacing:.2em;text-transform:uppercase;margin-top:.15rem;font-size:.66rem;font-weight:400;display:block}.topbar-actions{align-items:center;gap:1rem;font-size:.875rem;display:flex}.lang-switch{gap:.25rem;display:flex}.lang-switch a{color:var(--ink-2);border:1px solid #0000;border-radius:2px;padding:.15rem .5rem;text-decoration:none}.lang-switch a[aria-current=page]{border-color:var(--ink);color:var(--ink)}.settings-open{color:var(--ink-3);font:inherit;cursor:pointer;background:0 0;border:0}.map-nav ol{flex-wrap:wrap;gap:.75rem;margin:0;padding:0;list-style:none;display:flex}.map-nav a{color:var(--ink);align-items:center;gap:.6rem;text-decoration:none;display:flex}.map-nav .seal{font-size:1rem}.map-nav .nav-name{font-family:var(--font-display);font-size:1.1rem;font-weight:500}.map-nav a[aria-current] .nav-name{color:var(--jade-2)}.map-nav a[aria-current] .seal{--seal-color:var(--jade-2);box-shadow:inset 0 0 0 2px var(--seal-color), inset 0 0 0 3.5px var(--paper)}.map-nav .nav-start{display:none}html:not(.scene-on) .topbar{z-index:26;backdrop-filter:blur(8px);transition:padding .35s var(--ease-ink);background:#e3e7e5d1;position:sticky;top:0}html:not(.scene-on) .page>.map-nav{top:var(--topbar-h,4.5rem);z-index:25;transition:margin .35s var(--ease-ink);position:sticky}html:not(.scene-on) .page>.map-nav:before{content:"";z-index:-1;backdrop-filter:blur(8px);pointer-events:none;background:linear-gradient(#e3e7e5d1,#e3e7e5d1 calc(100% - 1.4rem),#0000);width:100vw;position:absolute;inset:0 auto -1.4rem 50%;translate:-50%;mask-image:linear-gradient(#000 calc(100% - 1.4rem),#0000)}html:not(.scene-on) .page>.map-nav ol{border-bottom:1px solid var(--jade-2);padding:.35rem 0 .6rem}html:not(.scene-on) .map-nav a{white-space:nowrap;transition:color .25s}html:not(.scene-on) .map-nav a:hover .nav-name{color:var(--jade-2)}html:not(.scene-on) .map-nav .seal{transition:font-size .35s var(--ease-ink)}html.header-condensed:not(.scene-on) .topbar{padding-block:.45rem}html.header-condensed:not(.scene-on) .page>.map-nav{margin-bottom:2rem}html.header-condensed:not(.scene-on) .map-nav .seal{font-size:.78rem}html.header-condensed:not(.scene-on) .map-nav .nav-name{font-size:.98rem}@media (width<=760px){html:not(.scene-on) .page>.map-nav{margin-inline:calc(-1 * var(--gutter))}html:not(.scene-on) .page>.map-nav ol{padding-inline:var(--gutter);overscroll-behavior-x:contain;scroll-padding-inline:var(--gutter);scrollbar-width:none;mask-image:linear-gradient(90deg, transparent, #000 var(--gutter), #000 calc(100% - var(--gutter)), transparent);flex-wrap:nowrap;gap:1.1rem;overflow-x:auto}html:not(.scene-on) .page>.map-nav ol::-webkit-scrollbar{display:none}html:not(.scene-on) .map-nav li{flex:none}}@media (prefers-reduced-motion:reduce){html:not(.scene-on) :is(.topbar,.page>.map-nav,.map-nav .seal){transition:none}}.page{max-width:62rem;padding:0 var(--gutter) 4rem;margin:0 auto}.page>.map-nav{margin:1rem 0 3rem}.panel{scroll-margin-top:calc(var(--header-h,8rem) + .75rem);margin:0 0 4.5rem;position:relative}.panel-card{background:var(--poster-paper) center / cover, var(--poster);background-blend-mode:luminosity;border-radius:3px;padding:clamp(2rem,4vw,3rem) clamp(1.5rem,4vw,3rem) clamp(3rem,8vw,7rem);position:relative;box-shadow:0 18px 40px -30px #3b3226}.panel-card:before{content:"";background:var(--poster-art) right bottom / auto min(100%, 40rem) no-repeat;filter:grayscale(var(--poster-grey,0));pointer-events:none;position:absolute;inset:0}.panel-card>*{position:relative}@media (width>=761px){.panel-card{padding-right:clamp(3rem,28%,16rem)}}.scene-on.poster-webgl .panel-card{box-shadow:none;background:0 0}.scene-on.poster-webgl .panel-card:before{display:none}article.panel-card{margin-top:2.75rem}.panel-header{flex-wrap:wrap;align-items:flex-start;gap:1.1rem;margin-bottom:1.75rem;display:flex}.panel-header .han-title{font-family:var(--font-han);writing-mode:vertical-rl;color:var(--ink);text-shadow:0 0 18px #5fe3c059;width:100%;font-size:clamp(2.5rem,6vw,3.5rem);line-height:1;display:inline-block}.panel-header h2{letter-spacing:.01em;margin:.1rem 0 0;font-size:clamp(2rem,4vw,2.7rem);font-weight:400}.panel-header{padding-bottom:1.45rem;position:relative}.panel-header:after{content:"";aspect-ratio:800/110;opacity:.85;pointer-events:none;background:url(/assets/ui/brush-stroke.svg) 0/contain no-repeat;width:min(11rem,55%);position:absolute;bottom:-.2rem;left:-.4rem}.panel-flow{overflow-wrap:anywhere;line-height:1.75}.panel-flow>:last-child{margin-bottom:0}.scene-on .panel-flow>:first-child{margin-top:0}.panel-header p{color:var(--ink-3);letter-spacing:.22em;text-transform:uppercase;margin:.45rem 0 0;font-size:.72rem;font-weight:500}.lede{font-family:var(--font-display);color:var(--ink);font-size:clamp(1.15rem,2.1vw,1.3rem);line-height:1.65}.meta-list{color:var(--ink-2);flex-wrap:wrap;gap:.5rem 1.5rem;margin:1rem 0;padding:0;font-size:.95rem;list-style:none;display:flex}.btn-ink{background:var(--ink-pool) center / 100% 100% no-repeat;min-height:44px;color:var(--paper);font:inherit;cursor:pointer;border:0;justify-content:center;align-items:center;gap:.5rem;padding:.6rem 1.5rem;text-decoration:none;transition:color .18s,transform .18s,filter .24s;display:inline-flex;position:relative}.btn-ink:is(:hover,:focus-visible){color:var(--jade-glow);filter:drop-shadow(0 0 6px #5fe3c059);transform:translateY(-2px)}.btn-ink:active{transform:translateY(0)}.scrolls{gap:2rem;margin:0;padding:0;list-style:none;display:grid}.scroll-item{min-width:0}.project-article{min-width:0;position:relative}.project-inline-title{display:none}.scene-on .project-inline-title,.project-dialog .project-inline-title{display:inline}.scene-on .project-open,.project-dialog .project-open{display:none}.project-open{color:inherit;text-decoration:none}.project-open:is(:hover,:focus-visible){color:var(--jade-2);text-decoration:underline}.project-dialog-ready:not(.scene-on) .panel .project-details{display:none}.project-summary{color:var(--ink);margin:0 0 1rem;font-size:1.02rem;line-height:1.65}.project-actions{flex-wrap:wrap;gap:.7rem;margin:1.25rem 0 0;display:flex}.project-prose :is(h2,h3,h4){color:var(--jade-2);align-items:center;gap:.6rem;margin:1.4rem 0 .6rem;font-size:1.05rem;display:flex}.project-prose :is(h2,h3,h4):before{content:"";background:var(--jade-2);flex:none;width:.42rem;height:.42rem;rotate:45deg}.project-prose ul{padding:0;list-style:none}.project-prose li+li{margin-top:.55rem}.project-prose p{margin:.7rem 0}.entry-label{background:var(--ink-wash) 0 50% / 100% 100% no-repeat;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.3rem .8rem;margin:0 0 .9rem;padding:.5rem .75rem .45rem;display:flex;position:relative}.entry-label :is(h1,h3){margin:0;font-size:1.4rem;line-height:1.3}.entry-label h1{font-size:clamp(1.7rem,4vw,2.5rem)}.entry-label a{color:inherit;text-decoration-color:var(--jade-2)}.entry-label a:is(:hover,:focus-visible){color:var(--jade-2)}.entry-meta{background:var(--ink-2);color:var(--paper);filter:url(#stamp);white-space:nowrap;font-variant-numeric:tabular-nums;border-radius:2px;padding:.12rem .55rem;font-size:.75rem;line-height:1.5}.entry-label.is-continued h3:after{content:" · tiếp";color:var(--ink-3);font-size:.75em}.entry-label.is-continued:lang(en) h3:after{content:" · cont."}.pending-scroll{gap:.9rem;margin:.4rem 0 1.2rem;display:grid}.pending-note{color:var(--ink-3);align-items:center;gap:.7rem;margin:0;font-style:italic;display:flex}.pending-note .seal{--seal-color:var(--jade-2);flex:none;font-size:.85rem;font-style:normal}.pending-lines{gap:.7rem;display:grid}.pending-lines>span{background:var(--ink-wash) 0 50% / 100% 100% no-repeat;opacity:.55;height:.85rem;display:block}.pending-lines>span:first-child{width:92%}.pending-lines>span:nth-child(2){width:76%}.pending-lines>span:nth-child(3){width:48%}.field-label{width:fit-content;color:var(--jade-2);letter-spacing:.06em;margin-bottom:.3rem;font-size:.72rem;line-height:1.5;display:block}.field-label:before{content:"";background:currentColor;width:.34rem;height:.34rem;margin:0 .45rem .12rem .05rem;display:inline-block;rotate:45deg}.entry-role,.project-role{color:var(--ink);margin:0 0 1rem;font-size:1rem}.duties{gap:.55rem;margin:0 0 1.1rem;padding:0;list-style:none;display:grid}.duties li,.project-prose li{padding-left:1.1rem;line-height:1.65;position:relative}.duties li:before,.project-prose li:before{content:"";background:var(--ink-2);border-radius:50% 40% 55% 45%;width:.4rem;height:.4rem;position:absolute;top:.68em;left:.15rem}.stack-block{margin:1.3rem 0 .25rem}.tags{flex-wrap:wrap;gap:.35rem;margin:0;padding:0;font-size:.8rem;list-style:none;display:flex}.tags li{color:var(--ink-2);letter-spacing:.06em;background:#262e3117;border-radius:999px;padding:.12rem .6rem;font-size:.72rem;font-weight:400}.year{float:right;font-family:var(--font-display);letter-spacing:.08em;color:var(--ink-3);font-size:.95rem}.facts{grid-template-columns:max-content 1fr;gap:.5rem 1.25rem;margin:1.5rem 0;font-size:.95rem;display:grid}.facts dt{color:var(--jade-2);font-family:var(--font-display);font-weight:500}.facts-period{color:var(--ink-3);font-variant-numeric:tabular-nums;font-size:.85rem;display:block}.intro-content{gap:1.5rem;display:grid}.intro-page>:first-child{margin-top:0}.meta-list{gap:.2rem 0;margin:0 0 1.25rem}.meta-list li{color:var(--ink-2);align-items:center;font-size:.95rem;display:inline-flex}.meta-list li+li:before{content:"";background:var(--jade);border-radius:50%;width:.32rem;height:.32rem;margin:0 .7rem}.facts{margin-top:0}.facts dd{color:var(--ink-2);margin:0}.timeline h3 a{color:inherit;text-decoration-color:var(--jade)}.skill-groups{gap:1.5rem;display:grid}.skill-page{grid-template-columns:1fr;gap:1.5rem;display:grid}.scene-on .skill-page{grid-template-columns:1fr;gap:1.25rem}.scene-on .skill{font-size:1rem}@media (width<=760px){.scene-on .skill-page{gap:.9rem}.scene-on .skill-group h3{font-size:1rem}.scene-on .skill{padding-left:.55rem;font-size:.88rem}}.skill-group{min-width:0}.skill-group h3{background:var(--ink-wash) 0 50% / 100% 100% no-repeat;margin:0 0 .75rem;padding:.5rem .75rem .45rem;font-size:1.2rem}.skills{gap:.5rem;margin:0 0 0 1.25rem;padding:0;list-style-type:disc;display:grid}.skill{padding-left:.8rem;line-height:1.55}.timeline{margin:0;padding:0;list-style:none}.timeline>li{padding:0 0 2.25rem;position:relative}.timeline>li:last-child{padding-bottom:0}.site-footer{padding:2rem var(--gutter);text-align:center;color:var(--ink-3);font-size:.85rem}.ink-progress{--progress:0;z-index:30;pointer-events:none;height:1rem;position:fixed;inset:0 0 auto}.ink-progress-stroke{opacity:.85;clip-path:inset(0 calc((1 - var(--progress)) * 100%) 0 0);mask-image:linear-gradient(90deg, #000 calc(var(--progress) * 100% - 3rem), #0000008c calc(var(--progress) * 100%));background:url(/assets/ui/ink-stroke-progress.svg) 0 0/100% 100% no-repeat;position:absolute;inset:0}.ink-progress-tip{top:50%;left:calc(var(--progress) * 100%);filter:blur(1px);width:3.2rem;height:.9rem;opacity:clamp(0, calc(var(--progress) * 40), 1);background:radial-gradient(closest-side at 75%,#5fe3c0e6,#1a9c8359 45%,#0000);position:absolute;translate:-75% -50%}.scene-on:not(.scene-ready) .ink-progress{visibility:hidden}#scene-canvas,.markers,.loader{display:none}.scene-on{scrollbar-width:none}.scene-on::-webkit-scrollbar{display:none}html.lenis,html.lenis body{height:auto}.lenis.lenis-smooth{scroll-behavior:auto!important}.lenis.lenis-stopped{overflow:clip}.scene-on #scene-canvas{width:100%;height:100%;display:block;position:fixed;inset:0}.scene-on .topbar{z-index:20;pointer-events:none;position:fixed;inset:0 0 auto}.scene-on .topbar>*{pointer-events:auto}.scene-on .page{z-index:15;pointer-events:none;max-width:none;transition:opacity .6s var(--ease-ink);padding:300vh 0 170vh;position:relative}.scene-on .page>*{pointer-events:auto}.scene-on.is-jumping .page{opacity:0;transition-duration:.3s}.scene-on .site-footer{z-index:15;position:relative}.scene-on .page>.map-nav{top:50%;right:var(--gutter);z-index:20;margin:0;position:fixed;transform:translateY(-50%)}.scene-on .map-nav ol{flex-direction:column;align-items:flex-end;gap:.6rem}.scene-on .map-nav a{flex-direction:row-reverse}.scene-on .map-nav .nav-name{opacity:0;transition:opacity .3s, transform .3s var(--ease-ink);text-shadow:0 0 6px var(--paper), 0 0 12px var(--paper);font-size:1rem;transform:translate(.5rem)}.scene-on .map-nav a:is(:hover,:focus-visible) .nav-name{opacity:1;transform:none}.scene-on .map-nav .seal{transition:transform .3s var(--ease-ink), filter .3s}.scene-on .map-nav a:not([aria-current]) .seal{filter:url(#stamp)grayscale(.85)opacity(.7)}.scene-on .map-nav a:hover .seal{transform:scale(1.08)rotate(-3deg)}.scene-on .map-nav .nav-start{display:block}.journey-start{display:none}.scene-on .journey-start{--leave:0;top:50%;right:calc(var(--gutter) + 6rem);z-index:12;pointer-events:none;opacity:0;width:min(25rem,38vw);transition:opacity 1.2s .4s;display:block;position:fixed;translate:0 -50%}.scene-on.scene-ready .journey-start{opacity:1}.welcome-card{color:var(--ink);opacity:calc(1 - var(--leave));translate:0 calc(var(--leave) * -3rem);rotate:calc(var(--leave) * -2deg);justify-items:start;gap:.55rem;padding:2.2rem 2.4rem 2rem;display:grid;position:relative}.welcome-card:before{content:"";z-index:-1;background:var(--poster-art) right bottom / auto 70% no-repeat, var(--poster-paper) center / cover, var(--poster);background-blend-mode:normal, luminosity, normal;filter:url(#torn)drop-shadow(0 18px 22px #262e3147);position:absolute;inset:0}.welcome-card>*{margin:0}.welcome-han{font-family:var(--font-han);letter-spacing:.08em;text-shadow:0 0 18px #5fe3c059;font-size:1.6rem;line-height:1}.welcome-greeting{font-family:var(--font-display);text-wrap:balance;font-size:clamp(1.5rem,2.4vw,2.1rem);line-height:1.2}.welcome-name{font-family:var(--font-display);flex-wrap:wrap;align-items:center;gap:.2rem .6rem;font-size:1.15rem;display:flex}.welcome-name .seal{--seal-color:var(--cinnabar);font-size:.75rem}.welcome-name small{letter-spacing:.08em;color:var(--ink-3);flex-basis:100%;padding-left:2.45rem;font-size:.72rem}.welcome-line{max-width:19rem;color:var(--ink-2);font-size:.98rem;line-height:1.55}.welcome-hint,.farewell-hint{letter-spacing:.06em;color:var(--jade-2);align-items:center;gap:.6rem;font-size:.82rem;display:flex}.welcome-hint{margin-top:.6rem}.ink-cue{flex:none;width:1.5rem;height:1.9rem;overflow:visible}.ink-cue-mark{fill:var(--ink);opacity:.15;animation:ink-cue 1.8s var(--ease-ink) infinite;animation-delay:calc(var(--k) * .3s)}.ink-cue-mark+.ink-cue-mark{fill:var(--jade-2)}@keyframes ink-cue{0%,to{opacity:.15;translate:0 -2px}40%{opacity:1;translate:0 2px}}.farewell-hint{margin:1.1rem 0 0;display:none}.scene-on .farewell-hint{display:flex}.scene-on .panel-flow .farewell-hint{font-size:.86rem;line-height:1.4}@media (prefers-reduced-motion:reduce){.ink-cue-mark{opacity:.9;animation:none}}.journey-end{display:none}.scene-on .journey-end{z-index:12;pointer-events:none;opacity:0;place-items:center;display:grid;position:fixed;inset:0}.journey-end .ink-scroll{--scroll-w:min(48rem, 84vw, 56vh * 1.5)}.journey-end .scroll-name{font-size:calc(var(--scroll-w) * .042);line-height:1.45}.scene-on .markers{z-index:10;pointer-events:none;display:block;position:fixed;inset:0}.marker{color:var(--ink);pointer-events:auto;opacity:0;will-change:transform;flex-direction:column;align-items:center;gap:.35rem;text-decoration:none;transition:opacity .6s;display:flex;position:absolute;top:0;left:0}.scene-ready .marker:not([data-offscreen]){opacity:1}.marker[data-offscreen]{pointer-events:none}.marker .plaque{background:var(--ink);color:var(--paper);font-family:var(--font-han);writing-mode:vertical-rl;border:2px solid var(--paper);outline:1px solid var(--ink);transition:background .3s, transform .3s var(--ease-ink);padding:.5rem .3rem;font-size:clamp(1.1rem,1.6vw,1.5rem);line-height:1.1}.marker .marker-name{font-family:var(--font-display);white-space:nowrap;text-shadow:0 0 6px var(--paper), 0 0 12px var(--paper), 0 0 18px var(--paper);font-size:.95rem;font-weight:500}.marker:is(:hover,:focus-visible) .plaque{background:var(--jade-2);transform:translateY(-4px)}.scene-on .panel{height:calc(var(--pages,1) * 60vh);pointer-events:none;margin:0}.scene-on .panel+.panel{margin-top:320vh}.scene-on .panel-card{--card-h:78vh;--art-w:calc(var(--card-h) * .6667);top:13vh;right:calc(var(--gutter) + 4.5rem);z-index:1;width:clamp(30rem, calc(var(--art-w) * .3 + 28rem), 52vw);height:var(--card-h);padding:2.4rem calc(var(--art-w) * .3 + 1rem) 2.2rem 2.6rem;opacity:0;pointer-events:none;flex-direction:column;display:flex;position:fixed}.scene-on .panel-card.is-open{pointer-events:auto}.scene-on .panel-body{overflow-clip-margin:3px;flex:1;min-height:0;position:relative;overflow:clip}.scene-on .panel-flow{will-change:transform;display:flow-root}.scene-on .panel-header{flex:none}.page-head{z-index:2;position:absolute;inset:0 0 auto}.page-head[hidden],.pager{display:none}.scene-on .pager:not([hidden]){z-index:3;font-family:var(--font-display);color:var(--ink);white-space:nowrap;font-variant-numeric:tabular-nums;text-shadow:0 0 6px var(--paper), 0 0 14px var(--paper);align-items:baseline;gap:.3rem;padding-bottom:.85rem;line-height:1;display:flex;position:absolute;top:1.3rem;right:1.6rem}.pager:before{content:"";z-index:-1;backdrop-filter:blur(4px);pointer-events:none;background:radial-gradient(closest-side,#e3e7e5e6,#e3e7e599 55%,#0000);position:absolute;inset:-.9rem -1.3rem -.7rem;mask-image:radial-gradient(closest-side,#000 50%,#0000)}.pager-now{text-align:right;min-width:2ch;font-size:2.6rem;display:inline-block}.pager-sep,.pager-total{color:var(--ink-3);font-size:1.05rem}.pager-bar{height:.6rem;position:absolute;bottom:0;left:-.2rem;right:-.2rem}.pager-bar:before,.pager-bar:after{content:"";background:url(/assets/ui/ink-stroke-progress.svg) 0 0/100% 100% no-repeat;position:absolute;inset:0}.pager-bar:before{opacity:.24}.pager-bar:after{opacity:.9;clip-path:inset(0 calc((1 - var(--pager,0)) * 100%) 0 0)}.pager-bar>span{top:50%;left:calc(var(--pager,0) * 100%);filter:blur(.6px);width:1.6rem;height:.7rem;opacity:clamp(0, calc(var(--pager,0) * 30), 1);background:radial-gradient(closest-side at 75%,#5fe3c0e6,#1a9c834d 50%,#0000);position:absolute;translate:-75% -50%}.scene-on [data-panel-title]:focus{outline:none}.panel-flow :is(p:not(.lede),dd,.duties li,.project-prose li),.project-dialog :is(p,.project-prose li){font-size:1.08rem}.scene-on .loader{--load:0;z-index:50;place-items:center;display:grid;position:fixed;inset:0;overflow:hidden}.loader>*{grid-area:1/1}.loader-stage{justify-items:center;gap:clamp(1.25rem,4vh,2.5rem);display:grid}.loader-mist{pointer-events:none;transition:opacity 1.2s;position:absolute;inset:0}.loader-mist>span{width:var(--w);aspect-ratio:2.4;left:var(--x);top:var(--y);background:radial-gradient(closest-side, rgb(38 46 49/var(--a)), rgb(38 46 49/calc(var(--a) * .45)) 55%, transparent);filter:blur(18px);animation:mist-drift var(--t) ease-in-out infinite alternate;border-radius:50%;position:absolute}.loader-mist>span:first-child{--w:46vw;--x:-14vw;--y:8vh;--a:.13;--t:46s;--dx:7vw}.loader-mist>span:nth-child(2){--w:40vw;--x:72vw;--y:18vh;--a:.1;--t:58s;--dx:-6vw}.loader-mist>span:nth-child(3){--w:70vw;--x:-10vw;--y:74vh;--a:.14;--t:64s;--dx:9vw}.loader-mist>span:nth-child(4){--w:52vw;--x:56vw;--y:70vh;--a:.12;--t:52s;--dx:-8vw}@keyframes mist-drift{to{translate:var(--dx) -1.5vh}}.loader-birds{pointer-events:none;transition:opacity 1s;position:absolute;inset:0}.loader-bird{left:0;top:var(--y);width:var(--size);aspect-ratio:1;background:var(--birds) 50% 0 / 300% 100% no-repeat;opacity:.8;animation:bird-cross var(--t) linear var(--delay) infinite both, bird-beat 1.6s steps(1) var(--delay) infinite;position:absolute}.loader-bird:first-child{--y:16vh;--size:clamp(2.6rem, 5vw, 4rem);--t:19s;--delay:-4s}.loader-bird:nth-child(2){--y:24vh;--size:clamp(1.8rem, 3.4vw, 2.7rem);--t:24s;--delay:-13s;opacity:.55}.loader-bird[data-side]{left:var(--x);opacity:0;animation:bird-glide var(--t) ease-in-out var(--delay) infinite both, bird-beat var(--beat) steps(1) var(--delay) infinite}.loader-bird[data-side=right]{left:auto;right:var(--x);scale:-1 1}.loader-bird:nth-child(3){--x:3vw;--y:34vh;--size:clamp(2.2rem, 4vw, 3.4rem);--t:11s;--delay:.3s;--beat:1.5s;--dx:20vw;--dy:-5vh;--o:.8}.loader-bird:nth-child(4){--x:7vw;--y:62vh;--size:clamp(1.7rem, 3vw, 2.5rem);--t:13s;--delay:2.6s;--beat:1.8s;--dx:16vw;--dy:-7vh;--o:.6}.loader-bird:nth-child(5){--x:3vw;--y:40vh;--size:clamp(2.2rem, 4vw, 3.4rem);--t:12s;--delay:1.2s;--beat:1.6s;--dx:-20vw;--dy:-6vh;--o:.8}.loader-bird:nth-child(6){--x:6vw;--y:66vh;--size:clamp(1.7rem, 3vw, 2.5rem);--t:12.5s;--delay:4s;--beat:1.7s;--dx:-16vw;--dy:-5vh;--o:.6}@media (width<=760px){.loader-bird:nth-child(4){--y:19vh}.loader-bird:nth-child(6){--y:22vh}}@keyframes bird-glide{0%{opacity:0;translate:0}18%,72%{opacity:var(--o)}to{opacity:0;translate:var(--dx) var(--dy)}}@keyframes bird-cross{0%{translate:-12vw}50%{translate:50vw -5vh}to{translate:112vw 1vh}}@keyframes bird-beat{0%{background-position-x:0%}10%{background-position-x:50%}20%{background-position-x:100%}30%{background-position-x:50%}40%{background-position-x:0%}50%,to{background-position-x:50%}}.loader-line{letter-spacing:.18em;max-width:86vw;color:var(--ink-2);text-align:center;opacity:.8;margin:0;font-size:clamp(.85rem,1.6vw,1rem);transition:opacity .8s}.loader.is-open :is(.loader-line,.loader-birds){opacity:0}.loader-stage{z-index:1;position:relative}.loader.is-choosing .loader-birds{opacity:1}.loader.is-leaving .loader-mist{opacity:0}.loader-count{margin:0 max(var(--gutter), 2rem) max(5vh, 1.5rem) 0;font-family:var(--font-display);color:var(--ink);font-variant-numeric:tabular-nums;filter:url(#ink-bleed);place-self:end;align-items:flex-end;line-height:1;transition:opacity .6s;display:flex}.filter-defs{pointer-events:none;position:absolute}.count-wheel{text-align:center;width:.64em;height:1.2em;font-size:clamp(3.5rem,9vw,6.5rem);display:block;overflow:hidden;mask-image:linear-gradient(#0000,#000 22% 78%,#0000)}.count-strip{font-size:inherit;will-change:transform;transition:transform .6s var(--ease-ink);flex-direction:column;display:flex}.count-strip>span{font-size:inherit;height:1.2em;line-height:1.2em;display:block}.loader.is-open .loader-count{opacity:0}@property --open{syntax:"<number>";inherits:true;initial-value:0}.ink-scroll{--scroll-w:min(60rem, 86vw, 62vh * 1.5);--open:0;width:var(--scroll-w);height:calc(var(--scroll-w) / 1.5);position:relative}.scroll-splash{width:150%;max-width:none;translate:-50% -50%;scale:calc(.6 + .4 * var(--open));opacity:calc(var(--open) * .7);filter:grayscale()contrast(.9);position:absolute;top:50%;left:50%}.scroll-splash:not(.is-loaded){visibility:hidden}.scroll-paper{background:var(--scroll-paper) center / 100% 100% no-repeat, linear-gradient(#47525e 0 3%, #c9cfd2 3% 3.4%, transparent 3.4% 96.6%, #c9cfd2 96.6% 97%, #47525e 97%), #e5e7e7;filter:grayscale(.85);clip-path:inset(0 calc(50% - var(--open) * 50%));place-content:center;justify-items:center;gap:.7rem;display:grid;position:absolute;inset:0}.scroll-paper>*{--at:.72;opacity:clamp(0, calc((var(--open) - var(--at)) / .26), 1);translate:0 calc((1 - clamp(0, calc((var(--open) - var(--at)) / .26), 1)) * .5rem)}.scroll-paper>:first-child{--at:.5}.scroll-paper>:nth-child(2){--at:.61}.scroll-name{font-family:var(--font-display);color:var(--ink);text-align:center;font-size:clamp(1.5rem,4.2vw,3rem)}.scroll-title{letter-spacing:.32em;text-transform:uppercase;color:var(--ink-2);font-size:.8rem}.scroll-roller{aspect-ratio:121/1024;width:auto;max-width:none;height:112%;translate:calc(-100% + var(--open) * (50% - var(--scroll-w) / 2)) -50%;filter:grayscale(.9)brightness(.92)drop-shadow(0 .6rem .7rem #0c0f1059);background:radial-gradient(closest-side,#5a5856,#2b2826 70%,#1c1a19) top/52% 7% no-repeat,radial-gradient(closest-side,#5a5856,#2b2826 70%,#1c1a19) bottom/52% 7% no-repeat,linear-gradient(#8d8a86,#8d8a86) 50% 6.6%/70% 1.2% no-repeat,linear-gradient(#8d8a86,#8d8a86) 50% 93.4%/70% 1.2% no-repeat,linear-gradient(90deg,#232a33,#4f5c6e 18%,#8090a6 36%,#5d6a80 62%,#262e38) 50%/92% 86% no-repeat;position:absolute;top:50%;left:50%}.scroll-roller.is-loaded{background:0 0}.scroll-roller[data-side=right]{translate:calc(var(--open) * (var(--scroll-w) / 2 - 50%)) -50%}.loader-scroll{--open:calc(var(--load) * .16);transition:opacity .8s ease, scale 1.4s var(--ease-ink), --open .6s var(--ease-ink);animation:4s ease-in-out infinite alternate scroll-breathe}@keyframes scroll-breathe{to{scale:1.012}}.loader.is-open .loader-scroll{--open:1;transition:opacity .8s ease, scale 1.4s var(--ease-ink), --open 2.6s cubic-bezier(.45, .05, .2, 1) .4s;animation:none}.loader.is-leaving .loader-scroll{opacity:0;transition-duration:1.2s,1.6s,0s;scale:1.04}.poster-bird{display:none}.scene-on .poster-bird{z-index:2;width:var(--bird,5.5rem);aspect-ratio:1;background:var(--birds) 50% 0 / 300% 100% no-repeat;opacity:0;pointer-events:none;transition:opacity .9s;display:block;position:fixed;top:0;left:0}.scene-on:has(.panel-card.is-open) .poster-bird{opacity:1;transition-delay:1s}@media (width<=760px){.scene-on .page>.map-nav{padding:.75rem var(--gutter) calc(.75rem + env(safe-area-inset-bottom));background:linear-gradient(to top, var(--paper) 40%, transparent);inset:auto 0 0;transform:none}.scene-on .map-nav ol{flex-direction:row;justify-content:space-between;align-items:center}.scene-on .map-nav .nav-name{display:none}.scene-on .panel-card{top:calc(5.6rem + env(safe-area-inset-top));width:auto;height:calc(100svh - 10.8rem - env(safe-area-inset-top) - env(safe-area-inset-bottom));padding:1.4rem 1.3rem 1.2rem;left:.75rem;right:.75rem}.panel-card:before{opacity:.35}.panel-header h2{font-size:1.75rem}.lede{font-size:1.05rem}.scene-on .journey-start{top:auto;left:1rem;right:1rem;bottom:calc(5.6rem + env(safe-area-inset-bottom));width:auto;translate:none}.welcome-card{gap:.4rem;padding:1.5rem 1.5rem 1.4rem}.welcome-han{font-size:1.25rem}.welcome-greeting{font-size:1.35rem}.welcome-line{font-size:.88rem}.facts{grid-template-columns:1fr;gap:.15rem}.facts dd+dt{margin-top:.6rem}.topbar .brand small{display:none}.topbar,.topbar-actions{gap:.5rem}.brand{white-space:nowrap;gap:.5rem;font-size:1.05rem}.settings-open{white-space:nowrap;font-size:.78rem}.lang-switch a{padding:.1rem .35rem}}.scene-on .loader[hidden]{display:none}.tags+*{margin-top:1.5rem}.panel-header{align-items:center;gap:.2rem;margin-bottom:1.4rem}.panel-header .han-title{writing-mode:horizontal-tb;letter-spacing:.05em;white-space:nowrap;font-size:1.65rem}.panel-header h2{font-size:clamp(1.5rem,2.5vw,2.25rem)}@media (width>=761px){.panel-header h2,.map-nav .nav-name{white-space:nowrap}}@media (width<=760px){.panel-header{flex-wrap:wrap;gap:.35rem .7rem}.panel-header .han-title{font-size:1.25rem}.panel-header h2{font-size:1.6rem}.scene-on .panel-card{font-size:.9rem}.scene-on .panel-header{margin-bottom:.8rem}.scene-on .pager:not([hidden]){padding-bottom:.7rem;top:1rem;right:1.1rem}.pager-now{font-size:1.9rem}.pager-sep,.pager-total{font-size:.85rem}.pager-bar{height:.5rem}.scene-on .panel-header{gap:.2rem .6rem}.scene-on .panel-header .han-title{font-size:1.05rem}.scene-on .panel-header h2{font-size:1.4rem}.scene-on .panel-title{flex:1;min-width:0}.scene-on .panel-title p{margin-top:.15rem;font-size:.68rem}.scene-on .panel-card{padding-top:1.1rem}}.scene-on .loader{background:var(--paper)}.scene-on.loader-opening .loader{background:0 0}.scene-on:not(.scene-ready) :is(.page,.panel-card,.site-footer){visibility:hidden!important}:lang(vi) :is(.brand small,.panel-header p,.timeline .period){text-transform:none;letter-spacing:.04em}@media (width<=760px){.brand{min-width:0;font-size:.95rem}.brand>span:last-child{text-overflow:ellipsis;overflow:hidden}.settings-open{font-size:.7rem}}.project-dialog{border:1px solid var(--ink-3);width:min(52rem,100vw - 2rem);max-width:none;height:min(46rem,100dvh - 2rem);max-height:calc(100dvh - 2rem);color:var(--ink);margin:auto;padding:1.2rem 1.6rem 1.6rem;overflow:hidden}.project-dialog[open]{flex-direction:column;display:flex}.project-dialog::backdrop{backdrop-filter:blur(6px);background:#0c0f107a}.project-dialog:before{opacity:.2}.dialog-toolbar{flex:none;justify-content:flex-end;padding-bottom:.8rem;display:flex}.dialog-close{font-size:.85rem}.dialog-content{overscroll-behavior:contain;scrollbar-gutter:stable;min-height:0;padding:.25rem .6rem 1rem .25rem;line-height:1.75;overflow-y:auto}.project-dialog .entry-label{background:0 0}.project-dialog .project-article{margin:0}.ink-cursor{z-index:1000;pointer-events:none;opacity:0;transition:opacity .16s;position:fixed;inset:0}.ink-cursor.is-visible{opacity:1}.ink-cursor>span{width:0;height:0;position:absolute;top:0;left:0}.ink-cursor>span:before{content:"";border-radius:50%;position:absolute;translate:-50% -50%}.ink-cursor-dot:before{background:var(--jade-2);width:9px;height:9px;box-shadow:0 0 0 2px var(--paper), 0 0 6px 2px #0c0f1040;transition:width .18s var(--ease-ink), height .18s var(--ease-ink), background-color .18s}.ink-cursor-ring:before{border:2px solid var(--jade);width:40px;height:40px;transition:width .22s var(--ease-ink), height .22s var(--ease-ink), background-color .22s, border-color .22s, scale .12s;background:#1a9c830f;box-shadow:0 0 0 1px #e3e7e5b3,inset 0 0 0 1px #e3e7e580}.ink-cursor.is-action .ink-cursor-dot:before{background:var(--cinnabar);width:6px;height:6px}.ink-cursor.is-action .ink-cursor-ring:before{border-color:var(--jade-2);background:#1a9c8329;width:58px;height:58px}.ink-cursor.is-pressed .ink-cursor-ring:before{scale:.82}.custom-cursor,.custom-cursor :is(a,button,summary,[role=button]){cursor:none}.dialog-open .ink-cursor{visibility:hidden}.dialog-open .project-dialog,.dialog-open .project-dialog :is(a,button){cursor:auto}@media (width<=760px){.entry-label{gap:.15rem .6rem;padding-block:.5rem}.entry-label h3{font-size:1.2rem}.entry-meta{font-size:.72rem}.skill-groups{grid-template-columns:1fr;gap:1.25rem}.project-dialog{width:calc(100vw - 1rem);height:calc(100dvh - 1rem);max-height:none;padding:.7rem .8rem .8rem}.dialog-content{padding-right:.25rem}.panel-header{padding-bottom:1.15rem}.panel-header:after{width:min(8.5rem,50%)}}.scene-on .panel-flow :is(p,dd,.duties li,.project-prose li){line-height:1.6}@media (width<=760px){.scene-on .panel-flow :is(p,dd,dt,li,.entry-role,.project-summary){font-size:.94rem;line-height:1.55}.scene-on .panel-flow .lede{font-size:1rem}.scene-on :is(.panel-flow,.page-head) .entry-label h3{font-size:1.08rem}.scene-on .panel-flow .project-prose :is(h2,h3,h4),.scene-on .panel-flow .skill-group h3{font-size:.98rem}.scene-on .panel-flow .tags li{font-size:.66rem}.scene-on .panel-flow :is(.field-label,.entry-meta){font-size:.68rem}.scene-on .panel-flow .btn-ink{min-height:40px;font-size:.9rem}.scene-on .panel-flow .skill{font-size:.86rem}.scene-on .duties{gap:.4rem}}@media (height<=820px) and (width>=761px){.scene-on .panel-card{padding-top:1.7rem}.scene-on .panel-header{margin-bottom:1rem;padding-bottom:1.3rem}.scene-on .panel-header:after{width:min(10rem,55%)}.scene-on .panel-header .han-title{font-size:1.4rem}.scene-on .panel-header h2{font-size:1.9rem}.scene-on .panel-title p{margin-top:.25rem}}@media (height<=500px) and (width>=761px){.scene-on .panel-card{height:68vh;padding-block:.7rem;top:19vh}.scene-on .panel-header{margin-bottom:.5rem;padding-bottom:.9rem}.scene-on .panel-header:after{width:7rem}.scene-on .panel-header h2{font-size:1.3rem}.scene-on .panel-header p{display:none}}@media (prefers-reduced-motion:reduce){html:not(.scene-on){scroll-behavior:auto}.btn-ink,.project-open{transition:none}.btn-ink:is(:hover,:focus-visible){transform:none}}html.entry-pending,html.dialog-open{overflow:hidden}.entry-pending :is(.topbar,.page,.site-footer){visibility:hidden}.entry-pending .loader,.loader.is-dismissing{--load:0;z-index:50;background:var(--paper);place-items:center;display:grid;position:fixed;inset:0;overflow:hidden}.entry-pending .loader[hidden]{display:none}.loader.is-dismissing{opacity:0;pointer-events:none;transition:opacity .7s}.loader.is-quick{--write-at:.9s}.loader.is-quick.is-open .loader-scroll{transition:opacity .8s ease, scale 1.4s var(--ease-ink), --open 1.2s cubic-bezier(.45, .05, .2, 1)}.loader-stage{--stage-w:min(60rem, 86vw, 62vh * 1.5);grid-template-areas:"scroll""line"}.loader-stage>.ink-scroll{--scroll-w:var(--stage-w);grid-area:scroll}.loader-stage>.loader-line{grid-area:line}@keyframes ink-write{0%{opacity:0;filter:blur(8px);text-shadow:0 0 16px #0c0f10a6;mask-position:0 100%}55%{opacity:1;filter:blur(1.5px)}to{opacity:1;filter:blur();text-shadow:0 0 #0c0f1000;mask-position:0 0}}@keyframes ink-brush{0%{opacity:.4;mask-position:100% 0}to{opacity:1;mask-position:0 0}}@keyframes ink-soak{0%{opacity:0;filter:blur(9px);scale:1.08}60%{opacity:1;filter:blur(1.5px)}to{opacity:1;filter:blur();scale:1}}@keyframes seal-stamp{0%{opacity:0;rotate:-8deg;scale:1.5}55%{opacity:1;rotate:0deg;scale:.94}75%{scale:1.03}to{opacity:1;rotate:0deg;scale:1}}.loader-scroll .scroll-paper>*{--w:0;opacity:0;translate:0 calc(var(--stage-w) * -.11)}.loader-scroll .scroll-paper>:not(.seal){mask-image:linear-gradient(#000 40%,#0000 60%);mask-size:100% 250%;mask-repeat:no-repeat}.loader-scroll .scroll-paper>:nth-child(2){--w:1}.loader-scroll .scroll-paper>:nth-child(3){--w:2}.loader{--write-at:2.5s}.loader.is-open .loader-scroll .scroll-paper>*{animation:ink-write 1s cubic-bezier(.3, .6, .3, 1) calc(var(--write-at) + var(--w) * .45s) both}.loader.is-open .loader-scroll .scroll-paper>.seal{animation-name:seal-stamp;animation-duration:.7s}.entry{z-index:1;align-self:end;align-items:center;gap:calc(var(--stage-w) * .012);margin-bottom:calc(var(--stage-w) / 1.5 * .085);pointer-events:none;flex-direction:column;grid-area:scroll;display:flex;position:relative}.entry[hidden]{display:none}.loader.is-choosing .entry{pointer-events:auto}.entry-enter-roll,.entry-enter-stroke,.entry-icon,.entry-lang label,.entry-note{--i:0;opacity:0}.entry-icons .entry-icon:nth-child(2){--i:1}.entry-enter-roll{--i:2;mask-image:linear-gradient(#000 40%,#0000 60%);mask-size:100% 250%;mask-repeat:no-repeat}.entry-enter-stroke{--i:3.4;mask-image:linear-gradient(90deg,#000 45%,#0000 55%);mask-size:250% 100%;mask-repeat:no-repeat}.entry-lang label:first-of-type{--i:4}.entry-lang label:nth-of-type(2){--i:5}.entry-note{--i:6}.loader.is-choosing :is(.entry-enter-roll,.entry-enter-stroke,.entry-icon,.entry-lang label,.entry-note){animation:ink-soak .9s cubic-bezier(.3, .6, .3, 1) calc(var(--i) * .3s) both}.loader.is-choosing .entry-enter-roll{animation-name:ink-write;animation-duration:1s}.loader.is-choosing .entry-enter-stroke{animation-name:ink-brush;animation-duration:.7s;animation-timing-function:cubic-bezier(.5,0,.3,1)}.loader.is-choosing .entry-lang label{animation-name:seal-stamp;animation-duration:.6s}.loader.is-entering .entry{opacity:0;pointer-events:none;transition:opacity .45s}.entry *{font-size:inherit}.entry-enter{font:inherit;font-family:var(--font-display);font-size:clamp(1.6rem, calc(var(--stage-w) * .05), 2.3rem);letter-spacing:.08em;color:var(--ink);cursor:pointer;background:0 0;border:0;justify-items:center;margin-bottom:.5rem;padding:.15rem .6rem 0;display:grid;position:relative}.entry-enter-stroke{width:125%;height:.5em;margin-top:-.05em;display:block;position:relative;overflow:hidden}.entry-enter-stroke:before,.entry-enter-stroke:after{content:"";transition:translate .65s var(--ease-ink), opacity .65s var(--ease-ink);background:url(/assets/ui/brush-stroke.svg) 50%/100% 100% no-repeat;position:absolute;inset:0}.entry-enter-stroke:after{opacity:0;filter:drop-shadow(0 0 6px #5fe3c073);translate:-105%}.entry-enter:is(:hover,:focus-visible) .entry-enter-stroke:before{opacity:0;translate:105%}.entry-enter:is(:hover,:focus-visible) .entry-enter-stroke:after{opacity:1;translate:0}.entry-enter-roll{display:grid;overflow:hidden}.entry-enter-text{transition:translate .55s var(--ease-ink), opacity .55s var(--ease-ink);grid-area:1/1;padding-block:.12em;line-height:1.2}.entry-enter-text+.entry-enter-text{opacity:0;color:var(--jade-2);text-shadow:0 0 16px #5fe3c073;translate:0 100%}.entry-enter:is(:hover,:focus-visible) .entry-enter-text{opacity:0;translate:0 -100%}.entry-enter:is(:hover,:focus-visible) .entry-enter-text+.entry-enter-text{opacity:1;translate:0}.entry-enter:active .entry-enter-roll{scale:.97}.entry-enter:focus-visible{outline:2px solid var(--jade-2);outline-offset:6px}.ink-sprite{--sprite-size:2.2em;height:var(--sprite-size);aspect-ratio:var(--sprite-aspect);background:var(--sprite) 0 0 / calc(var(--sprite-frames) * 100%) 100% no-repeat;pointer-events:none;flex:none;display:inline-block}.ink-sprite[data-sprite=effect]{--sprite:url(/assets/common/effect-spritesheet-v2.webp);--sprite-frames:12;--sprite-aspect:.823;--sprite-end:calc(100% * 12 / 11);--sprite-live:calc(100% * 6 / 11)}.ink-sprite[data-sprite=sound]{--sprite:url(/assets/common/sound-spritesheet-v2.webp);--sprite-frames:13;--sprite-aspect:.95;--sprite-end:100%;--sprite-live:calc(100% * 4 / 12)}@keyframes ink-sprite{to{background-position-x:var(--sprite-end)}}.entry-icon[aria-pressed=true] .ink-sprite,.settings-option:has(:checked) .ink-sprite[data-live],.settings-sound:has(:checked) .ink-sprite{animation:1.2s steps(12,end) infinite ink-sprite}.ink-sprite[data-sprite=sound]{animation-duration:1.05s!important}.entry-icon{--seal-line:var(--ink-3);width:var(--seal-size);height:var(--seal-size);color:inherit;cursor:pointer;background:0 0;border:0;border-radius:3px;padding:0;display:block;position:relative}.entry-options{--seal-size:2.7em}.entry-icon:before{content:"";box-shadow:inset 0 0 0 1.5px var(--seal-line), inset 0 0 0 3.5px var(--paper), inset 0 0 0 4.5px var(--seal-line);filter:url(#stamp);opacity:.75;transition:opacity .25s, scale .3s var(--ease-ink), rotate .3s var(--ease-ink), background-color .25s;background:#efe7de99;border-radius:3px;position:absolute;inset:0}.entry-icon .ink-sprite{--sprite-size:2.9em;opacity:.6;transition:opacity .25s, scale .3s var(--ease-ink), rotate .3s var(--ease-ink);position:absolute;top:50%;left:50%;translate:-50% -50%}.entry-icon .ink-sprite[data-sprite=effect]{--sprite-size:3.4em}.entry-icon:after{content:"";border:1.5px solid var(--jade-2);opacity:0;pointer-events:none;border-radius:3px;animation:2.6s ease-out infinite entry-ripple;position:absolute;inset:0}@keyframes entry-ripple{0%{opacity:.45;scale:1}70%,to{opacity:0;scale:1.35}}.entry-icon[aria-pressed=true]{--seal-line:var(--jade-2)}.entry-icon[aria-pressed=true]:before{opacity:1;background-color:#1a9c831a}.entry-icon[aria-pressed=true] .ink-sprite{opacity:1}.entry-icon[aria-pressed=true]:after{animation:none}.entry-icon:is(:hover,:focus-visible):before,.entry-icon:is(:hover,:focus-visible) .ink-sprite{opacity:1;rotate:-3deg;scale:1.08}.entry-icon:active:before,.entry-icon:active .ink-sprite{scale:.96}.entry-icon:focus-visible{outline:2px solid var(--jade-2);outline-offset:4px}.entry-icon:disabled{cursor:default}.entry-icon:disabled:after{animation:none}.entry-icon:disabled:before{opacity:.4;rotate:0deg;scale:1}.entry-icon:disabled .ink-sprite{opacity:.3;rotate:0deg;scale:1}.entry-tip{z-index:2;font-family:var(--font-display);letter-spacing:.04em;white-space:nowrap;color:var(--paper);background:var(--ink);border:1.5px solid var(--paper);outline:1px solid var(--ink);opacity:0;pointer-events:none;transition:opacity .18s ease, translate .25s var(--ease-ink);padding:.35em .7em;font-size:.66em;line-height:1.2;position:absolute;bottom:calc(100% + .6em);left:50%;translate:-50% .35em}.entry-tip:after{content:"";border:.4em solid #0000;border-top-color:var(--ink);position:absolute;top:calc(100% + 1px);left:50%;translate:-50%}:is(.entry-icon,.entry-lang label):is(:hover,:focus-visible,:has(:focus-visible)) .entry-tip{opacity:1;transition-delay:.12s;translate:-50%}.entry-icon[aria-pressed=true] .entry-tip [data-off],.entry-icon:not([aria-pressed=true]) .entry-tip [data-on]{display:none}.entry-options{font-size:clamp(.95rem, calc(var(--stage-w) * .028), 1.2rem);flex-wrap:wrap;justify-content:center;gap:.2rem 1rem;display:flex}.entry-toggle{border:0;align-items:center;min-width:0;margin:0;padding:0;display:flex}.entry-options{align-items:center}.entry-toggle+.entry-toggle{border-left:1px solid #0000;padding-left:1rem;transition:border-color .35s}.loader.is-choosing .entry-toggle+.entry-toggle{border-left-color:#4d585659;transition:border-color .8s 1.1s}.entry-toggle label{color:var(--ink-3);white-space:nowrap;cursor:pointer;padding:.3rem .5rem;position:relative}.entry-toggle input{opacity:0;pointer-events:none;width:1px;height:1px;margin:0;position:absolute}.entry-toggle label:has(:focus-visible){outline:2px solid var(--jade-2);outline-offset:1px;border-radius:2px}.entry-toggle label:has(:disabled){opacity:.45;cursor:default}.entry-icons{gap:.6rem}.entry-lang{gap:.45rem}.entry-lang label{border-radius:3px;padding:0}.entry-lang .entry-seal{width:calc(var(--seal-size) / .85);height:calc(var(--seal-size) / .85);font-family:var(--font-display);letter-spacing:.06em;color:var(--ink-3);box-shadow:inset 0 0 0 1.5px var(--ink-3), inset 0 0 0 3.5px var(--paper), inset 0 0 0 4.5px var(--ink-3);filter:url(#stamp);opacity:.75;transition:color .2s, background-color .2s, opacity .2s, scale .3s var(--ease-ink), rotate .3s var(--ease-ink);background:#efe7de99;border-radius:3px;place-items:center;font-size:.85em;line-height:1;display:grid}.entry-lang label:hover .entry-seal{color:var(--ink);opacity:1;rotate:-3deg;scale:1.08}.entry-lang label:has(:checked) .entry-seal{color:var(--paper);background:var(--jade-2);box-shadow:inset 0 0 0 2px var(--jade-2), inset 0 0 0 3.5px var(--paper);opacity:1}.entry-note{max-width:calc(var(--stage-w) * .7);color:var(--ink-3);text-align:center;margin:0;font-size:.75rem;line-height:1.4}.custom-cursor .entry :is(label,button:not(:disabled)){cursor:none}@media (width<=640px),(height<=520px){.entry{grid-area:line;align-self:start;gap:.6rem;margin-bottom:0}.loader-scroll .scroll-paper>*{translate:0}.entry-enter{font-size:1.7rem}}@media (width<=640px){.entry-options{flex-wrap:nowrap;gap:0 .5rem;font-size:.92rem}.entry-toggle+.entry-toggle{padding-left:.5rem}.entry-toggle label{padding-inline:.35rem}.entry-options{--seal-size:2.4em}.entry-icon .ink-sprite{--sprite-size:2.6em}.entry-icon .ink-sprite[data-sprite=effect]{--sprite-size:3em}}@media (height<=520px) and (width>=641px){.loader.is-choosing .loader-stage{--stage-w:min(60rem, 42vw, 66vh * 1.5);grid-template-areas:"scroll entry";align-items:center;column-gap:clamp(1.5rem,4vw,3rem)}.loader.is-choosing .loader-line{display:none}.loader.is-choosing .entry{grid-area:entry;align-self:center;max-width:38vw}.entry-options{flex-direction:column;gap:.1rem}.entry-toggle+.entry-toggle{border-left:0;padding-left:0}}@media (prefers-reduced-motion:reduce){.loader-scroll,.loader.is-open .loader-scroll,.entry-toggle+.entry-toggle,.loader.is-entering .entry,.loader.is-choosing .entry-toggle+.entry-toggle,.loader.is-dismissing,.loader.is-quick.is-open .loader-scroll{transition:none}.loader.is-open .loader-scroll .scroll-paper>*,.loader.is-choosing :is(.entry-enter-roll,.entry-enter-stroke,.entry-icon,.entry-lang label,.entry-note){opacity:1;mask-image:none;animation:none!important}.loader-scroll,.loader-mist>span,.entry-icon:after,.ink-sprite{animation:none!important}.loader-birds{display:none}.entry-icon[aria-pressed=true] .ink-sprite,.settings-option:has(:checked) .ink-sprite[data-live],.settings-sound:has(:checked) .ink-sprite{background-position-x:var(--sprite-live)}.entry-enter-text,.entry-enter-stroke:before,.entry-enter-stroke:after{transition:none}.entry-icon:is(:hover,:focus-visible){transform:none}}.project-dialog,.settings-poster{opacity:0;transition:opacity .28s ease, translate .4s var(--ease-ink), scale .4s var(--ease-ink), overlay .4s allow-discrete, display .4s allow-discrete;translate:0 14px;scale:.985}.project-dialog[open],.settings-poster[open]{opacity:1;translate:0;scale:1}@starting-style{.project-dialog[open],.settings-poster[open]{opacity:0;translate:0 14px;scale:.985}}.project-dialog::backdrop,.settings-poster::backdrop{transition:background-color .3s ease, backdrop-filter .3s ease, overlay .4s allow-discrete, display .4s allow-discrete}.project-dialog:not([open])::backdrop,.settings-poster:not([open])::backdrop{backdrop-filter:blur();background-color:#0000}@starting-style{.project-dialog[open]::backdrop,.settings-poster[open]::backdrop{backdrop-filter:blur();background-color:#0000}}@media (prefers-reduced-motion:reduce){.project-dialog,.settings-poster,.project-dialog::backdrop,.settings-poster::backdrop{transition:none}}.settings-poster{width:min(39rem,100vw - 2rem);max-width:none;max-height:calc(100dvh - 2rem);color:var(--ink);border:1px solid var(--ink-3);background:var(--poster-paper) center / cover, var(--poster);background-blend-mode:luminosity;overscroll-behavior:contain;border-radius:3px;margin:auto;padding:clamp(1.3rem,4vw,2.4rem);overflow-y:auto;box-shadow:0 24px 80px #0c0f1033}.settings-poster::backdrop{backdrop-filter:blur(6px);background:#0c0f1073}.settings-form{line-height:1.5;position:relative}.settings-form p{margin-block:0}.settings-heading{align-items:center;gap:.9rem;margin-bottom:1.2rem;display:flex}.settings-heading h2{margin:0;font-size:clamp(1.5rem,4vw,2rem);line-height:1.2}.settings-close{margin-left:auto;font-size:.8rem}.settings-form fieldset{border:0;min-width:0;margin:0 0 1.4rem;padding:0}.settings-form legend{margin-bottom:.65rem;font-size:1rem}.settings-versions{grid-template-columns:1fr 1fr;gap:.75rem;display:grid}.settings-option{border:1px solid var(--ink-3);cursor:pointer;align-items:flex-start;gap:.65rem;padding:.9rem;display:flex}.settings-option:has(:checked){border-color:var(--jade-2);box-shadow:inset 0 -2px var(--jade-2);background:#5d87751f}.settings-option:has(:disabled){opacity:.55;cursor:default}.settings-form input{accent-color:var(--jade-2);flex-shrink:0;width:1.1rem;height:1.1rem}.settings-option input{margin-top:.25rem}.settings-option .ink-sprite,.settings-sound .ink-sprite{--sprite-size:4.4rem;margin-block:-.8rem}.settings-option:not(:has(:checked)) .ink-sprite,.settings-sound:not(:has(:checked)) .ink-sprite{opacity:.55}.settings-option strong{font-size:1.1rem;display:block}.settings-form small{color:var(--ink-3);margin-top:.25rem;font-size:.82rem;line-height:1.5;display:block}.settings-sound{cursor:pointer;align-items:center;gap:.8rem;padding-block:.7rem;display:flex}.settings-sound input{margin-left:auto}.settings-sound strong{font-size:1rem}.settings-sound input{width:1.5rem;height:1.5rem}.settings-form .settings-note{color:var(--ink-3);margin-top:.7rem;font-size:.8rem;line-height:1.5}.settings-footer{justify-content:flex-end;margin-top:1.4rem;display:flex}.settings-footer .btn-ink{min-width:9rem;min-height:44px}.settings-poster :is(button,input):focus-visible{outline:2px solid var(--jade-2);outline-offset:4px}.dialog-open .settings-poster,.dialog-open .settings-poster :is(button,input,label){cursor:auto}.settings-poster [hidden]{display:none!important}@media (width<=480px){.settings-poster{width:calc(100vw - 1rem);max-height:calc(100dvh - 1rem);padding:1rem}.settings-versions{grid-template-columns:1fr;gap:.5rem}.settings-option{gap:.4rem;padding:.7rem}.settings-option strong{font-size:.95rem}.settings-form small{font-size:.75rem}.settings-form fieldset{margin-bottom:.85rem}.settings-heading{gap:.6rem}.settings-heading h2{font-size:1.35rem}.settings-footer{margin-top:.85rem}}@media (height<=700px){.settings-footer{background:var(--poster-paper) center / cover, var(--poster);padding-block:.5rem;position:sticky;bottom:-1rem}}
