@font-face{font-family:TikTok;src:url('assets/sans.woff2') format('woff2');font-weight:300 900;font-display:swap}
:root{color-scheme:light;--bg:#fafafa;--fg:#111;--muted:#858585;--surface:#f0f0f0;--line:#e5e5e5;--glass:#ffffff66;--glass-border:#ffffffb3;--contrast:#111;--inverse:#fafafa}
:root[data-theme=dark]{color-scheme:dark;--bg:#090909;--fg:#fafafa;--muted:#969696;--surface:#171717;--line:#292929;--glass:#ffffff14;--glass-border:#ffffff26;--contrast:#e9e9e9;--inverse:#171717}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:110px}body{margin:0;background:var(--bg);color:var(--fg);font-family:TikTok,Arial,sans-serif;-webkit-font-smoothing:antialiased}button,input,textarea{font:inherit}button,a{-webkit-tap-highlight-color:transparent}button{color:inherit;cursor:pointer}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible,summary:focus-visible{outline:2px solid var(--fg);outline-offset:5px}button{border:0;background:none}svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.svg-defs{position:absolute;width:0;height:0;overflow:hidden}.skip{position:fixed;top:-100px;left:20px;z-index:200;padding:15px;background:var(--fg);color:var(--bg)}.skip:focus{top:15px}.content-width{width:calc(100% - 160px);max-width:1200px;margin-inline:auto}
/* Translucent navigation and contextual project previews. */
.site-header{position:fixed;top:24px;left:50%;transform:translateX(-50%);z-index:80;max-width:calc(100% - 24px)}.nav-cluster{display:flex;align-items:center;justify-content:center;gap:8px}.glass{background:var(--glass);border:1px solid var(--glass-border);box-shadow:0 10px 40px -10px #0004,inset 0 1px 0 #ffffff80,inset 0 -1px 0 #ffffff20;backdrop-filter:blur(24px) saturate(190%);-webkit-backdrop-filter:blur(24px) saturate(190%)}[data-theme=dark] .glass{box-shadow:0 10px 40px -10px #000b,inset 0 1px 0 #ffffff26,inset 0 -1px 0 #ffffff0c}.dock{display:flex;align-items:center;gap:2px;padding:4px;border-radius:99px;min-height:52px}.dock-link{position:relative;display:flex;align-items:center;gap:0;padding:0 13px;height:42px;border-radius:99px;white-space:nowrap;color:var(--muted);transition:background .2s,color .2s}.dock-link svg{width:17px;height:17px}.dock-link.active,.dock-link:hover{color:var(--fg);background:color-mix(in srgb,var(--bg) 60%,transparent)}.dock-link span{max-width:0;opacity:0;overflow:hidden;font-size:14px;transition:max-width .5s cubic-bezier(.2,.8,.2,1),opacity .3s,margin .5s}.dock:hover .dock-link span,.dock:focus-within .dock-link span{max-width:110px;opacity:1;margin-left:9px}.theme-toggle{border-radius:50%;width:52px;height:52px;display:grid;place-items:center;flex-shrink:0}.theme-toggle svg{width:20px;height:20px}.sun-icon{display:none}[data-theme=dark] .sun-icon{display:block}[data-theme=dark] .moon-icon{display:none}.contact-pill{display:inline-flex;align-items:center;gap:14px;padding:5px 23px 5px 5px;min-height:52px;border-radius:99px;background:var(--contrast);color:var(--inverse);font-size:14px;white-space:nowrap;transition:box-shadow .25s}.contact-pill:hover{box-shadow:0 6px 25px #0003}.dot-emblem{position:relative;width:40px;height:40px;border-radius:50%;background:var(--inverse);color:var(--contrast);flex-shrink:0}.dot-emblem i{position:absolute;width:4px;height:4px;border-radius:50%;background:currentColor;left:17px;top:18px}.dot-emblem i:nth-child(1){transform:translate(-6px,-12px)}.dot-emblem i:nth-child(2){transform:translate(3px,-7px)}.dot-emblem i:nth-child(3){transform:translate(8px,1px)}.dot-emblem i:nth-child(4){transform:translate(3px,9px)}.dot-emblem i:nth-child(5){transform:translate(-6px,14px)}.contact-pill:hover .dot-emblem{transform:rotate(90deg);transition:transform .5s}.nav-preview{position:absolute;top:66px;left:50%;transform:translateX(-50%);width:min(736px,calc(100vw - 40px));border-radius:24px;display:grid;grid-template-columns:225px 1fr;overflow:hidden;animation:panel-in .2s ease-out}.nav-preview[hidden]{display:none}.preview-list{border-right:1px solid var(--line);padding:28px 24px;display:flex;flex-direction:column;gap:18px}.preview-list button{text-align:left;font-size:19px;line-height:1.2;color:var(--muted);padding:0}.preview-list button[aria-pressed=true]{color:var(--fg)}.preview-main{padding:24px}.preview-art{height:220px;background:var(--surface);border-radius:15px;display:grid;place-items:center;overflow:hidden}.preview-art .mock-browser{width:85%;height:160px;transform:rotate(-3deg);box-shadow:0 12px 30px #0002}.preview-caption{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-top:18px;color:var(--muted);font-size:13px}@keyframes panel-in{from{opacity:0;translate:0 -8px}to{opacity:1;translate:0 0}}
/* The rail is a position indicator and a second way to move through the page. */
.section-rail{position:fixed;left:20px;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;gap:5px;z-index:50}.section-rail a{height:16px;display:flex;align-items:center;position:relative;width:45px}.section-rail a::before{content:'';height:1px;width:12px;background:var(--muted);transition:width .5s,height .3s}.section-rail a:nth-child(2)::before,.section-rail a:nth-child(4)::before{width:22px}.section-rail a.active::before{width:40px;height:2px;background:var(--fg)}.section-rail a span{position:absolute;left:52px;font-size:11px;opacity:0;transition:opacity .2s;white-space:nowrap;background:var(--bg);padding:4px 8px;border-radius:4px;pointer-events:none}.section-rail a:hover span,.section-rail a:focus-visible span{opacity:1}
/* Three-part opening composition, with space reserved for all animated titles. */
.hero{position:relative;isolation:isolate;min-height:680px;height:100svh;display:grid;align-items:center;overflow:hidden}.hero-grid{display:grid;grid-template-columns:1.05fr 1.05fr 1fr;align-items:center;gap:32px;padding-top:70px}.hero-intro h1{font-size:clamp(30px,3.3vw,52px);font-weight:600;line-height:1.02;letter-spacing:-.04em;margin:0;min-height:2.15em}.role-line{display:block;white-space:nowrap}.role-word{display:inline-block;white-space:nowrap}.letter{display:inline-block;animation-delay:var(--delay,0ms);animation-duration:900ms;animation-fill-mode:both}.vapor-out{animation-name:vapor-out}.vapor-in{animation-name:vapor-in}@keyframes vapor-out{0%{opacity:1;filter:blur(0);transform:translate(0,0)}100%{opacity:0;filter:blur(7px);transform:translate(var(--dx,8px),var(--dy,-24px))}}@keyframes vapor-in{0%{opacity:0;filter:blur(7px);transform:translate(var(--dx,8px),var(--dy,20px))}100%{opacity:1;filter:blur(0);transform:none}}.hero-actions{display:flex;gap:12px;margin-top:28px;align-items:center}.hold-button,.metal-button{height:44px;border-radius:99px;display:inline-flex;align-items:center;justify-content:center;padding:0 22px;font-size:13px;white-space:nowrap;border:1px solid var(--line);position:relative;isolation:isolate}.metal-button{gap:9px;box-shadow:inset 0 0 0 1px #8884}.metal-button svg{width:16px;height:16px}.metal-button::before{content:'';position:absolute;inset:-2px;padding:2px;border-radius:inherit;background:conic-gradient(from var(--shine),transparent 0deg,#ffffff88 50deg,transparent 100deg,transparent 200deg,#777 240deg,transparent 290deg);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask-composite:exclude;pointer-events:none;animation:shimmer-spin 6s linear infinite}.hold-button{overflow:hidden;min-width:105px}.hold-fill{position:absolute;inset:0;z-index:-1;background:var(--fg);transform:translateY(100%);border-radius:50% 50% 0 0;transition:transform .3s}.hold-button.holding{color:var(--bg)}.hold-button.holding .hold-fill{transform:translateY(0);border-radius:0;transition:transform 1.5s linear,border-radius 1.5s}.avatar-wrap{width:100%;align-self:center}.avatar-wrap svg{display:block;width:100%;height:auto;fill:initial;stroke:initial;max-height:390px;overflow:visible}.hero-highlights{padding-left:14px;display:flex;flex-direction:column;gap:22px}.highlight{text-align:left;padding:0;font-size:15px;line-height:1.6;color:var(--muted)}.highlight span{display:block}.highlight.expanded span{color:var(--fg)}.highlight p{font:inherit;line-height:1.6;margin:0;max-height:0;opacity:0;overflow:hidden;transition:max-height .5s,opacity .35s,margin .5s}.highlight.expanded p{max-height:180px;opacity:1;margin-top:12px}.scroll-orbit{position:absolute;bottom:18px;left:50%;width:42px;height:42px;border:1px solid var(--line);border-radius:50%;display:grid;place-items:center;transform:translateX(-50%);font-size:19px}.scroll-orbit::before{content:'';position:absolute;inset:-5px;border:1px dashed var(--muted);border-radius:50%;opacity:.35;animation:rotate 25s linear infinite}.scroll-orbit:hover span{transform:translateY(4px);transition:transform .25s}@property --shine{syntax:'<angle>';initial-value:0deg;inherits:false}@keyframes shimmer-spin{to{--shine:360deg}}@keyframes rotate{to{rotate:360deg}}
/* Case studies use illustrated product surfaces until Alex supplies screenshots. */
.section-frame{padding:100px 26px;border-inline:1px solid color-mix(in srgb,var(--line) 45%,transparent)}.section-heading{display:flex;justify-content:space-between;align-items:end;gap:45px;margin-bottom:40px}.section-heading h2{font-size:32px;line-height:1.2;font-weight:500;letter-spacing:-.035em;margin:0;max-width:660px}.section-heading p{font-size:13px;color:var(--muted);line-height:1.6;margin:0}.filters{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:35px}.filters button{font-size:12px;padding:8px 14px;border-radius:20px;border:1px solid transparent;color:var(--muted)}.filters button[aria-pressed=true]{color:var(--fg);background:var(--surface);border-color:var(--line)}.projects{display:flex;flex-direction:column;gap:62px}.case-heading{display:flex;justify-content:space-between;gap:20px;align-items:end;margin-bottom:18px}.case-heading h3{font-size:23px;font-weight:500;letter-spacing:-.03em;margin:0}.case-heading small{font-size:11px;color:var(--muted)}.case-grid{display:grid;grid-template-columns:1.1fr 1fr;gap:14px}.case-visual{min-height:350px;border:1px solid var(--line);border-radius:24px;display:flex;flex-direction:column;justify-content:center;align-items:center;padding:32px;background:var(--surface);overflow:hidden;position:relative}.case-visual::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse at 50% 100%,#8882,transparent 75%);pointer-events:none}.mock-browser{border:1px solid #cccccc60;border-radius:12px;background:#fafafa;color:#161616;box-shadow:0 15px 35px #0002;overflow:hidden;position:relative;width:100%;transition:transform .6s cubic-bezier(.2,.8,.2,1)}.case-visual:hover .mock-browser{transform:translateY(-7px) rotate(-1deg)}.browser-bar{height:25px;border-bottom:1px solid #e6e6e6;padding:9px;display:flex;gap:4px;background:#f6f6f6}.browser-bar i{width:5px;height:5px;border-radius:50%;background:#c8c8c8}.browser-content{display:grid;grid-template-columns:58px 1fr;min-height:210px}.mock-sidebar{padding:15px 9px;background:#ededed;border-right:1px solid #e1e1e1;display:flex;gap:10px;flex-direction:column}.mock-sidebar b{font-size:16px;letter-spacing:-1px}.mock-sidebar i{height:4px;background:#ccc;width:80%;border-radius:3px}.mock-main{padding:18px}.mock-main h4{font-size:18px;letter-spacing:-.6px;margin:0 0 5px;font-weight:600}.mock-main>p{font-size:8px;color:#888;margin:0 0 18px}.mock-stat-row{display:flex;gap:8px}.mock-stat{border:1px solid #e5e5e5;border-radius:6px;padding:10px;flex:1}.mock-stat span{font-size:7px;display:block;color:#888}.mock-stat b{font-size:16px;font-weight:500;display:block;margin-top:6px}.mock-table{margin-top:15px}.mock-table div{display:flex;justify-content:space-between;border-bottom:1px solid #eee;padding:8px 0;font-size:7px}.mock-table i{height:3px;width:30%;background:#ddd;margin:2px 0}.mock-bars{height:70px;display:flex;align-items:end;gap:6px;padding-top:15px}.mock-bars i{flex:1;background:#313131;border-radius:3px 3px 0 0;height:var(--bar);animation:bar-grow 1s both;transform-origin:bottom}.visual-caption{align-self:start;margin-top:23px;font-size:10px;color:var(--muted);z-index:1}.case-story{border:1px solid var(--line);border-radius:24px;background:var(--surface);padding:32px;display:flex;flex-direction:column;justify-content:space-between;align-items:start;gap:25px}.case-summary{background:var(--bg);border-radius:18px;padding:27px;font-size:15px;line-height:1.6;margin:0;width:100%}.case-story .quiet-label{margin-bottom:8px}.case-story p:not(.case-summary){font-size:13px;line-height:1.6;color:var(--muted)}.case-story .contact-pill{align-self:end;font-size:12px;min-height:40px;padding-right:18px;gap:9px}.case-story .dot-emblem{width:30px;height:30px;scale:.8;margin:-3px}.case-story .dot-emblem i{left:12px;top:12px}.case-notes{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:12px}.case-note{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:23px;font-size:12px;line-height:1.6;color:var(--muted)}.case-note b{display:block;color:var(--fg);font-weight:400;margin-bottom:8px}.quiet-label{display:block;font-size:11px;color:var(--muted)}.editorial-note{color:var(--muted);font-size:11px;line-height:1.6;margin-top:24px}.text-button{font-size:13px;display:inline-flex;align-items:center;gap:10px;padding:0}.text-button svg{width:16px;height:16px}.archive-toggle{margin-top:35px;padding:10px 0;border-bottom:1px solid var(--line);width:100%;justify-content:space-between}.archive-toggle span{font-size:24px}@keyframes bar-grow{from{transform:scaleY(.1)}to{transform:scaleY(1)}}
.experiment-tabs{display:flex;gap:20px;margin-bottom:22px}.experiment-tabs button{font-size:14px;color:var(--muted);border-bottom:1px solid transparent;padding:10px 0}.experiment-tabs button[aria-selected=true]{color:var(--fg);border-color:var(--fg)}.experiment-panel{display:grid;grid-template-columns:1.15fr 1fr;align-items:center;gap:60px;border-radius:24px;border:1px solid var(--line);padding:45px;background:var(--surface)}.experiment-copy h3{font-size:30px;letter-spacing:-.04em;font-weight:500;margin:14px 0}.experiment-copy p{font-size:14px;line-height:1.7;color:var(--muted);margin:0 0 25px}.record-player{height:270px;background:linear-gradient(140deg,#f6f6f6,#bfbfbf);border-radius:18px;box-shadow:0 25px 30px -20px #0006;position:relative;transform:perspective(800px) rotateX(16deg) rotateZ(-7deg);transition:transform .6s}.record-player:hover{transform:perspective(800px) rotateX(5deg) rotateZ(-2deg)}.record-disc{position:absolute;inset:20px auto auto 25px;width:215px;height:215px;border-radius:50%;background:repeating-radial-gradient(circle,#222 0 2px,#333 3px,#222 4px);box-shadow:0 3px 8px #0007;display:grid;place-items:center;animation:rotate 10s linear infinite}.record-disc span{display:grid;place-items:center;width:65px;height:65px;border-radius:50%;background:#eee;color:#151515;font-size:23px;font-weight:600}.tonearm{position:absolute;width:14px;height:175px;right:30px;top:40px;border-radius:8px;background:linear-gradient(90deg,#222,#aaa,#111);transform:rotate(23deg);transform-origin:top}.tonearm::after{content:'';position:absolute;left:-3px;bottom:-6px;width:20px;height:35px;border-radius:4px;background:#171717}.record-controls{position:absolute;bottom:20px;left:25px;display:flex;gap:12px}.record-controls i{width:10px;height:10px;border-radius:50%;background:#aaa}.experiment-panel[data-kind=bot] .record-player{transform:none;display:grid;place-items:center;background:var(--bg);box-shadow:none;color:var(--fg)}.bot-symbol{font-size:90px;font-weight:300;letter-spacing:-10px}.about-columns{display:grid;grid-template-columns:1fr 1fr;gap:80px;margin:60px 0}.about-lead{font-size:26px;line-height:1.5;letter-spacing:-.025em;margin:0}.about-columns>div>p{font-size:15px;line-height:1.8;color:var(--muted);margin-top:0}.services{margin-top:80px;display:grid;grid-template-columns:1fr 2fr;column-gap:60px}.services h3{font-size:19px;font-weight:500;grid-row:1/4;margin:14px 0}.services details{border-bottom:1px solid var(--line);padding:18px 0}.services summary{display:flex;justify-content:space-between;font-size:19px;cursor:pointer;list-style:none}.services summary::-webkit-details-marker{display:none}.services summary span{color:var(--muted)}.services details[open] summary span{rotate:45deg}.services details p{color:var(--muted);line-height:1.7;font-size:14px;max-width:600px}.technology-list{display:grid;grid-template-columns:repeat(6,1fr);gap:35px 20px;padding:20px 0 55px}.technology-list span{font-size:18px;font-weight:500;letter-spacing:-.03em;transition:opacity .2s}.technology-list:hover span{opacity:.3}.technology-list span:hover{opacity:1}#skills-network{width:100%;height:520px;display:block;cursor:grab;touch-action:pan-y}#skills-network:active{cursor:grabbing}.contact-section{padding:100px 0 20px;text-align:center}.contact-section>p{font-size:15px;color:var(--muted)}.contact-section h2{font-size:clamp(36px,5vw,64px);font-weight:500;letter-spacing:-.045em;margin:24px 0 35px}.contact-pill.large{font-size:16px;padding-right:28px}.contact-email{font-size:12px!important;margin-top:22px}.particle-footer{height:260px;width:100%;overflow:hidden}.particle-footer canvas{width:100%;height:100%;display:block}.site-footer{display:grid;grid-template-columns:1fr 130px 150px;gap:50px;padding:70px 0 40px;font-size:13px}.footer-logo{font-size:28px;font-weight:600;letter-spacing:-2px}.site-footer>div{display:flex;flex-direction:column;gap:14px}.site-footer>div>span{color:var(--muted);font-size:11px;margin-bottom:10px}.site-footer>div>a{border-bottom:1px solid var(--line);padding-bottom:5px}.site-footer>p{grid-column:1/-1;text-align:center;font-size:11px;color:var(--muted);margin-top:40px}.site-footer>p>span{margin-left:10px}.signature{font-size:min(40vw,600px);font-weight:750;line-height:.65;letter-spacing:-.08em;text-align:center;opacity:.035;overflow:hidden;padding:30px 0 0;user-select:none}.contact-bubble{position:fixed;right:22px;bottom:22px;width:46px;height:46px;border-radius:50%;z-index:70;display:grid;place-items:center}.contact-bubble svg{width:20px;height:20px}dialog{position:fixed;inset:0;margin:auto;width:min(720px,calc(100% - 32px));max-height:85svh;overflow:auto;background:var(--bg);color:var(--fg);padding:45px;border:1px solid var(--line);border-radius:24px}dialog::backdrop{background:#0008;backdrop-filter:blur(12px)}dialog h2{font-size:35px;letter-spacing:-.04em;font-weight:500;margin:15px 0 20px}dialog>p{font-size:16px;line-height:1.7;color:var(--muted)}.dialog-close{position:absolute;right:20px;top:15px;font-size:28px;color:var(--muted)}#detail-visual .mock-browser{max-width:430px;margin:25px auto}
/* The same hierarchy becomes a deliberate vertical composition on a phone. */
@media(min-width:1600px){.hero-grid{gap:40px}.hero-intro h1{font-size:48px}.hero-highlights{font-size:16px}.avatar-wrap svg{max-height:420px}}
@media(max-width:1100px){.content-width{width:calc(100% - 100px)}.hero-grid{gap:20px;grid-template-columns:1.05fr 1.1fr 1fr}.hero-intro h1{font-size:clamp(28px,3.2vw,38px)}.hero-actions{gap:8px;flex-wrap:wrap}.hold-button,.metal-button{padding:0 17px;font-size:12px}.hero-highlights{padding-left:0;gap:19px}.highlight{font-size:13px}.section-rail{left:15px}.section-rail a.active::before{width:28px}.section-rail a span{left:35px}.case-story{padding:22px}.case-summary{padding:21px;font-size:14px}.case-visual{padding:25px;min-height:320px}.experiment-panel{gap:35px;padding:30px}.record-player{height:240px}.record-disc{width:180px;height:180px}.about-columns{gap:40px}}
@media(max-width:900px){.content-width{width:calc(100% - 40px)}.site-header{top:16px;max-width:calc(100% - 20px)}.nav-cluster{gap:6px}.dock{padding:3px;gap:0;min-height:46px}.dock-link{padding:0 10px;height:38px}.dock-link svg{width:16px;height:16px}.dock:hover .dock-link span,.dock:focus-within .dock-link span{max-width:0;opacity:0;margin:0}.theme-toggle{width:46px;height:46px}.contact-pill{min-height:46px;padding-right:15px;gap:9px;font-size:12px}.dot-emblem{width:34px;height:34px}.dot-emblem i{left:14px;top:15px;width:3.5px;height:3.5px}.hero{height:auto;min-height:100svh;padding:135px 0 75px}.hero-grid{grid-template-columns:1.2fr 1fr;gap:35px 10px;padding-top:0}.hero-intro h1{font-size:clamp(28px,5vw,37px);min-height:3.1em}.role-line{white-space:normal}.hero-actions{margin-top:23px;gap:10px;align-items:start;flex-direction:column}.avatar-wrap svg{max-height:290px}.hero-highlights{grid-column:1/-1;gap:15px;max-width:560px;margin-top:15px}.highlight{font-size:14px}.highlight.expanded p{max-height:110px;margin-top:8px}.scroll-orbit{width:30px;height:30px;bottom:17px;font-size:15px}.section-rail{display:none}.section-frame{padding:65px 0;border-inline:0}.section-heading{display:block;margin-bottom:30px}.section-heading h2{font-size:28px}.section-heading p{margin-top:17px}.nav-preview{width:calc(100vw - 30px);grid-template-columns:130px 1fr;top:59px;border-radius:18px}.preview-list{padding:20px 15px;gap:17px}.preview-list button{font-size:14px}.preview-main{padding:15px}.preview-art{height:160px}.preview-art .mock-browser{height:120px}.preview-caption{font-size:11px}.case-heading h3{font-size:21px}.case-heading small{max-width:120px;text-align:right;line-height:1.5}.case-grid{grid-template-columns:1fr}.case-visual{min-height:300px;border-radius:18px;padding:25px}.case-story{padding:22px;border-radius:18px;gap:18px}.case-summary{font-size:14px;padding:22px}.case-notes{grid-template-columns:1fr;gap:8px}.case-note{padding:17px;border-radius:14px}.case-note b{margin-bottom:3px}.projects{gap:45px}.experiment-panel{grid-template-columns:1fr;gap:35px;padding:25px;border-radius:18px}.record-player{max-width:340px;width:100%;height:240px;margin:auto}.record-disc{width:180px;height:180px}.experiment-tabs{gap:20px}.experiment-tabs button{font-size:13px}.experiment-copy h3{font-size:26px}.about-columns{grid-template-columns:1fr;gap:30px;margin:35px 0}.about-lead{font-size:23px}.services{grid-template-columns:1fr;margin-top:45px;gap:0}.services h3{grid-row:auto;margin-bottom:20px}.services summary{font-size:17px}.technology-list{grid-template-columns:repeat(3,1fr);gap:28px 20px;padding-bottom:20px}.technology-list span{font-size:17px}#skills-network{height:390px}.contact-section{padding-top:65px}.contact-section h2{font-size:36px}.particle-footer{height:190px}.site-footer{padding-top:35px;grid-template-columns:1fr 1fr;gap:25px}.footer-logo{grid-column:1/-1}.site-footer>p{line-height:1.7;margin-top:20px}.site-footer>p>span{display:block;margin:0}.contact-bubble{width:42px;height:42px;right:15px;bottom:15px}dialog{padding:35px 24px}dialog h2{font-size:30px}}
@media(max-width:390px){.dock-link{padding:0 8px}.contact-pill{padding-right:11px;gap:7px}.contact-pill .dot-emblem{width:30px;height:30px}.dot-emblem i{left:12px;top:13px}.hero-intro h1{font-size:27px}.hero-grid{grid-template-columns:1.1fr 1fr}.hero{padding-top:125px}.hold-button,.metal-button{padding:0 14px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}::view-transition-old(root),::view-transition-new(root){animation:none}}
::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}::view-transition-new(root){z-index:999}

[data-theme=dark] .avatar-wrap>div>svg{filter:drop-shadow(1px 0 0 #fafafa) drop-shadow(-1px 0 0 #fafafa) drop-shadow(0 1px 0 #fafafa) drop-shadow(0 -1px 0 #fafafa)}
@media(max-width:500px){.hero{padding:110px 0 70px;min-height:100svh}.hero-grid{grid-template-columns:1fr;gap:28px}.hero-intro h1{font-size:32px;min-height:2.1em}.role-line{white-space:nowrap}.hero-actions{flex-direction:row;margin-top:25px;gap:12px}.avatar-wrap{grid-row:2;width:220px;margin:auto}.avatar-wrap svg{height:245px}.hero-highlights{grid-column:auto;grid-row:3;margin-top:0;gap:14px}.highlight{font-size:13px}.highlight.expanded p{max-height:100px}.scroll-orbit{display:none}}

.hero-intro{container-type:inline-size}.hero-intro h1{font-size:clamp(24px,calc(100cqw / 9.4),52px)}@media(max-width:900px){.hero-intro h1{font-size:clamp(28px,calc(100cqw / 9.4),38px)}}@media(max-width:500px){.hero-intro h1{font-size:32px}}

.hover-label{display:inline-grid;white-space:pre}.hover-label-stable,.hover-label-output{grid-area:1 / 1}.hover-label-stable{visibility:hidden}.particle-footer{height:340px}@media(max-width:760px){.particle-footer{height:210px}}

.particle-footer{height:max(200px,27.8vw)}

/* Real SGP screenshots retain their original colors and proportions. */
.case-visual.has-capture{padding:24px 24px 52px;gap:16px;background:var(--surface)}
.project-capture{display:block;width:100%;height:auto;border-radius:10px;box-shadow:0 14px 35px -15px #0006;object-fit:contain}
.preview-art>.project-capture{width:92%;max-height:92%;object-fit:contain;border-radius:6px}
.project-source{align-self:flex-start;font-size:12px}.detail-source{margin-bottom:22px;margin-right:24px}.detail-source[hidden]{display:none}
#details.has-captures{width:min(1080px,calc(100% - 32px))}
.capture-figure{margin:25px 0 16px}.capture-figure>img{display:block;width:100%;height:auto;max-height:60svh;object-fit:contain;background:var(--surface);border:1px solid var(--line);border-radius:12px}
.capture-figure figcaption{font-size:12px;line-height:1.6;color:var(--muted);margin-top:12px;min-height:1.6em}
.capture-picker{display:flex;flex-wrap:wrap;gap:8px}.capture-choice{padding:9px 14px;border:1px solid var(--line);border-radius:30px;font-size:12px;color:var(--muted);transition:background .2s,color .2s}.capture-choice[aria-pressed=true]{background:var(--fg);color:var(--bg);border-color:var(--fg)}
.capture-image-link{display:block;width:fit-content;max-width:100%;margin-inline:auto;border-radius:12px;overflow:hidden;line-height:0;box-shadow:0 10px 35px -20px #0007}
.capture-image-link img{display:block;width:auto;height:auto;max-width:100%;max-height:72svh;object-fit:contain}
.capture-full{margin:16px 0 8px;font-size:11px;color:var(--muted)}
#detail-visual>.capture-picker{margin-top:24px}
.capture-figure.is-phone .capture-image-link{padding:6px;border-radius:30px;background:#202020;border:1px solid #777;box-shadow:0 16px 40px -25px #000a}
.capture-figure.is-phone img{border-radius:24px;max-height:76svh}
.phone-showcase{position:relative;display:flex;justify-content:center;align-items:center;gap:22px;width:100%;padding:26px 20px 12px;isolation:isolate}
.phone-showcase::before{content:'';position:absolute;inset:22% 7%;border:1px solid var(--line);border-radius:50%;transform:rotate(-18deg);z-index:-1;opacity:.55}
.showcase-device{width:40%;max-width:186px;margin:0;position:relative;transition:transform .6s cubic-bezier(.2,.8,.2,1)}
.device-0{transform:translateY(-8px) rotate(-7deg)}.device-1{transform:translateY(8px) rotate(7deg)}
.phone-shell{padding:5px;border:1px solid #686868;background:#202020;border-radius:29px;box-shadow:0 22px 30px -20px #000b}
.phone-shell img{display:block;width:100%;height:auto;border-radius:23px;aspect-ratio:1179/2556}
.showcase-device figcaption{font-size:9px;text-align:center;color:var(--muted);margin-top:17px;letter-spacing:.08em;text-transform:uppercase}
.case-visual:hover .device-0{transform:translateY(-13px) rotate(-4deg)}.case-visual:hover .device-1{transform:translateY(2px) rotate(4deg)}
.preview-art .phone-showcase{height:100%;padding:12px;gap:10px}.preview-art .showcase-device{width:auto;height:85%;max-width:40%}.preview-art .phone-shell{height:100%;padding:2px;border-radius:12px}.preview-art .phone-shell img{height:100%;width:auto;max-width:100%;border-radius:9px;object-fit:contain}.preview-art .showcase-device figcaption{display:none}
.experiment-panel[data-kind=music] .record-player{height:auto;max-width:100%;width:100%;background:none;box-shadow:none;transform:none}
.experiment-panel[data-kind=music] .phone-showcase{padding-block:16px}.experiment-panel[data-kind=music] .showcase-device{max-width:148px}
@media(max-width:600px){.phone-showcase{gap:15px;padding:20px 4px 8px}.showcase-device{width:41%;max-width:155px}.phone-shell{border-radius:24px;padding:4px}.phone-shell img{border-radius:19px}.capture-image-link{border-radius:8px}.capture-figure.is-phone .capture-image-link{border-radius:24px}.capture-figure.is-phone img{border-radius:18px;max-height:70svh}.capture-full{font-size:11px}}
@media(prefers-reduced-motion:reduce){.showcase-device{transition:none}}

/* A single aligned profile, followed by a clear list of services. */
.about-layout{display:grid;grid-template-columns:1fr 1.12fr;gap:clamp(36px,6vw,90px);align-items:start}
.about-kicker{display:block;font-family:monospace;text-transform:uppercase;font-size:10px;letter-spacing:.1em;color:var(--muted);margin-bottom:25px}
.about-identity h2{font-size:clamp(28px,3.2vw,42px);font-weight:500;line-height:1.2;letter-spacing:-.045em;margin:0}
.about-identity h2 span{color:var(--muted)}
.about-statement{font-size:clamp(21px,2.4vw,30px);line-height:1.4;letter-spacing:-.025em;margin:34px 0 27px}
.about-github{padding-bottom:8px;border-bottom:1px solid var(--line)}
.about-profile>p{font-size:14px;line-height:1.8;color:var(--muted);margin:0 0 20px}
.about-profile>p.about-intro{font-size:23px;line-height:1.4;color:var(--fg);letter-spacing:-.025em;margin-bottom:24px}
.about-focus{margin:28px 0 0}.about-focus>div{display:grid;grid-template-columns:90px 1fr;gap:20px;padding:15px 0;border-top:1px solid var(--line);font-size:12px;line-height:1.6}.about-focus dt{color:var(--fg)}.about-focus dd{margin:0;color:var(--muted)}
.about .services{margin-top:55px;padding-top:30px;border-top:1px solid var(--line);grid-template-columns:1fr 1.12fr;column-gap:clamp(36px,6vw,90px)}
.contact-email{display:table;margin:22px auto 0;color:var(--muted);padding:5px 0;border-bottom:1px solid transparent;transition:border-color .2s}.contact-email:hover{border-color:currentColor}
.email-toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);z-index:120;max-width:calc(100vw - 110px);width:max-content;padding:12px 18px;border:1px solid var(--line);border-radius:30px;background:var(--fg);color:var(--bg);font-size:12px;line-height:1.4;box-shadow:0 8px 30px #0002;animation:toast-in .2s ease-out}
.email-toast[hidden]{display:none}.bubble-label{position:absolute;right:calc(100% + 10px);white-space:nowrap;padding:9px 13px;border:1px solid var(--line);border-radius:20px;background:var(--bg);color:var(--fg);font-size:11px;opacity:0;transform:translateX(5px);pointer-events:none;transition:opacity .2s,transform .2s}.contact-bubble:hover .bubble-label,.contact-bubble:focus-visible .bubble-label{opacity:1;transform:none}
@keyframes toast-in{from{opacity:0;translate:0 5px}to{opacity:1;translate:0 0}}
@media(max-width:700px){.about-layout{grid-template-columns:1fr;gap:36px}.about-kicker{margin-bottom:19px}.about-statement{margin:25px 0 20px}.about-profile>p.about-intro{font-size:22px}.about-profile>p{font-size:14px}.about .services{grid-template-columns:1fr;gap:0;margin-top:35px;padding-top:22px}.about-focus>div{grid-template-columns:75px 1fr;gap:14px}.email-toast{bottom:22px;font-size:11px;padding:11px 15px}}
@media(prefers-reduced-motion:reduce){.email-toast{animation:none}}
@media(max-width:600px){.case-visual.has-capture{padding:16px 16px 44px;min-height:220px}.capture-choice{padding:9px 12px;font-size:11px}.capture-figure figcaption{font-size:11px}.capture-figure>img{border-radius:8px}.project-capture{border-radius:7px}}
/* The personal avatar uses Alex's artwork, with subtle SVG eye motion. */
.alex-eye{transform-box:fill-box;transform-origin:center;transform:scaleY(var(--blink,1))}.alex-pupil{transform:translate(calc(var(--look,0)*18px),calc(var(--look-y,0)*11px))}.avatar-fallback{display:block;width:100%;height:auto}

.project-status{display:inline-flex;align-items:center;gap:8px;margin:0;font-size:11px;font-weight:500;color:var(--fg);line-height:1.6}.project-status::before{content:'';width:6px;height:6px;flex:none;border-radius:50%;background:currentColor;box-shadow:0 0 0 3px color-mix(in srgb,var(--fg) 10%,transparent)}
#detail-technical:empty{display:none}.technical-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:18px 0 28px}.technical-grid section{padding:20px;border:1px solid var(--line);border-radius:16px;background:var(--surface)}.technical-grid h3{margin:0 0 13px;font-size:14px;font-weight:500;letter-spacing:-.02em}.technical-grid ul{padding-left:16px;margin:0;color:var(--muted);font-size:12px;line-height:1.8}.technical-grid li+li{margin-top:5px}
@media(max-width:600px){.technical-grid{grid-template-columns:1fr}.technical-grid section{padding:17px}.case-story .project-status{font-size:10px}}

.avatar-3d{display:block;width:100%;height:auto;aspect-ratio:1;max-height:420px}#avatar-art{perspective:850px}#avatar-art[data-avatar-renderer=continuous-perspective]>svg{transform-origin:50% 65%;transform:rotateY(calc(var(--look,0)*14deg)) rotateX(calc(var(--look-y,0)*-9deg))}[data-theme=dark] .avatar-3d{filter:drop-shadow(1px 0 0 #fafafa) drop-shadow(-1px 0 0 #fafafa) drop-shadow(0 1px 0 #fafafa) drop-shadow(0 -1px 0 #fafafa)}

/* Personal story and balanced, clearly named contact channels. */
.hero-profession{font-size:12px;line-height:1.7;color:var(--muted);max-width:30ch;margin:22px 0 0}
.about-personal{font-size:12px;line-height:1.8;color:var(--muted);max-width:32ch;margin:30px 0 0}
.about-profile>p.about-freelance{margin:24px 0 0;color:var(--fg);font-size:13px}
.contact-actions{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:12px}
.contact-channel{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:52px;padding:0 22px;border:1px solid var(--line);border-radius:99px;font-size:14px;transition:background .2s,border-color .2s}
.contact-channel svg{width:20px;height:20px;display:block}.contact-channel:hover{background:var(--surface);border-color:var(--muted)}
.contact-bubble{width:52px;height:52px;display:flex;align-items:center;justify-content:center;line-height:0;padding:0;right:max(24px,calc(env(safe-area-inset-right,0px) + 16px));bottom:max(24px,calc(env(safe-area-inset-bottom,0px) + 16px))}
.contact-bubble svg{display:block;width:24px;height:24px;flex:none;stroke-width:1.6}
@media(max-width:900px){.hero-highlights .highlight.expanded p{max-height:190px}.contact-channel{min-height:46px;font-size:12px;padding-inline:18px}}
@media(max-width:600px){.contact-actions{gap:10px}.contact-actions .contact-pill.large{font-size:14px;min-height:48px;padding-right:20px}.contact-channel{min-height:48px;padding-inline:19px;font-size:13px}.contact-bubble{width:48px;height:48px;right:max(18px,calc(env(safe-area-inset-right,0px) + 12px));bottom:max(18px,calc(env(safe-area-inset-bottom,0px) + 12px))}.contact-bubble svg{width:23px;height:23px}.hero-profession{margin-top:18px;max-width:34ch}}
@media(max-width:360px){.hero-intro h1{font-size:27px}.contact-channel{padding-inline:16px}.contact-actions .contact-pill.large{padding-right:17px}}

@media(max-width:360px){.site-header .contact-pill{width:46px;min-width:46px;padding:0;justify-content:center;gap:0}.site-header .contact-pill>span:last-child{display:none}}

/* Real Telegram capture, with only a censored copy shipped in the portfolio. */
.telegram-showcase{display:flex;align-items:center;justify-content:center;width:100%}
.telegram-showcase img{display:block;width:auto;height:auto;max-width:100%;max-height:420px;border:1px solid var(--line);border-radius:14px;box-shadow:0 16px 35px -22px #0008}
.preview-art .telegram-showcase{height:100%;padding:10px}.preview-art .telegram-showcase img{max-height:100%;border-radius:7px}
.experiment-panel[data-kind=bot] .record-player{height:auto;width:100%;max-width:100%;background:transparent;transform:none;box-shadow:none}
.experiment-panel[data-kind=bot] .telegram-showcase img{max-height:390px}
@media(max-width:600px){.telegram-showcase img{max-height:370px}}
