:root{--site-sans:Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,
    "Segoe UI", "Noto Sans", "Noto Sans CJK SC", "Microsoft YaHei",
    "PingFang SC", "Helvetica Neue", Arial, sans-serif;--site-mono:ui-monospace, SFMono-Regular, "Cascadia Mono", "Segoe UI Mono",
    Consolas, "Liberation Mono", Menlo, monospace;--site-text:#182033;--site-muted:#4b5870}html{font-size:16px}body,button,input,textarea,select,nav,.prose,.article-style{font-family:var(--site-sans)!important;color:var(--site-text);font-feature-settings:"kern" 1;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}code,kbd,pre,samp{font-family:var(--site-mono)!important}nav a,header a{font-family:var(--site-sans)!important;font-size:.95rem;font-weight:600;letter-spacing:0}.prose,.article-style{font-size:1rem;line-height:1.72}.prose p,.prose li,.article-style p,.article-style li{color:var(--site-muted)}.prose strong,.article-style strong{color:var(--site-text);font-weight:650}.prose h1,.article-style h1,main h1{margin-top:1.6rem;margin-bottom:1rem;font-family:var(--site-sans)!important;font-size:clamp(2rem,3.2vw,2.6rem);font-weight:700;line-height:1.12;letter-spacing:0}.prose h2,.article-style h2,main h2{margin-top:2.25rem;margin-bottom:.85rem;font-family:var(--site-sans)!important;font-size:clamp(1.35rem,2vw,1.7rem);font-weight:700;line-height:1.25;letter-spacing:0;text-transform:none}.prose h3,.article-style h3,main h3{margin-top:1.75rem;margin-bottom:.65rem;font-family:var(--site-sans)!important;font-size:1.18rem;font-weight:650;line-height:1.35;letter-spacing:0}.prose ol,.prose ul,.article-style ol,.article-style ul{padding-left:1.35rem}.prose li,.article-style li{margin-top:.35rem;margin-bottom:.35rem}.prose a,.article-style a{text-underline-offset:.18em}aside,aside a,.toc,.toc a{font-family:var(--site-sans)!important;font-size:.92rem;font-weight:500}.gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:1rem;margin-top:1.5rem}.gallery-grid figure{margin:0}.gallery-grid a{display:block;overflow:hidden;border-radius:.75rem;background:#f3f4f6}.gallery-grid img{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;transition:transform .2s ease-in-out}.gallery-grid a:hover img{transform:scale(1.04)}.gallery-grid figcaption{margin-top:.5rem;color:#6b7280;font-size:.9rem;line-height:1.35}.tech-page{margin-top:1.35rem}.tech-tab-input{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.tech-tabs{display:inline-flex;gap:.25rem;border:1px solid #e5e7eb;border-radius:8px;padding:.25rem;background:#f9fafb}.dark .tech-tabs{border-color:#3f3f46;background:#18181b}.tech-tabs label{min-width:6.25rem;border-radius:6px;padding:.42rem .8rem;color:#4b5563;cursor:pointer;font-size:.92rem;font-weight:650;line-height:1.35;text-align:center}.dark .tech-tabs label{color:#d4d4d8}#tech-view-projects:checked~.tech-tabs label[for=tech-view-projects],#tech-view-notes:checked~.tech-tabs label[for=tech-view-notes]{background:#fff;color:#111827;box-shadow:0 1px 2px rgb(0 0 0/8%)}.dark #tech-view-projects:checked~.tech-tabs label[for=tech-view-projects],.dark #tech-view-notes:checked~.tech-tabs label[for=tech-view-notes]{background:#27272a;color:#f4f4f5}.tech-panels{margin-top:1.35rem}.tech-panel{display:none}#tech-view-projects:checked~.tech-panels .tech-panel--projects,#tech-view-notes:checked~.tech-panels .tech-panel--notes{display:block}.tech-showcase{display:grid;gap:1.25rem}.tech-card{overflow:hidden;border:1px solid #e5e7eb;border-radius:8px;background:#fff}.dark .tech-card{border-color:#3f3f46;background:#18181b}.tech-card__media{display:block;overflow:hidden;aspect-ratio:3/2;background:#f3f4f6}.dark .tech-card__media{background:#27272a}.tech-card__media img{display:block;width:100%;height:100%;object-fit:cover;object-position:top left;transition:transform .2s ease-in-out}.tech-card__media:hover img{transform:scale(1.025)}.tech-card__body{padding:1.15rem}.tech-card__eyebrow{margin:0 0 .35rem;color:#6b7280;font-size:.82rem;font-weight:650;line-height:1.35}.tech-card h2{margin:0 0 .55rem;font-size:1.15rem;line-height:1.3}.tech-card h2 a{color:inherit;text-decoration:none}.tech-card__body p{color:#4b5563;font-size:.95rem;line-height:1.65}.dark .tech-card__body p{color:#d4d4d8}.tech-card__tags,.tech-note__tags{display:flex;flex-wrap:wrap;gap:.45rem;margin-top:.9rem}.tech-card__tags span,.tech-note__tags span{border:1px solid #e5e7eb;border-radius:999px;padding:.2rem .55rem;color:#4b5563;font-size:.78rem;line-height:1.35}.dark .tech-card__tags span,.dark .tech-note__tags span{border-color:#52525b;color:#d4d4d8}.tech-card__links{display:flex;gap:.75rem;margin-top:1rem}.tech-card__links a,.tech-note h2 a{color:#2563eb;font-weight:650;text-decoration:none}.tech-card__links a{font-size:.92rem}.tech-card__links a:hover,.tech-note h2 a:hover{text-decoration:underline;text-underline-offset:.2em}.tech-notes{display:grid;gap:0;border-top:1px solid #e5e7eb}.dark .tech-notes{border-color:#3f3f46}.tech-note{display:grid;gap:.4rem;border-bottom:1px solid #e5e7eb;padding:1rem 0}.dark .tech-note{border-color:#3f3f46}.tech-note time{color:#6b7280;font-size:.84rem;font-weight:650;line-height:1.35}.tech-note h2{margin:0;font-size:1.05rem;line-height:1.35}.tech-note p{margin:0;color:#4b5563;font-size:.95rem;line-height:1.65}.dark .tech-note p{color:#d4d4d8}@media(min-width:900px){.tech-showcase{grid-template-columns:repeat(2,minmax(0,1fr))}.tech-card__body{padding:1.25rem}.tech-note{grid-template-columns:8.5rem minmax(0,1fr);column-gap:1.25rem}.tech-note h2,.tech-note p,.tech-note__tags{grid-column:2}.tech-note time{grid-row:1/span 3}}.tag-index__header,.tag-term__header{margin-bottom:1.75rem}.tag-index__header h1,.tag-term__header h1{margin:0;font-size:clamp(2rem,3.2vw,2.6rem);font-weight:700;line-height:1.15}.tag-index__intro,.tag-term__header p{margin-top:.65rem;color:#4b5563;font-size:1rem;line-height:1.65}.dark .tag-index__intro,.dark .tag-term__header p{color:#d4d4d8}.tag-index__grid{display:flex;flex-wrap:wrap;gap:.65rem}.tag-index__item{display:inline-flex;align-items:center;gap:.45rem;border:1px solid #e5e7eb;border-radius:999px;padding:.35rem .7rem;background:#fff;color:#1f2937;font-size:.92rem;font-weight:600;line-height:1.35;text-decoration:none}.tag-index__item:hover{border-color:#2563eb;color:#2563eb}.dark .tag-index__item{border-color:#3f3f46;background:#18181b;color:#e4e4e7}.tag-index__item small{display:inline-flex;min-width:1.35rem;height:1.35rem;align-items:center;justify-content:center;border-radius:999px;background:#f3f4f6;color:#4b5563;font-size:.75rem;font-weight:700}.dark .tag-index__item small{background:#27272a;color:#d4d4d8}.tag-term__back{display:inline-block;margin-bottom:.7rem;color:#2563eb;font-size:.92rem;font-weight:650;text-decoration:none}.tag-term__back:hover{text-decoration:underline;text-underline-offset:.2em}.tag-term__posts{margin-top:1.25rem}