:root{--bg:#0a0b09;--bg-2:#101210;--panel:#13150f;--line:#23261d;--ink:#ecefe4;--muted:#8b8f80;--faint:#5a5e51;--signal:#d6ff3f;--signal-dim:#9bbf2e;--display:"Bricolage Grotesque", sans-serif;--mono:"JetBrains Mono", monospace;--body:"Spline Sans", sans-serif}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--ink);font-family:var(--body);-webkit-font-smoothing:antialiased;line-height:1.55;overflow-x:hidden}body:before{content:"";background-image:linear-gradient(var(--line) 1px, transparent 1px), linear-gradient(90deg, var(--line) 1px, transparent 1px);opacity:.25;pointer-events:none;z-index:0;background-size:64px 64px;position:fixed;inset:0;-webkit-mask-image:radial-gradient(90% 80% at 50% 0,#000 30%,#0000 95%);mask-image:radial-gradient(90% 80% at 50% 0,#000 30%,#0000 95%)}.wrap{z-index:2;max-width:1080px;margin:0 auto;padding:0 28px;position:relative}.statusbar{z-index:20;font-family:var(--mono);letter-spacing:.06em;color:var(--faint);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:linear-gradient(#0a0b09eb,#0a0b0900);justify-content:space-between;align-items:center;padding:12px 28px;font-size:11px;display:flex;position:fixed;top:0;left:0;right:0}.statusbar .live{color:var(--muted)}.statusbar .dot{background:var(--signal);width:7px;height:7px;box-shadow:0 0 8px var(--signal);border-radius:50%;margin-right:7px;animation:2.4s infinite pulse;display:inline-block}@keyframes pulse{0%,to{opacity:1}50%{opacity:.25}}.statusbar nav a{color:var(--faint);margin-left:18px;text-decoration:none;transition:color .2s}.statusbar nav a:hover{color:var(--signal)}@media (width<=760px){.statusbar nav{display:none}}.hero{flex-direction:column;justify-content:center;min-height:92vh;padding:150px 0 90px;display:flex;position:relative}#signal{z-index:0;opacity:.55;pointer-events:none;width:100%;height:340px;position:absolute;top:50%;left:0;right:0;transform:translateY(-50%)}.hero .inner{z-index:2;position:relative}.eyebrow{font-family:var(--mono);letter-spacing:.18em;text-transform:uppercase;color:var(--signal);align-items:center;gap:10px;margin-bottom:22px;font-size:12px;display:flex}.eyebrow:before{content:"";background:var(--signal);width:34px;height:1px}.lede{color:#cfd2c5;max-width:620px;margin-bottom:34px;font-size:clamp(1.05rem,2.2vw,1.4rem)}.lede b{color:var(--ink);font-weight:600}.meta{font-family:var(--mono);color:var(--muted);flex-wrap:wrap;gap:10px 26px;font-size:12.5px;display:flex}.meta span{align-items:center;gap:8px;display:flex}.meta i{color:var(--signal);font-style:normal}section{padding:84px 0;position:relative}.sec-head{align-items:baseline;gap:16px;margin-bottom:48px;display:flex}.sec-num{font-family:var(--mono);color:var(--signal);letter-spacing:.1em;font-size:12px}.sec-title{font-family:var(--display);letter-spacing:-.02em;font-size:clamp(1.8rem,4vw,2.8rem);font-weight:600}.sec-line{background:var(--line);flex:1;align-self:center;height:1px;margin-left:8px}.stack-grid{background:var(--line);border:1px solid var(--line);grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:1px;display:grid}.stack-cell{background:var(--bg-2);padding:22px 24px}.stack-cell h3{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--faint);margin-bottom:14px;font-size:11px}.tags{flex-wrap:wrap;gap:8px;display:flex}.tag{font-family:var(--mono);color:#d2d6c7;border:1px solid var(--line);cursor:default;border-radius:2px;padding:5px 11px;font-size:12.5px;transition:all .18s}.tag:hover{border-color:var(--signal);color:var(--signal);box-shadow:0 0 0 1px var(--signal-dim) inset}.job{border-top:1px solid var(--line);grid-template-columns:230px 1fr;gap:40px;padding:36px 0;display:grid;position:relative}.job:hover .job-side .role{color:var(--signal)}.job-side .period{font-family:var(--mono);color:var(--faint);margin-bottom:6px;font-size:12px}.job-side .role{font-family:var(--display);font-size:1.18rem;font-weight:600;line-height:1.2;transition:color .2s}.job-side .company{color:var(--muted);margin-top:4px;font-size:.92rem}.job-side .domains{font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--signal-dim);margin-top:14px;font-size:10.5px}.job-body .summary{color:#cfd2c5;margin-bottom:16px;font-size:1.02rem}.job-body ul{flex-direction:column;gap:11px;list-style:none;display:flex}.job-body li{color:var(--muted);padding-left:22px;font-size:.97rem;position:relative}.job-body li:before{content:"→";color:var(--signal-dim);position:absolute;left:0}.job-body .jtags{flex-wrap:wrap;gap:7px;margin-top:20px;display:flex}@media (width<=760px){.job{grid-template-columns:1fr;gap:18px}}.edu-grid{flex-direction:column;display:flex}.edu{border-top:1px solid var(--line);grid-template-columns:1fr auto;align-items:baseline;gap:20px;padding:20px 0;display:grid}.edu .e-name{font-family:var(--display);font-size:1.1rem;font-weight:600}.edu .e-desc{color:var(--muted);margin-top:2px;font-size:.95rem}.edu .e-when{font-family:var(--mono);color:var(--faint);white-space:nowrap;font-size:11.5px}@media (width<=560px){.edu{grid-template-columns:1fr}.edu .e-when{margin-top:8px}}.notes{background:var(--line);border:1px solid var(--line);grid-template-columns:1fr 1fr;gap:1px;display:grid}.note{background:var(--bg-2);padding:30px}.note .n-mark{font-family:var(--mono);color:var(--signal);margin-bottom:14px;font-size:13px}.note h3{font-family:var(--display);margin-bottom:14px;font-size:1.18rem;font-weight:600;line-height:1.25}.note p{color:var(--muted);font-size:.97rem}@media (width<=760px){.notes{grid-template-columns:1fr}}.about{background:var(--line);border:1px solid var(--line);grid-template-columns:1fr 1fr;gap:1px;display:grid}.about-cell{background:var(--bg-2);padding:28px 30px}.about-cell .label{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--signal);margin-bottom:14px;font-size:11px}.about-cell p{color:#cfd2c5;font-size:1rem}.about-cell.wide{grid-column:1/-1}.about-cell.wide p{font-family:var(--display);color:var(--ink);max-width:620px;font-size:1.2rem;font-weight:400;line-height:1.4}@media (width<=560px){.about{grid-template-columns:1fr}.about-cell.wide{grid-column:auto}}.contact{text-align:center;padding:110px 0 70px}.contact h2{font-family:var(--display);letter-spacing:-.03em;margin-bottom:30px;font-size:clamp(2.4rem,8vw,5rem);font-weight:800;line-height:1}.contact a.mail{color:var(--signal);border-bottom:1px solid #0000;text-decoration:none;transition:all .2s}.contact a.mail:hover{border-color:var(--signal)}.links{flex-wrap:wrap;justify-content:center;gap:14px;margin-top:40px;display:flex}.links a{font-family:var(--mono);letter-spacing:.04em;color:var(--muted);border:1px solid var(--line);border-radius:2px;padding:11px 20px;font-size:12.5px;text-decoration:none;transition:all .2s}.links a:hover{color:var(--bg);background:var(--signal);border-color:var(--signal)}footer{border-top:1px solid var(--line);font-family:var(--mono);color:var(--faint);flex-wrap:wrap;justify-content:space-between;gap:8px;padding:24px 0;font-size:11px;display:flex}.reveal{opacity:0;transition:opacity .7s,transform .7s;transform:translateY(24px)}.reveal.in{opacity:1;transform:none}.portfolio-grid{background:var(--line);border:1px solid var(--line);grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1px;display:grid}.portfolio-card{background:var(--bg-2);cursor:pointer;color:inherit;padding:22px;text-decoration:none;transition:background .2s;display:block}.portfolio-card:hover{background:#17190f}.portfolio-card-visual{aspect-ratio:4/3;background:var(--bg);border-radius:2px;margin-bottom:18px;position:relative;overflow:hidden}.portfolio-card-placeholder{z-index:2;pointer-events:none;justify-content:center;align-items:center;transition:opacity .4s;display:flex;position:absolute;inset:0}.portfolio-card-glow{opacity:.18;position:absolute;inset:0}.portfolio-card-num{font-family:var(--mono);letter-spacing:-.04em;opacity:.85;-webkit-user-select:none;user-select:none;z-index:1;font-size:clamp(3rem,8vw,4.5rem);font-weight:400;position:relative}.portfolio-card-3d{z-index:1;position:absolute;inset:0}.portfolio-card-body{flex-direction:column;gap:10px;display:flex}.portfolio-card-head{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.portfolio-card-head h3{font-family:var(--display);letter-spacing:-.01em;font-size:1.05rem;font-weight:600;line-height:1.2}.portfolio-card-cat{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;opacity:.7;white-space:nowrap;padding-top:4px;font-size:10.5px}.portfolio-card-desc{color:var(--muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:.92rem;line-height:1.5;display:-webkit-box;overflow:hidden}.portfolio-card-tags{margin-top:4px}.filter-chips{flex-wrap:wrap;gap:18px;margin-bottom:32px;display:flex}.filter-chip{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--faint);cursor:pointer;background:0 0;border:none;border-bottom:1px solid #0000;padding:6px 0;font-size:11px;transition:color .2s}.filter-chip:hover{color:var(--ink)}.filter-chip.active{color:var(--signal);border-bottom-color:var(--signal)}.modal-overlay{z-index:60;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.modal-backdrop{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#0a0b09db;position:absolute;inset:0}.modal-card{background:var(--bg-2);border:1px solid var(--line);border-radius:4px;flex-direction:column;width:100%;max-width:920px;max-height:86vh;display:flex;position:relative;overflow:hidden}@media (width>=760px){.modal-card{flex-direction:row;max-height:80vh}}.modal-visual{background:var(--bg);flex:0 0 40%;justify-content:center;align-items:center;min-height:280px;display:flex;position:relative}.modal-body{flex:1;padding:32px 36px;overflow-y:auto}.modal-close{z-index:5;border:1px solid var(--line);color:var(--muted);cursor:pointer;background:0 0;border-radius:2px;width:32px;height:32px;transition:all .18s;position:absolute;top:12px;right:12px}.modal-close:hover{color:var(--signal);border-color:var(--signal)}.modal-cat{font-family:var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--signal);margin-bottom:12px;font-size:11px}.modal-title{font-family:var(--display);letter-spacing:-.02em;margin-bottom:18px;font-size:1.8rem;font-weight:700;line-height:1.1}.modal-desc{color:#cfd2c5;margin-bottom:24px;font-size:1rem;line-height:1.55}.modal-section-label{font-family:var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--faint);margin-bottom:12px;font-size:10.5px}.modal-actions{flex-wrap:wrap;gap:10px;margin-top:28px;display:flex}.modal-btn{font-family:var(--mono);letter-spacing:.04em;border:1px solid var(--line);color:var(--muted);border-radius:2px;padding:11px 18px;font-size:12.5px;text-decoration:none;transition:all .18s}.modal-btn:hover{color:var(--ink);border-color:var(--muted)}.modal-btn.primary{background:var(--signal);border-color:var(--signal);color:var(--bg);font-weight:500}.modal-btn.primary:hover{background:var(--signal-dim);border-color:var(--signal-dim)}*,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:""}html,:host{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.h-full{height:100%}.w-full{width:100%}.touch-none{touch-action:none}.resize{resize:both}.blur{--tw-blur:blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter,backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}h1{font-family:var(--display);letter-spacing:-.03em;margin-bottom:26px;font-size:clamp(3rem,11vw,8rem);font-weight:800;line-height:.92}h1 .stroke{color:#0000;-webkit-text-stroke:1.5px var(--muted)}
