.mesh-viewer-wrap{inline-size:var(--mv-width,22ch);flex-direction:column;gap:.3lh;display:flex}.mesh-viewer{block-size:var(--mv-height,14lh);cursor:grab;touch-action:none;inline-size:100%}.mesh-viewer:active{cursor:grabbing}.mesh-viewer canvas{outline:none;display:block}.mesh-viewer-caption{color:var(--muted);text-align:center;font-size:.8em;line-height:1.3}.mesh-grid{grid-template-columns:6ch repeat(6,15ch);align-items:end;gap:.5lh 1.5ch;margin-block:1lh;padding-bottom:.5lh;display:grid;overflow-x:auto}.mesh-grid-header,.mesh-grid-row-label{color:var(--muted);text-align:center;font-size:.85em}.mesh-grid-row-label{writing-mode:vertical-rl;text-align:center;transform:rotate(180deg)}.mesh-grid .mesh-viewer-wrap{inline-size:100%}.mesh-grid .mesh-viewer{block-size:17lh}.mesh-grid-unavailable{border:1px dashed var(--border);justify-content:center;align-items:center;block-size:17lh;display:flex}.generated-shapes-row{flex-wrap:wrap;gap:2ch;margin-block:1lh;display:flex}@media (width<=900px){.mesh-grid{grid-template-columns:5ch repeat(6,minmax(13ch,1fr))}}@media (width<=768px){.mesh-grid{grid-template-columns:4ch repeat(6,minmax(11ch,1fr));gap:.5lh .75ch}.mesh-grid .mesh-viewer,.mesh-grid-unavailable{block-size:12lh}.generated-shapes-row .mesh-viewer-wrap{inline-size:100%}}.mesh-view-toggle[data-astro-cid-dsegvybi]{gap:1ch;margin-block:1lh;display:inline-flex}@layer components{button,input[type=button],input[type=submit],input[type=reset],[is-~=button]{--button-primary:var(--foreground0);--button-secondary:var(--background0);--mapped-primary:var(--button-primary);--mapped-secondary:var(--button-secondary);color:var(--mapped-secondary);background-color:var(--mapped-primary);font-family:var(--font-family);font-size:var(--font-size);line-height:var(--line-height);border:none;outline:none;justify-content:center;align-items:center;padding:0 2ch;display:inline-flex}button[box-],input[type=button][box-],input[type=submit][box-],input[type=reset][box-],[is-~=button][box-]{color:var(--mapped-primary);--box-border-color:var(--mapped-primary);background-color:#0000}button:focus,input[type=button]:focus,input[type=submit]:focus,input[type=reset]:focus,[is-~=button]:focus{font-weight:700;text-decoration:underline}button:active,input[type=button]:active,input[type=submit]:active,input[type=reset]:active,[is-~=button]:active{--mapped-primary:var(--mapped-secondary);--mapped-secondary:var(--mapped-primary)}button:disabled,input[type=button]:disabled,input[type=submit]:disabled,input[type=reset]:disabled,[is-~=button]:disabled{pointer-events:none;text-decoration:line-through}button[size-=small],input[type=button][size-=small],input[type=submit][size-=small],input[type=reset][size-=small],[is-~=button][size-=small]{height:1lh;padding:0 1ch}button:not([size-]):not([box-]),button[size-=default]:not([box-]),input[type=button]:not([size-]):not([box-]),input[type=button][size-=default]:not([box-]),input[type=submit]:not([size-]):not([box-]),input[type=submit][size-=default]:not([box-]),input[type=reset]:not([size-]):not([box-]),input[type=reset][size-=default]:not([box-]),[is-~=button]:not([size-]):not([box-]),[is-~=button][size-=default]:not([box-]){background-color:#0000;background-image:linear-gradient(to bottom,transparent 0,transparent .5lh,var(--mapped-primary) .5lh,var(--mapped-primary) calc(100% - .5lh),transparent calc(100% - .5lh),transparent)}button[size-=large],button[size-=default],button:not([size-]),input[type=button][size-=large],input[type=button][size-=default],input[type=button]:not([size-]),input[type=submit][size-=large],input[type=submit][size-=default],input[type=submit]:not([size-]),input[type=reset][size-=large],input[type=reset][size-=default],input[type=reset]:not([size-]),[is-~=button][size-=large],[is-~=button][size-=default],[is-~=button]:not([size-]){height:3lh}button[variant-=foreground0],button:not([variant-]),input[type=button][variant-=foreground0],input[type=button]:not([variant-]),input[type=submit][variant-=foreground0],input[type=submit]:not([variant-]),input[type=reset][variant-=foreground0],input[type=reset]:not([variant-]),[is-~=button][variant-=foreground0],[is-~=button]:not([variant-]){--button-primary:var(--foreground0);--button-secondary:var(--background0)}button[variant-=foreground1],input[type=button][variant-=foreground1],input[type=submit][variant-=foreground1],input[type=reset][variant-=foreground1],[is-~=button][variant-=foreground1]{--button-primary:var(--foreground1);--button-secondary:var(--background0)}button[variant-=foreground2],input[type=button][variant-=foreground2],input[type=submit][variant-=foreground2],input[type=reset][variant-=foreground2],[is-~=button][variant-=foreground2]{--button-primary:var(--foreground2);--button-secondary:var(--background0)}button[variant-=background0],input[type=button][variant-=background0],input[type=submit][variant-=background0],input[type=reset][variant-=background0],[is-~=button][variant-=background0]{--button-primary:var(--background0);--button-secondary:var(--foreground0)}button[variant-=background1],input[type=button][variant-=background1],input[type=submit][variant-=background1],input[type=reset][variant-=background1],[is-~=button][variant-=background1]{--button-primary:var(--background1);--button-secondary:var(--foreground0)}button[variant-=background2],input[type=button][variant-=background2],input[type=submit][variant-=background2],input[type=reset][variant-=background2],[is-~=button][variant-=background2]{--button-primary:var(--background2);--button-secondary:var(--foreground0)}button[variant-=background3],input[type=button][variant-=background3],input[type=submit][variant-=background3],input[type=reset][variant-=background3],[is-~=button][variant-=background3]{--button-primary:var(--background3);--button-secondary:var(--foreground0)}}@layer utils{@property --box-rounded-radius{syntax:"<length>";inherits:false;initial-value:4px}@property --box-border-width{syntax:"<length>";inherits:false;initial-value:2px}@property --box-double-border-width{syntax:"<length>";inherits:false;initial-value:1px}[box-=square],[box-=round],[box-=double]{isolation:isolate;padding:1lh 1ch;position:relative}[box-=square]:before,[box-=round]:before,[box-=double]:before{content:"";width:calc(100% - 1ch - var(--box-border-width));height:calc(100% - 1lh - var(--box-border-width));border:solid var(--box-border-width) var(--box-border-color);z-index:-1;position:absolute;top:50%;left:50%;translate:-50% -50%}[box-=square][box-=round]:before,[box-=round][box-=round]:before,[box-=double][box-=round]:before{border-radius:var(--box-rounded-radius)}[box-=square][box-=round]:after,[box-=round][box-=round]:after,[box-=double][box-=round]:after{border-radius:calc(var(--box-rounded-radius) + 2px)}[box-=square][box-=double]:before,[box-=round][box-=double]:before,[box-=double][box-=double]:before{border-width:var(--box-double-border-width)}[box-=square][box-=double]:after,[box-=round][box-=double]:after,[box-=double][box-=double]:after{content:"";width:calc(100% - 1ch + var(--box-double-border-width) * 2);height:calc(100% - 1lh + var(--box-double-border-width) * 2);border:solid var(--box-double-border-width) var(--box-border-color);z-index:-1;position:absolute;top:50%;left:50%;translate:-50% -50%}[box-=square][shear-=both],[box-=round][shear-=both],[box-=double][shear-=both]{padding-top:0;padding-bottom:0}[box-=square][shear-=top],[box-=round][shear-=top],[box-=double][shear-=top]{padding-top:0}[box-=square][shear-=bottom],[box-=round][shear-=bottom],[box-=double][shear-=bottom]{padding-bottom:0}}.project{flex-direction:row;gap:2ch;margin-bottom:1lh;display:flex}.project-photo-placeholder{border:1px dashed var(--border);background:var(--panel);margin:0;padding:1lh 1ch}.project-photo{object-fit:cover;width:20ch;height:10lh}.project-main{flex-direction:column;flex:1;justify-content:space-between;gap:1lh;min-width:0;display:flex}.project-header{flex-direction:row;justify-content:space-between;align-items:flex-start;gap:1ch;display:flex}.project-header-left{min-width:0}.project-title{flex:70%;min-width:0}.project-tags{flex-flow:wrap;flex:0 50%;justify-content:flex-end;gap:1lh 2ch;display:flex}.project-button-panel{flex-direction:row;gap:0;margin-top:auto;display:flex}.project-desc{min-width:0}.project-desc>:first-child{margin-top:0}.project-desc>:last-child{margin-bottom:0}.project-desc p,.project-desc ul,.project-desc ol,.project-desc pre,.project-desc blockquote,.project-desc table{margin:0 0 1lh}.project-desc img{min-width:0;max-width:100%;height:auto;display:block}.project-button{gap:0;height:3lh}.demo-button{--button-primary:var(--normal-red);font-weight:700}.demo-button:active{font-weight:700;--button-primary:var(--normal-red)!important}@media (width<=768px){.project{flex-direction:column}.photo-placeholder-inner{width:100%;height:12lh}.project-photo{object-fit:cover;width:100%;height:100%}.project-header{flex-direction:column;align-items:flex-start;gap:1lh}.project-button-panel{margin-top:2lh}.project-desc img,.project-desc .project-photo-placeholder{float:none!important;width:100%!important;height:auto!important;margin-inline:0!important}}.projects-layout[data-astro-cid-oh3pn42x]{grid-template-columns:minmax(20ch,24ch) minmax(0,1fr);align-items:start;gap:2ch;display:grid}.projects-tree[data-astro-cid-oh3pn42x]{gap:1lh;padding-right:1ch;display:grid;position:sticky;top:1lh;overflow-x:hidden}.projects-tree[data-astro-cid-oh3pn42x]::-webkit-scrollbar{width:.9ch}.projects-tree[data-astro-cid-oh3pn42x]::-webkit-scrollbar-thumb{background:color-mix(in oklab, var(--border) 75%, var(--text) 25%)}.tree-node[data-astro-cid-oh3pn42x]{cursor:pointer;width:100%;color:inherit;justify-content:flex-start;text-decoration:none}.tree-node[data-astro-cid-oh3pn42x][aria-current=page]{color:var(--text);text-decoration:underline}.tree-node-year[data-astro-cid-oh3pn42x]{color:var(--border);font-size:.85em}.tree-node-new[data-astro-cid-oh3pn42x]{background:var(--normal-black);color:var(--normal-white);letter-spacing:.05em;vertical-align:middle;box-shadow:-1px 1px 0 0 var(--group-color);margin-right:.75ch;padding:0 .6ch;font-size:.75em;font-weight:700;line-height:1.5;display:inline-block}.tree-group-title[data-astro-cid-oh3pn42x]{--badge-text:var(--group-color);--badge-color:var(--normal-black);margin:0;transition:color .15s}.tree-group-active[data-astro-cid-oh3pn42x] .tree-group-title[data-astro-cid-oh3pn42x]{--badge-text:var(--normal-black);--badge-color:var(--group-color)}.tree-node-active[data-astro-cid-oh3pn42x]{--button-primary:var(--foreground1)}.projects-results[data-astro-cid-oh3pn42x]{flex-direction:column;gap:1lh;min-width:0;display:flex}.project-entry[data-astro-cid-oh3pn42x][hidden]{display:none}@media (width<=1100px){.projects-layout[data-astro-cid-oh3pn42x]{grid-template-columns:minmax(18ch,20ch) minmax(0,1fr);gap:1ch}}@media (width<=900px){.projects-layout[data-astro-cid-oh3pn42x]{grid-template-columns:1fr;gap:1lh}.projects-tree[data-astro-cid-oh3pn42x]{scrollbar-gutter:stable;border:1px dashed var(--border);padding-right:.5ch;padding-block:.5lh;max-height:35dvh;padding-left:1ch;position:static;overflow-y:auto}}
