.p-toc[data-astro-cid-pukkl6o4]{position:sticky;top:calc(var(--page-padding-top) + var(--space-5));margin-top:var(--space-10);display:none}@media(min-width:1001px){.p-toc[data-astro-cid-pukkl6o4]{display:block}}.p-toc[data-astro-cid-pukkl6o4]:first-child{margin-top:0}.p-toc[data-astro-cid-pukkl6o4] ul[data-astro-cid-pukkl6o4]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.125rem}.p-toc[data-astro-cid-pukkl6o4] a[data-astro-cid-pukkl6o4]{display:flex;align-items:center;gap:.5rem;padding:.3rem 0;text-decoration:none;font-size:var(--text-xs);font-weight:var(--weight-medium);color:var(--color-text-muted);transition:color var(--duration-fast, .15s) ease;line-height:1.3}.p-toc[data-astro-cid-pukkl6o4] a[data-astro-cid-pukkl6o4]:hover{color:var(--color-text-secondary)}.p-toc[data-astro-cid-pukkl6o4] li[data-astro-cid-pukkl6o4].is-active a[data-astro-cid-pukkl6o4]{color:var(--color-text-primary);font-weight:var(--weight-semibold)}.p-toc-indicator[data-astro-cid-pukkl6o4]{display:block;flex-shrink:0;width:5px;height:5px;border-radius:50%;background:var(--color-text-muted);transition:background var(--duration-fast, .15s) ease,transform var(--duration-fast, .15s) ease}.p-toc[data-astro-cid-pukkl6o4] li[data-astro-cid-pukkl6o4].is-active .p-toc-indicator[data-astro-cid-pukkl6o4]{background:var(--color-text-primary);transform:scale(1.4)}.p-head img,.p-head video,.project-content img,.project-content video{height:auto}.project-page{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-template-rows:auto 1fr;grid-template-areas:"side head head head" "side body body body";column-gap:var(--grid-gutter);padding-inline:var(--grid-inset);padding-top:var(--page-padding-top);padding-bottom:var(--space-16);overflow-x:clip;--p-text-w: calc((100cqi - 2 * var(--grid-gutter)) * 1.75 / 3 + var(--grid-gutter));--p-text-margin: auto}.project-page--has-back-nav{padding-top:calc(var(--page-padding-top) + 3rem)}.p-head,.project-content{container-type:inline-size;min-width:0}.p-head{grid-area:head}.project-content{grid-area:body}@media(max-width:1000px){.project-page{grid-template-columns:repeat(3,minmax(0,1fr));grid-template-rows:auto;grid-template-areas:"head head head" "side side side" "body body body"}}@media(max-width:600px){.project-page{grid-template-columns:minmax(0,1fr);grid-template-areas:"head" "side" "body";--p-text-w: 100cqi}}:is(.p-head,.project-content) :is(h1,h2,h3,h4,h5,h6,p,ul,ol,blockquote,hr,.p-section-open,.p-detail,.p-meta-grid,.p-wip):not(.p-media,.p-media-2col,.p-media-3col,.p-card-grid,:is(.p-media,.p-media-2col,.p-media-3col,.p-card-grid) *){max-width:var(--p-text-w)}:is(.p-head,.project-content) :is(h1,h2,h3,h4,h5,h6,p,ul,ol,blockquote,hr,.p-section-open,.p-detail,.p-meta-grid,.p-wip):not(.p-media,.p-media-2col,.p-media-3col,.p-card-grid,:is(.p-media,.p-media-2col,.p-media-3col,.p-card-grid) *,:is(h1,h2,h3,h4,h5,h6,p,ul,ol,blockquote,.p-section-open,.p-detail,.p-meta-grid,.p-wip) *){margin-inline:var(--p-text-margin)}.p-sidebar{grid-area:side;min-width:0;padding-top:var(--space-8)}.p-sidebar-meta .p-meta-grid{grid-template-columns:minmax(0,1fr);gap:var(--space-5)}.p-sidebar-meta a{color:var(--color-text-secondary);text-decoration:underline;text-underline-offset:3px}.p-sidebar-meta a:hover{color:var(--color-text-primary)}@media(max-width:1000px){.p-sidebar{padding-top:0}.p-sidebar-meta{padding-bottom:var(--space-8)}.p-sidebar-meta .p-meta-grid{grid-template-columns:repeat(3,minmax(0,1fr));column-gap:var(--grid-gutter)}}.label{display:block;font-size:var(--text-xs);font-weight:var(--weight-bold);color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:var(--space-3)}.tag-row{display:flex;flex-wrap:wrap;gap:var(--space-2);margin-top:var(--space-2)}.tag{display:inline-block;padding:var(--space-1) var(--space-3);border-radius:var(--radius-pill);background:var(--color-surface);color:var(--color-text-primary);font-size:var(--text-xs);font-weight:var(--weight-medium);line-height:1.4;white-space:nowrap}.caption{font-size:var(--text-small);color:var(--color-text-muted);margin-top:var(--space-2);text-align:center}.p-section-open{margin-top:var(--space-12);margin-bottom:var(--space-6);display:flex;flex-direction:column;gap:var(--space-3)}.p-detail{margin-top:var(--space-24);margin-bottom:var(--space-8);display:flex;flex-direction:column;gap:var(--space-2)}.p-media{margin-top:var(--space-6);margin-bottom:var(--space-16)}.p-media img,.p-media video{width:100%;border-radius:var(--radius-md);outline:2px solid var(--color-border)}.p-media-2col{display:grid;grid-template-columns:1fr 1fr;gap:var(--grid-gutter);margin-top:var(--space-6)}.p-media-3col{display:grid;grid-template-columns:1fr 1fr 1fr;gap:var(--grid-gutter);margin-top:var(--space-6)}.p-media-2col img,.p-media-2col video,.p-media-3col img,.p-media-3col video{width:100%;border-radius:var(--radius-md)}.p-not-mine{position:relative}.p-not-mine:before{content:"Not my work";position:absolute;top:var(--space-4);left:var(--space-4);z-index:1;padding:var(--space-1) var(--space-3);border-radius:var(--radius-pill);background:#ffffffd9;color:var(--color-text-primary);font-size:var(--text-xs);font-weight:var(--weight-medium);line-height:1.4;white-space:nowrap;pointer-events:none}.p-media-ph{display:grid;place-items:center;width:100%;aspect-ratio:16 / 9;padding:var(--space-4);border-radius:var(--radius-md);outline:2px solid var(--color-border);background:var(--color-surface);color:var(--color-text-muted);font-size:var(--text-small);text-align:center}.p-card-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--gap-grid);margin-top:var(--space-6);margin-inline:calc(-1 * var(--gap-grid));width:calc(100% + 2 * var(--gap-grid))}@media(max-width:640px){.p-card-grid{grid-template-columns:1fr}}.p-header{padding-top:var(--space-8);padding-bottom:var(--space-8)}.p-header h1{padding-bottom:var(--space-4)}.p-meta-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:var(--space-8)}@media(max-width:640px){.p-media-2col,.p-media-3col,.p-meta-grid,.p-sidebar-meta .p-meta-grid{grid-template-columns:1fr 1fr}}.project-content section{margin-top:var(--space-12)}.p-header a{color:var(--color-text-secondary);text-decoration:underline;text-underline-offset:3px}.p-header a:hover{color:var(--color-text-primary)}.p-divider{border:none;border-top:3px solid var(--color-border);margin:var(--space-8) 0 0}.p-wip{font-size:var(--text-sm);color:var(--color-text-muted);padding:var(--space-8) 0;margin-top:var(--space-8)}.modal-backdrop{position:fixed;inset:0;z-index:200;background:#00000080;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;padding:var(--space-6);box-sizing:border-box;opacity:0;pointer-events:none;transition:opacity .2s ease}.modal-backdrop.is-open{opacity:1;pointer-events:all}.modal-panel{position:relative;background:var(--color-bg);border:2px solid var(--color-border);border-radius:var(--radius-lg);width:100%;max-width:750px;max-height:80svh;display:flex;flex-direction:column;box-sizing:border-box;transform:translateY(12px);transition:transform .2s ease}.modal-backdrop.is-open .modal-panel{transform:translateY(0)}.modal-header{flex-shrink:0;display:flex;justify-content:flex-end;padding:var(--space-4) var(--space-4) 0}.modal-close{display:inline-flex;align-items:center;padding:var(--space-2) var(--space-4);border-radius:var(--radius-pill);border:2px solid var(--color-nav-border);background-color:var(--color-nav-bg);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--color-text-primary);cursor:pointer;transition:background-color var(--duration-fast) ease;line-height:1}.modal-close:hover{background-color:var(--color-nav-hover-bg)}.modal-body{flex:1;overflow-y:auto;padding:var(--space-6) var(--space-10) var(--space-10);min-height:0}@media(max-width:640px){.modal-backdrop{align-items:flex-end;padding:0}.modal-panel{width:100%;max-width:100%;max-height:75svh;border-radius:var(--radius-lg) var(--radius-lg) 0 0;border-bottom:none;transform:translateY(100%)}.modal-backdrop.is-open .modal-panel{transform:translateY(0)}.modal-body{padding:var(--space-4) var(--space-6) var(--space-8)}}
