.login{min-height:100vh;min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:var(--space-5) var(--space-4);background:var(--color-bg)}.login-card{width:100%;max-width:360px}.login-title{margin:0;font-size:var(--text-2xl);font-weight:700;line-height:1.2;color:var(--color-fg)}.login-subtitle{margin:var(--space-2) 0 0;font-size:var(--text-sm);color:var(--color-fg-muted)}.login-form{display:flex;flex-direction:column;gap:var(--space-4);margin-top:var(--space-6)}.login-field{display:flex;flex-direction:column;gap:var(--space-1)}.login-label{font-size:var(--text-sm);font-weight:700;color:var(--color-fg)}.login-input{width:100%;min-height:40px;padding:0 var(--space-3);font:inherit;font-size:var(--text-base);color:var(--color-fg);background:var(--color-surface);border:1px solid var(--color-border-strong);border-radius:var(--radius);transition:border-color var(--motion-fast) var(--ease),background-color var(--motion-fast) var(--ease)}.login-input:disabled{background:var(--color-sidebar);cursor:not-allowed}.login-input--invalid{border-color:var(--color-danger)}.login-error{margin:0;font-size:var(--text-sm);font-weight:700;color:var(--color-danger)}.login-submit{width:100%;min-height:40px;justify-content:center}@media(max-width:480px){.login-input,.login-submit{min-height:44px}}.patterns{display:grid;grid-template-columns:280px minmax(0,1fr);min-width:0;min-height:0}.pt-nav{background:var(--color-sidebar);border-right:1px solid var(--color-border);padding:var(--space-5) var(--space-3);min-width:0}.pt-group+.pt-group{margin-top:var(--space-5)}.pt-group-title{margin:0 0 var(--space-2);padding:0 var(--space-3);font-size:var(--text-sm);font-weight:700;color:var(--color-fg-muted)}.pt-list{list-style:none;margin:0;padding:0}.pt-link{display:flex;align-items:center;min-height:36px;padding:var(--space-2) var(--space-3);border-radius:var(--radius);color:var(--color-fg);text-decoration:none;transition:background-color var(--motion-fast) var(--ease),color var(--motion-fast) var(--ease)}.pt-link:hover{background:var(--color-border);color:var(--color-fg)}.pt-link[aria-current=page]{background:var(--color-accent-soft);color:var(--color-fg);font-weight:700}.pt-main{min-width:0;padding:var(--space-6) var(--space-6) var(--space-6)}.pt-article{max-width:var(--measure);min-width:0}.pt-header{margin-bottom:var(--space-5)}.pt-title{margin:0 0 var(--space-2);font-size:var(--text-2xl);line-height:1.25}.pt-meta{margin:0 0 var(--space-4);font-size:var(--text-sm);color:var(--color-fg-muted)}.pt-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-3);border-bottom:1px solid var(--color-border)}.pt-tabs{display:flex;gap:var(--space-4)}.pt-tab{min-height:36px;padding:0 0 var(--space-2);border:0;border-bottom:2px solid transparent;background:none;color:var(--color-fg-muted);transition:color var(--motion-fast) var(--ease),border-color var(--motion-fast) var(--ease)}.pt-tab:hover{color:var(--color-fg)}.pt-tab[aria-selected=true]{color:var(--color-fg);border-bottom-color:var(--color-accent)}.pt-copy{margin-bottom:var(--space-2)}.pt-panel{padding-top:var(--space-5);min-width:0}.pt-source{margin:0;padding:var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-sidebar);font-family:var(--font-mono);font-size:var(--text-sm);white-space:pre-wrap;overflow-wrap:anywhere}.pt-skeleton{display:grid;gap:var(--space-3);max-width:var(--measure)}.pt-skel{height:16px;border-radius:var(--radius);background:var(--color-border)}.pt-skel-title{width:40%;height:28px;margin-bottom:var(--space-2)}.pt-skel-meta{width:25%;height:14px}.pt-skel-short{width:60%}.pt-message{display:grid;justify-items:start;gap:var(--space-4);max-width:var(--measure);color:var(--color-fg-muted)}.pt-message p{margin:0}.pt-sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.md{min-width:0;overflow-wrap:break-word}.md>:first-child{margin-top:0}.md h1,.md h2,.md h3{color:var(--color-fg);line-height:1.3;font-weight:700}.md h1{margin:var(--space-6) 0 var(--space-3);font-size:var(--text-2xl)}.md h2{margin:var(--space-6) 0 var(--space-2);font-size:var(--text-xl)}.md h3{margin:var(--space-5) 0 var(--space-2);font-size:var(--text-lg)}.md p,.md ul,.md ol{margin:0 0 var(--space-3)}.md ul,.md ol{padding-left:var(--space-5)}.md li+li{margin-top:var(--space-1)}.md a{overflow-wrap:anywhere}.md code{font-family:var(--font-mono);font-size:.9em;padding:0 var(--space-1);border-radius:4px;background:var(--color-sidebar)}.md pre{margin:0 0 var(--space-4);padding:var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-sidebar);overflow:auto}.md pre code{padding:0;background:none}.md blockquote{margin:var(--space-4) 0;padding:var(--space-3) var(--space-4);border:1px solid var(--color-note-border);border-radius:var(--radius);background:var(--color-note-bg);color:var(--color-fg-muted)}.md blockquote p{margin:0 0 var(--space-2)}.md blockquote p:last-child{margin-bottom:0}.md blockquote strong{color:var(--color-fg)}.md-table-wrap{max-width:100%;margin:0 0 var(--space-4);overflow:auto;border:1px solid var(--color-border);border-radius:var(--radius)}.md table{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}.md th,.md td{padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--color-border);text-align:left;vertical-align:top}.md th{background:var(--color-sidebar);font-weight:700}.md tr:last-child td{border-bottom:0}@media(max-width:767px){.patterns{grid-template-columns:minmax(0,1fr)}.pt-nav{display:flex;overflow-x:auto;-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 32px),transparent);mask-image:linear-gradient(to right,#000 calc(100% - 32px),transparent);padding:0 var(--space-2);border-right:0;border-bottom:1px solid var(--color-border)}.pt-group{display:flex;align-items:center;flex:none}.pt-group+.pt-group{margin-top:0;margin-left:var(--space-4)}.pt-group-title{margin:0;padding:0 var(--space-2) 0 var(--space-3);white-space:nowrap}.pt-list{display:flex}.pt-link{min-height:44px;padding:var(--space-2) var(--space-3);white-space:nowrap}.pt-main{padding:var(--space-5) var(--space-4)}.pt-tab,.pt-copy{min-height:44px}}.projects{display:grid;grid-template-columns:280px minmax(0,1fr);min-width:0;min-height:0}.pj-nav{background:var(--color-sidebar);border-right:1px solid var(--color-border);padding:var(--space-5) var(--space-3);min-width:0}.pj-tree{list-style:none;margin:0;padding:0;display:grid;gap:var(--space-4)}.pj-group{min-width:0}.pj-project{display:flex;align-items:center;min-height:36px;padding:var(--space-2) var(--space-3);border-radius:var(--radius);color:var(--color-fg);font-weight:700;text-decoration:none;overflow-wrap:anywhere;transition:background-color var(--motion-fast) var(--ease),color var(--motion-fast) var(--ease)}.pj-project:hover{background:var(--color-border);color:var(--color-fg)}.pj-project[aria-current=page]{background:var(--color-accent-soft)}.pj-docs{list-style:none;margin:var(--space-1) 0 0;padding:0 0 0 var(--space-3);display:grid;gap:2px}.pj-doc{display:flex;flex-direction:column;gap:2px;min-height:36px;padding:var(--space-2) var(--space-3);border-radius:var(--radius);color:var(--color-fg);text-decoration:none;transition:background-color var(--motion-fast) var(--ease),color var(--motion-fast) var(--ease)}.pj-doc:hover{background:var(--color-border);color:var(--color-fg)}.pj-doc[aria-current=page]{background:var(--color-accent-soft);font-weight:700}.pj-doc-name{font-size:var(--text-sm)}.pj-doc-path{font-family:var(--font-mono);font-size:var(--text-xs);font-weight:400;color:var(--color-fg-muted);overflow-wrap:anywhere}.pj-docs-note{display:grid;justify-items:start;gap:var(--space-2);padding:var(--space-2) var(--space-3)}.pj-main{min-width:0;padding:var(--space-6)}.pj-article{max-width:var(--measure);min-width:0}.pj-header{margin-bottom:var(--space-5)}.pj-title{margin:0 0 var(--space-2);font-size:var(--text-2xl);line-height:1.25}.pj-meta{margin:0 0 var(--space-4);font-size:var(--text-sm);color:var(--color-fg-muted)}.pj-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-3);border-bottom:1px solid var(--color-border)}.pj-tabs{display:flex;gap:var(--space-4)}.pj-tab{min-height:36px;padding:0 0 var(--space-2);border:0;border-bottom:2px solid transparent;background:none;color:var(--color-fg-muted);transition:color var(--motion-fast) var(--ease),border-color var(--motion-fast) var(--ease)}.pj-tab:hover{color:var(--color-fg)}.pj-tab[aria-selected=true]{color:var(--color-fg);border-bottom-color:var(--color-accent)}.pj-copy{margin-bottom:var(--space-2)}.pj-panel{padding-top:var(--space-5);min-width:0}.pj-source{margin:0;padding:var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-sidebar);font-family:var(--font-mono);font-size:var(--text-sm);white-space:pre-wrap;overflow-wrap:anywhere}.pj-backlinks{margin-top:var(--space-6);padding-top:var(--space-5);border-top:1px solid var(--color-border)}.pj-h2{margin:0 0 var(--space-3);font-size:var(--text-lg);font-weight:700}.pj-backlink-list{margin:0;padding:0 0 0 var(--space-5)}.pj-backlink-list li+li{margin-top:var(--space-2)}.pj-backlink-list a{overflow-wrap:anywhere}.pj-table-wrap{max-width:100%;overflow-x:auto;border:1px solid var(--color-border);border-radius:var(--radius)}.pj-table{width:100%;border-collapse:collapse;font-size:var(--text-sm)}.pj-table th,.pj-table td{padding:var(--space-3);border-bottom:1px solid var(--color-border);text-align:left;vertical-align:top;overflow-wrap:anywhere}.pj-table th{background:var(--color-sidebar);color:var(--color-fg-muted);font-weight:700}.pj-table tr:last-child td{border-bottom:0}.pj-cell-name a{font-weight:700}.pj-skeleton{display:grid;gap:var(--space-3);max-width:var(--measure)}.pj-tree-skel{display:grid;gap:var(--space-3);padding:var(--space-2) var(--space-3)}.pj-docs-skel{display:grid;gap:var(--space-2);padding:var(--space-2) var(--space-3)}.pj-skel{height:16px;border-radius:var(--radius);background:var(--color-border)}.pj-skel-tall{height:28px;margin-bottom:var(--space-2)}.pj-message{display:grid;justify-items:start;gap:var(--space-4);max-width:var(--measure);color:var(--color-fg-muted)}.pj-message p{margin:0}.pj-note{margin:0;color:var(--color-fg-muted)}.pj-btn{min-height:36px}.pj-sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}@media(max-width:767px){.projects{grid-template-columns:minmax(0,1fr)}.pj-nav{display:flex;align-items:flex-start;overflow-x:auto;-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 32px),transparent);mask-image:linear-gradient(to right,#000 calc(100% - 32px),transparent);padding:var(--space-2) var(--space-2);border-right:0;border-bottom:1px solid var(--color-border)}.pj-tree{display:flex;gap:var(--space-4);align-items:flex-start}.pj-group{display:flex;align-items:center;flex:none}.pj-docs{display:flex;margin:0;padding:0 0 0 var(--space-2)}.pj-docs-note{display:flex;align-items:center;flex:none}.pj-project{min-height:44px;white-space:nowrap}.pj-doc{min-height:44px;flex-direction:row;align-items:center;gap:var(--space-2);white-space:nowrap}.pj-doc-path{font-size:var(--text-xs)}.pj-tree-skel{display:flex}.pj-docs-skel{display:flex;gap:var(--space-2)}.pj-main{padding:var(--space-5) var(--space-4)}.pj-tab,.pj-copy,.pj-btn{min-height:44px}}@font-face{font-family:Atkinson Hyperlegible;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/atkinson-hyperlegible-latin-ext-400-normal-DRk46D-x.woff2) format("woff2"),url(/assets/atkinson-hyperlegible-latin-ext-400-normal-Bbz-b3yf.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Atkinson Hyperlegible;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/atkinson-hyperlegible-latin-400-normal-BrHNak5F.woff2) format("woff2"),url(/assets/atkinson-hyperlegible-latin-400-normal-BbWidj28.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Atkinson Hyperlegible;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/atkinson-hyperlegible-latin-ext-700-normal-BoVPHkS0.woff2) format("woff2"),url(/assets/atkinson-hyperlegible-latin-ext-700-normal-CKkU2Dpt.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Atkinson Hyperlegible;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/atkinson-hyperlegible-latin-700-normal-GZI4o3u0.woff2) format("woff2"),url(/assets/atkinson-hyperlegible-latin-700-normal-BK6Glc0m.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--font-ui: "Atkinson Hyperlegible", system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono: ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;--text-xs: .75rem;--text-sm: .875rem;--text-base: 1rem;--text-lg: 1.125rem;--text-xl: 1.25rem;--text-2xl: 1.5rem;--leading: 1.5;--measure: 90ch;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 24px;--space-6: 32px;--radius: 6px;--color-bg: #f8fafc;--color-surface: #ffffff;--color-sidebar: #eef2f6;--color-fg: #1e293b;--color-fg-muted: #475569;--color-border: #e2e8f0;--color-border-strong: #cbd5e1;--color-accent: #2563eb;--color-accent-hover: #1d4ed8;--color-on-accent: #ffffff;--color-accent-soft: #e0e9fd;--color-danger: #dc2626;--color-ring: #2563eb;--color-note-bg: #f1f5f9;--color-note-border: #cbd5e1;--selection-bg: #bfdbfe;--motion-fast: .15s;--ease: cubic-bezier(.22, 1, .36, 1);color-scheme:light}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--color-bg: #0f172a;--color-surface: #162033;--color-sidebar: #111b2e;--color-fg: #e2e8f0;--color-fg-muted: #a5b4c8;--color-border: #26344d;--color-border-strong: #334766;--color-accent: #6ea0ff;--color-accent-hover: #93b8ff;--color-on-accent: #0b1220;--color-accent-soft: #1d2f55;--color-danger: #f87171;--color-ring: #93b8ff;--color-note-bg: #1a2640;--color-note-border: #334766;--selection-bg: #274a8a;color-scheme:dark}}:root[data-theme=dark]{--color-bg: #0f172a;--color-surface: #162033;--color-sidebar: #111b2e;--color-fg: #e2e8f0;--color-fg-muted: #a5b4c8;--color-border: #26344d;--color-border-strong: #334766;--color-accent: #6ea0ff;--color-accent-hover: #93b8ff;--color-on-accent: #0b1220;--color-accent-soft: #1d2f55;--color-danger: #f87171;--color-ring: #93b8ff;--color-note-bg: #1a2640;--color-note-border: #334766;--selection-bg: #274a8a;color-scheme:dark}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--color-bg);color:var(--color-fg);font-family:var(--font-ui);font-size:var(--text-base);line-height:var(--leading);font-variant-numeric:tabular-nums}::selection{background:var(--selection-bg)}:focus-visible{outline:2px solid var(--color-ring);outline-offset:2px;border-radius:2px}a{color:var(--color-accent);text-underline-offset:3px}a:hover{color:var(--color-accent-hover)}button{font:inherit;color:inherit;cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}code,pre{font-family:var(--font-mono);font-size:.9em}*{scrollbar-width:thin;scrollbar-color:var(--color-border-strong) transparent}input,textarea{caret-color:var(--color-accent)}.btn{display:inline-flex;align-items:center;gap:var(--space-2);min-height:36px;padding:0 var(--space-4);border:1px solid var(--color-border-strong);border-radius:var(--radius);background:var(--color-surface);transition:background var(--motion-fast) var(--ease),border-color var(--motion-fast) var(--ease)}.btn:hover:not(:disabled){background:var(--color-sidebar)}.btn-primary{background:var(--color-accent);border-color:var(--color-accent);color:var(--color-on-accent)}.btn-primary:hover:not(:disabled){background:var(--color-accent-hover);border-color:var(--color-accent-hover)}@media(prefers-reduced-motion:reduce){*{transition-duration:.01ms!important;animation-duration:.01ms!important}}.boot{display:grid;place-items:center;min-height:100dvh;color:var(--color-fg-muted)}.shell{display:grid;grid-template-rows:auto 1fr;min-height:100dvh}.topbar{display:flex;align-items:center;gap:var(--space-5);padding:var(--space-2) var(--space-4);background:var(--color-sidebar);border-bottom:1px solid var(--color-border)}.topbar nav{flex:1;display:flex;gap:var(--space-4)}.topbar nav a{text-decoration:none;color:var(--color-fg-muted);padding:var(--space-1) 0;border-bottom:2px solid transparent}.topbar nav a[aria-current=page]{color:var(--color-fg);border-bottom-color:var(--color-accent)}.brand{font-size:var(--text-lg)}
