@layer reset{*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}body,h1,h2,h3,h4,p,figure,blockquote,dl,dd{margin:0}img,svg{max-width:100%;display:block}svg.icon{vertical-align:middle;flex-shrink:0;display:inline-block}button,input,select,textarea{font:inherit;color:inherit;letter-spacing:inherit}[hidden]{display:none!important}}@layer tokens{:root{color-scheme:light;--font-sans:"Atkinson Hyperlegible Next", "Atkinson Hyperlegible Next Fallback", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono:"Atkinson Hyperlegible Mono", ui-monospace, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--text-xs:.75rem;--text-sm:.875rem;--text-base:1rem;--text-md:1.125rem;--text-lg:1.375rem;--text-xl:1.75rem;--text-2xl:2.25rem;--text-display:clamp(2.25rem, 1.6rem + 2.2vw, 3.25rem);--leading-tight:1.15;--leading-snug:1.3;--leading-normal:1.55;--leading-prose:1.7;--weight-regular:400;--weight-medium:500;--weight-semibold:600;--weight-bold:700;--tracking-tight:-.015em;--tracking-caps:.08em;--measure:36em;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.5rem;--space-6:2rem;--space-7:3rem;--space-8:4rem;--radius-sm:.25rem;--radius-md:.5rem;--radius-lg:.75rem;--radius-full:999px;--border-width:1px;--focus-width:3px;--duration-fast:.12s;--duration-base:.2s;--ease-out:cubic-bezier(.2, .7, .2, 1);--header-height:4rem;--toc-width:14rem;--content-max:78rem;--gutter:clamp(1rem, 4vw, 3rem);--z-sticky:10;--z-header:20;--z-scrim:30;--z-drawer:40;--z-toast:80;--z-skip:100;--print-origin:"https://softwaresecurity.com";--color-bg:#f8f9fb;--color-surface:#fff;--color-surface-2:#f1f2f6;--color-surface-3:#e8eaf0;--color-text:#161a24;--color-text-prose:#272d3b;--color-text-muted:#434a5b;--color-text-subtle:#5c6375;--color-border:#e1e4eb;--color-border-strong:#7c8295;--color-accent:#4c3fd1;--color-accent-hover:#3a2eb3;--color-accent-soft:#efedfd;--color-accent-contrast:#fff;--color-link:#4c3fd1;--color-link-hover:#3a2eb3;--color-link-visited:#6a35a8;--color-focus:#4c3fd1;--color-selection:#d9d4ff;--color-success:#1b6b4e;--color-success-bg:#e7f5ee;--color-success-border:#3f9470;--color-warning:#875400;--color-warning-bg:#fdf3df;--color-warning-border:#b47e1d;--color-danger:#a8253b;--color-danger-bg:#fdecef;--color-danger-border:#cc4b62;--color-info:#1d5aa6;--color-info-bg:#e8f0fb;--color-info-border:#4a80c4;--color-inverse-bg:#1c1840;--color-inverse-text:#f4f3fb;--color-inverse-muted:#c9c6e6;--color-scrim:#11131a73;--color-backdrop:#11131a80;--shadow-sm:0 1px 2px #161a240f, 0 1px 1px #161a240a;--shadow-md:0 6px 20px #161a241a;--shadow-lg:0 24px 64px #161a2433;--color-code-bg:#f5f6fa;--color-code-head:#eceef4;--color-code-border:#dfe2ea;--color-code-text:#1f2433;--color-code-line:#e6e8f0;--syntax-keyword:#6129c4;--syntax-string:#1a6e45;--syntax-comment:#636b7e;--syntax-constant:#9a4600;--syntax-function:#1c55b3;--syntax-parameter:#a1325a;--syntax-punctuation:#4f5669;--syntax-inserted:#1a6e45;--syntax-inserted-bg:#e3f4ea;--syntax-deleted:#a8253b;--syntax-deleted-bg:#fbe8eb;--diagram-actor-bg:#fff;--diagram-boundary-bg:#f3f2fd;--diagram-line:#434a5b;--diagram-attack:#a8253b;--color-domain-appsec:#00429c;--color-domain-appsec-soft:#eef4fe;--color-domain-supply-chain:#986128;--color-domain-supply-chain-soft:#fff1e4;--color-domain-runtime:#007980;--color-domain-runtime-soft:#e1f9fb;--color-domain-identity-crypto:#7754d6;--color-domain-identity-crypto-soft:#f3f2ff;--color-domain-governance:#155000;--color-domain-governance-soft:#ebf8e8;--color-domain-ai-emerging:#72215d;--color-domain-ai-emerging-soft:#ffeef8;--bg:var(--color-bg);--surface:var(--color-surface);--surface-2:var(--color-surface-2);--ink:var(--color-text);--muted:var(--color-text-muted);--faint:var(--color-text-subtle);--line:var(--color-border);--accent:var(--color-accent);--accent-soft:var(--color-accent-soft);--green:var(--color-success);--warning:var(--color-warning);--shadow:var(--shadow-lg)}@media screen{:root[data-theme=dark]{color-scheme:dark;--color-bg:#11131a;--color-surface:#181b24;--color-surface-2:#1f232e;--color-surface-3:#2a2f3c;--color-text:#eef0f5;--color-text-prose:#d9dde6;--color-text-muted:#bcc2cf;--color-text-subtle:#969daf;--color-border:#2b303d;--color-border-strong:#6f7890;--color-accent:#a99dff;--color-accent-hover:#c3baff;--color-accent-soft:#2a2552;--color-accent-contrast:#14102e;--color-link:#b3a8ff;--color-link-hover:#cdc6ff;--color-link-visited:#d8a8ff;--color-focus:#b4a9ff;--color-selection:#3d3580;--color-success:#7fd3ab;--color-success-bg:#112a20;--color-success-border:#3d8f6c;--color-warning:#f0c46a;--color-warning-bg:#2c230f;--color-warning-border:#9a7428;--color-danger:#ff9dae;--color-danger-bg:#341820;--color-danger-border:#c45a6f;--color-info:#9cc4ff;--color-info-bg:#14233a;--color-info-border:#4f7fc0;--color-inverse-bg:#1d1a3a;--color-inverse-text:#f4f3fb;--color-inverse-muted:#c9c6e6;--color-scrim:#04050899;--color-backdrop:#040508a6;--shadow-sm:0 1px 2px #0006;--shadow-md:0 6px 20px #00000073;--shadow-lg:0 24px 64px #0009;--color-code-bg:#0d0f15;--color-code-head:#161922;--color-code-border:#2b303d;--color-code-text:#e3e6ee;--color-code-line:#1e222c;--syntax-keyword:#c6a8ff;--syntax-string:#8fdcb0;--syntax-comment:#8c94a7;--syntax-constant:#ffb877;--syntax-function:#8cc2ff;--syntax-parameter:#ff9fc0;--syntax-punctuation:#aab1c1;--syntax-inserted:#8fdcb0;--syntax-inserted-bg:#12291d;--syntax-deleted:#ff9dae;--syntax-deleted-bg:#331820;--diagram-actor-bg:#181b24;--diagram-boundary-bg:#1c1a33;--diagram-line:#bcc2cf;--diagram-attack:#ff9dae;--color-domain-appsec:#54a5e7;--color-domain-appsec-soft:#162c3f;--color-domain-supply-chain:#fbc86b;--color-domain-supply-chain-soft:#36280d;--color-domain-runtime:#73ebc0;--color-domain-runtime-soft:#103126;--color-domain-identity-crypto:#d4bcff;--color-domain-identity-crypto-soft:#2e253d;--color-domain-governance:#8db056;--color-domain-governance-soft:#242e15;--color-domain-ai-emerging:#d97ca5;--color-domain-ai-emerging-soft:#3b202c}}@media screen and (prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--color-bg:#11131a;--color-surface:#181b24;--color-surface-2:#1f232e;--color-surface-3:#2a2f3c;--color-text:#eef0f5;--color-text-prose:#d9dde6;--color-text-muted:#bcc2cf;--color-text-subtle:#969daf;--color-border:#2b303d;--color-border-strong:#6f7890;--color-accent:#a99dff;--color-accent-hover:#c3baff;--color-accent-soft:#2a2552;--color-accent-contrast:#14102e;--color-link:#b3a8ff;--color-link-hover:#cdc6ff;--color-link-visited:#d8a8ff;--color-focus:#b4a9ff;--color-selection:#3d3580;--color-success:#7fd3ab;--color-success-bg:#112a20;--color-success-border:#3d8f6c;--color-warning:#f0c46a;--color-warning-bg:#2c230f;--color-warning-border:#9a7428;--color-danger:#ff9dae;--color-danger-bg:#341820;--color-danger-border:#c45a6f;--color-info:#9cc4ff;--color-info-bg:#14233a;--color-info-border:#4f7fc0;--color-inverse-bg:#1d1a3a;--color-inverse-text:#f4f3fb;--color-inverse-muted:#c9c6e6;--color-scrim:#04050899;--color-backdrop:#040508a6;--shadow-sm:0 1px 2px #0006;--shadow-md:0 6px 20px #00000073;--shadow-lg:0 24px 64px #0009;--color-code-bg:#0d0f15;--color-code-head:#161922;--color-code-border:#2b303d;--color-code-text:#e3e6ee;--color-code-line:#1e222c;--syntax-keyword:#c6a8ff;--syntax-string:#8fdcb0;--syntax-comment:#8c94a7;--syntax-constant:#ffb877;--syntax-function:#8cc2ff;--syntax-parameter:#ff9fc0;--syntax-punctuation:#aab1c1;--syntax-inserted:#8fdcb0;--syntax-inserted-bg:#12291d;--syntax-deleted:#ff9dae;--syntax-deleted-bg:#331820;--diagram-actor-bg:#181b24;--diagram-boundary-bg:#1c1a33;--diagram-line:#bcc2cf;--diagram-attack:#ff9dae;--color-domain-appsec:#54a5e7;--color-domain-appsec-soft:#162c3f;--color-domain-supply-chain:#fbc86b;--color-domain-supply-chain-soft:#36280d;--color-domain-runtime:#73ebc0;--color-domain-runtime-soft:#103126;--color-domain-identity-crypto:#d4bcff;--color-domain-identity-crypto-soft:#2e253d;--color-domain-governance:#8db056;--color-domain-governance-soft:#242e15;--color-domain-ai-emerging:#d97ca5;--color-domain-ai-emerging-soft:#3b202c}}}@layer base{html{scroll-padding-top:calc(var(--header-height) + var(--space-5));font-size:100%}body{font-family:var(--font-sans);font-size:var(--text-base);line-height:var(--leading-normal);color:var(--color-text);background:var(--color-bg);font-kerning:normal;overflow-wrap:break-word;-webkit-tap-highlight-color:transparent}h1,h2,h3,h4{color:var(--color-text);font-weight:var(--weight-bold);line-height:var(--leading-tight);letter-spacing:var(--tracking-tight);text-wrap:balance}h1{font-size:var(--text-xl)}h2{font-size:var(--text-lg);line-height:var(--leading-snug)}h3{font-size:var(--text-md);line-height:var(--leading-snug)}h4{font-size:var(--text-base);line-height:var(--leading-snug)}p{text-wrap:pretty}strong,b{font-weight:var(--weight-bold);color:var(--color-text)}small{font-size:var(--text-sm)}ul,ol{padding-inline-start:1.4em}hr{border:0;border-top:var(--border-width) solid var(--color-border);margin:var(--space-6) 0}::selection{background:var(--color-selection);color:var(--color-text)}mark{border-radius:var(--radius-sm);background:var(--color-warning-bg);color:var(--color-text);padding-inline:.1em}a{color:var(--color-link);text-underline-offset:.2em;-webkit-tap-highlight-color:transparent;text-decoration-line:underline;text-decoration-thickness:1px}a:visited{color:var(--color-link-visited)}a:hover{color:var(--color-link-hover);text-decoration-thickness:2px}:focus-visible{outline:var(--focus-width) solid var(--color-focus);outline-offset:2px}[tabindex="-1"]:focus:not(:focus-visible){outline:none}code,kbd,samp,pre{font-family:var(--font-mono);font-variant-ligatures:none}code{border-radius:var(--radius-sm);background:var(--color-surface-2);border:var(--border-width) solid var(--color-border);color:var(--color-text);overflow-wrap:anywhere;-webkit-box-decoration-break:clone;box-decoration-break:clone;padding:.1em .35em;font-size:.875em}pre code{font-size:inherit;overflow-wrap:normal;background:0 0;border:0;padding:0}kbd{font-size:var(--text-xs);line-height:var(--leading-snug);border:var(--border-width) solid var(--color-border-strong);border-radius:var(--radius-sm);background:var(--color-surface);color:var(--color-text-muted);white-space:nowrap;border-bottom-width:2px;align-items:center;gap:.15em;padding:0 .4em;display:inline-flex}button{cursor:pointer;touch-action:manipulation}button:disabled{cursor:not-allowed}label{font-size:var(--text-sm);color:var(--color-text-muted)}label>input:not([type=checkbox],[type=radio]),label>select,label>textarea{margin-top:var(--space-2);display:block}input:not([type=checkbox],[type=radio],[type=file]),select,textarea{min-height:2.75rem;padding:var(--space-2) var(--space-3);border:var(--border-width) solid var(--color-border-strong);border-radius:var(--radius-md);background:var(--color-surface);color:var(--color-text);font-size:var(--text-base);transition:border-color var(--duration-fast) var(--ease-out)}input:not([type=checkbox],[type=radio],[type=file]):hover,select:hover,textarea:hover{border-color:var(--color-text-subtle)}input:focus-visible,select:focus-visible,textarea:focus-visible{border-color:var(--color-accent);outline-offset:0}:is(input,select,textarea):disabled{border-color:var(--color-border);background:var(--color-surface-2);color:var(--color-text-subtle);cursor:not-allowed}input[type=search]{appearance:none}input[type=search]::-webkit-search-cancel-button{appearance:none;cursor:pointer;background:var(--color-text-subtle);width:1rem;height:1rem;-webkit-mask:url(/_astro/close.CsLtrSOd.svg) 50%/contain no-repeat;mask:url(/_astro/close.CsLtrSOd.svg) 50%/contain no-repeat}::placeholder{color:var(--color-text-subtle);opacity:1}select{min-width:10rem;padding-inline-end:var(--space-6)}textarea{width:100%;line-height:var(--leading-prose);resize:vertical}input[type=checkbox],input[type=radio]{width:1.125rem;height:1.125rem;accent-color:var(--color-accent);flex-shrink:0;margin:0}input[type=file]{max-width:100%;font-size:var(--text-sm);color:var(--color-text-muted)}input[type=file]::file-selector-button{padding:var(--space-2) var(--space-4);border:var(--border-width) solid var(--color-border-strong);border-radius:var(--radius-md);background:var(--color-surface);min-height:2.75rem;color:var(--color-text);font:inherit;font-weight:var(--weight-semibold);cursor:pointer;margin-inline-end:var(--space-3)}input[type=file]::file-selector-button:hover{background:var(--color-surface-2)}details{border:var(--border-width) solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-3) var(--space-4);background:var(--color-surface)}details+details{margin-top:var(--space-3)}summary{cursor:pointer;font-weight:var(--weight-semibold);color:var(--color-text);padding-block:var(--space-1)}details[open]>summary{margin-bottom:var(--space-2)}table{border-collapse:collapse;width:100%;font-size:var(--text-sm);text-align:left;font-variant-numeric:tabular-nums}caption{caption-side:top;text-align:left;padding:var(--space-3) var(--space-4);font-weight:var(--weight-semibold);color:var(--color-text)}th,td{padding:var(--space-3) var(--space-4);border-bottom:var(--border-width) solid var(--color-border);vertical-align:top;text-align:left}th{color:var(--color-text);font-weight:var(--weight-semibold);background:var(--color-surface-2)}td{color:var(--color-text-prose)}tbody tr:last-child>*{border-bottom:0}dialog{color:var(--color-text)}dialog::backdrop{background:var(--color-backdrop)}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}}@layer layout{.skip-link{top:var(--space-2);left:var(--space-2);z-index:var(--z-skip);padding:var(--space-2) var(--space-4);border-radius:var(--radius-md);background:var(--color-accent);color:var(--color-accent-contrast);font-weight:var(--weight-semibold);text-decoration:none;position:fixed;transform:translateY(-200%)}.skip-link:focus,.skip-link:visited{color:var(--color-accent-contrast)}.skip-link:focus{transform:none}.topbar{z-index:var(--z-header);align-items:center;gap:var(--space-5);height:var(--header-height);padding-inline:var(--space-4);background:var(--color-surface);border-bottom:var(--border-width) solid var(--color-border);display:flex;position:sticky;top:0}.brand{align-items:center;gap:var(--space-3);color:var(--color-text);flex-shrink:0;text-decoration:none;display:inline-flex}.brand:visited,.brand:hover{color:var(--color-text)}.brand-mark{flex-shrink:0}.brand-name{font-size:var(--text-md);font-weight:var(--weight-bold);letter-spacing:-.01em;white-space:nowrap}.brand-name-first{font-weight:var(--weight-regular)}.header-actions{align-items:center;gap:var(--space-2);margin-left:auto;display:flex}.header-cta{min-height:2.5rem;padding-inline:var(--space-4);border-radius:var(--radius-md);background:var(--color-accent);color:var(--color-accent-contrast);font-size:var(--text-sm);font-weight:var(--weight-semibold);white-space:nowrap;align-items:center;text-decoration:none;display:none}.header-cta:visited{color:var(--color-accent-contrast)}.header-cta:hover{background:var(--color-accent-hover);color:var(--color-accent-contrast)}.search-trigger{align-items:center;gap:var(--space-2);min-width:11rem;min-height:2.5rem;padding:0 var(--space-3);border:var(--border-width) solid var(--color-border-strong);border-radius:var(--radius-md);background:var(--color-bg);color:var(--color-text-muted);font-size:var(--text-sm);text-decoration:none;display:inline-flex}.search-trigger:hover{border-color:var(--color-text-subtle);color:var(--color-text)}.search-trigger>kbd{margin-left:auto}.shortcut-apple,:root[data-platform=apple] .shortcut-other{display:none}:root[data-platform=apple] .shortcut-apple{display:inline}.icon-button{border-radius:var(--radius-md);width:2.5rem;height:2.5rem;color:var(--color-text-muted);background:0 0;border:0;place-items:center;padding:0;display:inline-grid}.icon-button:hover{background:var(--color-surface-2);color:var(--color-text)}.menu-button .icon-close,.menu-button[aria-expanded=true] .icon-menu{display:none}.menu-button[aria-expanded=true] .icon-close{display:inline-block}.theme-switch{border:var(--border-width) solid var(--color-border);border-radius:var(--radius-full);background:var(--color-surface-2);gap:2px;padding:2px;display:inline-flex}.theme-option{border-radius:var(--radius-full);width:2rem;height:2rem;color:var(--color-text-subtle);background:0 0;border:0;place-items:center;padding:0;display:inline-grid}.theme-option:hover{color:var(--color-text);background:var(--color-surface-3)}:root:not([data-theme]) .theme-option[data-theme-choice=system],:root[data-theme=light] .theme-option[data-theme-choice=light],:root[data-theme=dark] .theme-option[data-theme-choice=dark]{background:var(--color-surface);color:var(--color-accent);box-shadow:var(--shadow-sm)}.sidebar{top:var(--header-height);z-index:var(--z-drawer);width:min(20rem,85vw);padding:var(--space-5) var(--space-3) var(--space-4);overscroll-behavior:contain;scrollbar-width:thin;background:var(--color-surface);border-right:var(--border-width) solid var(--color-border);box-shadow:var(--shadow-lg);visibility:hidden;transition:transform var(--duration-base) var(--ease-out), visibility var(--duration-base);flex-direction:column;gap:2px;display:flex;position:fixed;bottom:0;left:0;overflow-y:auto;transform:translate(-105%)}.sidebar.is-open,.sidebar[data-menu-fallback]:target{visibility:visible;transform:none}.sidebar .sidebar-close{display:none}.sidebar[data-menu-fallback]:target .sidebar-close{margin-bottom:var(--space-3);display:flex}.scrim{inset:var(--header-height) 0 0;z-index:var(--z-scrim);background:var(--color-scrim);position:fixed}:root.nav-open{overflow:hidden}.header-menu{background:0 0;border:0;border-radius:0;margin:0;padding:0;position:relative}.header-menu+.header-menu{margin-top:0}.header-menu[open]>summary{margin-bottom:0}.header-menu>summary,.nav-link{align-items:center;gap:var(--space-1);min-height:2.5rem;padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);color:var(--color-text-muted);font-size:var(--text-sm);font-weight:var(--weight-semibold);white-space:nowrap;cursor:pointer;text-decoration:none;list-style:none;display:flex}.nav-link:visited{color:var(--color-text-muted)}.header-menu>summary::-webkit-details-marker{display:none}.header-menu>summary:hover,.header-menu[open]>summary,.nav-link:hover{color:var(--color-text)}.header-menu>summary[aria-current],.nav-link[aria-current]{color:var(--color-accent)}.header-menu>summary:after{content:"";width:1rem;height:1rem;transition:rotate var(--duration-fast) var(--ease-out);background:currentColor;margin-left:auto;-webkit-mask:url(/_astro/chevron.zIPO_OwQ.svg) 50%/contain no-repeat;mask:url(/_astro/chevron.zIPO_OwQ.svg) 50%/contain no-repeat}.header-menu[open]>summary:after{rotate:180deg}.menu-panel{margin:0 0 var(--space-3);padding:0 0 0 var(--space-3);gap:2px;list-style:none;display:grid}.menu-panel a{padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);color:var(--color-text);font-size:var(--text-sm);line-height:var(--leading-snug);text-decoration:none;display:block}.menu-panel a:hover{background:var(--color-surface-2)}.menu-panel a[aria-current]{color:var(--color-accent);font-weight:var(--weight-semibold)}.sdlc-panel-grid{gap:var(--space-3);display:grid}.sdlc-panel-phase ul{gap:2px;margin:0;padding:0;list-style:none;display:grid}.menu-panel .sdlc-panel-head{align-items:center;gap:var(--space-2);color:var(--color-text);font-weight:var(--weight-bold);flex-wrap:wrap;display:flex}.sdlc-panel-number{border-radius:var(--radius-full);background:var(--color-accent-soft);width:1.5rem;height:1.5rem;color:var(--color-accent);font-size:var(--text-xs);font-variant-numeric:tabular-nums;place-items:center;display:inline-grid}.sdlc-panel-note{color:var(--color-text-subtle);font-size:var(--text-xs);font-weight:var(--weight-semibold);letter-spacing:var(--tracking-caps);text-transform:uppercase;flex-basis:100%}.side-link{align-items:center;gap:var(--space-3);min-height:2.5rem;padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);color:var(--color-text-muted);font-size:var(--text-sm);font-weight:var(--weight-medium);line-height:var(--leading-snug);text-decoration:none;display:flex}.side-link:visited{color:var(--color-text-muted)}.side-link:hover{background:var(--color-surface-2);color:var(--color-text)}.side-cta{margin-top:var(--space-3);background:var(--color-accent);color:var(--color-accent-contrast);font-weight:var(--weight-semibold)}.side-cta:visited,.side-cta:hover{background:var(--color-accent-hover);color:var(--color-accent-contrast)}.sidebar-footer{gap:var(--space-3);padding-top:var(--space-4);border-top:var(--border-width) solid var(--color-border);margin-top:auto;display:grid}.theme-switch-menu{margin-inline:var(--space-3);justify-self:start;display:none}.page{min-height:calc(100vh - var(--header-height));flex-direction:column;display:flex}main{width:100%;max-width:var(--content-max);padding:var(--space-6) var(--gutter) var(--space-8);flex:1;margin-inline:auto}main:focus{outline:none}.footer{justify-content:space-between;align-items:center;gap:var(--space-3) var(--space-6);width:100%;max-width:var(--content-max);padding:var(--space-6) var(--gutter);border-top:var(--border-width) solid var(--color-border);font-size:var(--text-sm);color:var(--color-text-subtle);flex-wrap:wrap;margin-inline:auto;display:flex}.footer>nav{gap:var(--space-2) var(--space-4);flex-wrap:wrap;display:flex}.footer a{color:var(--color-text-muted);text-decoration-color:var(--color-border-strong)}.footer a:hover{color:var(--color-text);text-decoration-color:currentColor}.breadcrumbs{align-items:baseline;gap:var(--space-1) var(--space-2);margin:0 0 var(--space-5);font-size:var(--text-sm);color:var(--color-text-subtle);flex-wrap:wrap;display:flex}.breadcrumbs ol{align-items:baseline;gap:var(--space-1) var(--space-2);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.breadcrumbs li{gap:var(--space-2);overflow-wrap:anywhere;min-width:0;display:inline-flex}.breadcrumbs li+li:before{content:"/" / "";color:var(--color-text-subtle)}.breadcrumbs [aria-current=page]{color:var(--color-text-muted)}.breadcrumbs a{color:var(--color-text-muted);text-decoration-color:var(--color-border-strong)}.breadcrumbs a:hover{color:var(--color-link-hover);text-decoration-color:currentColor}@media (width<=47.99em){.breadcrumbs li:last-child:not(:nth-child(-n+2)){clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}}.page-heading{max-width:50rem;margin-bottom:var(--space-6)}.page-heading>.eyebrow{margin-bottom:var(--space-3)}.page-heading h1{font-size:var(--text-xl);overflow-wrap:break-word}.page-heading>p{max-width:var(--measure);margin-top:var(--space-4);font-size:var(--text-md);line-height:var(--leading-normal);color:var(--color-text-muted)}.page-heading .meta,.page-heading .pill-row{margin-top:var(--space-4)}.article-layout{gap:var(--space-5);grid-template-columns:minmax(0,1fr);display:grid}.toc-list{border-left:2px solid var(--color-border);gap:2px;margin:0;padding:0;list-style:none;display:grid}.toc-list a{padding:var(--space-1) var(--space-3);color:var(--color-text-muted);font-size:var(--text-sm);line-height:var(--leading-snug);border-left:2px solid #0000;margin-left:-2px;text-decoration:none;display:block}.toc-list a:visited{color:var(--color-text-muted)}.toc-list a:hover{color:var(--color-text);border-left-color:var(--color-border-strong)}.toc-compact{background:var(--color-surface);padding:0}.toc-compact>summary{align-items:center;gap:var(--space-3);min-height:2.75rem;padding:var(--space-2) var(--space-4);margin:0;list-style:none;display:flex}.toc-compact>summary::-webkit-details-marker{display:none}.toc-compact>summary:after{content:"";background:var(--color-text-subtle);width:1.125rem;height:1.125rem;transition:transform var(--duration-fast) var(--ease-out);margin-left:auto;-webkit-mask:url(/_astro/chevron.zIPO_OwQ.svg) 50%/contain no-repeat;mask:url(/_astro/chevron.zIPO_OwQ.svg) 50%/contain no-repeat}.toc-compact[open]>summary:after{transform:rotate(180deg)}.toc-compact[open]>summary{border-bottom:var(--border-width) solid var(--color-border)}.toc-compact .toc-list{margin:var(--space-3) var(--space-4) var(--space-4)}.article-body{min-width:0;container-type:inline-size}.two-column,.workflow-grid{gap:var(--space-5);grid-template-columns:minmax(0,1fr);display:grid}.domain-grid{gap:var(--space-4);grid-template-columns:repeat(auto-fill,minmax(min(100%,16rem),1fr));display:grid}.section{margin-top:var(--space-7)}.section-heading{justify-content:space-between;align-items:flex-end;gap:var(--space-2) var(--space-4);margin-bottom:var(--space-5);flex-wrap:wrap;display:flex}.section-heading h2{font-size:var(--text-xl)}.section-heading .eyebrow{margin-bottom:var(--space-2)}.filters{align-items:flex-end;gap:var(--space-3) var(--space-4);margin:var(--space-5) 0;flex-wrap:wrap;display:flex}.filters label{flex:10rem}.filters label:first-child{flex:3 16rem}.filters input,.filters select{width:100%;min-width:0}.article-body{font-size:var(--text-base)}.article-body :where(p,ul,ol,dl,h2,h3,h4,blockquote){max-width:var(--measure)}.article-body :where(p,li){color:var(--color-text-prose);line-height:var(--leading-prose)}.article-body>section,.article-body>.section{margin-top:var(--space-7)}.article-body>section:first-child{margin-top:0}.article-body :where(h2){margin:0 0 var(--space-4);font-size:var(--text-xl)}.article-body :where(h3){margin:var(--space-6) 0 var(--space-3);font-size:var(--text-lg)}.article-body .heading-row h2{margin:0}.article-body .heading-row{margin-bottom:var(--space-4)}.article-body :where(p+p,p+ul,p+ol,ul+p,ol+p){margin-top:var(--space-4)}.article-body :where(ul,ol){margin-block:var(--space-4)}.article-body :where(li+li){margin-top:var(--space-2)}.applicability,.identifier-links{margin-top:var(--space-4)}.article-body .notice{font-size:var(--text-base)}@media (width>=48em){.article-body{font-size:var(--text-md)}.article-body :where(.panel,.notice,.learning-brief,.diagram,.guided-walkthrough,.step){font-size:var(--text-base)}.topbar{padding-inline:var(--space-5)}.page-heading h1{font-size:var(--text-2xl)}.two-column,.workflow-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.sidebar-footer{display:none}}@media (width<=47.99em){.search-trigger{background:0 0;border-color:#0000;justify-content:center;width:2.5rem;min-width:0;padding:0}.search-trigger>span{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.search-trigger>kbd,.theme-switch-header{display:none}.theme-switch-menu{display:inline-flex}}@media (width<=23.99em){.brand-name{font-size:var(--text-base)}.header-actions{gap:0}}@media (width>=64em){.menu-button,.scrim,.sidebar .sidebar-close,.side-cta,.sidebar-footer{display:none}.sidebar{align-items:center;gap:var(--space-1);width:auto;box-shadow:none;visibility:visible;background:0 0;border:0;flex-direction:row;padding:0;transition:none;position:static;overflow:visible;transform:none}.header-cta{display:inline-flex}.header-menu>summary,.nav-link{padding-inline:var(--space-2)}.header-menu>summary:after{margin-left:0}.menu-panel{z-index:var(--z-header);gap:var(--space-1);min-width:15rem;margin:var(--space-1) 0 0;padding:var(--space-3);border:var(--border-width) solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);box-shadow:var(--shadow-lg);position:absolute;top:100%;left:0}.sdlc-menu{position:static}.sdlc-panel{right:var(--space-4);left:var(--space-4);padding:var(--space-5);margin-top:0}.sdlc-panel-grid{gap:var(--space-5) var(--space-4);grid-template-columns:repeat(4,minmax(0,1fr))}:root.nav-open{overflow:visible}main{padding-top:var(--space-6)}}@media (width>=80em){.sdlc-panel-grid{grid-template-columns:repeat(7,minmax(0,1fr))}.sdlc-panel-program{padding-left:var(--space-4);border-left:var(--border-width) solid var(--color-border)}}@media (width>=75em){.article-layout{grid-template-columns:minmax(0, 1fr) var(--toc-width);column-gap:var(--space-7)}.article-layout>.toc-compact{top:calc(var(--header-height) + var(--space-5));grid-area:1/2;align-self:start;position:sticky}.article-layout>.toc-compact>nav{max-height:calc(100vh - var(--header-height) - var(--space-7));overscroll-behavior:contain;scrollbar-width:thin;overflow-y:auto}@supports selector(::details-content){.article-layout>.toc-compact{padding:var(--space-1) var(--space-1) var(--space-4);background:0 0;border:0}.article-layout>.toc-compact>summary{display:none}.article-layout>.toc-compact::details-content{content-visibility:visible}.article-layout>.toc-compact>nav:before{content:attr(aria-label) / "";margin-bottom:var(--space-3);font-size:var(--text-xs);font-weight:var(--weight-bold);letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--color-text-subtle);display:block}.article-layout>.toc-compact .toc-list{margin:0}}.article-layout>.article-body{grid-area:1/1}}}@layer components{.eyebrow{font-size:var(--text-xs);font-weight:var(--weight-bold);letter-spacing:var(--tracking-caps);line-height:var(--leading-snug);text-transform:uppercase;color:var(--color-text-subtle);display:block}.meta{align-items:center;gap:var(--space-2) var(--space-4);font-size:var(--text-sm);color:var(--color-text-subtle);flex-wrap:wrap;display:flex}.meta>span{align-items:center;gap:var(--space-1);display:inline-flex}.pill-row{gap:var(--space-2);flex-wrap:wrap;display:flex}.tag{align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-2);border:var(--border-width) solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface-2);color:var(--color-text-muted);font-size:var(--text-xs);font-weight:var(--weight-medium);line-height:var(--leading-tight);text-decoration:none;display:inline-flex}a.tag{min-height:2rem;padding-inline:var(--space-3);border-color:var(--color-border-strong);color:var(--color-text);font-size:var(--text-sm)}a.tag:hover{border-color:var(--color-accent);color:var(--color-link-hover)}.muted{color:var(--color-text-subtle);font-size:var(--text-sm)}.small-text{font-size:var(--text-sm)}[data-domain=appsec]{--domain:var(--color-domain-appsec);--domain-soft:var(--color-domain-appsec-soft);--domain-icon:url(/_astro/domain-appsec.Bz1mm-Ch.svg)}[data-domain=supply-chain]{--domain:var(--color-domain-supply-chain);--domain-soft:var(--color-domain-supply-chain-soft);--domain-icon:url(/_astro/domain-supply-chain.-_EF9XRv.svg)}[data-domain=runtime]{--domain:var(--color-domain-runtime);--domain-soft:var(--color-domain-runtime-soft);--domain-icon:url(/_astro/domain-runtime.CjJ5wQF9.svg)}[data-domain=identity-crypto]{--domain:var(--color-domain-identity-crypto);--domain-soft:var(--color-domain-identity-crypto-soft);--domain-icon:url(/_astro/domain-identity-crypto.BEqW7Bn7.svg)}[data-domain=governance]{--domain:var(--color-domain-governance);--domain-soft:var(--color-domain-governance-soft);--domain-icon:url(/_astro/domain-governance.DnDCYNiz.svg)}[data-domain=ai-emerging]{--domain:var(--color-domain-ai-emerging);--domain-soft:var(--color-domain-ai-emerging-soft);--domain-icon:url(/_astro/domain-ai-emerging.BMnFPa2G.svg)}[data-type]{--type-icon:url(/_astro/book.BdQmAX7W.svg)}[data-type=Recipe]{--type-icon:url(/_astro/steps.ygfmSPtZ.svg)}[data-type=Reference]{--type-icon:url(/_astro/table.CnRJc3cf.svg)}[data-type=Case\ study]{--type-icon:url(/_astro/history.BNckATPo.svg)}[data-type=Fix\ card]{--type-icon:url(/_astro/wrench.ByYf4UpH.svg)}[data-type=Workflow]{--type-icon:url(/_astro/route.BSoYnhWQ.svg)}[data-type=Learning\ path]{--type-icon:url(/_astro/graduation.B0ziyyDf.svg)}[data-type=Lab]{--type-icon:url(/_astro/flask.ChMGGFgl.svg)}[data-type=Project]{--type-icon:url(/_astro/terminal.KM2G_ZCE.svg)}[data-type=Tool]{--type-icon:url(/_astro/toolbox.B0UYdpNa.svg)}[data-type=Glossary]{--type-icon:url(/_astro/bookmark.DDay65XG.svg)}.domain-mark,.library-icon{border-radius:var(--radius-md);background:var(--domain-soft,var(--color-accent-soft));width:2.25rem;height:2.25rem;color:var(--domain,var(--color-accent));flex-shrink:0;place-items:center;display:inline-grid}.domain-mark:before,.library-icon:before,.type-chip:before,.eyebrow[data-type]:before{content:"";width:1.25rem;height:1.25rem;-webkit-mask:var(--domain-icon) center / contain no-repeat;mask:var(--domain-icon) center / contain no-repeat;background:currentColor;flex-shrink:0}.library-icon:before,.type-chip:before,.eyebrow[data-type]:before{-webkit-mask-image:var(--type-icon);mask-image:var(--type-icon)}.eyebrow[data-type]{align-items:center;gap:var(--space-1);display:flex}.eyebrow[data-type]:before{width:1.15em;height:1.15em}.page-kicker{align-items:center;gap:var(--space-2) var(--space-3);margin-bottom:var(--space-3);flex-wrap:wrap;display:flex}.domain-chip,.type-chip{align-items:center;gap:var(--space-2);font-size:var(--text-xs);font-weight:var(--weight-bold);letter-spacing:var(--tracking-caps);line-height:var(--leading-snug);text-transform:uppercase;text-decoration:none;display:inline-flex}.domain-chip{color:var(--domain)}.domain-chip .domain-mark{border-radius:var(--radius-sm);width:1.75rem;height:1.75rem}.domain-chip .domain-mark:before{width:1.125rem;height:1.125rem}.type-chip{padding:var(--space-1) var(--space-2);border:var(--border-width) solid var(--color-border-strong);border-radius:var(--radius-full);color:var(--color-text-muted)}.type-chip:before{width:1rem;height:1rem}.phase-chip{align-items:center;gap:var(--space-2);color:var(--color-accent);font-size:var(--text-xs);font-weight:var(--weight-bold);letter-spacing:var(--tracking-caps);line-height:var(--leading-snug);text-transform:uppercase;text-decoration:none;display:inline-flex}.phase-chip:hover{text-decoration:underline}.phase-chip-number{border-radius:var(--radius-full);background:var(--color-accent);width:1.5rem;height:1.5rem;color:var(--color-accent-contrast);font-variant-numeric:tabular-nums;place-items:center;display:inline-grid}.text-link{align-items:center;gap:var(--space-2);min-height:1.5rem;color:var(--color-link);font-size:var(--text-sm);font-weight:var(--weight-semibold);text-decoration:none;display:inline-flex}.text-link:hover{color:var(--color-link-hover);text-decoration:underline 2px}.text-link svg{transition:transform var(--duration-fast) var(--ease-out)}.text-link:hover svg{transform:translate(2px)}a[href^=http]:not([class]):after,a.text-link[href^=http]:after{content:"";vertical-align:.05em;background:currentColor;width:.7em;height:.7em;margin-inline-start:.2em;display:inline-block;-webkit-mask:url(/_astro/external.78qSfAZL.svg) 50%/contain no-repeat;mask:url(/_astro/external.78qSfAZL.svg) 50%/contain no-repeat}.button{justify-content:center;align-items:center;gap:var(--space-2);min-height:2.75rem;padding:var(--space-2) var(--space-4);border:var(--border-width) solid transparent;border-radius:var(--radius-md);background:var(--color-accent);color:var(--color-accent-contrast);font-size:var(--text-sm);font-weight:var(--weight-semibold);line-height:var(--leading-snug);text-align:center;transition:background-color var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out);text-decoration:none;display:inline-flex}.button:hover:not(:disabled,[aria-disabled=true]){background:var(--color-accent-hover);color:var(--color-accent-contrast)}.button:active:not(:disabled,[aria-disabled=true]){transform:translateY(1px)}.button.secondary{border-color:var(--color-border-strong);background:var(--color-surface);color:var(--color-text)}.button.secondary:hover:not(:disabled,[aria-disabled=true]){border-color:var(--color-text-subtle);background:var(--color-surface-2);color:var(--color-text)}.button.light{background:var(--color-inverse-text);color:var(--color-inverse-bg)}.button.light:hover:not(:disabled){background:var(--color-accent-soft);color:var(--color-inverse-bg)}.button:disabled,.button[aria-disabled=true]{opacity:.55;cursor:not-allowed}.button[aria-busy=true]:before,[aria-busy=true] :is(.status-line,#workshop-status):before{content:"";border-radius:var(--radius-full);border:2px solid;border-right-color:#0000;flex-shrink:0;width:1em;height:1em;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(1turn)}}.actions{align-items:center;gap:var(--space-3);margin-top:var(--space-4);flex-wrap:wrap;display:flex}.panel{padding:var(--space-5);border:var(--border-width) solid var(--color-border);border-radius:var(--radius-lg);background:var(--color-surface);color:var(--color-text);display:block}a.panel{transition:border-color var(--duration-fast) var(--ease-out), box-shadow var(--duration-fast) var(--ease-out);text-decoration:none}a.panel:hover{border-color:var(--color-accent);box-shadow:var(--shadow-md);color:var(--color-text)}a.panel :is(h2,h3){color:var(--color-link)}.panel>.eyebrow{margin-bottom:var(--space-3)}.panel h2{font-size:var(--text-lg);margin-bottom:var(--space-3)}.panel h3{font-size:var(--text-md);margin-bottom:var(--space-2)}.panel p,.panel li{color:var(--color-text-muted);font-size:var(--text-base);line-height:var(--leading-normal)}.panel p+p{margin-top:var(--space-3)}.panel>.meta,.panel .button{margin-top:var(--space-4)}.panel .actions .button{margin-top:0}.resource-list{border-top:var(--border-width) solid var(--color-border);margin:0;padding:0}:is(.two-column,.domain-grid)+:is(.resource-list,.two-column,.domain-grid){margin-top:var(--space-5)}.resource-row{align-items:center;gap:var(--space-5);padding:var(--space-4) var(--space-1);border-bottom:var(--border-width) solid var(--color-border);color:var(--color-text);text-decoration:none;display:flex}.resource-row>div{flex:1;min-width:0}.resource-row .eyebrow{margin-bottom:var(--space-1)}.resource-row :is(h2,h3,h4){margin:0 0 var(--space-1);font-size:var(--text-md);color:var(--color-link)}.resource-row p{max-width:none;font-size:var(--text-sm);line-height:var(--leading-normal);color:var(--color-text-muted)}.resource-row>svg{color:var(--color-text-subtle);transition:transform var(--duration-fast) var(--ease-out)}.resource-row:hover{background:var(--color-surface);color:var(--color-text)}.resource-row:hover :is(h2,h3,h4){color:var(--color-link-hover);text-underline-offset:.2em;text-decoration:underline 2px}.resource-row:hover>svg{color:var(--color-accent);transform:translate(2px)}.workflow-grid{gap:0 var(--space-6);border-top:var(--border-width) solid var(--color-border)}.workflow-card{align-items:center;gap:var(--space-4);padding:var(--space-4) 0;border-bottom:var(--border-width) solid var(--color-border);color:var(--color-text);text-decoration:none;display:flex}.workflow-card :is(h2,h3){margin-bottom:var(--space-1);font-size:var(--text-md);color:var(--color-link)}.workflow-card p{font-size:var(--text-sm);color:var(--color-text-muted)}.workflow-card>svg:last-child{color:var(--color-text-subtle);transition:transform var(--duration-fast) var(--ease-out);margin-left:auto}.workflow-card:hover{color:var(--color-text)}.workflow-card:hover :is(h2,h3){color:var(--color-link-hover);text-underline-offset:.2em;text-decoration:underline 2px}.workflow-card:hover>svg:last-child{color:var(--color-accent);transform:translate(2px)}.workflow-icon{border-radius:var(--radius-md);background:var(--color-accent-soft);width:2.75rem;height:2.75rem;color:var(--color-accent);flex-shrink:0;place-items:center;display:grid}.notice{max-width:var(--measure);margin:var(--space-5) 0;padding:var(--space-4) var(--space-5);border:var(--border-width) solid var(--color-border);border-left:4px solid var(--color-accent);border-radius:var(--radius-md);background:var(--color-accent-soft);color:var(--color-text-prose);font-size:var(--text-base);line-height:var(--leading-normal)}.empty{justify-items:center;gap:var(--space-2);margin:var(--space-5) 0;padding:var(--space-6) var(--space-5);border:var(--border-width) dashed var(--color-border-strong);border-radius:var(--radius-lg);background:var(--color-surface);color:var(--color-text-muted);text-align:center;display:grid}.empty:before{content:"";background:var(--color-text-subtle);width:1.5rem;height:1.5rem;-webkit-mask:url(/_astro/search.CSZRrNdk.svg) 50%/contain no-repeat;mask:url(/_astro/search.CSZRrNdk.svg) 50%/contain no-repeat}.error{gap:var(--space-3);margin:var(--space-4) 0;padding:var(--space-3) var(--space-4);border:var(--border-width) solid var(--color-danger-border);border-radius:var(--radius-md);background:var(--color-danger-bg);color:var(--color-text);font-size:var(--text-sm);line-height:var(--leading-normal);white-space:pre-wrap;overflow-wrap:anywhere;border-left-width:4px;grid-template-columns:auto minmax(0,1fr);display:grid}.error:before{content:"";background:var(--color-danger);width:1.25rem;height:1.25rem;-webkit-mask:url(/_astro/alert.26sImQf7.svg) 50%/contain no-repeat;mask:url(/_astro/alert.26sImQf7.svg) 50%/contain no-repeat}.status-line,#workshop-status{align-items:center;gap:var(--space-3);margin:var(--space-4) 0;padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);background:var(--color-surface-2);color:var(--color-text);font-size:var(--text-sm);display:flex}.status-pass,.status-fail,.status-na{font-weight:var(--weight-semibold)}.status-pass{color:var(--color-success)}.status-fail{color:var(--color-danger)}.status-na{color:var(--color-warning)}td.status-pass:before,td.status-fail:before,td.status-na:before{content:"";width:1em;height:1em;vertical-align:-.15em;background:currentColor;margin-inline-end:var(--space-2);display:inline-block}td.status-pass:before{-webkit-mask:url(/_astro/check-circle.CHFWzVl5.svg) 50%/contain no-repeat;mask:url(/_astro/check-circle.CHFWzVl5.svg) 50%/contain no-repeat}td.status-fail:before{-webkit-mask:url(/_astro/x-circle.CWvuLj2E.svg) 50%/contain no-repeat;mask:url(/_astro/x-circle.CWvuLj2E.svg) 50%/contain no-repeat}td.status-na:before{-webkit-mask:url(/_astro/alert.26sImQf7.svg) 50%/contain no-repeat;mask:url(/_astro/alert.26sImQf7.svg) 50%/contain no-repeat}.toast{right:var(--space-5);bottom:var(--space-5);z-index:var(--z-toast);max-width:min(24rem, calc(100vw - 2 * var(--space-5)));padding:var(--space-3) var(--space-5);border-radius:var(--radius-md);background:var(--color-text);color:var(--color-surface);box-shadow:var(--shadow-lg);font-size:var(--text-sm);position:fixed}@media (forced-colors:active){:is(.permalink,[data-copy-link],[data-cite],.code-copy,.code-file,.theme-option):before{forced-color-adjust:none;background:canvastext}}.table-wrap,.guide-table-wrap{max-width:100%;margin:var(--space-5) 0;border:var(--border-width) solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);overflow-x:auto}.guide-table td{overflow-wrap:anywhere}.guide-table caption,.table-wrap caption{border-bottom:var(--border-width) solid var(--color-border)}@container (width<=36rem){.guide-table thead{clip-path:inset(50%);width:1px;height:1px;position:absolute;overflow:hidden}.guide-table,.guide-table tbody,.guide-table tr,.guide-table td{display:block}.guide-table tr{padding:var(--space-3) 0;border-bottom:var(--border-width) solid var(--color-border)}.guide-table tbody tr:last-child{border-bottom:0}.guide-table td{padding:var(--space-1) var(--space-4);border:0}.guide-table td:before{content:attr(data-label) / "";font-size:var(--text-xs);font-weight:var(--weight-bold);letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--color-text-subtle);display:block}}.heading-row{align-items:baseline;gap:var(--space-2);max-width:var(--measure);display:flex}.permalink{border-radius:var(--radius-sm);width:1.75rem;height:1.75rem;color:var(--color-text-subtle);opacity:0;transition:opacity var(--duration-fast) var(--ease-out);flex-shrink:0;place-items:center;text-decoration:none;display:inline-grid}:is(.permalink,[data-copy-link],[data-cite],.code-copy,.code-file,.theme-option):before{content:"";width:1rem;height:1rem;-webkit-mask:var(--mask-icon) center / contain no-repeat;mask:var(--mask-icon) center / contain no-repeat;background:currentColor;flex-shrink:0}:is(.permalink,[data-copy-link]){--mask-icon:url(/_astro/link.B_UzjdV6.svg)}:is([data-cite],.code-copy){--mask-icon:url(/_astro/copy.BGHT_zQT.svg)}.code-file{--mask-icon:url(/_astro/file.BhSyXFLU.svg)}[data-theme-choice=system]{--mask-icon:url(/_astro/monitor.CAzT0tz-.svg)}[data-theme-choice=light]{--mask-icon:url(/_astro/sun.yJgq-U1w.svg)}[data-theme-choice=dark]{--mask-icon:url(/_astro/moon.rHhESkd8.svg)}:is(.code-copy,.code-file):before{width:.875rem;height:.875rem}.heading-row:hover .permalink,.permalink:focus-visible{opacity:1}.permalink:hover{background:var(--color-surface-2);color:var(--color-link-hover)}@media (hover:none){.permalink{opacity:.7}}.article-actions{gap:var(--space-2);margin-top:var(--space-4);flex-wrap:wrap;display:flex}.article-actions .button{min-height:2.5rem;padding-inline:var(--space-3)}.sources li{overflow-wrap:anywhere}.source-note{color:var(--color-text-muted)}.learning-brief{gap:var(--space-5);margin:0 0 var(--space-6);padding:var(--space-5);border:var(--border-width) solid var(--color-border);border-top:3px solid var(--color-accent);border-radius:var(--radius-md);background:var(--color-surface);display:grid}.learning-brief .eyebrow{margin-bottom:var(--space-2)}.learning-brief :is(p,li){font-size:var(--text-base);line-height:var(--leading-normal)}.learning-brief p+p,.learning-brief ul+p{margin-top:var(--space-3)}.learning-brief ul{margin:var(--space-2) 0 0}@container (width>=36rem){.learning-brief{grid-template-columns:1.15fr 1fr}}.step{gap:var(--space-4);padding:var(--space-5) 0;border-bottom:var(--border-width) solid var(--color-border);grid-template-columns:2rem minmax(0,1fr);display:grid}.step-num{border-radius:var(--radius-full);background:var(--color-accent-soft);width:2rem;height:2rem;color:var(--color-accent);font-size:var(--text-sm);font-weight:var(--weight-bold);font-variant-numeric:tabular-nums;place-items:center;display:grid}.step h2{margin:0 0 var(--space-2);font-size:var(--text-lg)}.learn-progress{height:.5rem;margin:var(--space-3) 0 var(--space-5);border-radius:var(--radius-full);background:var(--color-surface-3);overflow:hidden}.learn-progress span{border-radius:inherit;background:var(--color-accent);width:0;height:100%;transition:width var(--duration-base) var(--ease-out);display:block}.draft-controls{margin:var(--space-4) 0;padding:var(--space-4);border:var(--border-width) solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface-2)}.draft-controls p{max-width:none;font-size:var(--text-sm);line-height:var(--leading-normal);color:var(--color-text-muted)}.draft-controls .actions{margin:var(--space-3) 0}.progress-import{gap:var(--space-1);flex-direction:column;min-width:0;max-width:100%;display:inline-flex}.stats-strip{gap:var(--space-4) var(--space-7);margin:var(--space-5) 0;padding:var(--space-4) 0;border-block:var(--border-width) solid var(--color-border);flex-wrap:wrap;display:flex}.stats-strip strong{font-size:var(--text-xl);font-variant-numeric:tabular-nums;line-height:var(--leading-tight);display:block}.stats-strip span{font-size:var(--text-sm);color:var(--color-text-subtle)}#search-dialog{width:min(45rem,100vw - 2rem);max-height:min(48rem,85dvh);margin-top:max(5vh, var(--space-5));border:var(--border-width) solid var(--color-border);border-radius:var(--radius-lg);background:var(--color-surface);box-shadow:var(--shadow-lg);padding:0}.dialog-head{justify-content:space-between;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3) var(--space-2) var(--space-5);border-bottom:var(--border-width) solid var(--color-border);display:flex}.dialog-head h2{font-size:var(--text-md)}.search-app{padding:var(--space-4) var(--space-5)}.search-box{align-items:center;gap:var(--space-3);padding:0 var(--space-3);border:var(--border-width) solid var(--color-border-strong);border-radius:var(--radius-md);background:var(--color-surface);color:var(--color-text-muted);display:flex}.search-box svg{color:var(--color-accent)}.search-box:focus-within{border-color:var(--color-accent);outline:var(--focus-width) solid var(--color-focus);outline-offset:1px}.search-box input{min-width:0;min-height:3rem;font-size:var(--text-md);background:0 0;border:0;outline:none;flex:1;margin:0;padding:0}.search-filters{gap:var(--space-3);margin:var(--space-3) 0;flex-wrap:wrap;display:flex}.search-filters label{flex:9rem}.search-filters select{width:100%;min-width:0;min-height:2.5rem;font-size:var(--text-sm)}.search-status{margin:var(--space-3) 0;font-size:var(--text-sm);color:var(--color-text-subtle)}.search-results{overscroll-behavior:contain;max-height:50vh;overflow:auto}.search-app.panel .search-results{max-height:none;overflow:visible}.search-result{padding:var(--space-3);border-top:var(--border-width) solid var(--color-border);color:var(--color-text);text-decoration:none;display:block}.search-result:hover{background:var(--color-surface-2);color:var(--color-text)}.search-result:focus-visible{outline-offset:calc(-1 * var(--focus-width))}.search-result .search-result-title{margin:var(--space-1) 0;font-size:var(--text-base);color:var(--color-link)}.search-result p{font-size:var(--text-sm);color:var(--color-text-muted)}@media (width<=47.99em){.search-app{padding:var(--space-3) var(--space-4)}.search-box kbd{display:none}}.fact-list{gap:var(--space-3);margin:var(--space-5) 0 0;display:grid}.fact-list>div{gap:var(--space-1);grid-template-columns:minmax(0,1fr);display:grid}.fact-list dt{font-size:var(--text-xs);font-weight:var(--weight-bold);letter-spacing:var(--tracking-caps);line-height:var(--leading-snug);text-transform:uppercase;color:var(--color-text-subtle)}.fact-list dd{min-width:0;font-size:var(--text-sm);line-height:var(--leading-normal);color:var(--color-text-muted);margin:0}.article-scope{margin:var(--space-6) 0}@media (width>=48em){.article-scope>div,.page-heading .fact-list>div{gap:var(--space-4);grid-template-columns:7rem minmax(0,1fr);align-items:baseline}}.code-block{--variant-color:var(--color-border-strong);max-width:100%;margin:var(--space-5) 0;border:var(--border-width) solid var(--color-code-border);border-radius:var(--radius-md);background:var(--color-code-bg);color:var(--color-code-text);overflow:hidden}.code-head{align-items:center;gap:var(--space-1) var(--space-3);min-height:2.5rem;padding:var(--space-1) var(--space-1) var(--space-1) var(--space-4);border-bottom:var(--border-width) solid var(--color-code-border);background:var(--color-code-head);font-size:var(--text-xs);color:var(--color-text-muted);flex-wrap:wrap;display:flex}.code-variant,.code-file{align-items:center;gap:var(--space-1);display:inline-flex}.code-variant{font-weight:var(--weight-bold);letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--variant-color)}.code-file{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--color-text);overflow-wrap:anywhere}.code-lang{font-weight:var(--weight-semibold);letter-spacing:var(--tracking-caps);text-transform:uppercase;margin-left:auto}.code-head>.code-lang:first-child{margin-inline:0 auto}.code-copy{align-items:center;gap:var(--space-1);min-height:2rem;padding:0 var(--space-3);border:var(--border-width) solid var(--color-code-border);border-radius:var(--radius-sm);background:var(--color-code-bg);color:var(--color-text);font-size:var(--text-xs);font-weight:var(--weight-semibold);display:inline-flex}.code-copy:hover{border-color:var(--color-border-strong);background:var(--color-surface)}.code-pre{padding:var(--space-4) var(--space-5);font-size:var(--text-sm);line-height:var(--leading-normal);tab-size:2;color:var(--color-code-text);margin:0;overflow-x:auto}.code-pre:focus-visible{outline-offset:calc(-1 * var(--focus-width))}.code-pre code{width:max-content;min-width:100%;display:block}.code-pre .line{min-width:100%;display:inline-block}.code-block.is-wrapped .code-pre{white-space:pre-wrap;overflow-x:visible}.code-block.is-wrapped .code-pre code{overflow-wrap:anywhere;width:auto}.code-pre .line-added{background:var(--syntax-inserted-bg)}.code-pre .line-removed{background:var(--syntax-deleted-bg)}.code-block[data-variant]{border-left:4px solid var(--variant-color)}.code-block[data-variant=vulnerable]{--variant-color:var(--color-danger)}.code-block[data-variant=fixed]{--variant-color:var(--color-success)}.code-block[data-variant=wrong]{--variant-color:var(--color-warning)}.code-block[data-variant=test]{--variant-color:var(--color-info)}.code-block[data-variant=config]{--variant-color:var(--color-accent)}.tok-keyword{color:var(--syntax-keyword)}.tok-string,.tok-string-expression{color:var(--syntax-string)}.tok-comment{color:var(--syntax-comment)}.tok-constant{color:var(--syntax-constant)}.tok-function{color:var(--syntax-function)}.tok-parameter{color:var(--syntax-parameter)}.tok-punctuation{color:var(--syntax-punctuation)}.tok-link{color:var(--color-link);text-decoration:underline}.tok-inserted{color:var(--syntax-inserted)}.tok-deleted{color:var(--syntax-deleted)}.tok-changed{color:var(--syntax-constant)}.tok-italic{font-style:italic}.tok-bold{font-weight:var(--weight-bold)}.tok-underline{text-decoration:underline}@media (width<=47.99em){.code-pre{padding:var(--space-3) var(--space-4)}}}@layer pages{.workflow-meta{color:var(--color-text-subtle)}p.workflow-meta{margin-top:var(--space-1);font-size:var(--text-sm)}.hub-start-grid{gap:var(--space-4);grid-template-columns:repeat(auto-fill,minmax(min(100%,17rem),1fr));display:grid}.tag-count{color:var(--color-text-subtle);font-size:var(--text-xs);font-weight:var(--weight-semibold);font-variant-numeric:tabular-nums;margin-inline-start:var(--space-1)}.library-group{margin-top:var(--space-6)}.library-group-heading{margin-bottom:var(--space-2)}.library-group-heading h2{font-size:var(--text-lg)}.library-next{margin-top:var(--space-3)}.library-row{align-items:flex-start;gap:var(--space-4);padding-block:var(--space-3);content-visibility:auto;contain-intrinsic-size:auto 5.5rem}.library-row p{-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.library-icon{margin-top:var(--space-1)}.library-icon:before{width:1.125rem;height:1.125rem}.hub-identity{align-items:center;gap:var(--space-3);margin:calc(-1 * var(--space-4)) 0 var(--space-4);display:flex}.hub-identity .domain-mark{width:2.75rem;height:2.75rem}.hub-identity .domain-mark:before{width:1.5rem;height:1.5rem}.hub-counts{font-size:var(--text-sm);color:var(--color-text-subtle);margin:0}.hub-jump{margin-bottom:var(--space-2)}.hub-start{margin-top:var(--space-6)}.hub-start h2{margin-bottom:var(--space-4);font-size:var(--text-lg)}.hub-start-card h3{font-size:var(--text-base);margin:0}.hub-intro{max-width:var(--measure);margin-top:var(--space-1);color:var(--color-text-muted)}.hub-section .section-heading{margin-bottom:var(--space-3);align-items:flex-end}.hub-section .section-heading>.muted{white-space:nowrap}.hub-historical{padding-top:var(--space-6);border-top:2px dashed var(--color-border)}.hub-subheading{margin:var(--space-5) 0 var(--space-2);font-size:var(--text-md)}.page-heading-meta{margin-top:var(--space-3);font-size:var(--text-sm);color:var(--color-text-subtle)}.router>p{margin-bottom:var(--space-4)}.router+.learning-brief{margin-top:var(--space-6)}.router-jump{margin:var(--space-4) 0 var(--space-2)}.router-group{margin-top:var(--space-6)}.article-body .router-group h3{margin:0 0 var(--space-3)}.router-grid{gap:var(--space-4);grid-template-columns:minmax(0,1fr);display:grid}.router-card{padding:var(--space-4) var(--space-5);border:var(--border-width) solid var(--color-border);border-radius:var(--radius-lg);background:var(--color-surface);scroll-margin-top:calc(var(--header-height) + var(--space-5))}.article-body .router-card :is(h3,h4){margin:0 0 var(--space-2);font-size:var(--text-md)}.article-body .router-card :where(p,li){font-size:var(--text-sm);line-height:var(--leading-normal)}.article-body .router-card :where(p+p,p+ul,ul+p){margin-top:var(--space-2)}.router-ids{gap:var(--space-1);flex-wrap:wrap;display:flex}.id-chip{min-height:1.5rem;padding:0 var(--space-2);border:var(--border-width) solid var(--color-border-strong);border-radius:var(--radius-sm);background:var(--color-surface);color:var(--color-link);font-size:var(--text-xs);font-weight:var(--weight-semibold);align-items:center;text-decoration:none;display:inline-flex}a.id-chip:hover{border-color:var(--color-accent);color:var(--color-link-hover)}a.id-chip[href^=http]:after{content:"";background:currentColor;width:.7em;height:.7em;margin-inline-start:.25em;-webkit-mask:url(/_astro/external.78qSfAZL.svg) 50%/contain no-repeat;mask:url(/_astro/external.78qSfAZL.svg) 50%/contain no-repeat}span.id-chip{border-color:var(--color-warning-border);background:var(--color-warning-bg);color:var(--color-warning)}.article-body .router-card .router-aka{color:var(--color-text-muted);font-size:var(--text-xs)}.article-body .router-guides{margin:var(--space-2) 0 0;padding-inline-start:1.1em}.article-body .router-guides li+li{margin-top:var(--space-1)}.router-more{margin-top:var(--space-5)}.article-body .router-card .router-fix{padding:var(--space-2) var(--space-3);border-left:3px solid var(--color-success-border);border-radius:var(--radius-sm);background:var(--color-success-bg)}@container (width>=40rem){.router-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}.section-lead{max-width:var(--measure);margin-bottom:var(--space-4);color:var(--color-text-muted)}.section-subheading{margin:var(--space-6) 0 var(--space-3);font-size:var(--text-md)}.template-list{gap:var(--space-2);margin:0;padding-inline-start:1.25em;display:grid}.guided-walkthrough{margin-top:var(--space-7);padding:var(--space-5);border:var(--border-width) solid var(--color-border);border-left:4px solid var(--color-accent);border-radius:var(--radius-lg);background:var(--color-surface)}.guided-walkthrough>.eyebrow{margin-bottom:var(--space-2)}.walkthrough-steps{margin:var(--space-4) 0;padding:0;list-style:none}.article-body .walkthrough-steps>li{max-width:none;padding:var(--space-5) 0;border-bottom:var(--border-width) solid var(--color-border);margin:0}.walkthrough-steps h3{margin:0 0 var(--space-2);font-size:var(--text-md)}.walkthrough-steps details{margin-top:var(--space-4)}.worked-answer{white-space:pre-wrap}.step-observation,.evidence-label{margin:var(--space-4) 0 var(--space-2);font-size:var(--text-sm);font-weight:var(--weight-semibold);color:var(--color-text);display:block}.step-observation textarea{margin-top:var(--space-2);font-weight:var(--weight-regular)}.evidence-notes{width:100%}.guided-walkthrough>.button{margin-top:var(--space-4)}.practice-jump{margin:var(--space-5) 0}.panel ul{margin:var(--space-3) 0 0;padding-inline-start:1.25em}.panel li+li{margin-top:var(--space-2)}.path-outcome{max-width:var(--measure);margin:var(--space-5) 0;font-size:var(--text-md);color:var(--color-text-prose)}.checklist{border-top:var(--border-width) solid var(--color-border)}.learning-step{border-bottom:var(--border-width) solid var(--color-border)}.checklist label{align-items:flex-start;gap:var(--space-3);padding:var(--space-4) 0 var(--space-2);font-size:var(--text-base);color:var(--color-text);cursor:pointer;display:flex}.checklist input{margin-top:.2em}.checklist label:has(input:checked) strong{color:var(--color-success)}.learning-step-work{max-width:calc(var(--measure) + 2rem);padding:0 0 var(--space-5) calc(1.125rem + var(--space-3));font-size:var(--text-sm);line-height:var(--leading-normal)}.learning-step-work p{margin:var(--space-2) 0;color:var(--color-text-muted)}.learning-step-work .text-link{min-height:2.5rem}.learning-progress-summary{margin-bottom:var(--space-6)}.capstone ol{padding-inline-start:1.25em}.capstone ol>li{margin-bottom:var(--space-5)}.capstone h3{margin:var(--space-6) 0 var(--space-3)}.capstone details{margin:var(--space-5) 0}}@layer utilities{.sr-only{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@media print{.skip-link,.topbar,.breadcrumbs,.sidebar,.scrim,.footer,.toc-compact,.stack-switcher,.citation-text,.article-actions,.code-copy,.permalink,.toast,dialog,.theme-switch,.draft-controls,.guided-walkthrough .button,.learning-progress-summary{display:none}body{background:var(--color-surface)}.page{margin:0}main{max-width:none;padding:0}.article-layout{display:block}.article-body{font-size:var(--text-base)}a{color:var(--color-text)}a[href^=http]:is(:not([class]),.rule-id):after,main a[href^=\/]:not([class],nav a):after,main a.button[download]:after{content:" (" attr(href) ")";width:auto;height:auto;color:var(--color-text-muted);overflow-wrap:anywhere;background:0 0;margin:0;font-size:.85em;display:inline;-webkit-mask:none;mask:none}main a[href^=\/]:not([class],nav a):after,main a.button[download]:after{content:" (" var(--print-origin) attr(href) ")"}.print-citation{justify-content:space-between;gap:var(--space-1) var(--space-4);max-width:none;margin-bottom:var(--space-5);padding-bottom:var(--space-2);border-bottom:var(--border-width) solid var(--color-border-strong);font-size:var(--text-xs);color:var(--color-text-muted);flex-wrap:wrap;display:flex}.code-pre{white-space:pre-wrap;overflow-wrap:anywhere;overflow:visible}.code-pre code{width:auto}.code-block,.diagram,.notice,tr,figure{break-inside:avoid}h2,h3{break-after:avoid}.diagram-canvas svg{min-width:0}}}@font-face{font-family:Atkinson Hyperlegible Next;font-style:normal;font-weight:200 800;font-display:swap;src:url(/_astro/atkinson-hyperlegible-next-latin-wght-normal.BcXVPD7q.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:Atkinson Hyperlegible Next;font-style:italic;font-weight:200 800;font-display:swap;src:url(/_astro/atkinson-hyperlegible-next-latin-wght-italic.DC5MiAaX.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:Atkinson Hyperlegible Mono;font-style:normal;font-weight:200 800;font-display:swap;src:url(/_astro/atkinson-hyperlegible-mono-latin-wght-normal.CoA7y8X5.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:Atkinson Hyperlegible Next Fallback;src:local(Arial),local(ArialMT),local(Liberation Sans),local(Arimo);size-adjust:99.2%;ascent-override:99.2%;descent-override:31.9%;line-gap-override:0%}
