:root{--paper:#f4f0e7;--paper-raised:#fbf9f3;--paper-sunk:#ebe5d7;--ink:#191713;--ink-soft:#48423a;--ink-faint:#857c6c;--ink-ghost:#b3aa99;--rule:color-mix(in srgb, var(--ink) 13%, transparent);--rule-strong:color-mix(in srgb, var(--ink) 28%, transparent);--accent:#b03a2b;--accent-soft:color-mix(in srgb, var(--accent) 11%, transparent);--accent-2:#2f5d50;--shadow-soft:0 1px 2px color-mix(in srgb, var(--ink) 6%, transparent), 0 8px 24px -12px color-mix(in srgb, var(--ink) 18%, transparent);--shadow-lift:0 2px 4px color-mix(in srgb, var(--ink) 7%, transparent), 0 24px 48px -20px color-mix(in srgb, var(--ink) 26%, transparent);--font-display:"Songti SC", "STSong", "Source Han Serif SC", "Noto Serif CJK SC", "SimSun", serif;--font-sans:"PingFang SC", "HarmonyOS Sans SC", "Hiragino Sans GB", "Microsoft YaHei", system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:ui-monospace, "SFMono-Regular", "Cascadia Mono", "JetBrains Mono", Consolas, monospace;--t-hero:clamp(3.2rem, 11.5vw, 10.5rem);--t-display:clamp(2.4rem, 5.2vw, 4.2rem);--t-h1:clamp(1.9rem, 3.4vw, 2.9rem);--t-h2:clamp(1.35rem, 2vw, 1.75rem);--t-h3:1.0625rem;--t-body:clamp(.9375rem, .55vw + .8rem, 1.0625rem);--t-small:.8125rem;--t-micro:.6875rem;--lh-tight:1.06;--lh-snug:1.24;--lh-body:1.78;--ls-hero:-.045em;--ls-tight:-.025em;--ls-wide:.14em;--sp-1:.25rem;--sp-2:.5rem;--sp-3:.75rem;--sp-4:1rem;--sp-5:1.5rem;--sp-6:2rem;--sp-7:3rem;--sp-8:4rem;--sp-9:6rem;--sp-10:8rem;--sp-11:12rem;--r-xs:2px;--r-sm:4px;--r-md:10px;--r-pill:999px;--rail-w:15.5rem;--page-gutter:clamp(1.25rem, 4vw, 4.5rem);--maxw:78rem;--ease-out-expo:cubic-bezier(.16, 1, .3, 1);--ease-in-out-quint:cubic-bezier(.83, 0, .17, 1);--ease-overshoot:cubic-bezier(.34, 1.4, .64, 1);--ease-soft:cubic-bezier(.4, 0, .2, 1);--dur-fast:.18s;--dur-base:.32s;--dur-slow:.62s;--dur-reveal:.9s;--z-grain:60;--z-cursor:90;--z-curtain:95;--z-preloader:100;--grain-url:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.82' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E")}[data-theme=dark]{--paper:#14120f;--paper-raised:#1c1915;--paper-sunk:#0d0b09;--ink:#ece6d9;--ink-soft:#b6ad9b;--ink-faint:#7d7463;--ink-ghost:#4f483c;--accent:#e0674f;--accent-2:#6fae95;--shadow-soft:0 1px 2px #0006, 0 8px 24px -12px #000000b3;--shadow-lift:0 2px 4px #00000073, 0 24px 48px -20px #000000d9}
*,:before,:after{box-sizing:border-box}*{margin:0;padding:0}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}html.lenis,html.lenis body{height:auto}.lenis.lenis-smooth{scroll-behavior:auto!important}.lenis.lenis-stopped{overflow:hidden}body{background:var(--paper);color:var(--ink);font-family:var(--font-sans);font-size:var(--t-body);line-height:var(--lh-body);font-feature-settings:"kern" 1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transition:background-color var(--dur-slow) var(--ease-soft), color var(--dur-slow) var(--ease-soft);overflow-x:hidden}img,svg,video,canvas{max-width:100%;display:block}button,input,select,textarea{font:inherit;color:inherit}a{color:inherit;text-decoration:none}::selection{background:var(--accent);color:var(--paper)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--ink-ghost);border:3px solid var(--paper);border-radius:var(--r-pill)}::-webkit-scrollbar-thumb:hover{background:var(--ink-faint)}.grain{z-index:var(--z-grain);pointer-events:none;background-image:var(--grain-url);opacity:.22;mix-blend-mode:multiply;animation:8s steps(6,end) infinite grain-shift;position:fixed;inset:-50%}[data-theme=dark] .grain{mix-blend-mode:screen;opacity:.14}@keyframes grain-shift{0%{transform:translate(0)}20%{transform:translate(-2%,1%)}40%{transform:translate(1%,-2%)}60%{transform:translate(-1%,2%)}80%{transform:translate(2%,1%)}to{transform:translate(0)}}.ambient{z-index:0;pointer-events:none;background:radial-gradient(60rem 40rem at 22% -8%, color-mix(in srgb, var(--accent) 7%, transparent), transparent 62%), radial-gradient(52rem 38rem at 92% 108%, color-mix(in srgb, var(--accent-2) 7%, transparent), transparent 60%);position:fixed;inset:0}[data-theme=dark] .ambient{opacity:1.4}.cursor-layer{z-index:var(--z-cursor);pointer-events:none;opacity:0;transition:opacity .24s var(--ease-soft);display:none;position:fixed;inset:0}.cursor-layer[data-visible=true]{opacity:1}@media (hover:hover) and (pointer:fine){.cursor-layer{display:block}html.has-custom-cursor,html.has-custom-cursor a,html.has-custom-cursor button,html.has-custom-cursor [role=button]{cursor:none}}.cursor-dot,.cursor-ring{pointer-events:none;will-change:transform;border-radius:50%;position:fixed;top:0;left:0}.cursor-dot{background:var(--ink);width:5px;height:5px;margin:-2.5px 0 0 -2.5px}.cursor-ring{border:1px solid var(--rule-strong);width:34px;height:34px;transition:width .26s var(--ease-out-expo), height .26s var(--ease-out-expo), margin .26s var(--ease-out-expo), background-color .26s var(--ease-out-expo), border-color .26s var(--ease-out-expo), opacity .26s var(--ease-out-expo);margin:-17px 0 0 -17px}.cursor-ring[data-state=link]{background:color-mix(in srgb, var(--accent) 16%, transparent);border-color:#0000;width:62px;height:62px;margin:-31px 0 0 -31px}.cursor-ring[data-state=text]{background:var(--accent);border-color:#0000;border-radius:1px;width:3px;height:30px;margin:-15px 0 0 -1.5px}.preloader{z-index:var(--z-preloader);background:var(--paper);transition:opacity .7s var(--ease-soft), visibility .7s var(--ease-soft);place-items:center;display:grid;position:fixed;inset:0}.preloader[data-done=true]{opacity:0;visibility:hidden;pointer-events:none}.preloader-inner{align-items:center;gap:var(--sp-4);flex-direction:column;display:flex}.preloader-mark{font-family:var(--font-display);letter-spacing:var(--ls-tight);font-size:clamp(2rem,6vw,3.2rem);line-height:1;display:flex;overflow:hidden}.preloader-mark span{animation:mark-rise .78s var(--ease-out-expo) forwards;display:inline-block;transform:translateY(110%)}.preloader-mark span:first-child{animation-delay:60ms}.preloader-mark span:nth-child(2){animation-delay:.13s}.preloader-mark span:nth-child(3){animation-delay:.2s}.preloader-mark span:nth-child(4){animation-delay:.27s}@keyframes mark-rise{to{transform:translateY(0)}}.preloader-bar{background:var(--rule);width:min(38vw,15rem);height:1px;position:relative;overflow:hidden}.preloader-bar:after{content:"";background:var(--accent);transform-origin:0;animation:bar-fill 1s var(--ease-in-out-quint) .22s both;position:absolute;inset:0}@keyframes bar-fill{0%{transform:scaleX(0)}to{transform:scaleX(1)}}.preloader-count{font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:var(--ls-wide);color:var(--ink-faint);font-variant-numeric:tabular-nums}.curtain{z-index:var(--z-curtain);background:var(--ink);pointer-events:none;will-change:transform;position:fixed;inset:0;transform:translateY(100%)}.btn{--btn-fg:var(--paper);--btn-bg:var(--ink);align-items:center;gap:var(--sp-2);font-family:var(--font-sans);font-size:var(--t-small);letter-spacing:.02em;color:var(--btn-fg);background:var(--btn-bg);border:1px solid var(--btn-bg);border-radius:var(--r-pill);cursor:pointer;isolation:isolate;transition:color var(--dur-base) var(--ease-soft), border-color var(--dur-base) var(--ease-soft);padding:.7rem 1.5rem;display:inline-flex;position:relative;overflow:hidden}.btn:before{content:"";z-index:-1;background:var(--accent);transition:transform var(--dur-slow) var(--ease-out-expo);position:absolute;inset:0;transform:translateY(101%)}.btn:hover:before{transform:translateY(0)}.btn:hover{color:var(--paper);border-color:var(--accent)}.btn:active{transform:scale(.985)}.btn--ghost{--btn-fg:var(--ink);--btn-bg:transparent;border-color:var(--rule-strong)}.btn--ghost:before{background:var(--ink)}.btn--ghost:hover{color:var(--paper);border-color:var(--ink)}.btn:disabled{opacity:.45;cursor:not-allowed}.field{gap:var(--sp-2);flex-direction:column;display:flex}.field label{font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:var(--ls-wide);text-transform:uppercase;color:var(--ink-faint)}.field input{border:0;border-bottom:1px solid var(--rule-strong);width:100%;transition:border-color var(--dur-base) var(--ease-soft);background:0 0;outline:none;padding:.75rem 0;font-size:1rem}.field input:focus{border-bottom-color:var(--accent)}.field input::placeholder{color:var(--ink-ghost)}.wrap{width:100%;max-width:var(--maxw);padding-inline:var(--page-gutter);margin-inline:auto}.mono{font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:var(--ls-wide);text-transform:uppercase;color:var(--ink-faint)}.rule{background:var(--rule);border:0;width:100%;height:1px}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.reveal-line{transform-origin:0;transform:scaleX(0)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:var(--r-xs)}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.grain{animation:none}}
.site{z-index:1;grid-template-columns:var(--rail-w) minmax(0, 1fr);min-height:100dvh;display:grid;position:relative}.rail{height:100dvh;padding:var(--sp-6) var(--sp-5) var(--sp-6) var(--page-gutter);border-right:1px solid var(--rule);flex-direction:column;justify-content:space-between;display:flex;position:sticky;top:0}.rail-top{gap:var(--sp-7);flex-direction:column;display:flex}.brand{align-items:baseline;gap:var(--sp-2);font-family:var(--font-display);letter-spacing:var(--ls-tight);font-size:1.15rem;line-height:1.1;display:flex}.brand-mark{border-radius:var(--r-sm);background:var(--ink);width:1.75rem;height:1.75rem;color:var(--paper);font-family:var(--font-display);flex:none;place-items:center;font-size:.95rem;display:inline-grid;transform:translateY(2px)}.rail-nav{flex-direction:column;gap:.15rem;display:flex}.rail-link{align-items:baseline;gap:var(--sp-3);color:var(--ink-faint);font-size:var(--t-small);transition:color var(--dur-base) var(--ease-soft);padding:.42rem 0;display:flex;position:relative}.rail-link .idx{font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:.08em;opacity:.7}.rail-link .zh{position:relative}.rail-link .zh:after{content:"";background:var(--ink);transform-origin:100%;width:100%;height:1px;transition:transform var(--dur-slow) var(--ease-out-expo);position:absolute;bottom:-2px;left:0;transform:scaleX(0)}.rail-link:hover,.rail-link[data-active=true]{color:var(--ink)}.rail-link:hover .zh:after,.rail-link[data-active=true] .zh:after{transform-origin:0;transform:scaleX(1)}.rail-link[data-active=true] .idx{color:var(--accent);opacity:1}.rail-bottom{gap:var(--sp-4);flex-direction:column;display:flex}.rail-status{font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);align-items:center;gap:.5rem;display:flex}.dot-live{background:var(--accent-2);width:6px;height:6px;box-shadow:0 0 0 0 color-mix(in srgb, var(--accent-2) 60%, transparent);animation:pulse-ring 2.4s var(--ease-soft) infinite;border-radius:50%}@keyframes pulse-ring{0%{box-shadow:0 0 0 0 color-mix(in srgb, var(--accent-2) 55%, transparent)}70%{box-shadow:0 0 0 7px #0000}to{box-shadow:0 0 #0000}}.rail-actions{align-items:center;gap:var(--sp-2);display:flex}.icon-btn{border:1px solid var(--rule);border-radius:var(--r-pill);width:2.1rem;height:2.1rem;color:var(--ink-soft);cursor:pointer;transition:color var(--dur-base) var(--ease-soft), border-color var(--dur-base) var(--ease-soft), transform var(--dur-base) var(--ease-overshoot);background:0 0;place-items:center;display:inline-grid}.icon-btn:hover{color:var(--accent);border-color:var(--accent);transform:translateY(-1px)}.main{min-width:0;padding-bottom:var(--sp-10)}.hero{min-height:100dvh;padding:clamp(2rem, 6vh, 4rem) var(--page-gutter) clamp(2rem, 5vh, 3.5rem);flex-direction:column;justify-content:flex-end;display:flex;position:relative;overflow:hidden}.hero-eyebrow{align-items:center;gap:var(--sp-3);padding-top:var(--sp-4);margin-bottom:auto;display:flex}.hero-eyebrow .line{background:var(--rule);flex:1;height:1px}.hero-name{font-family:var(--font-display);font-size:var(--t-hero);line-height:var(--lh-tight);letter-spacing:var(--ls-hero);margin-bottom:var(--sp-5);font-weight:400}.hero-name .ch{vertical-align:bottom;display:inline-block;overflow:hidden}.hero-name .ch>span{will-change:transform;display:inline-block}.hero-sub{gap:var(--sp-6);border-top:1px solid var(--rule);padding-top:var(--sp-5);grid-template-columns:minmax(0,1fr) minmax(0,22rem);align-items:end;display:grid}.hero-role{color:var(--ink-soft);max-width:34ch;font-size:clamp(1rem,1.5vw,1.3rem);line-height:1.5}.hero-role strong{color:var(--ink);font-weight:500}.hero-role+.hero-role{color:var(--ink-faint);margin-top:.65rem;font-size:.9375rem;line-height:1.8}.hero-meta{font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:.09em;text-transform:uppercase;color:var(--ink-faint);flex-direction:column;gap:.35rem;display:flex}.hero-meta div{justify-content:space-between;gap:var(--sp-4);border-bottom:1px dashed var(--rule);padding-bottom:.3rem;display:flex}.hero-meta b{color:var(--ink-soft);font-weight:400}.scroll-cue{right:calc(var(--page-gutter) * .32);writing-mode:vertical-rl;font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:.22em;text-transform:uppercase;color:var(--ink-ghost);align-items:center;gap:.5rem;display:flex;position:absolute;bottom:clamp(2rem,5vh,3.5rem)}.scroll-cue:after{content:"";background:linear-gradient(to bottom, var(--ink-ghost), transparent);width:1px;height:4rem;animation:cue-run 2.6s var(--ease-in-out-quint) infinite}@keyframes cue-run{0%{transform-origin:top;transform:scaleY(0)}45%{transform-origin:top;transform:scaleY(1)}55%{transform-origin:bottom;transform:scaleY(1)}to{transform-origin:bottom;transform:scaleY(0)}}.section{padding:clamp(3.5rem, 9vh, 7rem) var(--page-gutter) 0;scroll-margin-top:2rem}.section-head{align-items:baseline;gap:var(--sp-4);margin-bottom:var(--sp-6);display:flex}.section-num{font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:.12em;color:var(--accent);padding-top:.35rem}.section-title{font-family:var(--font-display);font-size:var(--t-display);letter-spacing:var(--ls-tight);font-weight:400;line-height:1.1}.section-head .rule{transform-origin:0;flex:1;margin-bottom:.55rem}.section-lead{max-width:46ch;color:var(--ink-soft);margin-bottom:var(--sp-7)}.about-grid{gap:var(--sp-6);grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));display:grid}.about-block h3{font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:var(--ls-wide);text-transform:uppercase;color:var(--ink-faint);margin-bottom:var(--sp-3);padding-bottom:var(--sp-2);border-bottom:1px solid var(--rule)}.about-block p{color:var(--ink-soft);font-size:.95rem;line-height:1.85}.timeline{flex-direction:column;display:flex}.exp{gap:var(--sp-5);padding:var(--sp-5) 0;border-top:1px solid var(--rule);grid-template-columns:8.5rem minmax(0,1fr);display:grid;position:relative}.exp:last-child{border-bottom:1px solid var(--rule)}.exp-period{font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:.08em;color:var(--ink-faint);font-variant-numeric:tabular-nums;padding-top:.35rem}.exp-body{gap:var(--sp-2);flex-direction:column;display:flex}.exp-role{flex-wrap:wrap;align-items:baseline;gap:.6rem;display:flex}.exp-role h3{font-size:var(--t-h2);letter-spacing:var(--ls-tight);font-weight:500;line-height:1.3}.exp-role .at{font-family:var(--font-display);color:var(--ink-faint);font-size:1rem}.exp-points{color:var(--ink-soft);flex-direction:column;gap:.4rem;font-size:.9375rem;list-style:none;display:flex}.exp-points li{padding-left:1.1rem;line-height:1.75;position:relative}.exp-points li:before{content:"";background:var(--ink-ghost);width:5px;height:1px;position:absolute;top:.72em;left:0}.projects{border-top:1px solid var(--rule);flex-direction:column;display:flex}.project{align-items:center;gap:var(--sp-5);padding:var(--sp-5) var(--sp-3) var(--sp-5) 0;border-bottom:1px solid var(--rule);isolation:isolate;transition:padding var(--dur-slow) var(--ease-out-expo);grid-template-columns:3.5rem minmax(0,1fr) auto;display:grid;position:relative}.project:before{content:"";z-index:-1;background:var(--paper-raised);transform-origin:bottom;transition:transform var(--dur-slow) var(--ease-out-expo);position:absolute;inset:0;transform:scaleY(0)}.project:hover{padding-left:var(--sp-4)}.project-link{z-index:2;border-radius:var(--r-xs);position:absolute;inset:0}.project:hover:before{transform:scaleY(1)}.project-idx{font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:.1em;color:var(--ink-ghost);transition:color var(--dur-base) var(--ease-soft)}.project:hover .project-idx{color:var(--accent)}.project-main h3{font-family:var(--font-display);letter-spacing:var(--ls-tight);font-size:clamp(1.25rem,2.2vw,1.75rem);font-weight:400;line-height:1.35}.project-main p{color:var(--ink-soft);max-width:52ch;margin-top:.3rem;font-size:.9rem}.project-tags{margin-top:var(--sp-3);flex-wrap:wrap;gap:.35rem;display:flex}.tag{font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:.06em;border:1px solid var(--rule);border-radius:var(--r-pill);color:var(--ink-faint);white-space:nowrap;transition:border-color var(--dur-base) var(--ease-soft), color var(--dur-base) var(--ease-soft);padding:.18rem .55rem}.project:hover .tag{border-color:var(--rule-strong);color:var(--ink-soft)}.project-arrow{border:1px solid var(--rule);width:2.5rem;height:2.5rem;color:var(--ink-faint);transition:transform var(--dur-slow) var(--ease-out-expo), background-color var(--dur-base) var(--ease-soft), border-color var(--dur-base) var(--ease-soft), color var(--dur-base) var(--ease-soft);border-radius:50%;place-items:center;display:grid}.project:hover .project-arrow{background:var(--accent);border-color:var(--accent);color:var(--paper);transform:rotate(45deg)}.skills-groups{gap:var(--sp-5) var(--sp-6);grid-template-columns:repeat(auto-fit,minmax(13rem,1fr));display:grid}.skill-group h3{font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:var(--ls-wide);text-transform:uppercase;color:var(--ink-faint);margin-bottom:var(--sp-3)}.skill-list{flex-direction:column;gap:.3rem;list-style:none;display:flex}.skill-list li{justify-content:space-between;align-items:baseline;gap:var(--sp-3);color:var(--ink-soft);border-bottom:1px dashed var(--rule);padding:.32rem 0;font-size:.9375rem;display:flex}.skill-list li span:last-child{font-family:var(--font-mono);font-size:var(--t-micro);color:var(--ink-ghost);letter-spacing:.06em}.works{gap:var(--sp-6) var(--sp-5);grid-template-columns:repeat(auto-fill,minmax(17rem,1fr));display:grid}.work{gap:var(--sp-3);isolation:isolate;flex-direction:column;display:flex;position:relative}.work-link{z-index:3;border-radius:var(--r-md);position:absolute;inset:0}.work-cover{aspect-ratio:16/9;border:1px solid var(--rule);border-radius:var(--r-md);background:var(--paper-sunk);color:var(--ink-ghost);transition:border-color var(--dur-base) var(--ease-soft);place-items:center;display:grid;position:relative;overflow:hidden}.work-cover img{object-fit:cover;width:100%;height:100%;transition:transform var(--dur-slow) var(--ease-out-expo)}.work:hover .work-cover{border-color:var(--rule-strong)}.work:hover .work-cover img{transform:scale(1.035)}.work-body{flex-direction:column;gap:.3rem;display:flex}.work-cat{font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:var(--ls-wide);text-transform:uppercase;color:var(--accent)}.work-body h3{font-family:var(--font-display);letter-spacing:var(--ls-tight);font-size:1.25rem;font-weight:400;line-height:1.3}.work-body p{color:var(--ink-faint);font-size:.875rem;line-height:1.7}.works-empty{align-items:flex-start;gap:var(--sp-3);padding:var(--sp-7) var(--sp-6);border:1px dashed var(--rule-strong);border-radius:var(--r-md);background:color-mix(in srgb, var(--paper-raised) 60%, transparent);flex-direction:column;display:flex}.works-empty-title{font-family:var(--font-display);font-size:var(--t-h2);letter-spacing:var(--ls-tight);line-height:1.3}.works-empty p{max-width:46ch;color:var(--ink-faint);font-size:.9rem;line-height:1.75}.works-empty .btn{margin-top:var(--sp-2)}.education{flex-direction:column;display:flex}.edu{gap:var(--sp-5);padding:var(--sp-5) 0;border-top:1px solid var(--rule);grid-template-columns:8.5rem minmax(0,1fr);display:grid}.edu:last-child{border-bottom:1px solid var(--rule)}.edu-degree{color:var(--ink-faint);margin-top:.4rem;font-size:.875rem}.contact-row--static:hover{color:inherit;padding-left:0}.private-inner{align-items:center;gap:var(--sp-5);flex-wrap:wrap;display:flex}.private-lock{border:1px solid var(--rule-strong);background:var(--paper);width:3rem;height:3rem;color:var(--ink-soft);border-radius:50%;flex:none;place-items:center;display:grid}.private-copy h2{font-family:var(--font-display);font-size:var(--t-h2);letter-spacing:var(--ls-tight);font-weight:400;line-height:1.3}.private-copy p{color:var(--ink-faint);margin-top:.25rem;font-size:.875rem}.private-btn{margin-left:auto}@media (max-width:720px){.private-btn{justify-content:center;width:100%;margin-left:0}}.contact{gap:var(--sp-7);grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);align-items:start;display:grid}.contact-lead{font-family:var(--font-display);letter-spacing:var(--ls-tight);font-size:clamp(1.6rem,3.2vw,2.6rem);line-height:1.35}.contact-lead em{color:var(--accent);font-style:normal;position:relative}.contact-note{margin-top:var(--sp-4);max-width:30rem;color:var(--ink-faint);font-size:.875rem;line-height:1.8}.contact-list{border-top:1px solid var(--rule);flex-direction:column;display:flex}.contact-row{justify-content:space-between;align-items:baseline;gap:var(--sp-4);padding:var(--sp-3) 0;border-bottom:1px solid var(--rule);transition:color var(--dur-base) var(--ease-soft), padding-left var(--dur-slow) var(--ease-out-expo);font-size:.9375rem;display:flex}.contact-row:hover{color:var(--accent);padding-left:.5rem}.contact-row .k{font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint)}.footer{padding:var(--sp-5) var(--page-gutter) 0;justify-content:space-between;align-items:baseline;gap:var(--sp-4);border-top:1px solid var(--rule);font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-ghost);flex-wrap:wrap;margin-top:clamp(3rem,8vh,6rem);display:flex}.footer a:hover{color:var(--accent)}@media (max-width:980px){.site{grid-template-columns:1fr}.rail{z-index:40;justify-content:space-between;align-items:center;gap:var(--sp-4);height:auto;padding:var(--sp-3) var(--page-gutter);border-right:0;border-bottom:1px solid var(--rule);background:color-mix(in srgb, var(--paper) 86%, transparent);-webkit-backdrop-filter:blur(14px)saturate(1.2);flex-direction:row;position:sticky;top:0}.rail-top{align-items:center;gap:var(--sp-4);flex-direction:row}.rail-nav,.rail-status{display:none}.rail-bottom{align-items:center;gap:var(--sp-2);flex-direction:row}.hero{min-height:auto;padding-top:12vh}.hero-sub{gap:var(--sp-5);grid-template-columns:1fr}.scroll-cue{display:none}.exp,.edu{gap:var(--sp-2);grid-template-columns:1fr}.exp-period{padding-top:0}.project{gap:var(--sp-4);grid-template-columns:2rem minmax(0,1fr)}.project-arrow{display:none}.contact{grid-template-columns:1fr}}
.auth{z-index:1;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);min-height:100dvh;display:grid;position:relative}.auth-aside{padding:var(--sp-6) var(--sp-6) var(--sp-6) var(--page-gutter);border-right:1px solid var(--rule);flex-direction:column;justify-content:space-between;display:flex;position:relative;overflow:hidden}.auth-aside-glow{background:radial-gradient(circle, color-mix(in srgb, var(--accent) 16%, transparent), transparent 66%);filter:blur(20px);pointer-events:none;border-radius:50%;width:42rem;height:42rem;position:absolute;top:30%;left:-12rem}.auth-aside-body{max-width:32rem;position:relative}.auth-kicker{margin-bottom:var(--sp-5)}.auth-title{font-family:var(--font-display);letter-spacing:var(--ls-tight);margin-bottom:var(--sp-5);text-wrap:balance;font-size:clamp(1.9rem,3.2vw,3rem);font-weight:400;line-height:1.3}.auth-title em{color:var(--accent);font-style:normal}.auth-note{color:var(--ink-faint);max-width:32ch;font-size:.875rem;line-height:1.8}.auth-panel{padding:var(--sp-6) clamp(1.5rem, 5vw, 5rem) var(--sp-6) clamp(1.5rem, 5vw, 5rem);flex-direction:column;justify-content:center;display:flex}.auth-form{gap:var(--sp-5);flex-direction:column;width:100%;max-width:22rem;display:flex}.auth-form-head{margin-bottom:var(--sp-2)}.auth-form-head h2{font-family:var(--font-display);font-size:var(--t-h1);letter-spacing:var(--ls-tight);font-weight:400;line-height:1.25}.auth-form-head p{margin-top:var(--sp-2);color:var(--ink-faint);font-size:.8125rem}.auth-error{color:var(--accent);align-items:center;gap:.4rem;min-height:1.2rem;font-size:.8125rem;display:flex}.auth-submit{margin-top:var(--sp-2);justify-content:center;padding-block:.8rem}.auth-foot{justify-content:space-between;align-items:center;gap:var(--sp-3);margin-top:var(--sp-4);font-size:var(--t-micro);font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-ghost);display:flex}.auth-foot a:hover{color:var(--accent)}.pw-wrap{position:relative}.pw-toggle{cursor:pointer;color:var(--ink-faint);font-size:var(--t-micro);font-family:var(--font-mono);letter-spacing:.06em;background:0 0;border:0;padding:.25rem;position:absolute;top:50%;right:0;transform:translateY(-40%)}.pw-toggle:hover{color:var(--accent)}.desk{z-index:1;flex-direction:column;min-height:100dvh;display:flex;position:relative}.desk-bar{z-index:40;align-items:center;gap:var(--sp-4);padding:var(--sp-4) var(--page-gutter);border-bottom:1px solid var(--rule);background:color-mix(in srgb, var(--paper) 88%, transparent);-webkit-backdrop-filter:blur(16px)saturate(1.2);display:flex;position:sticky;top:0}.desk-bar .spacer{flex:1}.desk-body{padding:var(--sp-7) var(--page-gutter) var(--sp-9);width:100%;max-width:var(--maxw);flex:1;margin-inline:auto}.desk-head{justify-content:space-between;align-items:flex-end;gap:var(--sp-5);margin-bottom:var(--sp-7);flex-wrap:wrap;display:flex}.desk-title{font-family:var(--font-display);font-size:var(--t-display);letter-spacing:var(--ls-tight);font-weight:400;line-height:1.1}.desk-sub{margin-top:var(--sp-2);color:var(--ink-faint);font-size:.875rem}.desk-stats{gap:var(--sp-6);display:flex}.stat{flex-direction:column;gap:.15rem;display:flex}.stat b{font-family:var(--font-display);font-variant-numeric:tabular-nums;font-size:1.6rem;font-weight:400;line-height:1}.stat span{font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint)}.drop{place-items:center;gap:var(--sp-2);padding:var(--sp-7) var(--sp-5);border:1px dashed var(--rule-strong);border-radius:var(--r-md);background:color-mix(in srgb, var(--paper-raised) 60%, transparent);text-align:center;cursor:pointer;transition:border-color var(--dur-base) var(--ease-soft), background-color var(--dur-base) var(--ease-soft), transform var(--dur-base) var(--ease-overshoot);display:grid;position:relative}.drop:hover,.drop[data-over=true]{border-color:var(--accent);background:var(--accent-soft)}.drop[data-over=true]{transform:scale(1.006)}.drop-icon{color:var(--ink-faint);transition:color var(--dur-base) var(--ease-soft), transform var(--dur-slow) var(--ease-out-expo)}.drop:hover .drop-icon{color:var(--accent);transform:translateY(-3px)}.drop strong{font-size:.9375rem;font-weight:500}.drop small{font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:.06em;color:var(--ink-ghost);text-transform:uppercase}.files-head{justify-content:space-between;align-items:baseline;gap:var(--sp-4);margin:var(--sp-8) 0 var(--sp-3);padding-bottom:var(--sp-2);border-bottom:1px solid var(--rule);display:flex}.files-head h2{font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:var(--ls-wide);text-transform:uppercase;color:var(--ink-faint);font-weight:400}.file-list{flex-direction:column;display:flex}.file-row{align-items:center;gap:var(--sp-3);padding:.7rem var(--sp-2);border-bottom:1px solid var(--rule);transition:background-color var(--dur-fast) var(--ease-soft);grid-template-columns:2.25rem minmax(0,1fr) 6rem 8rem auto;display:grid}.file-row:hover{background:var(--paper-raised)}.file-glyph{border:1px solid var(--rule);border-radius:var(--r-sm);width:2rem;height:2rem;font-family:var(--font-mono);letter-spacing:.02em;color:var(--ink-faint);text-transform:uppercase;background:var(--paper-raised);place-items:center;font-size:.5625rem;display:grid}.file-name{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:.9375rem;overflow:hidden}.file-size,.file-date{font-family:var(--font-mono);font-size:var(--t-micro);color:var(--ink-faint);letter-spacing:.04em;font-variant-numeric:tabular-nums;white-space:nowrap}.file-actions{opacity:0;transition:opacity var(--dur-fast) var(--ease-soft);gap:.25rem;display:flex}.file-row:hover .file-actions,.file-row:focus-within .file-actions{opacity:1}.mini-btn{border-radius:var(--r-sm);width:1.9rem;height:1.9rem;color:var(--ink-faint);cursor:pointer;transition:color var(--dur-fast) var(--ease-soft), border-color var(--dur-fast) var(--ease-soft), background-color var(--dur-fast) var(--ease-soft);background:0 0;border:1px solid #0000;place-items:center;display:grid}.mini-btn:hover{color:var(--ink);border-color:var(--rule);background:var(--paper)}.mini-btn[data-danger]:hover{color:#fff;background:var(--accent);border-color:var(--accent)}.empty{padding:var(--sp-8) 0;text-align:center;color:var(--ink-ghost)}.empty p{font-size:.875rem}.upl-progress{margin-top:var(--sp-3);font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:.06em;color:var(--ink-faint);flex-direction:column;gap:.4rem;display:flex}.upl-progress .bar{background:var(--rule);border-radius:var(--r-pill);height:2px;overflow:hidden}.upl-progress .bar i{background:var(--accent);height:100%;transition:width .22s var(--ease-soft);display:block}.skeleton{border-radius:var(--r-sm);background:linear-gradient(90deg, var(--paper-sunk) 0%, color-mix(in srgb, var(--paper-sunk) 40%, var(--paper-raised)) 50%, var(--paper-sunk) 100%);background-size:200% 100%;animation:1.4s linear infinite shimmer}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.skeleton-row{height:2.2rem;margin-bottom:.5rem}.settings{margin-top:var(--sp-9);padding-top:var(--sp-5);border-top:1px solid var(--rule)}.settings-head{margin-bottom:var(--sp-5)}.settings-head h2{font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:var(--ls-wide);text-transform:uppercase;color:var(--ink-faint);margin-bottom:var(--sp-2);font-weight:400}.settings-head p{color:var(--ink-faint);max-width:46ch;font-size:.8125rem;line-height:1.7}.pw-form{gap:var(--sp-5);grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));max-width:46rem;display:grid}.pw-actions{align-items:center;gap:var(--sp-4);flex-wrap:wrap;grid-column:1/-1;display:flex}.pw-note{color:var(--accent-2);font-size:.8125rem}.pw-note[data-kind=bad]{color:var(--accent)}@media (max-width:880px){.auth{grid-template-columns:1fr}.auth-aside{border-right:0;border-bottom:1px solid var(--rule);padding-block:var(--sp-6) var(--sp-5);min-height:auto}.auth-title{font-size:clamp(1.9rem,8vw,2.6rem)}.auth-note{display:none}.auth-panel{padding-block:var(--sp-7) var(--sp-9)}.file-row{grid-template-columns:2.25rem minmax(0,1fr) auto}.file-size,.file-date{display:none}.file-actions{opacity:1}.desk-stats{gap:var(--sp-5)}}
html[data-mode=deck]{scroll-snap-type:y mandatory}html[data-mode=deck] .site{grid-template-columns:minmax(0,1fr)}html[data-mode=deck] .rail,html[data-mode=deck] .scroll-cue,html[data-mode=deck] .footer,html[data-mode=deck] .section:not([data-slide]){display:none}html[data-mode=deck] .main{padding-bottom:0}html[data-mode=deck] .section[data-slide]{scroll-snap-align:start;scroll-snap-stop:always;width:100%;min-height:100dvh;max-width:var(--maxw);flex-direction:column;justify-content:center;margin-inline:auto;padding-top:clamp(2rem,7vh,4.5rem);padding-bottom:clamp(5rem,13vh,8rem);display:flex}html[data-mode=deck] .hero[data-slide]{scroll-snap-align:start;scroll-snap-stop:always;padding-bottom:clamp(5rem,13vh,8rem)}html[data-mode=deck] .section-title{font-size:clamp(2.6rem,6vw,5rem)}html[data-mode=deck] .section-head{margin-bottom:var(--sp-6)}.mode-switch{top:1.05rem;right:var(--page-gutter);z-index:55;border:1px solid var(--rule);border-radius:var(--r-pill);background:color-mix(in srgb, var(--paper) 78%, transparent);-webkit-backdrop-filter:blur(14px)saturate(1.3);gap:2px;padding:3px;display:flex;position:fixed}.mode-switch button{border-radius:var(--r-pill);color:var(--ink-faint);font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:.12em;cursor:pointer;transition:color var(--dur-fast) var(--ease-soft), background-color var(--dur-fast) var(--ease-soft);background:0 0;border:0;padding:.35rem .85rem}.mode-switch button:hover{color:var(--ink)}.mode-switch button[data-active=true]{background:var(--ink);color:var(--paper)}@media (min-width:721px){.hero-eyebrow{padding-right:8.5rem}}.deck-chrome{z-index:50;pointer-events:none;position:fixed;inset:auto 0 0}html[data-mode=doc] .deck-chrome{display:none}.deck-progress{background:var(--rule);height:2px;position:fixed;top:0;left:0;right:0}.deck-progress i{background:var(--accent);transform-origin:0;height:100%;transition:transform .16s linear;display:block;transform:scaleX(0)}.deck-bar{justify-content:space-between;align-items:center;gap:var(--sp-4);padding:1rem var(--page-gutter) 1.15rem;pointer-events:auto;background:linear-gradient(to top, color-mix(in srgb, var(--paper) 94%, transparent) 30%, transparent);display:flex}.deck-brand{font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.deck-nav{flex:none;align-items:center;gap:.55rem;margin-left:auto;display:flex}.deck-lock{border:1px solid var(--rule);width:2rem;height:2rem;color:var(--ink-faint);transition:color var(--dur-base) var(--ease-soft), border-color var(--dur-base) var(--ease-soft);border-radius:50%;place-items:center;margin-left:auto;display:grid}.deck-lock:hover{color:var(--accent);border-color:var(--accent)}.deck-lock+.deck-nav{margin-left:.4rem}.deck-nav button{border:1px solid var(--rule-strong);background:color-mix(in srgb, var(--paper) 72%, transparent);-webkit-backdrop-filter:blur(10px);width:2.2rem;height:2.2rem;color:var(--ink-soft);cursor:pointer;transition:color var(--dur-base) var(--ease-soft), border-color var(--dur-base) var(--ease-soft), transform var(--dur-base) var(--ease-overshoot);border-radius:50%;place-items:center;font-size:.85rem;line-height:1;display:grid}.deck-nav button:not(:disabled):hover{color:var(--accent);border-color:var(--accent);transform:translateY(-1px)}.deck-nav button:disabled{opacity:.3;cursor:default}.deck-count{font-family:var(--font-mono);font-size:var(--t-micro);letter-spacing:.06em;color:var(--ink-faint);font-variant-numeric:tabular-nums;text-align:center;min-width:3.6rem}@media (max-width:980px){html[data-mode=doc] .mode-switch{top:auto;bottom:1.1rem}html[data-mode=deck] .hero[data-slide]{justify-content:center;min-height:100dvh;padding-top:4.2rem;padding-bottom:clamp(5.5rem,16vh,9rem)}html[data-mode=deck] .section[data-slide]{padding-bottom:clamp(5.5rem,16vh,9rem)}html[data-mode=deck] .section-title{font-size:clamp(2rem,9vw,3rem)}.deck-brand{max-width:45vw}}@media (prefers-reduced-motion:reduce){html[data-mode=deck]{scroll-snap-type:none}}
html[data-skin=comic]{--paper:#f2ece0;--paper-raised:#fffdf7;--paper-sunk:#e6ddca;--ink:#0f0f0f;--ink-soft:#2a2a2a;--ink-faint:#5c5c5c;--ink-ghost:#9c9c9c;--rule:#0f0f0f;--rule-strong:#0f0f0f;--accent:#e0342a;--accent-2:#1f4ea8;--shadow-soft:3px 3px 0 var(--ink);--shadow-lift:6px 6px 0 var(--ink);--r-xs:0px;--r-sm:2px;--r-md:3px;--r-pill:3px;--font-display:"PingFang SC", "HarmonyOS Sans SC", "Microsoft YaHei", "Hiragino Sans GB", system-ui, sans-serif;--ls-hero:-.04em;--ls-tight:-.02em;--t-hero:clamp(3.4rem, 12vw, 11rem)}html[data-skin=comic] body{background-color:var(--paper);background-image:radial-gradient(circle at 1px 1px, color-mix(in srgb, var(--ink) 22%, transparent) 1px, transparent 1.6px);background-size:7px 7px}html[data-skin=comic] .grain,html[data-skin=comic] .ambient{display:none}html[data-skin=comic] .main{padding:clamp(.9rem,2.2vw,1.8rem) clamp(.9rem,2.2vw,1.8rem) 0}html[data-skin=comic] .hero,html[data-skin=comic] .section{background:var(--paper-raised);border:2.5px solid var(--ink);border-radius:var(--r-md);box-shadow:var(--shadow-lift);margin-bottom:clamp(1.2rem,2.6vw,2rem);padding:clamp(1.4rem,3vw,2.6rem);position:relative}html[data-skin=comic] .section{scroll-margin-top:1.2rem}html[data-skin=comic] .section:before,html[data-skin=comic] .hero:before{content:"";border-top:2.5px solid var(--accent);border-left:2.5px solid var(--accent);border-top-left-radius:var(--r-md);pointer-events:none;width:2.2rem;height:2.2rem;position:absolute;top:-2.5px;left:-2.5px}html[data-skin=comic] .rail{background:var(--paper-raised);border-right:2.5px solid var(--ink)}html[data-skin=comic] .footer{margin-inline:clamp(.9rem,2.2vw,1.8rem);border:2.5px solid var(--ink);box-shadow:var(--shadow-soft);background:var(--paper-raised);margin-bottom:clamp(1.2rem,2.6vw,2rem);padding:1rem clamp(1.4rem,3vw,2.6rem)}html[data-skin=comic] .hero-name,html[data-skin=comic] .section-title,html[data-skin=comic] .contact-lead,html[data-skin=comic] .desk-title,html[data-skin=comic] .auth-title{letter-spacing:-.03em;font-weight:900}html[data-skin=comic] .hero-name{text-shadow:4px 4px 0 var(--accent)}html[data-skin=comic] .section-title{line-height:1}html[data-skin=comic] .mono,html[data-skin=comic] .rail-link .idx,html[data-skin=comic] .section-num,html[data-skin=comic] .deck-brand,html[data-skin=comic] .deck-count,html[data-skin=comic] .exp-period,html[data-skin=comic] .stat span,html[data-skin=comic] .field label{font-family:var(--font-display);letter-spacing:.1em;font-weight:700}html[data-skin=comic] .section-head{border-bottom:3px solid var(--ink);margin-bottom:var(--sp-5);padding-bottom:.6rem}html[data-skin=comic] .section-head .rule{display:none}html[data-skin=comic] .section-num{background:var(--ink);color:var(--paper-raised);border-radius:0;align-self:flex-start;margin-top:.55rem;padding:.2rem .5rem}html[data-skin=comic] .hero-sub,html[data-skin=comic] .exp,html[data-skin=comic] .edu,html[data-skin=comic] .project,html[data-skin=comic] .contact-row,html[data-skin=comic] .skill-list li,html[data-skin=comic] .about-block h3,html[data-skin=comic] .file-row{border-color:var(--ink);border-width:2px}html[data-skin=comic] .exp,html[data-skin=comic] .edu{border-top-width:2px}html[data-skin=comic] .hero-meta div{border-bottom:2px dashed var(--ink)}html[data-skin=comic] .project:hover{background:var(--paper)}html[data-skin=comic] .project-arrow{border:2px solid var(--ink);color:var(--ink);background:var(--paper-raised);box-shadow:2px 2px 0 var(--ink);border-radius:0}html[data-skin=comic] .project:hover .project-arrow{background:var(--accent);border-color:var(--ink);color:var(--paper-raised);box-shadow:2px 2px 0 var(--ink)}html[data-skin=comic] .tag{border:1.5px solid var(--ink);background:var(--paper-raised);color:var(--ink-soft);border-radius:0;font-weight:700}html[data-skin=comic] .btn{border:2px solid var(--ink);box-shadow:3px 3px 0 var(--ink);letter-spacing:.04em;border-radius:0;font-weight:800}html[data-skin=comic] .btn:hover{box-shadow:5px 5px 0 var(--ink);transform:translate(-1px,-1px)}html[data-skin=comic] .btn:active{box-shadow:1px 1px 0 var(--ink);transform:translate(2px,2px)}html[data-skin=comic] .btn--ghost:before{background:var(--accent)}html[data-skin=comic] .mode-switch{border:2px solid var(--ink);background:var(--paper-raised);box-shadow:3px 3px 0 var(--ink);-webkit-backdrop-filter:none;border-radius:0;padding:2px}html[data-skin=comic] .mode-switch button{border-radius:0;font-weight:700}html[data-skin=comic] .mode-switch button[data-active=true]{background:var(--ink);color:var(--paper-raised)}html[data-skin=comic] .deck-progress{background:color-mix(in srgb, var(--ink) 18%, transparent);height:3px}html[data-skin=comic] .deck-progress i{background:var(--accent)}html[data-skin=comic] .deck-bar{background:var(--paper);border-top:2.5px solid var(--ink)}html[data-skin=comic] .deck-nav button{border:2px solid var(--ink);background:var(--paper-raised);color:var(--ink);box-shadow:2px 2px 0 var(--ink);-webkit-backdrop-filter:none;border-radius:0;font-weight:700}html[data-skin=comic] .deck-nav button:not(:disabled):hover{background:var(--accent);color:var(--paper-raised);border-color:var(--ink)}html[data-skin=comic] .works-empty{border:2.5px dashed var(--ink);background:var(--paper);box-shadow:none}html[data-skin=comic] .skills-groups{gap:var(--sp-4) var(--sp-5);grid-template-columns:repeat(auto-fit,minmax(10rem,1fr))}html[data-skin=comic][data-mode=doc] .hero{min-height:min(86vh,46rem)}html[data-skin=comic][data-mode=deck] .main{padding:0}html[data-skin=comic][data-mode=deck] .hero,html[data-skin=comic][data-mode=deck] .section[data-slide]{width:100%;max-width:var(--maxw);min-height:calc(100dvh - 5.85rem);box-shadow:8px 8px 0 var(--ink);border-radius:4px;justify-content:center;margin:.65rem auto 5.2rem}html[data-skin=comic][data-mode=deck] .hero{justify-content:flex-end}html[data-skin=comic][data-mode=deck] .section:before,html[data-skin=comic][data-mode=deck] .hero:before{display:none}html[data-skin=comic] body{background-image:repeating-linear-gradient(135deg, color-mix(in srgb, var(--ink) 6%, transparent) 0 1px, transparent 1px 11px), radial-gradient(circle at 1px 1px, color-mix(in srgb, var(--ink) 20%, transparent) 1px, transparent 1.6px);background-size:auto,7px 7px}html[data-skin=comic] .hero:after{content:"";z-index:0;pointer-events:none;background:repeating-conic-gradient(from 0deg at 82% 26%, color-mix(in srgb, var(--ink) 10%, transparent) 0 .45deg, transparent .45deg 2.2deg);position:absolute;inset:0;-webkit-mask-image:radial-gradient(circle at 82% 26%,#0000 0 26%,#000 64%);mask-image:radial-gradient(circle at 82% 26%,#0000 0 26%,#000 64%)}html[data-skin=comic] .hero>*{z-index:1;position:relative}html[data-skin=comic] .hero-role--bubble,html[data-skin=comic] .bubble{background:var(--paper-raised);border:2.5px solid var(--ink);box-shadow:3px 3px 0 var(--ink);color:var(--ink-soft);border-radius:16px;margin-top:1.5rem;padding:.95rem 1.15rem;font-size:1rem;line-height:1.75;position:relative}html[data-skin=comic] .hero-role--bubble:after,html[data-skin=comic] .bubble:after{content:"";background:var(--paper-raised);border-left:2.5px solid var(--ink);border-top:2.5px solid var(--ink);width:16px;height:16px;position:absolute;top:-9px;left:32px;transform:rotate(45deg)}.section-caption{display:none}html[data-skin=comic] .section-caption{border:2px solid var(--ink);background:var(--paper);color:var(--ink-soft);letter-spacing:.02em;white-space:nowrap;border-radius:2px;align-self:center;margin-left:auto;padding:.28rem .7rem;font-size:.8125rem;font-weight:700;display:inline-block}html[data-skin=comic] .about-block p,html[data-skin=comic] .exp-points,html[data-skin=comic] .contact-note{font-size:1rem}html[data-skin=comic][data-mode=deck] .about-block p,html[data-skin=comic][data-mode=deck] .exp-points{font-size:1.0625rem;line-height:1.8}html[data-skin=comic] .private-lock{border:2.5px solid var(--ink);background:var(--paper);color:var(--ink)}html[data-skin=comic] .private-copy h2{font-weight:900}html[data-skin=comic] .deck-lock{border:2px solid var(--ink);color:var(--ink);background:var(--paper-raised);border-radius:0}html[data-skin=comic] .timeline,html[data-skin=comic] .projects,html[data-skin=comic] .education{border:0}html[data-skin=comic] .exp,html[data-skin=comic] .edu{border:2px solid var(--ink);background:var(--paper);box-shadow:4px 4px 0 var(--ink);transition:transform var(--dur-base) var(--ease-out-expo), box-shadow var(--dur-base) var(--ease-out-expo);border-radius:3px;margin-bottom:.85rem;padding:1rem 1.15rem}html[data-skin=comic] .exp:last-child,html[data-skin=comic] .edu:last-child{border-bottom:2px solid var(--ink)}html[data-skin=comic] .exp:hover,html[data-skin=comic] .edu:hover{box-shadow:6px 6px 0 var(--ink);transform:translate(-2px,-2px)}html[data-skin=comic] .exp-period{background:var(--ink);color:var(--paper-raised);letter-spacing:.06em;border-radius:2px;place-self:start;padding:.2rem .5rem;font-size:.625rem;display:inline-block}html[data-skin=comic] .project{border:2px solid var(--ink);background:var(--paper);box-shadow:4px 4px 0 var(--ink);transition:transform var(--dur-base) var(--ease-out-expo), box-shadow var(--dur-base) var(--ease-out-expo);border-radius:3px;margin-bottom:.85rem;padding:1rem 1.15rem}html[data-skin=comic] .project:hover{box-shadow:6px 6px 0 var(--ink);padding-left:1.15rem;transform:translate(-2px,-2px)}html[data-skin=comic] .project:before{display:none}html[data-skin=comic] .project-idx{background:var(--ink);width:2rem;height:2rem;color:var(--paper-raised);border-radius:2px;place-items:center;font-size:.625rem;font-weight:700;display:grid}html[data-skin=comic] .project:hover .project-idx{background:var(--accent);color:var(--paper-raised)}html[data-skin=comic] .skill-group{border:2px solid var(--ink);background:var(--paper);box-shadow:4px 4px 0 var(--ink);border-radius:3px;padding:0;overflow:hidden}html[data-skin=comic] .skill-group h3{background:var(--ink);color:var(--paper-raised);border-bottom:2px solid var(--ink);font-size:var(--t-micro);letter-spacing:.1em;margin:0;padding:.45rem .8rem}html[data-skin=comic] .skill-list{padding:.5rem .85rem .7rem}html[data-skin=comic] .about-block{border:2px solid var(--ink);background:var(--paper);box-shadow:4px 4px 0 var(--ink);border-radius:3px;padding:.85rem 1rem}html[data-skin=comic] .about-block h3{border-bottom:2px solid var(--ink);margin-bottom:.5rem;padding-bottom:.4rem}html[data-skin=comic] .contact-list{border:2px solid var(--ink);background:var(--paper);box-shadow:4px 4px 0 var(--ink);border-radius:3px;padding:.2rem .9rem}html[data-skin=comic] .contact-list .contact-row:last-child{border-bottom:0}html[data-skin=comic] .work-cover{border:2px solid var(--ink);box-shadow:4px 4px 0 var(--ink)}html[data-skin=comic] .work:hover .work-cover{box-shadow:6px 6px 0 var(--ink);transform:translate(-2px,-2px)}html[data-skin=comic] .tag{box-shadow:2px 2px 0 var(--ink)}html[data-skin=comic] .section-head{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='6' viewBox='0 0 120 6'%3E%3Cpath d='M0 3 Q15 1 30 3 T60 3 T90 3 T120 3' fill='none' stroke='%230f0f0f' stroke-width='2.6' stroke-linecap='round'/%3E%3C/svg%3E");background-position:0 100%;background-repeat:repeat-x;background-size:120px 6px;border-bottom:0;padding-bottom:.9rem}html[data-skin=comic] .section:after{content:"";border-style:solid;border-width:0 36px 36px 0;border-color:transparent var(--paper) transparent transparent;width:0;height:0;filter:drop-shadow(-1.5px 1.5px 0 var(--ink));pointer-events:none;position:absolute;top:0;right:0}html[data-skin=comic] .project-arrow{position:relative}html[data-skin=comic] .project:hover .project-arrow:after{content:"";border:2px solid var(--accent);pointer-events:none;border-radius:50%;animation:.64s ease-out forwards comic-ping;position:absolute;inset:-6px}@keyframes comic-ping{0%{opacity:1;transform:scale(.85)}to{opacity:0;transform:scale(1.2)}}@media (max-width:980px){html[data-skin=comic] .rail{border-right:0;border-bottom:2.5px solid var(--ink);background:var(--paper-raised)}html[data-skin=comic] .hero-name{text-shadow:3px 3px 0 var(--accent)}html[data-skin=comic][data-mode=deck] .hero,html[data-skin=comic][data-mode=deck] .section[data-slide]{min-height:calc(100dvh - 5.1rem);box-shadow:5px 5px 0 var(--ink);margin:.5rem auto 4.6rem;padding:1.15rem}}html[data-skin=comic][data-theme=dark]{--paper:#121212;--paper-raised:#1c1c1c;--paper-sunk:#0a0a0a;--ink:#f4efe4;--rule:#f4efe4;--rule-strong:#f4efe4;--accent:#ff4d40}
