@import "https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700&family=Geist+Mono:wght@500;600&display=swap";@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}:root{--font-display:"Geist", ui-sans-serif, system-ui, sans-serif;--font-body:"Geist", ui-sans-serif, system-ui, sans-serif;--font-outlier:"Geist Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--color-page:oklch(94% .009 82);--color-page-alt:oklch(89% .011 82);--color-paper:oklch(98% .006 82);--color-paper-soft:oklch(95% .008 82);--color-surface:oklch(99% .004 82);--color-surface-strong:oklch(94% .008 82);--color-elevated:oklch(100% .003 82);--color-ink:oklch(18% .008 70);--color-ink-soft:oklch(30% .008 70);--color-muted:oklch(48% .008 76);--color-rule:oklch(86% .008 82);--color-rule-strong:oklch(76% .009 82);--color-invert:oklch(16% .008 70);--color-invert-ink:oklch(97% .006 82);--color-accent:oklch(21% .01 70);--color-accent-ink:oklch(97% .006 82);--color-focus:oklch(48% .14 252);--color-success:oklch(46% .12 150);--color-error:oklch(54% .18 28);--color-texture-line:oklch(79% .008 82/.32);--color-texture-soft:oklch(98% .004 82/.72);--color-texture-shadow:oklch(42% .008 70/.1);--color-lava-one:oklch(91% .014 74/.58);--color-lava-two:oklch(82% .012 88/.42);--color-lava-three:oklch(99% .004 82/.54);--color-contour-line:oklch(82% .006 82);--color-contour-dot:oklch(24% .008 70);--color-project-ink:oklch(28% .018 248);--color-project-blue:oklch(66% .16 252);--color-project-blue-soft:oklch(90% .035 252);--color-project-wash:oklch(97% .012 252);--space-3xs:.125rem;--space-2xs:.25rem;--space-xs:.5rem;--space-sm:.75rem;--space-md:1rem;--space-lg:1.5rem;--space-xl:2.5rem;--space-2xl:4rem;--space-3xl:6rem;--space-4xl:9rem;--text-xs:.75rem;--text-sm:.875rem;--text-base:1rem;--text-md:1.125rem;--text-lg:1.375rem;--text-xl:1.75rem;--text-2xl:2.25rem;--text-3xl:3rem;--text-display:clamp(2.6rem, 3vw + .75rem, 3.75rem);--ease-out:cubic-bezier(.16, 1, .3, 1);--ease-in:cubic-bezier(.7, 0, .84, 0);--ease-in-out:cubic-bezier(.65, 0, .35, 1);--dur-micro:.12s;--dur-short:.22s;--dur-long:.42s;--rule-hair:1px;--radius-xs:.25rem;--radius-sm:.375rem;--radius-md:.5rem;--radius-frame:.5rem;--shadow-frame:0 1.5rem 4rem oklch(18% .008 70/.16), 0 0 0 1px oklch(100% .003 82/.35);--shadow-card:0 .75rem 1.75rem oklch(18% .008 70/.08);--shadow-press:0 .25rem .75rem oklch(18% .008 70/.08)}html.dark{--color-page:oklch(17% .008 70);--color-page-alt:oklch(11% .008 70);--color-paper:oklch(14% .008 70);--color-paper-soft:oklch(17% .008 70);--color-surface:oklch(16% .008 70);--color-surface-strong:oklch(21% .008 70);--color-elevated:oklch(19% .008 70);--color-ink:oklch(94% .006 82);--color-ink-soft:oklch(78% .006 82);--color-muted:oklch(66% .006 82);--color-rule:oklch(27% .008 70);--color-rule-strong:oklch(36% .008 70);--color-invert:oklch(95% .006 82);--color-invert-ink:oklch(15% .008 70);--color-accent:oklch(94% .006 82);--color-accent-ink:oklch(15% .008 70);--color-focus:oklch(72% .13 252);--color-success:oklch(72% .11 150);--color-error:oklch(72% .15 28);--color-texture-line:oklch(39% .008 70/.25);--color-texture-soft:oklch(22% .008 70/.74);--color-texture-shadow:oklch(4% .006 70/.34);--color-lava-one:oklch(25% .008 70/.62);--color-lava-two:oklch(38% .006 82/.34);--color-lava-three:oklch(12% .006 70/.72);--color-contour-line:oklch(29% .008 70);--color-contour-dot:oklch(92% .006 82);--color-project-ink:oklch(78% .028 248);--color-project-blue:oklch(72% .15 252);--color-project-blue-soft:oklch(24% .028 252);--color-project-wash:oklch(18% .012 252);--shadow-frame:0 1.5rem 4rem oklch(4% .006 70/.38), 0 0 0 1px oklch(94% .006 82/.08);--shadow-card:0 .75rem 1.75rem oklch(4% .006 70/.2);--shadow-press:0 .25rem .75rem oklch(4% .006 70/.18)}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--text-xs:.75rem;--text-sm:.875rem;--text-base:1rem;--text-lg:1.125rem;--text-2xl:1.5rem;--radius-xs:.125rem;--radius-sm:.25rem;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}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;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);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}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.fixed{position:fixed}.static{position:static}.grid{display:grid}.hidden{display:none}.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,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}}*{box-sizing:border-box}.sr-only{clip:rect(0, 0, 0, 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}html,body,#app{min-height:100%;overflow-x:clip}html{background:var(--color-page);color:var(--color-ink);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-family:var(--font-body);scroll-behavior:auto;font-size:100%}html.dark{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}body{background:var(--color-page);color:var(--color-ink);font-family:var(--font-body);font-size:var(--text-base);text-rendering:optimizelegibility;margin:0;line-height:1.5}button,input,textarea,select{font:inherit}button,a{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}img,svg{max-width:100%;display:block}:focus{outline:none}:focus-visible{outline:2px solid var(--color-focus);outline-offset:3px}::selection{background:var(--color-invert);color:var(--color-invert-ink)}::view-transition-old(root){animation-duration:.28s;animation-timing-function:var(--ease-out)}::view-transition-new(root){animation-duration:.28s;animation-timing-function:var(--ease-out)}.app-shell{background:var(--color-page);isolation:isolate;min-height:100dvh;position:relative}.app-background{background:linear-gradient(135deg, var(--color-page), var(--color-page-alt)), var(--color-page);pointer-events:none;z-index:0;position:fixed;inset:0;overflow:hidden}.app-background__wash,.app-background__lava,.app-background__three{position:absolute;inset:0}.app-background__three{mix-blend-mode:multiply;opacity:.52;pointer-events:none;z-index:1}html.dark .app-background__three{mix-blend-mode:screen;opacity:.46}.app-background__three canvas{pointer-events:none}.app-background__wash{background:radial-gradient(ellipse at 18% 18%, var(--color-lava-three), transparent 48%), radial-gradient(ellipse at 78% 70%, var(--color-texture-soft), transparent 52%), linear-gradient(120deg, var(--color-texture-shadow), transparent 36%)}.app-background__lava{filter:blur(3.25rem);opacity:.72;will-change:transform;transform:translate(0)scale(1.04)}.app-background__lava--one{background:radial-gradient(ellipse at 22% 36%, var(--color-lava-one), transparent 39%), radial-gradient(ellipse at 72% 18%, var(--color-lava-three), transparent 34%), radial-gradient(ellipse at 84% 82%, var(--color-lava-two), transparent 44%);animation:lava-drift-one 72s var(--ease-in-out) infinite alternate}.app-background__lava--two{background:radial-gradient(ellipse at 8% 80%, var(--color-texture-line), transparent 36%), radial-gradient(ellipse at 92% 42%, var(--color-lava-one), transparent 42%);animation:lava-drift-two 86s var(--ease-in-out) infinite alternate;mix-blend-mode:multiply;opacity:.5}html.dark .app-background__lava--two{mix-blend-mode:screen;opacity:.28}.bg-motion-off .app-background__lava{animation-play-state:paused}.app-content{z-index:10;min-height:100dvh;position:relative}.floating-settings{align-items:flex-end;gap:var(--space-sm);z-index:50;flex-direction:column;display:flex;position:fixed;inset-block-end:max(var(--space-lg), env(safe-area-inset-bottom));inset-inline-end:max(var(--space-lg), env(safe-area-inset-right))}.floating-settings__menu{align-items:flex-end;gap:var(--space-xs);flex-direction:column;inline-size:7.75rem;display:flex}.floating-settings__slot{inline-size:100%;display:flex}.floating-settings__item{background:var(--color-paper);align-items:center}@supports (color:color-mix(in lab, red, red)){.floating-settings__item{background:color-mix(in oklch, var(--color-paper) 88%, transparent)}}.floating-settings__item{-webkit-backdrop-filter:blur(1rem)saturate(1.1);backdrop-filter:blur(1rem)saturate(1.1);border:var(--rule-hair) solid var(--color-rule-strong);box-shadow:var(--shadow-card);color:var(--color-ink-soft);font-size:var(--text-xs);gap:var(--space-sm);min-block-size:3rem;inline-size:100%;padding:var(--space-2xs) var(--space-md);border-radius:999px;grid-template-columns:minmax(0,1fr) 1rem;font-weight:600;display:grid}.floating-settings__item.theme-toggle,.floating-settings__item.motion-toggle,.floating-settings__item.fx-toggle,.floating-settings__item.sound-toggle{background:var(--color-paper)}@supports (color:color-mix(in lab, red, red)){.floating-settings__item.theme-toggle,.floating-settings__item.motion-toggle,.floating-settings__item.fx-toggle,.floating-settings__item.sound-toggle{background:color-mix(in oklch, var(--color-paper) 88%, transparent)}}.floating-settings__item.theme-toggle,.floating-settings__item.motion-toggle,.floating-settings__item.fx-toggle,.floating-settings__item.sound-toggle{border:var(--rule-hair) solid var(--color-rule-strong);gap:var(--space-sm);min-block-size:3rem;inline-size:100%;padding:var(--space-2xs) var(--space-md);place-items:initial;border-radius:999px;grid-template-columns:minmax(0,1fr) 1rem;display:grid}.floating-settings__item>span:not(.theme-toggle__icons){white-space:nowrap;grid-area:1/1;place-self:center start;line-height:1}.floating-settings__item>svg,.floating-settings__item>.theme-toggle__icons{grid-area:1/2;place-self:center end;inline-size:1rem}.floating-settings__item.tooltip-control:after{display:none}.floating-settings__trigger{background:var(--color-invert);align-items:center}@supports (color:color-mix(in lab, red, red)){.floating-settings__trigger{background:color-mix(in oklch, var(--color-invert) 92%, transparent)}}.floating-settings__trigger{border:var(--rule-hair) solid var(--color-invert-ink)}@supports (color:color-mix(in lab, red, red)){.floating-settings__trigger{border:var(--rule-hair) solid color-mix(in oklch, var(--color-invert-ink) 25%, transparent)}}.floating-settings__trigger{box-shadow:var(--shadow-frame);color:var(--color-invert-ink);cursor:pointer;min-block-size:3.25rem;inline-size:3.25rem;transition:background-color var(--dur-short) var(--ease-out), transform var(--dur-micro) var(--ease-out);border-radius:50%;justify-content:center;display:inline-flex}.portfolio-page{isolation:isolate;min-height:100dvh;position:relative}.site-stage{min-height:100dvh;padding:clamp(var(--space-lg), 5vw, var(--space-4xl)) clamp(var(--space-md), 5vw, var(--space-3xl));z-index:1;place-items:center;display:grid;position:relative}.portfolio-frame{background:var(--color-paper);background:var(--color-paper)}@supports (color:color-mix(in lab, red, red)){.portfolio-frame{background:color-mix(in oklch, var(--color-paper) 90%, transparent)}}.portfolio-frame{-webkit-backdrop-filter:blur(1.4rem)saturate(1.05);backdrop-filter:blur(1.4rem)saturate(1.05);border:var(--rule-hair) solid var(--color-rule-strong);border-radius:var(--radius-frame);box-shadow:var(--shadow-frame);inline-size:min(100%,68rem);overflow:clip}.site-header{border-bottom:var(--rule-hair) solid var(--color-rule);min-height:5rem;padding:0 clamp(var(--space-lg), 4vw, var(--space-2xl));grid-template-columns:auto 1fr auto;align-items:center;display:grid;position:relative}.site-header__logo{border-radius:var(--radius-xs);font-family:var(--font-outlier);font-size:var(--text-lg);letter-spacing:0;white-space:nowrap;align-items:center;min-block-size:2.75rem;font-weight:600;display:inline-flex}.site-header__menu{border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-sm);color:var(--color-ink);cursor:pointer;min-block-size:2.75rem;inline-size:2.75rem;transition:background-color var(--dur-short) var(--ease-out), transform var(--dur-micro) var(--ease-out);background:0 0;justify-content:center;align-items:center;padding:0;display:none}.site-nav{align-items:center;gap:var(--space-md);justify-self:end;display:flex}.site-nav ul{align-items:center;gap:clamp(var(--space-sm), 2vw, var(--space-lg));margin:0;padding:0;list-style:none;display:flex}.site-nav a{border-radius:var(--radius-xs);color:var(--color-ink-soft);font-size:var(--text-xs);min-block-size:2.75rem;padding:var(--space-md) var(--space-2xs);transition:color var(--dur-short) var(--ease-out), transform var(--dur-micro) var(--ease-out);white-space:nowrap;font-weight:500;display:inline-flex;position:relative}.site-nav a:after{block-size:var(--rule-hair);content:"";opacity:0;transform-origin:0;inline-size:100%;transition:opacity var(--dur-short) var(--ease-out), transform var(--dur-short) var(--ease-out);background:currentColor;position:absolute;inset-block-end:.65rem;inset-inline-start:0;transform:scaleX(.4)}.site-nav a.is-active,.site-nav a:hover{color:var(--color-ink)}.site-nav a.is-active:after,.site-nav a:hover:after{opacity:1;transform:scaleX(1)}.theme-toggle,.motion-toggle,.fx-toggle,.sound-toggle{background:var(--color-surface);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-sm);color:var(--color-ink);cursor:pointer;min-block-size:2.75rem;inline-size:2.75rem;transition:background-color var(--dur-short) var(--ease-out), border-color var(--dur-short) var(--ease-out), transform var(--dur-micro) var(--ease-out);place-items:center;padding:0;display:inline-grid;position:relative}.theme-toggle{place-items:center;inline-size:2.75rem;display:inline-grid}.motion-toggle{font-size:var(--text-xs);gap:var(--space-xs);inline-size:auto;padding-inline:var(--space-sm);white-space:nowrap;font-weight:600;display:inline-flex}.fx-toggle{font-family:var(--font-outlier);font-size:var(--text-xs);gap:var(--space-xs);inline-size:auto;padding-inline:var(--space-sm);white-space:nowrap;border-radius:999px;font-weight:700;display:inline-flex}.motion-toggle[aria-pressed=false],.fx-toggle[aria-pressed=false],.sound-toggle[aria-pressed=false]{color:var(--color-muted)}.tooltip-control{position:relative}.tooltip-control:after{background:var(--color-invert);border-radius:var(--radius-xs);color:var(--color-invert-ink);content:attr(data-tooltip);font-size:var(--text-xs);opacity:0;inline-size:max-content;padding:var(--space-xs) var(--space-sm);pointer-events:none;transition:opacity var(--dur-short) var(--ease-out), transform var(--dur-short) var(--ease-out);z-index:20;position:absolute;inset-block-start:calc(100% + var(--space-xs));inset-inline-end:0;transform:translateY(-.25rem)}.tooltip-control:hover:after,.tooltip-control:focus-visible:after{opacity:1;transform:translateY(0)}.theme-toggle__moon,.theme-toggle__sun{transition:opacity var(--dur-short) var(--ease-out), transform var(--dur-short) var(--ease-out);grid-area:1/1}.theme-toggle__icons{place-items:center;display:grid}.theme-toggle__moon{opacity:0;transform:translateY(.25rem)}html.dark .theme-toggle__sun{opacity:0;transform:translateY(-.25rem)}html.dark .theme-toggle__moon{opacity:1;transform:translateY(0)}.hero-section{border-bottom:var(--rule-hair) solid var(--color-rule);align-items:center;gap:clamp(var(--space-xl), 4vw, var(--space-2xl));padding:clamp(var(--space-xl), 5vw, 4.5rem) clamp(var(--space-lg), 4vw, var(--space-2xl));grid-template-columns:minmax(0,1.05fr) minmax(18rem,.95fr);display:grid}.hero-section__copy{min-width:0}.hero-section__intro{color:var(--color-ink-soft);font-size:var(--text-sm);margin:0 0 var(--space-xs)}.hero-section h1{color:var(--color-ink);font-family:var(--font-display);font-size:var(--text-display);letter-spacing:0;overflow-wrap:anywhere;min-width:0;margin:0;font-weight:700;line-height:1}.hero-section__title{color:var(--color-muted);font-size:var(--text-md);margin:var(--space-xs) 0 0}.hero-section__summary{color:var(--color-ink-soft);font-size:var(--text-md);inline-size:min(100%,28rem);margin:var(--space-lg) 0 0;line-height:1.55}.hero-section__actions{align-items:center;gap:var(--space-md);flex-wrap:wrap;margin-block-start:var(--space-xl);display:flex}.hero-section__visual{inline-size:min(100%,20rem);justify-self:end;min-width:0}.hero-section__portrait{aspect-ratio:1;background:var(--color-surface);border:var(--rule-hair) solid var(--color-rule);object-fit:cover;object-position:center;border-radius:50%;inline-size:100%;display:block}.contour-panel{aspect-ratio:1;background:var(--color-surface);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-sm);position:relative;overflow:hidden}.contour-panel__lines{color:var(--color-contour-line);width:100%;height:100%}.contour-panel__lines path{fill:none;stroke:currentColor;stroke-width:1px;vector-effect:non-scaling-stroke}.contour-panel__dot{background:var(--color-contour-dot);border-radius:50%;block-size:.25rem;inline-size:.25rem;position:absolute}.contour-panel__dot--one{inset-block-start:18%;inset-inline-start:52%}.contour-panel__dot--two{inset-block-start:39%;inset-inline-start:67%}.contour-panel__dot--three{inset-block-start:77%;inset-inline-start:36%}.link-button{border-radius:var(--radius-xs);font-size:var(--text-sm);align-items:center;gap:var(--space-sm);min-block-size:2.75rem;padding:0 var(--space-md);transition:background-color var(--dur-short) var(--ease-out), border-color var(--dur-short) var(--ease-out), color var(--dur-short) var(--ease-out), transform var(--dur-micro) var(--ease-out);white-space:nowrap;justify-content:center;font-weight:600;line-height:1;display:inline-flex}.link-button--primary{background:var(--color-invert);border:var(--rule-hair) solid var(--color-invert);color:var(--color-invert-ink)}.link-button--ghost{border:var(--rule-hair) solid transparent;color:var(--color-ink);background:0 0}.link-button--text{color:var(--color-ink);font-size:var(--text-sm);min-block-size:2.25rem;text-decoration:underline;-webkit-text-decoration-color:var(--color-rule-strong);-webkit-text-decoration-color:var(--color-rule-strong);-webkit-text-decoration-color:var(--color-rule-strong);text-decoration-color:var(--color-rule-strong);text-underline-offset:.25rem;background:0 0;border:0;padding:0}.link-button--primary:hover,.link-button--primary:focus-visible{background:var(--color-accent);border-color:var(--color-accent);color:var(--color-accent-ink)}.link-button--ghost:hover,.link-button--text:hover{color:var(--color-muted)}.link-button,.site-nav a,.project-card__link,.contact-form__submit,.cv-download,.site-header__menu,.theme-toggle,.motion-toggle,.fx-toggle,.sound-toggle{transform-origin:50%}@media (hover:hover) and (pointer:fine){.link-button:hover,.site-nav a:hover,.contact-form__submit:not(:disabled):hover,.cv-download:hover,.site-header__menu:hover,.theme-toggle:hover,.motion-toggle:hover,.fx-toggle:hover,.sound-toggle:hover{transform:scale(1.025)}}.link-button:active,.link-button[data-interaction-pressed=true],.site-nav a:active,.site-nav a[data-interaction-pressed=true],.project-card__link:active,.project-card__link[data-interaction-pressed=true],.contact-form__submit:not(:disabled):active,.contact-form__submit[data-interaction-pressed=true],.cv-download:active,.cv-download[data-interaction-pressed=true],.site-header__menu:active,.site-header__menu[data-interaction-pressed=true],.theme-toggle:active,.theme-toggle[data-interaction-pressed=true],.motion-toggle:active,.motion-toggle[data-interaction-pressed=true],.fx-toggle:active,.fx-toggle[data-interaction-pressed=true],.sound-toggle:active,.sound-toggle[data-interaction-pressed=true]{transform:scale(.975)}.section{border-bottom:var(--rule-hair) solid var(--color-rule);padding:clamp(var(--space-xl), 4vw, var(--space-2xl)) clamp(var(--space-lg), 4vw, var(--space-2xl))}.section__header{align-items:center;gap:var(--space-md);justify-content:space-between;margin-block-end:var(--space-lg);display:flex}.section__header h2{font-size:var(--text-lg);letter-spacing:0;margin:0;font-weight:700;line-height:1.2}.about-preview__grid{align-items:center;gap:var(--space-xl);grid-template-columns:minmax(0,1.15fr) minmax(17rem,.85fr);display:grid}.about-preview__copy p{color:var(--color-ink-soft);font-size:var(--text-sm);inline-size:min(100%,37rem);margin:0 0 var(--space-md)}.skill-list{gap:var(--space-sm);max-inline-size:24rem;grid-template-columns:repeat(3,minmax(0,1fr));justify-self:end;width:100%;margin:0;padding:0;list-style:none;display:grid}.skill-list li{background:var(--color-surface);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-xs);color:var(--color-ink-soft);font-size:var(--text-xs);min-block-size:3.5rem;padding:var(--space-xs);text-align:center;justify-content:center;align-items:center;display:flex}.project-grid{gap:var(--space-md);grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.project-grid--archive{margin-block-start:var(--space-xl)}.project-card article{border:0;height:100%}.project-card__link{background:var(--color-surface);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-xs);color:inherit;height:100%;transition:border-color var(--dur-short) var(--ease-out), box-shadow var(--dur-short) var(--ease-out), transform var(--dur-short) var(--ease-out);text-decoration:none;display:block;overflow:hidden}.project-card__media{aspect-ratio:16/7;background:var(--color-paper-soft);border-bottom:var(--rule-hair) solid var(--color-rule);display:block;overflow:hidden}.project-card__media img{object-fit:cover;width:100%;height:100%;transition:transform .72s cubic-bezier(.16,1,.3,1);transform:scale(1)}@media (hover:hover) and (pointer:fine){.project-card__link:hover,.project-card__link:focus-visible{border-color:var(--color-rule-strong);box-shadow:var(--shadow-card)}.project-card__link:hover .project-card__media img,.project-card__link:focus-visible .project-card__media img{transform:scale(1.06)}}.project-card__body{padding:var(--space-md)}.project-card h3{font-size:var(--text-base);margin:0;font-weight:700;line-height:1.25}.project-card p{color:var(--color-ink-soft);font-size:var(--text-sm);margin:var(--space-sm) 0 0;line-height:1.45}.project-card__stack{color:var(--color-muted);font-family:var(--font-outlier);font-size:var(--text-xs);align-items:center;gap:var(--space-xs);margin:var(--space-md) 0 0;flex-wrap:wrap;padding:0;list-style:none;display:flex}.project-card__stack li:not(:last-child):after{content:"·";margin-inline-start:var(--space-xs)}.project-card__action{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;position:absolute;overflow:hidden}.project-visual{background:linear-gradient(160deg, var(--color-project-wash), var(--color-surface)), var(--color-paper-soft);height:100%;padding:var(--space-sm)}.project-visual__bar{background:var(--color-surface);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-xs);block-size:.65rem;margin-block-end:var(--space-xs)}.project-visual__surface{background:var(--color-surface);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-xs);height:calc(100% - 1.15rem);position:relative;overflow:hidden}.project-visual__orb{aspect-ratio:1;background:radial-gradient(circle at center, var(--color-project-blue-soft), transparent 62%), var(--color-surface);border:var(--rule-hair) solid var(--color-rule);border-radius:50%;inline-size:38%;position:absolute;inset-block-start:22%;inset-inline-start:31%}.project-visual__trace,.project-visual__line,.project-visual__axis,.project-visual__chart,.project-visual__curve,.project-visual__photo{position:absolute}.project-visual__trace{background:var(--color-project-ink);block-size:var(--rule-hair);opacity:.55;inline-size:56%;transform:rotate(18deg)}.project-visual__trace--one{inset-block-start:34%;inset-inline-start:23%}.project-visual__trace--two{inset-block-start:58%;inset-inline-start:18%;transform:rotate(-16deg)}.project-visual__line{background:var(--color-rule-strong);border-radius:var(--radius-xs);block-size:.35rem;inline-size:42%;inset-block-start:44%;inset-inline-start:12%}.project-visual__line--wide{inline-size:58%;inset-block-start:30%}.project-visual__photo{background:var(--color-project-blue-soft);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-xs);block-size:40%;inline-size:23%;inset-block-start:28%;inset-inline-end:12%}.project-visual__axis{background:var(--color-rule);block-size:var(--rule-hair);inline-size:72%;inset-block-end:24%;inset-inline-start:13%}.project-visual__chart{background:var(--color-project-blue);border-radius:var(--radius-xs) var(--radius-xs) 0 0;inline-size:8%;bottom:24%}.project-visual__chart--one{block-size:28%;inset-inline-start:38%}.project-visual__chart--two{block-size:44%;inset-inline-start:52%}.project-visual__chart--three{block-size:62%;inset-inline-start:66%}.project-visual__curve{border:var(--rule-hair) solid var(--color-project-blue);border-color:var(--color-project-blue) transparent transparent transparent;border-radius:50%;block-size:44%;inline-size:46%;inset-block-start:24%;inset-inline-start:32%;transform:rotate(12deg)}.hobbies-grid{gap:var(--space-md);grid-template-columns:repeat(4,minmax(0,1fr));display:grid}.hobby-card article{background:var(--color-surface);border-radius:inherit;align-items:center;gap:var(--space-md);min-block-size:5.75rem;padding:var(--space-md);transition:border-color var(--dur-short) var(--ease-out), transform var(--dur-short) var(--ease-out);border:0;grid-template-columns:auto minmax(0,1fr);display:grid}.hobby-card svg{color:var(--color-ink)}.hobby-card h3{font-size:var(--text-sm);margin:0;font-weight:700;line-height:1.2}.hobby-card p{color:var(--color-muted);font-size:var(--text-xs);margin:var(--space-2xs) 0 0;line-height:1.35}.post-list{display:grid}.post-row{border-bottom:var(--rule-hair) solid var(--color-rule);min-block-size:3.25rem}.post-row:first-child{border-top:var(--rule-hair) solid var(--color-rule)}.post-row__link{border-radius:var(--radius-xs);color:inherit;font-size:var(--text-sm);align-items:center;gap:var(--space-md);overflow-wrap:anywhere;min-block-size:3.25rem;min-width:0;transition:color var(--dur-short) var(--ease-out), transform var(--dur-short) var(--ease-out);grid-template-columns:minmax(0,1fr) auto;font-weight:500;text-decoration:none;display:grid}.post-row time,.subpage__date{color:var(--color-muted);font-family:var(--font-outlier);font-size:var(--text-xs);font-variant-numeric:tabular-nums;white-space:nowrap}.contact-card{background:var(--color-surface);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-sm);align-items:start;gap:var(--space-xl);padding:clamp(var(--space-xl), 4vw, var(--space-2xl));grid-template-columns:auto minmax(12rem,.8fr) minmax(0,1.4fr);display:grid}.contact-card h2{font-size:var(--text-lg);inline-size:min(100%,22rem);margin:0 0 var(--space-sm);font-weight:700;line-height:1.35}.contact-card__description{color:var(--color-muted);font-size:var(--text-sm);margin:0 0 var(--space-lg);line-height:1.45}.contact-form{border-inline-start:var(--rule-hair) solid var(--color-rule);gap:var(--space-md);padding-inline-start:var(--space-xl);display:grid}.contact-form__grid{gap:var(--space-md);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.contact-form label{gap:var(--space-xs);display:grid}.contact-form label span{color:var(--color-muted);font-family:var(--font-outlier);font-size:var(--text-xs);font-weight:600}.contact-form input,.contact-form textarea{background:var(--color-paper);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-xs);color:var(--color-ink);min-block-size:2.75rem;padding:var(--space-sm);resize:vertical;transition:border-color var(--dur-short) var(--ease-out), background-color var(--dur-short) var(--ease-out);width:100%}.contact-form input:focus,.contact-form textarea:focus{border-color:var(--color-rule-strong)}.contact-form__submit,.cv-download{background:var(--color-invert);border:var(--rule-hair) solid var(--color-invert);border-radius:var(--radius-xs);color:var(--color-invert-ink);cursor:pointer;font-size:var(--text-sm);align-items:center;gap:var(--space-sm);min-block-size:2.75rem;padding:0 var(--space-md);transition:background-color var(--dur-short) var(--ease-out), border-color var(--dur-short) var(--ease-out), transform var(--dur-micro) var(--ease-out);justify-content:center;width:fit-content;font-weight:700;display:inline-flex}.contact-form__submit:disabled{cursor:wait;opacity:.62}.contact-form__status{font-size:var(--text-sm);margin:0}.contact-form__status--success{color:var(--color-success)}.contact-form__status--error{color:var(--color-error)}.site-footer{align-items:center;gap:var(--space-lg);min-block-size:5.25rem;padding:0 clamp(var(--space-lg), 4vw, var(--space-2xl));justify-content:space-between;display:flex}.site-footer p{color:var(--color-muted);font-size:var(--text-sm);margin:0}.site-footer ul{align-items:center;gap:var(--space-md);margin:0;padding:0;list-style:none;display:flex}.site-footer a{border-radius:var(--radius-xs);color:var(--color-ink);min-block-size:2.75rem;min-inline-size:2.75rem;transition:color var(--dur-short) var(--ease-out), transform var(--dur-micro) var(--ease-out);justify-content:center;align-items:center;display:inline-flex}.subpage,.empty-state{padding:clamp(var(--space-xl), 6vw, var(--space-3xl)) clamp(var(--space-lg), 4vw, var(--space-2xl))}.subpage__kicker{color:var(--color-muted);font-family:var(--font-outlier);font-size:var(--text-xs);margin:0 0 var(--space-sm);font-weight:600}.subpage h1,.empty-state h1{font-size:clamp(var(--text-2xl), 3vw + var(--text-md), var(--text-display));letter-spacing:0;overflow-wrap:anywhere;margin:0;font-weight:700;line-height:1.05}.subpage__lede,.empty-state p{color:var(--color-ink-soft);font-size:var(--text-lg);inline-size:min(100%,42rem);margin:var(--space-lg) 0 0;line-height:1.5}.subpage--prose>p:not(.subpage__kicker,.subpage__lede){color:var(--color-ink-soft);font-size:var(--text-base);inline-size:min(100%,47rem);margin:var(--space-lg) 0 0;line-height:1.7}.rich-text{color:var(--color-ink-soft);font-size:var(--text-base);gap:var(--space-md);inline-size:min(100%,47rem);margin-block-start:var(--space-lg);line-height:1.7;display:grid}.project-detail .rich-text{margin-block:var(--space-xl)}.rich-text>*{margin:0}.rich-text h2,.rich-text h3{color:var(--color-ink);margin-block-start:var(--space-lg);line-height:1.25}.rich-text h2{font-size:var(--text-lg)}.rich-text h3{font-size:var(--text-md)}.rich-text ul,.rich-text ol{padding-inline-start:var(--space-lg)}.rich-text blockquote{background:var(--color-surface);border-block:var(--rule-hair) solid var(--color-rule);padding:var(--space-md)}.rich-text img{border-radius:var(--radius-xs);margin-block:var(--space-md);object-fit:contain;max-block-size:36rem;width:100%;display:block}.rich-text pre{background:var(--color-invert);border-radius:var(--radius-xs);color:var(--color-invert-ink);padding:var(--space-md);overflow-x:auto}.rich-text code{font-family:var(--font-outlier);font-size:.9em}.cv-page__header{align-items:start;gap:var(--space-xl);grid-template-columns:minmax(0,1fr) auto;display:grid}.cv-page__meta,.project-detail__meta{border-block:var(--rule-hair) solid var(--color-rule);color:var(--color-muted);font-family:var(--font-outlier);font-size:var(--text-xs);gap:var(--space-md);margin-block:var(--space-xl);padding-block:var(--space-md);flex-wrap:wrap;display:flex}.cv-section,.project-detail__highlights,.related-work{margin-block-start:var(--space-xl)}.cv-section h2,.project-detail__highlights h2,.related-work h2{font-size:var(--text-lg);margin:0 0 var(--space-lg);line-height:1.2}.cv-timeline{gap:var(--space-lg);display:grid}.cv-timeline article{border-top:var(--rule-hair) solid var(--color-rule);gap:var(--space-sm);grid-template-columns:minmax(0,1fr) auto;padding-block-start:var(--space-lg);display:grid}.cv-timeline h3{font-size:var(--text-base);margin:0}.cv-timeline p,.cv-timeline li,.project-detail p,.project-detail__highlights li{color:var(--color-ink-soft);line-height:1.65}.cv-timeline p,.cv-timeline ul,.project-detail p,.project-detail__highlights ul{margin:0}.cv-entry__meta{color:var(--color-muted);font-family:var(--font-outlier);font-size:var(--text-xs);gap:var(--space-2xs);text-align:right;justify-items:end;display:grid}.cv-timeline ul,.project-detail__highlights ul{grid-column:1/-1;padding-inline-start:var(--space-lg)}.cv-skills{gap:var(--space-sm);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.cv-skills li{background:var(--color-surface);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-xs);color:var(--color-ink-soft);font-size:var(--text-sm);padding:var(--space-sm) var(--space-md)}.project-detail__actions{gap:var(--space-md);flex-wrap:wrap;margin-block-start:var(--space-lg);display:flex}.blog-list{margin-block-start:var(--space-xl);display:grid}.blog-list__item{border-top:var(--rule-hair) solid var(--color-rule)}.blog-list__item:last-child{border-bottom:var(--rule-hair) solid var(--color-rule)}.blog-list__item h2{font-size:var(--text-md);margin:0}.blog-list__item p{color:var(--color-ink-soft);font-size:var(--text-sm);margin:var(--space-xs) 0 0}.blog-list__item-link{color:inherit;align-items:center;gap:var(--space-lg);padding:var(--space-lg) 0;transition:color var(--dur-short) var(--ease-out);grid-template-columns:minmax(0,1fr) auto auto;text-decoration:none;display:grid}.empty-state{align-items:start;gap:var(--space-lg);display:grid}@media (hover:hover) and (pointer:fine){.theme-toggle:hover,.site-header__menu:hover{background:var(--color-surface-strong);border-color:var(--color-rule-strong)}.site-footer a:hover,.post-row__link:hover,.blog-list__item-link:hover{color:var(--color-muted)}.motion-toggle:hover,.fx-toggle:hover,.theme-toggle:hover,.site-header__menu:hover,.floating-settings__trigger:hover{background:var(--color-surface-strong);border-color:var(--color-rule-strong)}.floating-settings__trigger:hover{color:var(--color-ink)}.floating-settings__item:hover{background:var(--color-surface-strong);border-color:var(--color-rule-strong)}}@keyframes lava-drift-one{0%{transform:translate(-2%,-1%)scale(1.04)rotate(0)}to{transform:translate(3%,2%)scale(1.09)rotate(4deg)}}@keyframes lava-drift-two{0%{transform:translate(2%,2%)scale(1.06)rotate(1deg)}to{transform:translate(-3%,-2%)scale(1.1)rotate(-5deg)}}@keyframes contour-flow{0%{background-position:0 0,0 0;transform:translate(-1.6%)scale(1)}to{background-position:5.5rem -3rem,-4rem 4.5rem;transform:translate(1.6%,-1%)scale(1.025)}}@media (width<=64rem){.site-stage{place-items:start center}.hero-section,.about-preview__grid{grid-template-columns:minmax(0,1fr)}.contact-card{grid-template-columns:auto minmax(0,1fr)}.contact-form{border-inline-start:0;border-top:var(--rule-hair) solid var(--color-rule);grid-column:1/-1;padding-block-start:var(--space-xl);padding-inline-start:0}.hero-section__visual{inline-size:min(100%,30rem)}.skill-list{justify-self:start}.project-grid,.hobbies-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=48rem){.site-stage{padding:var(--space-md)}.portfolio-frame{border-radius:var(--radius-frame)}.site-header{background:var(--color-paper)}@supports (color:color-mix(in lab, red, red)){.site-header{background:color-mix(in oklch, var(--color-paper) 82%, transparent)}}.site-header{-webkit-backdrop-filter:blur(1rem)saturate(1.12);backdrop-filter:blur(1rem)saturate(1.12);min-height:auto;padding:var(--space-md) var(--space-lg);z-index:30;grid-template-columns:auto auto;position:sticky;inset-block-start:0}.site-header__menu{justify-self:end;display:inline-flex}.site-nav{border-top:var(--rule-hair) solid var(--color-rule);grid-column:1/-1;justify-self:stretch;margin-block-start:var(--space-md);padding-block-start:var(--space-md);display:none}.site-nav.is-open{display:flex}.site-nav ul{align-items:stretch;gap:var(--space-xs);flex-wrap:wrap;flex:1}.site-nav a{padding-inline:var(--space-xs)}.motion-toggle,.fx-toggle{min-block-size:2.5rem}.hero-section,.section,.subpage,.empty-state{padding-inline:var(--space-lg)}.hero-section__actions{align-items:stretch}.link-button--primary{flex:none}.blog-list__item,.post-row,.cv-page__header,.cv-timeline article,.contact-form__grid{grid-template-columns:minmax(0,1fr)}.cv-entry__meta{text-align:left;justify-items:start}.post-row time,.blog-list__item time{justify-self:start}}@media (width<=40rem){.site-stage{padding:0}.portfolio-frame{border-inline:0;border-radius:0;min-height:100dvh}.hero-section{gap:var(--space-xl)}.hero-section h1{font-size:clamp(2.35rem,14vw,4rem)}.project-grid,.hobbies-grid,.skill-list{grid-template-columns:minmax(0,1fr)}.contact-card{padding:var(--space-lg);grid-template-columns:minmax(0,1fr)}.project-card__media{aspect-ratio:16/8}.section__header{flex-direction:column;align-items:flex-start}.site-footer{align-items:flex-start;gap:var(--space-sm);padding-block:var(--space-lg);flex-direction:column}.floating-settings{inset-block-end:max(var(--space-md), env(safe-area-inset-bottom));inset-inline-end:max(var(--space-md), env(safe-area-inset-right))}}@media (prefers-reduced-motion:reduce){.app-background__lava,.app-background__contours,.app-background__three{animation:none!important}*,:before,:after{scroll-behavior:auto!important;transition-duration:.15s!important;animation-duration:.15s!important;animation-iteration-count:1!important}}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}
