/*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */
@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-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--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}}}@layer theme{:root,:host{--font-sans:"Hanken Grotesk", system-ui, -apple-system, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, monospace;--spacing:.25rem;--font-weight-medium:500;--font-weight-semibold:600;--radius-xl:.75rem;--radius-2xl:1rem;--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;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{.static{position:static}.sticky{position:sticky}.top-0{top:0}.z-30{z-index:30}.m-0{margin:0}.mx-auto{margin-inline:auto}.my-8{margin-block:calc(var(--spacing) * 8)}.my-\[20px\]{margin-block:20px}.my-\[38px\]{margin-block:38px}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-12{margin-top:calc(var(--spacing) * 12)}.mt-\[2px\]{margin-top:2px}.mb-1{margin-bottom:var(--spacing)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-\[14px\]{margin-bottom:14px}.mb-\[18px\]{margin-bottom:18px}.mb-\[22px\]{margin-bottom:22px}.mb-\[26px\]{margin-bottom:26px}.mb-\[30px\]{margin-bottom:30px}.mb-\[34px\]{margin-bottom:34px}.mb-\[38px\]{margin-bottom:38px}.mb-\[46px\]{margin-bottom:46px}.ml-2{margin-left:calc(var(--spacing) * 2)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.h-px{height:1px}.w-\[54px\]{width:54px}.w-full{width:100%}.max-w-\[20ch\]{max-width:20ch}.max-w-\[54ch\]{max-width:54ch}.max-w-\[60ch\]{max-width:60ch}.max-w-\[64ch\]{max-width:64ch}.max-w-\[680px\]{max-width:680px}.max-w-\[760px\]{max-width:760px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.cursor-pointer{cursor:pointer}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-\[3px\]{gap:3px}.gap-\[6px\]{gap:6px}.gap-\[7px\]{gap:7px}.gap-\[9px\]{gap:9px}.gap-\[10px\]{gap:10px}.gap-\[11px\]{gap:11px}.gap-\[13px\]{gap:13px}.gap-\[14px\]{gap:14px}.gap-\[15px\]{gap:15px}.gap-\[18px\]{gap:18px}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-y-\[13px\]{row-gap:13px}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[9px\]{border-radius:9px}.rounded-\[18px\]{border-radius:18px}.rounded-full{border-radius:3.40282e38px}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-\[var\(--border\)\]{border-color:var(--border)}.border-\[var\(--border-2\)\]{border-color:var(--border-2)}.bg-\[var\(--bg-soft\)\]{background-color:var(--bg-soft)}.bg-\[var\(--border\)\]{background-color:var(--border)}.bg-\[var\(--surface\)\]{background-color:var(--surface)}.p-7{padding:calc(var(--spacing) * 7)}.p-\[22px\]{padding:22px}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-\[9px\]{padding-inline:9px}.px-\[15px\]{padding-inline:15px}.px-\[18px\]{padding-inline:18px}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-\[2px\]{padding-block:2px}.py-\[9px\]{padding-block:9px}.py-\[13px\]{padding-block:13px}.py-\[26px\]{padding-block:26px}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-\[36px\]{padding-top:36px}.pt-\[54px\]{padding-top:54px}.pb-\[9px\]{padding-bottom:9px}.pb-\[13px\]{padding-bottom:13px}.pb-\[90px\]{padding-bottom:90px}.pb-\[100px\]{padding-bottom:100px}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[13\.5px\]{font-size:13.5px}.text-\[13px\]{font-size:13px}.text-\[14\.5px\]{font-size:14.5px}.text-\[15\.5px\]{font-size:15.5px}.text-\[15px\]{font-size:15px}.text-\[16\.5px\]{font-size:16.5px}.text-\[16px\]{font-size:16px}.text-\[17px\]{font-size:17px}.text-\[19px\]{font-size:19px}.text-\[26px\]{font-size:26px}.text-\[30px\]{font-size:30px}.text-\[31px\]{font-size:31px}.text-\[32px\]{font-size:32px}.leading-\[1\.3\]{--tw-leading:1.3;line-height:1.3}.leading-\[1\.4\]{--tw-leading:1.4;line-height:1.4}.leading-\[1\.6\]{--tw-leading:1.6;line-height:1.6}.leading-\[1\.22\]{--tw-leading:1.22;line-height:1.22}.leading-\[1\.25\]{--tw-leading:1.25;line-height:1.25}.leading-\[1\.35\]{--tw-leading:1.35;line-height:1.35}.leading-\[1\.55\]{--tw-leading:1.55;line-height:1.55}.leading-\[1\.65\]{--tw-leading:1.65;line-height:1.65}.leading-\[1\.75\]{--tw-leading:1.75;line-height:1.75}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[-0\.2px\]{--tw-tracking:-.2px;letter-spacing:-.2px}.tracking-\[-0\.3px\]{--tw-tracking:-.3px;letter-spacing:-.3px}.tracking-\[-0\.4px\]{--tw-tracking:-.4px;letter-spacing:-.4px}.tracking-\[-0\.6px\]{--tw-tracking:-.6px;letter-spacing:-.6px}.tracking-\[-0\.7px\]{--tw-tracking:-.7px;letter-spacing:-.7px}.tracking-\[-0\.8px\]{--tw-tracking:-.8px;letter-spacing:-.8px}.tracking-\[1\.5px\]{--tw-tracking:1.5px;letter-spacing:1.5px}.tracking-\[1px\]{--tw-tracking:1px;letter-spacing:1px}.tracking-\[2px\]{--tw-tracking:2px;letter-spacing:2px}.whitespace-nowrap{white-space:nowrap}.text-\[var\(--accent\)\]{color:var(--accent)}.text-\[var\(--text\)\]{color:var(--text)}.text-\[var\(--text-2\)\]{color:var(--text-2)}.text-\[var\(--text-3\)\]{color:var(--text-3)}.uppercase{text-transform:uppercase}.no-underline{text-decoration-line:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-\[\.45\]{opacity:.45}.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:background-color .25s,border-color .25s,color .18s}html,body{background:var(--bg);margin:0;padding:0}::selection{background:var(--sel)}:root{--bg:#fff;--bg-soft:#f6f7f9;--surface:#fbfbfc;--text:#15171c;--text-2:#565c68;--text-3:#8b909b;--border:#ededf0;--border-2:#e2e3e7;--accent:#2a6fdb;--accent-2:#1f5fc4;--sel:#d9e6fb;--ok:#1f9d57;--warn:#c98a16;--code-bg:#f7f8fa;--c-kw:#9145c4;--c-typ:#0f7d8c;--c-fn:#2a6fdb;--c-str:#1a8a4f;--c-num:#b5570f;--c-com:#9aa0ab;--c-pun:#7b8190}[data-theme=dark]{--bg:#0d0e11;--bg-soft:#141519;--surface:#16181d;--text:#e7e8ec;--text-2:#a3a9b4;--text-3:#6e7480;--border:#22242b;--border-2:#2a2d35;--accent:#6ba3ff;--accent-2:#85b4ff;--sel:#22344f;--ok:#46c97e;--warn:#e0b04a;--code-bg:#121317;--c-kw:#c792ea;--c-typ:#7fd4c1;--c-fn:#82aaff;--c-str:#9ece6a;--c-num:#ff9e64;--c-com:#6b7280;--c-pun:#8a909c}[data-theme=light][data-page=post]{--bg:#f6efe2;--bg-soft:#ede2cf;--surface:#fbf6ec;--border:#e4d8c0;--border-2:#d9c9ac;--text:#221c12;--text-2:#6a5d46;--text-3:#9a8a6e;--accent:#bd6033;--accent-2:#a44e26;--sel:#eed7bc;--code-bg:#f1e7d5}[data-theme=light][data-page=tags]{--bg:#eaf1fb;--bg-soft:#d9e6f6;--surface:#f4f9fe;--border:#cedeef;--border-2:#bcd0e8;--text:#0f192c;--text-2:#4a5775;--text-3:#7c89a3;--accent:#2f5dd6;--accent-2:#214bbb;--sel:#cbddf6}[data-theme=light][data-page=projects]{--bg:#e8f5ed;--bg-soft:#d4ecdd;--surface:#f2fbf6;--border:#c7e6d2;--border-2:#b2dcc0;--text:#0c1d14;--text-2:#42604f;--text-3:#74917f;--accent:#178a4a;--accent-2:#10733b;--sel:#c9ecd5}[data-theme=light][data-page=about]{--bg:#f0eafb;--bg-soft:#e3d6f7;--surface:#f8f3ff;--border:#dccef0;--border-2:#ccb8e8;--text:#181030;--text-2:#564c74;--text-3:#897ea6;--accent:#7350de;--accent-2:#5e3cc6;--sel:#e0d2fa}[data-theme=dark][data-page=post]{--bg:#14110b;--bg-soft:#1b1710;--surface:#1c1811;--border:#2c261b;--border-2:#352d1f;--text:#ece3d3;--text-2:#b3a68f;--text-3:#7c715b;--accent:#e0915f;--accent-2:#eaa274;--sel:#3a2e1c;--code-bg:#181309}[data-theme=dark][data-page=tags]{--bg:#0c0f15;--bg-soft:#12161e;--surface:#141821;--border:#222834;--border-2:#2a313f;--text:#dfe6f2;--text-2:#9aa6bb;--text-3:#697389;--accent:#7fa8ff;--accent-2:#99bcff;--sel:#1f3354}[data-theme=dark][data-page=projects]{--bg:#0a0f0c;--bg-soft:#101713;--surface:#121a15;--border:#1e2a22;--border-2:#27352b;--text:#dcebe1;--text-2:#93ad9c;--text-3:#647a6c;--accent:#46c97e;--accent-2:#62d693;--sel:#16331f}[data-theme=dark][data-page=about]{--bg:#0f0c16;--bg-soft:#16111f;--surface:#181322;--border:#28213a;--border-2:#322a47;--text:#e6e0f2;--text-2:#a89fbf;--text-3:#7b7196;--accent:#a98bf0;--accent-2:#bba2f6;--sel:#2a2046}@keyframes blink{0%,48%{opacity:1}49%,to{opacity:0}}@keyframes pageIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.cursor{color:var(--accent);margin-left:1px;animation:1.15s step-end infinite blink}.nav-link{font-family:var(--font-mono);color:var(--text-2);border-radius:7px;padding:7px 11px;font-size:13px;text-decoration:none;position:relative}.nav-link:hover{color:var(--text);background:var(--bg-soft)}.nav-link.is-active{color:var(--text-2)}.nav-link .underline{background:var(--accent);border-radius:2px;height:2px;position:absolute;bottom:2px;left:11px;right:11px}.theme-toggle{border:1px solid var(--border-2);background:var(--surface);width:34px;height:32px;color:var(--text-2);border-radius:8px;justify-content:center;align-items:center;display:inline-flex}.theme-toggle:hover{color:var(--text);border-color:var(--text-3)}.theme-toggle .icon-sun,.theme-toggle .icon-moon{width:16px;height:16px}[data-theme=dark] .theme-toggle .icon-sun,[data-theme=light] .theme-toggle .icon-moon,:root:not([data-theme]) .theme-toggle .icon-moon{display:none}.chip{font-family:var(--font-mono);cursor:pointer;border:1px solid var(--border-2);white-space:nowrap;background:var(--surface);color:var(--text-2);border-radius:999px;align-items:center;gap:6px;padding:5px 12px;font-size:12.5px;display:inline-flex}.chip .chip-count{opacity:.55;font-size:11px}.chip.is-active{background:var(--accent);color:#fff;border-color:var(--accent)}.layout-btn{cursor:pointer;width:31px;height:28px;color:var(--text-3);background:0 0;border:1px solid #0000;border-radius:7px;justify-content:center;align-items:center;display:inline-flex}.layout-btn.is-active{border-color:var(--border-2);background:var(--surface);color:var(--accent)}.post-card{color:var(--text)}.post-card:hover{color:var(--accent)}.tag-card:hover,.project-card:hover{border-color:var(--border-2)}.contact-btn:hover{border-color:var(--accent);color:var(--accent)}.footer-link:hover{color:var(--accent)}code.inline-code{font-family:var(--font-mono);background:var(--code-bg);border:1px solid var(--border);border-radius:5px;padding:1px 6px;font-size:.86em}.code-block{border:1px solid var(--border);background:var(--code-bg);border-radius:12px;overflow:hidden}.code-block pre{font-family:var(--font-mono);font-size:13px;line-height:1.7}[hidden]{display:none!important}.umb-block-grid__layout-container{grid-template-columns:repeat(var(--umb-block-grid--grid-columns,1), minmax(0, 1fr));column-gap:var(--umb-block-grid--column-gap,0);row-gap:var(--umb-block-grid--row-gap,0);grid-auto-rows:minmax(50px,min-content);grid-auto-flow:row;display:grid;position:relative}.umb-block-grid__layout-item{grid-column-end:span min(calc(var(--umb-block-grid--item-column-span,1) * 3), var(--umb-block-grid--grid-columns));grid-row:span var(--umb-block-grid--item-row-span,1);position:relative}.umb-block-grid__area-container,.umb-block-grid__block--view::part(area-container){grid-template-columns:repeat(var(--umb-block-grid--area-grid-columns,var(--umb-block-grid--grid-columns,1)), minmax(0, 1fr));column-gap:var(--umb-block-grid--areas-column-gap,0);row-gap:var(--umb-block-grid--areas-row-gap,0);grid-auto-rows:minmax(50px,min-content);grid-auto-flow:row;display:grid;position:relative}.umb-block-grid__area{grid-column-end:span min(calc(var(--umb-block-grid--area-column-span,1) * 3), var(--umb-block-grid--area-grid-columns));grid-row:span var(--umb-block-grid--area-row-span,1);flex-direction:column;height:100%;display:flex;position:relative}@media (min-width:1024px){.umb-block-grid__layout-item{grid-column-end:span min(var(--umb-block-grid--item-column-span,1), var(--umb-block-grid--grid-columns))}.umb-block-grid__area{grid-column-end:span min(var(--umb-block-grid--area-column-span,1), var(--umb-block-grid--area-grid-columns))}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@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}