@font-face{font-family:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/8a480f0b521d4e75-s.8e0177b5.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/7178b3e590c64307-s.b97b3418.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:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/caa3a2e1cccd8315-s.p.853070df.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:Geist Fallback;src:local(Arial);ascent-override:95.94%;descent-override:28.16%;line-gap-override:0.0%;size-adjust:104.76%}.geist_a71539c9-module__T19VSG__className{font-family:Geist,Geist Fallback;font-style:normal}.geist_a71539c9-module__T19VSG__variable{--font-geist-sans:"Geist","Geist Fallback"}
@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/4fa387ec64143e14-s.c1fdd6c2.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/bbc41e54d2fcbd21-s.799d8ef8.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:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/797e433ab948586e-s.p.dbea232f.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:Geist Mono Fallback;src:local(Arial);ascent-override:74.67%;descent-override:21.92%;line-gap-override:0.0%;size-adjust:134.59%}.geist_mono_8d43a2aa-module__8Li5zG__className{font-family:Geist Mono,Geist Mono Fallback;font-style:normal}.geist_mono_8d43a2aa-module__8Li5zG__variable{--font-geist-mono:"Geist Mono","Geist Mono Fallback"}
:root{--color-bg-dull-navy:#252c39;--color-bg-dull-navy-overlay:#2c3a5275;--color-text:#eaf1ff;--color-text-muted:#d3deef;--color-heading:#0f1e33;--color-inverse:#eef4ff;--color-link:#b8d3ff;--color-surface:#ecf3fce6;--color-surface-muted:#dce7f5db;--color-surface-glass:#111f3157;--color-border:#8ea1bc94;--color-border-strong:#738aa8a3;--color-media-border:#cfdcf085;--shadow-soft:0 12px 28px #080e184d;--shadow-hard:0 12px 28px #080e1899;--shadow-card:0 22px 52px #060a1257;--shadow-media:0 20px 46px #05091061;--shadow-item-primary:0 18px 42px #0509109e;--shadow-item-secondary:0 6px 16px #05091066;--font-family-base:"Segoe UI","Inter","Helvetica Neue",Arial,sans-serif;--font-size-xs:.875rem;--font-size-sm:.95rem;--font-size-md:1rem;--font-size-lg:1.125rem;--font-size-xl:1.375rem;--font-size-2xl:clamp(1.9rem,2.8vw,2.9rem);--font-size-hero:clamp(2.3rem,4.8vw,3.8rem);--line-tight:1.2;--line-body:1.65;--content-max-width:100%;--content-gutter:0px;--section-gap:80px;--background:var(--color-bg-dull-navy);--foreground:var(--color-text)}body{isolation:isolate;background:var(--color-bg-dull-navy);color:var(--color-text);font-family:var(--font-family-base);font-size:var(--font-size-md);line-height:var(--line-body);text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;margin:0;position:relative}h1,h2,h3,p{margin:0}h1,h2,h3{line-height:var(--line-tight);letter-spacing:.01em}h1{font-size:var(--font-size-2xl)}h2{font-size:var(--font-size-xl)}h3{font-size:var(--font-size-lg)}p{font-size:var(--font-size-md);line-height:var(--line-body)}body:before{content:"";z-index:-1;pointer-events:none;background:linear-gradient(var(--color-bg-dull-navy-overlay),var(--color-bg-dull-navy-overlay)),url(/background_gifs/placidplace-specs-24675.gif) center center/cover no-repeat;position:fixed;inset:0}body:after{content:"";z-index:-1;pointer-events:none;background:linear-gradient(90deg,#04080e85 0%,#04080e00 18%),linear-gradient(270deg,#04080e85 0%,#04080e00 18%);position:fixed;inset:0}.shadow-item{z-index:1;position:relative;box-shadow:var(--shadow-item-primary),var(--shadow-item-secondary)!important}.project-theme main>div{box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none;background:0 0;border:0;border-radius:0;margin-top:74px}.project-theme h1,.project-theme h2,.project-theme h3{color:var(--color-inverse);text-shadow:0 2px 10px #00000059}.project-theme p,.project-theme li{color:#d8e6f8f5}.project-theme{--project-group-bg:linear-gradient(180deg,#e3edfbf5,#d6e3f5eb);--project-group-border:#92aece6b;--project-group-shadow:0 18px 44px #05091047,0 6px 16px #05091033;--project-card-bg:linear-gradient(160deg,#0a1320e6 0%,#0b1624d6 52%,#09111de6 100%);--project-card-border:#849fc15c}.project-theme .project-group{border:1px solid var(--project-group-border);background:var(--project-group-bg);box-shadow:var(--project-group-shadow);border-radius:0;gap:26px;padding:28px;display:grid;position:relative}.project-theme .project-group:before{content:"";background:linear-gradient(#224267e6,#183252e0);width:7px;position:absolute;top:-1px;bottom:-1px;left:-1px;box-shadow:0 0 0 1px #5c799c5c}.project-theme .project-group:after{content:"";pointer-events:none;background:#6583a84d;width:1px;position:absolute;top:14px;bottom:14px;left:7px}.project-page .project-group>*{width:calc(100% + 16px);margin-left:-8px}.project-page article{gap:62px}.project-page .project-group+.project-group{margin-top:14px}.project-theme hr{opacity:1;background:linear-gradient(90deg,#a8c4e614,#a8c4e68f,#a8c4e614);box-shadow:0 0 10px #82a1c42e}.project-theme [aria-label="Tech stack badges"]>span{color:#dfedfff5;background:linear-gradient(#112135e6,#0d1929e0);border:1px solid #87a4c45c;box-shadow:0 8px 20px #070d1552}.project-theme [aria-label=Project\ metadata]>div{color:#e4effff5;background:linear-gradient(#111f32e0,#0c1828d6);border:1px solid #849cba57;box-shadow:0 10px 22px #080e1847}.project-theme [aria-label=Project\ metadata] p{color:#ddebfdf5;text-shadow:0 1px 8px #050a124d}.project-theme [aria-label="Project hero media"]{box-shadow:var(--shadow-media);border:1px solid #99b4d357}.project-theme .project-group>section{background:var(--project-card-bg);border:1px solid var(--project-card-border);color:#dfedfff7;border-radius:0;padding:24px;box-shadow:0 10px 24px #080e1847}.project-page .project-group>section:nth-child(odd){background:linear-gradient(#122235eb,#0c1827e0)}.project-page .project-group>section:nth-child(2n){background:linear-gradient(#0f1d2ee0,#0a1522db)}.project-page .project-group>section>h2{letter-spacing:.015em;color:#e8f3fffa;text-shadow:0 2px 10px #00000059;font-size:clamp(1.35rem,2.1vw,1.85rem);line-height:1.15}.project-page .project-group>section>p{color:#d6e5f8f2;text-shadow:0 1px 8px #00000040;max-width:66ch}.project-theme .project-group>section li,.project-theme .project-group>section blockquote{color:#d6e5f8f2;text-shadow:0 1px 8px #00000040}.project-page .project-group p+p{margin-top:.92rem}.project-page .project-lead{color:#bed4f1f2;letter-spacing:.1em;text-transform:uppercase;margin-bottom:.46rem;font-size:.88rem;font-weight:700}.project-theme article blockquote,.project-theme .project-technical-panel{color:#deecfdf2;background:linear-gradient(#132439e6,#0d1929e0);border:1px solid #839cbb5c;box-shadow:0 10px 24px #080e184d}.project-theme .project-technical-panel h3,.project-theme .project-technical-panel li,.project-theme article blockquote,.project-theme article blockquote footer{color:#deecfdf2;text-shadow:0 1px 8px #00000040}.project-theme [aria-label=Related\ projects] a{color:#e0eefff5;background:linear-gradient(#142337e0,#0d1928db);border:1px solid #839bb957;box-shadow:0 10px 20px #080e1847}.project-theme [aria-label=Related\ projects] h4,.project-theme [aria-label=Related\ projects] p{color:#e0eefff5;text-shadow:0 1px 8px #00000040}.project-theme [aria-label="Call to action"]{color:#e0eefff5;background:linear-gradient(#112236eb,#0b1726e6);border:1px solid #8098b666;box-shadow:0 14px 32px #080e1859}.project-theme [aria-label="Call to action"] h3,.project-theme [aria-label="Call to action"] p{color:#e0eefff5;text-shadow:0 1px 8px #00000040}.project-theme [aria-label="Call to action"] a{color:#eaf4fffa;background:linear-gradient(#162a43e6,#102035e0);border:1px solid #8da6c675;box-shadow:0 8px 18px #080e1842}.project-theme .project-slideshow{border:1px solid var(--color-media-border);box-shadow:var(--shadow-media);border-radius:14px;overflow:hidden}.project-page .project-image-block{width:100%;display:flex}.project-page .project-image-block>div{width:100%;box-shadow:var(--shadow-media);border:1px solid #99b4d357;border-radius:0;overflow:hidden}.project-page .project-image-right{justify-content:flex-end;margin-top:4px}.project-page .project-image-left{justify-content:flex-start}.project-page .project-image-wide,.project-page .project-image-offset{justify-content:center}@media (max-width:900px){.project-page .project-image-right,.project-page .project-image-left,.project-page .project-image-wide,.project-page .project-image-offset{justify-content:center;transform:none}}.tabletopics-page .tt-image-banner{justify-content:center;margin-bottom:4px}.tabletopics-page .tt-image-left{justify-content:flex-start}.tabletopics-page .tt-image-right{justify-content:flex-end}.project-theme .project-slideshow-overlay{width:100%;height:100%;color:var(--color-inverse);text-shadow:0 2px 10px #0006;background:linear-gradient(#080e1814,#080e1873);flex-direction:column;justify-content:flex-end;align-items:center;padding-bottom:1.1rem;display:flex}.project-theme .project-slideshow-overlay p{color:var(--color-text-muted)}
