@font-face{font-family:Outfit;font-style:normal;font-weight:400;font-display:swap;src:url(../media/b2ea385cb5ae8625-s.3gpqod6e6kd7d.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Outfit;font-style:normal;font-weight:400;font-display:swap;src:url(../media/1b99372b3eaef0c8-s.p.1ay-qk1u8nydy.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Outfit;font-style:normal;font-weight:500;font-display:swap;src:url(../media/b2ea385cb5ae8625-s.3gpqod6e6kd7d.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Outfit;font-style:normal;font-weight:500;font-display:swap;src:url(../media/1b99372b3eaef0c8-s.p.1ay-qk1u8nydy.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Outfit;font-style:normal;font-weight:600;font-display:swap;src:url(../media/b2ea385cb5ae8625-s.3gpqod6e6kd7d.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Outfit;font-style:normal;font-weight:600;font-display:swap;src:url(../media/1b99372b3eaef0c8-s.p.1ay-qk1u8nydy.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Outfit;font-style:normal;font-weight:700;font-display:swap;src:url(../media/b2ea385cb5ae8625-s.3gpqod6e6kd7d.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Outfit;font-style:normal;font-weight:700;font-display:swap;src:url(../media/1b99372b3eaef0c8-s.p.1ay-qk1u8nydy.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Outfit;font-style:normal;font-weight:800;font-display:swap;src:url(../media/b2ea385cb5ae8625-s.3gpqod6e6kd7d.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Outfit;font-style:normal;font-weight:800;font-display:swap;src:url(../media/1b99372b3eaef0c8-s.p.1ay-qk1u8nydy.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Outfit Fallback;src:local(Arial);ascent-override:100.18%;descent-override:26.05%;line-gap-override:0.0%;size-adjust:99.82%}.outfit_d2787df4-module__ltWGBG__className{font-family:Outfit,Outfit Fallback;font-style:normal}.outfit_d2787df4-module__ltWGBG__variable{--font-outfit:"Outfit", "Outfit Fallback"}
@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/e390973e931a41c5-s.3zhtymus0wdqb.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/59b15b4bcd7b1eb5-s.3nkuoiize4urq.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/e532fa1b9921e1cd-s.1da667lu-u79a.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/2fe89d53234c61d4-s.1i05ju5aeyhye.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/99e609270109b47d-s.p.1dgcou5jor5q_.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/5e05ae5b48faa55e-s.31-2bzhq1gx_9.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/a7afbb44bec2bb18-s.3xauquyg2sixn.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/02263ebadd758ea4-s.2taws-qdxmzlf.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/68757d6cddeff913-s.0htwiiqufp3l9.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/effe91970fc4db64-s.p.28xcb7557rbh2.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono Fallback;src:local(Arial);ascent-override:76.16%;descent-override:20.43%;line-gap-override:0.0%;size-adjust:134.59%}.ibm_plex_mono_2b434243-module__J2aJva__className{font-family:IBM Plex Mono,IBM Plex Mono Fallback;font-style:normal}.ibm_plex_mono_2b434243-module__J2aJva__variable{--font-plex-mono:"IBM Plex Mono", "IBM Plex Mono Fallback"}
@font-face{font-family:Syne;font-style:normal;font-weight:700;font-display:swap;src:url(../media/6c186216202f40aa-s.03emcql08-8t3.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Syne;font-style:normal;font-weight:700;font-display:swap;src:url(../media/84feb34116826df2-s.0pmc52xmq8tzu.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Syne;font-style:normal;font-weight:700;font-display:swap;src:url(../media/9f3a8f528b429e0d-s.p.3aw7w7yacp2q7.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Syne Fallback;src:local(Arial);ascent-override:93.93%;descent-override:27.93%;line-gap-override:0.0%;size-adjust:98.47%}.syne_ddee0ca7-module__VCquxG__className{font-family:Syne,Syne Fallback;font-style:normal;font-weight:700}.syne_ddee0ca7-module__VCquxG__variable{--font-syne:"Syne", "Syne Fallback"}
:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--color-bg:#fbfcfd;--color-surface:#fff;--color-surface-2:#f6f8fa;--color-surface-3:#eef2f6;--color-text:#0e1726;--color-text-dim:#5a6675;--color-border:#0e172624;--color-border-bright:#0e172642;--color-amber:#e07b13;--color-amber-dim:#fdf1e3;--color-red:#dc2626;--color-green:#16a34a;--color-blue:#2563eb;--color-gray:#8a94a6;--shadow-card:0 1px 2px #0e17260a, 0 12px 24px -10px #0e17261a;--scrollbar-thumb:#cdd5df;--scrollbar-thumb-hover:#aab4c2;--pd-accent:#e07b13;--pd-accent-ink:#b4560a;--pd-accent-dim:#e07b1314;--pd-accent-border:#e07b1357;--pd-grid-line:#0e17260e;--pd-grid-size:16px;--pd-dash:#0e17262e;--pd-bracket:#0e172666;--pd-radius-xs:12px;--pd-radius-s:16px;--pd-corner:18px;--pd-scrollbar:6px;--font-data:var(--font-outfit), system-ui, sans-serif;--font-plate:var(--font-plex-mono), ui-monospace, SFMono-Regular, Menlo, monospace;--font-wordmark:var(--font-syne), var(--font-outfit), system-ui, sans-serif;--pd-gutter:28px;--w-narrow:720px;--w-mid:900px;--w-wide:1050px;--tag-green-bg:#eaf6ef;--tag-green-fill:#16a34a;--tag-green-ink:#15612f;--tag-amber-bg:#fdf4e6;--tag-amber-fill:#d98518;--tag-amber-ink:#8a4b0a;--tag-red-bg:#fdeceb;--tag-red-fill:#dc2626;--tag-red-ink:#9b1c1c;--tag-blue-bg:#ebf1fd;--tag-blue-fill:#2563eb;--tag-blue-ink:#1c46ad;--tag-gray-bg:#f2f4f7;--tag-gray-fill:#8a94a6;--tag-gray-ink:#4a5563;--t-fast:.15s ease;--t-base:.18s ease;--t-slow:.22s ease}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{background:var(--color-bg);color:var(--color-text);font-family:var(--font-data);-webkit-font-smoothing:antialiased;font-size:15px;line-height:1.55}::-webkit-scrollbar{width:var(--pd-scrollbar);height:var(--pd-scrollbar)}::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:999px}::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover)}:where(a,button,input,summary,[tabindex]):focus-visible{outline:2px solid var(--pd-accent-ink);outline-offset:2px;border-radius:var(--pd-radius-xs);box-shadow:0 0 0 3px var(--pd-accent-dim)}.skip-link{z-index:10;border-radius:var(--pd-radius-xs);background:var(--color-surface);border:1px solid var(--pd-accent-border);color:var(--pd-accent-ink);transition:transform var(--t-base);padding:10px 16px;font-weight:600;text-decoration:none;position:absolute;top:8px;left:8px;transform:translateY(-200%)}.skip-link:focus-visible{transform:translateY(0)}.pd-grid{background-image:repeating-linear-gradient(to right, var(--pd-grid-line) 0 1px, transparent 1px var(--pd-grid-size)), repeating-linear-gradient(to bottom, var(--pd-grid-line) 0 1px, transparent 1px var(--pd-grid-size))}.pd-plate{background-color:var(--color-surface);border-radius:var(--pd-radius-s);box-shadow:var(--shadow-card);background-repeat:no-repeat;background-image:repeating-linear-gradient(to right, var(--pd-dash) 0 5px, transparent 5px 11px), repeating-linear-gradient(to right, var(--pd-dash) 0 5px, transparent 5px 11px), repeating-linear-gradient(to bottom, var(--pd-dash) 0 5px, transparent 5px 11px), repeating-linear-gradient(to bottom, var(--pd-dash) 0 5px, transparent 5px 11px);background-size:calc(100% - 2 * var(--pd-corner)) 1px, calc(100% - 2 * var(--pd-corner)) 1px, 1px calc(100% - 2 * var(--pd-corner)), 1px calc(100% - 2 * var(--pd-corner));background-position:var(--pd-corner) 0, var(--pd-corner) 100%, 0 var(--pd-corner), 100% var(--pd-corner);position:relative}.pd-corners{pointer-events:none;position:absolute;inset:0}.pd-plate:before,.pd-plate:after,.pd-corners:before,.pd-corners:after{content:"";width:var(--pd-corner);height:var(--pd-corner);pointer-events:none;border-color:var(--pd-bracket);transition:border-color var(--t-base);border-style:solid;border-width:0;position:absolute}.pd-plate:before{border-top-left-radius:var(--pd-radius-s);border-top-width:2px;border-left-width:2px;top:0;left:0}.pd-plate:after{border-bottom-right-radius:var(--pd-radius-s);border-bottom-width:2px;border-right-width:2px;bottom:0;right:0}.pd-corners:before{border-top-right-radius:var(--pd-radius-s);border-top-width:2px;border-right-width:2px;top:0;right:0}.pd-corners:after{border-bottom-left-radius:var(--pd-radius-s);border-bottom-width:2px;border-left-width:2px;bottom:0;left:0}.pd-plate-accent:before,.pd-plate-accent:after,.pd-plate-accent .pd-corners:before,.pd-plate-accent .pd-corners:after{border-color:var(--pd-accent)}.pd-plate-accent{--pd-dash:var(--pd-accent-border)}.pd-figure{border-bottom:1px solid var(--color-border);border-radius:var(--pd-radius-s) var(--pd-radius-s) 0 0;padding:18px 18px 30px;position:relative}.pd-figlabel{font:500 10.5px var(--font-plate);letter-spacing:.08em;position:absolute;bottom:8px}.pd-figlabel-left{color:var(--pd-accent-ink);left:18px}.pd-figlabel-right{color:var(--color-text-dim);text-transform:uppercase;right:18px}.pd-plate-body{padding:20px}.pd-metafoot{border-top:1px dashed var(--pd-dash);color:var(--color-text-dim);font:500 11px var(--font-data);padding:11px 18px}.pd-metafoot b{color:var(--pd-accent-ink);font-weight:500}.pd-metafoot i{color:var(--color-border-bright);padding:0 6px;font-style:normal}.pd-overline{color:var(--pd-accent-ink);font:600 11px var(--font-data);letter-spacing:.18em;text-transform:uppercase;margin-bottom:10px;display:block}.pd-display{color:var(--color-text);font:800 clamp(1.75rem, 2.6vw, 2.25rem) var(--font-data);letter-spacing:-.022em;line-height:1.08}.pd-hero-display{font-size:clamp(2.25rem,5vw,3.25rem)}.pd-h2{color:var(--color-text);font:700 1.375rem var(--font-data);letter-spacing:-.015em}.pd-h3{color:var(--color-text);font:600 1rem var(--font-data);letter-spacing:-.008em}.pd-spark{background:var(--pd-accent);border-radius:2px;width:9px;height:9px;margin-left:10px;display:inline-block;transform:rotate(45deg)translateY(-3px)}.pd-link{color:var(--pd-accent-ink);border-bottom:1px dotted var(--pd-accent-border);cursor:pointer;transition:border-color var(--t-base);text-decoration:none}.pd-link:hover{border-bottom-color:var(--pd-accent-ink)}.pd-dim{color:var(--color-text-dim)}.pd-measure{text-wrap:pretty;max-width:68ch}.pd-tag{font:500 11.5px var(--font-data);letter-spacing:.01em;white-space:nowrap;border-radius:7px;align-items:center;gap:6px;padding:3px 9px;display:inline-flex}.pd-tag:before{content:"";background:currentColor;border-radius:2px;width:6px;height:6px}.pd-tag-tech{gap:5px;padding-inline:8px}.pd-tag-tech:before{display:none}.pd-tech-icon{flex:0 0 13px;width:13px;height:13px;display:block}.pd-tech-react{color:#149eca}.pd-tech-vite{color:#646cff}.pd-tech-node-js{color:#539e43}.pd-tech-mongodb{color:#47a248}.pd-tech-gemini-embeddings{color:#7357d9}.pd-tech-next-js{color:#111827}.pd-tech-typescript{color:#3178c6}.pd-tech-supabase{color:#3ecf8e}.pd-tech-postgresql{color:#336791}.pd-tag-green{background:var(--tag-green-bg);color:var(--tag-green-ink);box-shadow:inset 0 0 0 1px var(--tag-green-fill)}.pd-tag-amber{background:var(--tag-amber-bg);color:var(--tag-amber-ink);box-shadow:inset 0 0 0 1px var(--tag-amber-fill)}.pd-tag-red{background:var(--tag-red-bg);color:var(--tag-red-ink);box-shadow:inset 0 0 0 1px var(--tag-red-fill)}.pd-tag-blue{background:var(--tag-blue-bg);color:var(--tag-blue-ink);box-shadow:inset 0 0 0 1px var(--tag-blue-fill)}.pd-tag-gray{background:var(--tag-gray-bg);color:var(--tag-gray-ink);box-shadow:inset 0 0 0 1px var(--tag-gray-fill)}.card{border:1px solid var(--color-border);border-radius:var(--pd-radius-xs);background:var(--color-surface);box-shadow:var(--shadow-card);transition:border-color var(--t-base);padding:18px}.card:hover{border-color:var(--color-border-bright)}.card-head{justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:8px;display:flex}.card-figure{font:800 1.75rem var(--font-data);letter-spacing:-.02em;color:var(--color-text);line-height:1.1}.card-figure-accent{color:var(--pd-accent-ink)}.card-note{color:var(--color-text-dim);margin-top:6px;font-size:12.5px;line-height:1.5}.empty-state{border:1px dashed var(--pd-dash);border-radius:var(--pd-radius-xs);background:var(--color-surface-2);text-align:center;padding:24px}.empty-state h3{margin-bottom:6px}.empty-state p{color:var(--color-text-dim);max-width:52ch;margin-inline:auto;font-size:13.5px}.topbar{z-index:5;background:color-mix(in srgb, var(--color-bg) 88%, transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--color-border);position:sticky;top:0}.topbar-inner{max-width:var(--w-wide);padding:14px var(--pd-gutter);justify-content:space-between;align-items:center;gap:20px;margin:0 auto;display:flex}.wordmark{min-height:44px;font-family:var(--font-wordmark);letter-spacing:-.01em;color:var(--color-text);align-items:center;font-size:17px;font-weight:700;text-decoration:none;display:inline-flex}.wordmark span{color:var(--pd-accent)}.topnav{align-items:center;gap:4px;min-width:0;display:flex}.topnav a{border-radius:var(--pd-radius-xs);min-height:44px;color:var(--color-text-dim);transition:background-color var(--t-fast), color var(--t-fast);flex:none;align-items:center;padding:0 12px;font-size:13.5px;font-weight:500;text-decoration:none;display:inline-flex}.topnav a:hover{background:var(--color-surface-2);color:var(--color-text)}.shell{max-width:var(--w-wide);padding:0 var(--pd-gutter) 32px;margin:0 auto}.hero{max-width:var(--w-narrow);padding:72px 0 56px}.hero p{color:var(--color-text-dim);text-wrap:pretty;max-width:none;margin-top:16px;font-size:16px;line-height:1.6}.hero-tags{flex-wrap:wrap;gap:8px;margin-top:22px;display:flex}.section{padding:44px 0 0}.section-head{border-bottom:1px dashed var(--pd-dash);align-items:flex-start;gap:16px;margin-bottom:26px;padding-bottom:18px;display:flex}.section-head>div{flex:1;min-width:0}.section-head p{max-width:none;color:var(--color-text-dim);text-wrap:pretty;margin-top:10px;font-size:13.5px;line-height:1.55}.section-fig{color:var(--color-text-dim);font:500 11px var(--font-plate);letter-spacing:.08em;flex-shrink:0;margin-top:6px}.card-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;display:grid}.two-col{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:14px;display:grid}.stack{gap:14px;display:grid}.claim-list{gap:10px;list-style:none;display:grid}.claim-list li{color:var(--color-text-dim);grid-template-columns:18px minmax(0,1fr);gap:10px;font-size:13.5px;line-height:1.55;display:grid}.claim-mark{border-radius:2px;width:8px;height:8px;margin-top:5px}.claim-no{background:var(--tag-red-fill)}.claim-yes{background:var(--tag-green-fill)}.claim-list b{color:var(--color-text);font-weight:600}.footer{border-top:1px dashed var(--pd-dash);color:var(--color-text-dim);flex-wrap:wrap;justify-content:space-between;gap:10px 20px;margin-top:56px;padding-top:22px;font-size:12.5px;display:flex}.footer-fig{font:500 11px var(--font-plate);letter-spacing:.08em}@media (max-width:900px){.card-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:720px){.two-col{grid-template-columns:minmax(0,1fr)}.hero{padding:48px 0 40px}}@media (max-width:560px){.card-grid{grid-template-columns:minmax(0,1fr)}.section-head{flex-direction:column;gap:8px}.section-fig{margin-top:0}.topbar-inner{flex-wrap:wrap;gap:2px 12px}.wordmark{flex:none}.topnav{scrollbar-width:none;width:100%;margin-inline:calc(var(--pd-gutter) * -1);padding-inline:var(--pd-gutter);overflow-x:auto}.topnav::-webkit-scrollbar{display:none}}@media (max-width:480px){:root{--pd-gutter:18px}.topnav a{padding:0 9px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.shell-mid{max-width:var(--w-mid)}.shell-narrow{max-width:var(--w-narrow)}.page-head{padding:56px 0 0}.page-head .section-head{margin-bottom:18px}.row-tags{flex-wrap:wrap;gap:8px;display:flex}.site-footer{border-top:1px solid var(--color-border);background:var(--color-surface-2);margin-top:0}.site-footer-inner{max-width:var(--w-wide);padding:24px var(--pd-gutter) 40px;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:12px 28px;margin:0 auto;display:flex}.site-footer p{max-width:60ch;color:var(--color-text-dim);font-size:12.5px;line-height:1.55}.site-footer nav{gap:18px;font-size:13px;display:flex}.prose{flex-direction:column;gap:16px;max-width:none;margin-bottom:26px;display:flex}.prose p{color:var(--color-text-dim);text-wrap:pretty;line-height:1.65}.prose .pd-h2{margin-top:14px}.prose .pd-h3{margin-top:10px}.prose i{font-style:italic}.plate-label{font:500 10.5px var(--font-plate);letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-dim)}.notice{border-radius:var(--pd-radius-xs);border:1px solid var(--pd-accent-border);background:var(--color-amber-dim);color:var(--color-text);flex-direction:column;gap:6px;margin:26px 0 0;padding:16px 18px;font-size:13.5px;line-height:1.6;display:flex}.notice strong{color:var(--pd-accent-ink);font-weight:600}.notice-blue{border-color:var(--banner-blue-border,#2563eb66);background:var(--tag-blue-bg)}.notice-blue strong{color:var(--tag-blue-ink)}.notice-red{background:var(--tag-red-bg);border-color:#dc262657}.notice-red strong{color:var(--tag-red-ink)}.claim-note{border:1px solid var(--color-border);border-radius:var(--pd-radius-xs);background:var(--color-surface);box-shadow:var(--shadow-card);padding:18px}.claim-note-at{color:var(--color-text);margin-top:2px;font-size:13.5px;font-weight:500}.claim-note .card-note{margin-top:8px}.claim-note-status{font:500 10.5px var(--font-plate);letter-spacing:.08em;text-transform:uppercase;border-radius:7px;margin-top:12px;padding:2px 8px;display:inline-block}.claim-note-development{background:var(--tag-amber-bg);color:var(--tag-amber-ink)}.claim-note-unvalidated{background:var(--tag-gray-bg);color:var(--tag-gray-ink)}.claim-note-measured{background:var(--tag-green-bg);color:var(--tag-green-ink)}.table-scroll{overflow-x:auto}.table-plate>.pd-figure{padding:20px}.spec-table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:13.5px}.spec-table th{text-align:left;background:var(--color-surface-2);border-bottom:1px solid var(--color-border);letter-spacing:.04em;text-transform:uppercase;color:var(--color-text-dim);white-space:nowrap;padding:11px 18px;font-size:12px;font-weight:600}.spec-table td{border-bottom:1px solid var(--color-border);color:var(--color-text-dim);vertical-align:top;padding:11px 18px}.spec-table td:first-child{color:var(--color-text);white-space:nowrap;font-weight:500}.spec-table tr:last-child td{border-bottom:0}.glossary{flex-direction:column;display:flex}.glossary>div{border-bottom:1px dashed var(--pd-dash);grid-template-columns:170px minmax(0,1fr);gap:18px;padding:14px 0;display:grid}.glossary>div:last-child{border-bottom:0}.glossary dt{font-size:14px;font-weight:600}.glossary dd{color:var(--color-text-dim);font-size:13.5px;line-height:1.6}.contact-list{list-style:none}.contact-list li{border-bottom:1px dashed var(--pd-dash);grid-template-columns:110px minmax(0,1fr);align-items:center;gap:18px;min-height:56px;padding:0 20px;display:grid}.contact-list li:last-child{border-bottom:0}@media (max-width:560px){.glossary>div,.contact-list li{grid-template-columns:minmax(0,1fr);gap:6px}.contact-list li{align-items:start;padding:14px 20px}}.site-footer nav a,.contact-list a{position:relative}.site-footer nav a:after,.contact-list a:after{content:"";position:absolute;inset:-13px -10px}[id]{scroll-margin-top:100px}.portfolio-hero{grid-template-columns:minmax(0,1fr) 280px;align-items:center;gap:40px;max-width:none;padding-bottom:28px;display:grid}.portfolio-hero .pd-hero-display{text-wrap:balance;max-width:22ch;font-size:clamp(2.5rem,5.3vw,3.75rem)}.portfolio .section{padding-top:56px}.portfolio-actions{flex-wrap:wrap;gap:12px;margin-top:24px;display:flex}.portfolio-button{border:1px solid var(--color-text);border-radius:var(--pd-radius-xs);background:var(--color-text);color:#fff;min-height:46px;transition:background-color var(--t-base), transform var(--t-base);justify-content:center;align-items:center;gap:8px;padding:10px 20px;font-weight:600;text-decoration:none;display:inline-flex}.portfolio-button-icon{flex:0 0 18px;width:18px;height:18px}.linkedin-button .portfolio-button-icon{color:#0a66c2}.linkedin-button:hover .portfolio-button-icon{color:#fff}.portfolio-button.secondary{background:var(--color-surface);color:var(--color-text);border-color:var(--color-border-bright)}.portfolio-button:hover{background:var(--pd-accent-ink);border-color:var(--pd-accent-ink);color:#fff}.portfolio-button:active{transform:translateY(1px)}.experience-layout{grid-template-columns:1fr 1.5fr;gap:28px;display:grid}.experience-card-copy{isolation:isolate;background-blend-mode:normal, multiply;background-image:linear-gradient(90deg,#fffffff5 0%,#ffffffdb 48%,#ffffff5c 100%),url(/animodev.jpg);background-position:50%,50%;background-repeat:no-repeat;background-size:cover,180px;flex-direction:column;justify-content:center;min-height:170px;display:flex;position:relative;overflow:hidden}.experience-date{color:var(--color-text-dim);margin-top:16px;font-size:13px}.portfolio-list{color:var(--color-text-dim);gap:9px;padding-left:19px;font-size:14px;line-height:1.6;display:grid}.portfolio-list li::marker{color:var(--pd-accent-ink)}.project-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;display:grid}.project-primary,.project-secondary{grid-column:1/-1}.project-grid article{min-width:0}.project-grid .pd-plate{height:100%}.project-description{margin-top:8px;font-weight:500}.project-summary{color:var(--color-text-dim);max-width:none;margin-bottom:16px;font-size:15px}.project-tags{flex-wrap:wrap;gap:7px;margin-top:22px;display:flex}.project-secondary{border-bottom:1px dashed var(--pd-dash);align-items:center;gap:28px;padding:24px 0;display:flex}.project-secondary>div{flex:1}.project-secondary .project-summary{margin:8px 0}.project-secondary>a{flex-shrink:0;padding-block:12px}.skills-layout{grid-template-columns:1.3fr 1fr;align-items:start;gap:28px;display:grid}.skills-layout .portfolio-list{margin-top:16px}.awards-strip{border-top:1px dashed var(--pd-dash);margin-top:28px;padding-top:22px}.awards-strip-head{justify-content:space-between;align-items:baseline;gap:16px;display:flex}.awards-strip-head .pd-overline{margin-bottom:0}.awards-count{color:var(--color-text-dim);font:500 10.5px var(--font-plate);letter-spacing:.08em;text-transform:uppercase}.awards-grid{grid-template-columns:repeat(3,minmax(0,1fr));margin-top:14px;list-style:none;display:grid}.awards-grid li{border-left:1px dashed var(--pd-dash);flex-direction:column;gap:4px;min-width:0;padding:14px 20px 4px;display:flex;position:relative}.awards-grid li:first-child{border-left:0;padding-left:0}.awards-grid li:before{content:"";background:var(--pd-accent);border-radius:2px;width:8px;height:8px;margin-bottom:7px;transform:rotate(45deg)}.award-placement{color:var(--pd-accent-ink);font:700 1.1rem var(--font-data);letter-spacing:-.015em;line-height:1.15}.award-event{color:var(--color-text);font-size:14px;font-weight:600;line-height:1.35}.award-note{color:var(--color-text-dim);font-size:13px;line-height:1.35}.portfolio p,.shell-narrow .contact-copy{text-align:justify}.portfolio .card-note,.portfolio .experience-date{text-align:left}.portfolio .portfolio-list{text-align:justify}.contact-copy{max-width:none;color:var(--color-text-dim);margin-top:12px}.contact-email{overflow-wrap:anywhere;margin-top:16px}.menu-toggle{display:none}.showcase{aspect-ratio:16/9;border:1px dashed var(--color-border-bright);border-radius:var(--pd-radius-xs);background:var(--color-surface-2);margin-bottom:20px;position:relative;overflow:hidden}.showcase img{object-fit:contain}.showcase-placeholder{text-align:center;color:var(--color-text-dim);background-image:repeating-linear-gradient(to right, var(--pd-grid-line) 0 1px, transparent 1px 24px), repeating-linear-gradient(to bottom, var(--pd-grid-line) 0 1px, transparent 1px 24px);flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:20px;display:flex;position:absolute;inset:0}.showcase-caption{font-size:12px}.portrait{aspect-ratio:4/5;width:min(100%,300px);margin:0 auto}.portrait img{object-fit:cover}.project-card{flex-direction:column;display:flex}.project-card>.pd-figure{min-height:126px;padding-bottom:18px}.project-card>.pd-plate-body{flex-direction:column;flex:1;display:flex}.project-card-bottom{margin-top:auto;padding-top:22px}.project-card-bottom .project-tags{align-content:start;min-height:48px;margin-top:0}.project-card-bottom .portfolio-actions{margin-top:12px}.project-secondary{grid-template-columns:220px minmax(0,1fr);display:grid}.project-secondary .showcase{margin:0}.thesis-actions{flex-wrap:wrap;grid-column:2;align-items:center;gap:20px;display:flex}.controller-grid{margin-bottom:24px}.controller-card{flex-direction:column;display:flex}.controller-card>.pd-figure{padding:20px}.controller-card>.pd-plate-body{flex:1}.controller-card .card-note+.card-note{margin-top:14px}.portfolio-button:disabled{opacity:.6;cursor:default}@media (max-width:850px){.topbar-inner{flex-wrap:wrap}.menu-toggle{border:1px solid var(--color-border);border-radius:var(--pd-radius-xs);background:var(--color-surface);min-height:44px;color:var(--color-text);font:inherit;cursor:pointer;align-items:center;padding:8px 12px;display:inline-flex}.topnav{width:100%;margin:0;padding:0;display:none;overflow:visible}.topnav.is-open{grid-template-columns:repeat(3,minmax(0,1fr));display:grid}}@media (max-width:720px){.portfolio-hero{grid-template-columns:minmax(0,1fr);gap:24px}.portfolio-hero .portrait{justify-self:center}.project-secondary{grid-template-columns:minmax(0,1fr)}.project-secondary .showcase{width:100%}.thesis-actions{grid-column:auto}.experience-layout,.skills-layout,.project-grid{grid-template-columns:minmax(0,1fr)}.experience-card-copy{background-position:50%,50%;background-size:cover,150px;min-height:190px}.awards-grid{grid-template-columns:minmax(0,1fr);margin-top:10px}.awards-grid li,.awards-grid li:first-child{border-top:1px dashed var(--pd-dash);border-left:0;padding:14px 0 12px}.awards-grid li:first-child{border-top:0;padding-top:0}.project-secondary{flex-direction:column;align-items:flex-start;gap:8px}.portfolio .section{padding-top:40px}}
