.sp{scroll-margin-top:var(--nav-h);--sp-P:var(--iris);--sp-T0:#63636b;--sp-T1:#a1a1aa;--sp-exact:var(--iris);--sp-wrong:var(--amber);--sp-spirit:#fde68a;--sp-missed:#71717a;--sp-violated:var(--red);--sp-na:#26262c;--sp-mcp:color-mix(in srgb, var(--iris) 52%, var(--surface));--sp-sec:var(--mint);--sp-error:var(--red);--sp-warning:var(--amber);--sp-info:#52525b;--sp-real:var(--iris);--sp-policy:var(--amber);--sp-fp:#52525b;--sp-unguarded:#a1a1aa;--sp-logic:#71717a;--sp-security:var(--red);--sp-file:var(--mint);--sp-tokens:color-mix(in srgb, var(--iris) 52%, var(--surface));--sp-licence:var(--iris);--sp-d5:color-mix(in srgb, var(--iris) 38%, var(--surface));--sp-d20:color-mix(in srgb, var(--iris) 68%, var(--surface));--sp-d100:var(--iris);--sp-ink:var(--ink);--sp-heat-min:var(--raised);--sp-heat-max:color-mix(in srgb, var(--iris) 58%, var(--surface));--sp-band:rgb(var(--iris-rgb) / .08);--sp-band-warm:color-mix(in srgb, var(--amber) 9%, transparent)}.sp-cover{border-top:1px solid var(--line);grid-template-columns:minmax(0,1fr);gap:36px;padding:clamp(56px,7vw,96px) 0 clamp(48px,6vw,72px);display:grid}@media (min-width:1000px){.sp-cover{grid-template-columns:minmax(0,1fr) 340px;align-items:end;gap:64px}}.sp-title{margin-top:0}.sp-desc{max-width:64ch;margin-top:16px}.sp-meta{max-width:78ch;font-family:var(--font-mono);font-feature-settings:"zero" 0;color:var(--muted);font-variant-numeric:tabular-nums;flex-wrap:wrap;align-items:center;gap:8px 12px;margin-top:22px;font-size:12px;line-height:1.6;display:flex}.sp-frame{max-width:62ch;color:var(--muted);margin-top:22px;font-size:13px;line-height:1.55}.sp-side-t{color:var(--muted);margin-bottom:8px;font-size:13px}.sp-dls .ui-row-aside{font-size:12px}.sp-sheet{background:var(--surface);border-block:1px solid var(--line);padding:clamp(48px,6vw,80px) 0 clamp(64px,8vw,104px)}.sp-body{grid-template-columns:minmax(0,1fr);align-items:start;display:grid}@media (min-width:1100px){.sp-body{grid-template-columns:220px minmax(0,680px);justify-content:center;column-gap:clamp(48px,6vw,96px)}}.sp-article{width:100%;min-width:0;max-width:680px;margin-inline:auto}.sp-toc{top:calc(var(--nav-h) + 32px);max-height:calc(100vh - var(--nav-h) - 64px);padding:2px 8px 24px 0;font-size:13px;line-height:1.35;position:sticky;overflow-y:auto}.sp-toc-t{color:var(--ink);margin-bottom:12px;font-size:13px;font-weight:500}.sp-toc ol,.sp-toc-m ol{margin:0;padding:0;list-style:none}.sp-toc ol{border-left:1px solid var(--line)}.sp-toc li.l1{margin-top:8px}.sp-toc li.l2{padding-left:12px}.sp-toc a{color:var(--faint);transition:color var(--t-hover) ease;padding:4px 0 4px 14px;text-decoration:none;display:block;position:relative}.sp-toc li.l1>a{color:var(--muted)}.sp-toc a:hover{color:var(--ink-2)}.sp-toc a.is-active{color:var(--ink)}.sp-toc a:before{content:"";background:var(--ink);opacity:0;width:2px;transition:opacity var(--t-tab) ease;border-radius:2px;position:absolute;top:4px;bottom:4px;left:-1px}.sp-toc li.l2>a:before{left:-13px}.sp-toc a.is-active:before{opacity:1}.sp-toc-m{display:none}.sp-abstract p{color:var(--ink-2);margin:0 0 16px;font-size:17px;line-height:1.65}.sp-kpis{border-top:1px solid var(--line);grid-template-columns:minmax(0,1fr);margin:28px 0 0;display:grid}.sp-kpi{border-bottom:1px solid var(--line);padding:20px 0 22px}@media (min-width:640px){.sp-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.sp-kpi:nth-child(odd){padding-right:24px}.sp-kpi:nth-child(2n){border-left:1px solid var(--line);padding-left:24px}}.sp-kpi dt{font-family:var(--font-mono);font-feature-settings:"zero" 0;letter-spacing:-.02em;color:var(--mint);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:28px;font-weight:400;line-height:1.1}.sp-kpi dd{color:var(--muted);margin:10px 0 0;font-size:14px;line-height:1.5}.sp-article .sp-reading{font-family:var(--font-mono);color:var(--muted);margin:32px 0 0;font-size:12px}.sp-h1{letter-spacing:-.02em;color:var(--ink);scroll-margin-top:calc(var(--nav-h) + 24px);text-wrap:balance;margin:64px 0 18px;font-size:24px;font-weight:500;line-height:1.2}.sp-reading+.sp-h1{margin-top:20px}.sp-h2{letter-spacing:-.01em;color:var(--ink);scroll-margin-top:calc(var(--nav-h) + 24px);text-wrap:balance;margin:40px 0 12px;font-size:18px;font-weight:500;line-height:1.35}.sp-article p{color:var(--ink-2);text-wrap:pretty;margin:0 0 18px;font-size:17px;line-height:1.65}.sp-article strong,.sp-abstract strong{color:var(--ink);font-weight:600}.sp-article em,.sp-abstract em{font-style:italic}.sp-article code,.sp-abstract code{font-family:var(--font-mono);background:var(--raised);color:var(--ink);overflow-wrap:anywhere;border-radius:4px;padding:1px 5px;font-size:.82em}.sp-article ol,.sp-article ul{margin:0 0 18px;padding-left:22px}.sp-article li{color:var(--ink-2);margin:8px 0;font-size:17px;line-height:1.6}.sp-article li::marker{color:var(--faint)}.sp-claim{border-left:2px solid var(--ink);margin:24px 0 26px;padding:2px 0 2px 20px}.sp-article .sp-claim p{color:var(--ink);margin:0}.sp-end{border-top:1px solid var(--line);flex-wrap:wrap;align-items:baseline;gap:6px 12px;margin-top:48px;padding-top:24px;display:flex}.sp-article .sp-end{font-size:15px}.sp-end-meta{color:var(--muted);font-size:13px}.sp-num{color:var(--ink);font-weight:500}.sp-tablewrap{overscroll-behavior-x:contain;margin:24px 0 32px;overflow-x:auto}.sp-tablewrap.is-cont{margin-top:-20px}.sp-table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:13.5px;line-height:1.5}.sp-table caption{caption-side:top;text-align:left;color:var(--ink-2);padding:0 0 12px;font-size:13.5px;line-height:1.5}.sp-table th,.sp-table td{vertical-align:top;text-align:left;border-bottom:1px solid var(--line);color:var(--ink-2);overflow-wrap:normal;padding:9px 14px 9px 0;font-weight:400}.sp-table thead th{border-bottom-color:var(--line-strong);color:var(--muted);white-space:nowrap;padding-bottom:8px;font-size:12px;font-weight:500}.sp-table tbody th{color:var(--ink);font-weight:500}.sp-table .is-sub{color:var(--ink-2);padding-left:16px;font-weight:400}.sp-table code{font-family:var(--font-mono);color:var(--ink);white-space:nowrap;font-size:12.5px}.sp-table strong{font-weight:600}.sp-table.is-wide th,.sp-table.is-wide td{min-width:6em}.sp-table .is-tok{white-space:nowrap}.sp-table td.is-long{min-width:22em}.sp-table.is-wide tbody th,.sp-table.is-wide thead th:first-child{z-index:1;background:var(--surface);position:sticky;left:0}.sp-table.is-wide tbody th{white-space:nowrap}.sp-fig{margin:28px 0 36px}.sp-chartbox{border-block:1px solid var(--line);padding:16px 0 4px}.sp-chart{width:100%;aspect-ratio:var(--sp-ar-d,2.4);position:relative}.sp-chart svg{width:100%;height:100%;font-family:var(--font-sans);font-variant-numeric:tabular-nums;display:block;overflow:visible}.sp-legend{flex-wrap:wrap;gap:6px 18px;margin:12px 0 10px;padding:0;list-style:none;display:flex}.sp-article .sp-legend li{color:var(--ink-2);align-items:center;gap:8px;margin:0;font-size:12.5px;line-height:1.4;display:flex}.sp-sw{background:var(--c);border-radius:2px;flex:none;width:10px;height:10px}.sp-sw--line{border-radius:2px;width:16px;height:2px}.sp-sw--dash{background:repeating-linear-gradient(90deg, var(--c) 0 5px, transparent 5px 8px);border-radius:0;width:18px;height:2px}.sp-sw--mark{border-left:5px solid #0000;border-right:5px solid #0000;border-top:8px solid var(--c);background:0 0;border-radius:0;width:0;height:0}.sp-fig figcaption{color:var(--muted);margin-top:12px;font-size:13.5px;line-height:1.55}.sp-fignote{color:var(--muted);margin-top:6px;font-size:13px;display:block}.sp-gridline{stroke:var(--line);stroke-width:1px}.sp-tx{fill:var(--muted);font-size:12px}.sp-tx-s{fill:var(--ink);font-size:12px;font-weight:500}.sp-tx-m{fill:var(--faint);font-size:12px}.sp-tx-w{fill:var(--on-ink);font-size:12px;font-weight:500}.sp-line{fill:none;stroke-width:2px;stroke-linejoin:round;stroke-linecap:round}.sp-line--dash{stroke-dasharray:4 4;stroke-width:1.5px}.sp-dot{stroke:var(--surface);stroke-width:2px}.sp-band{fill:var(--sp-band)}.sp-band--warm{fill:var(--sp-band-warm)}.sp-f-T0{fill:var(--sp-T0)}.sp-f-T1{fill:var(--sp-T1)}.sp-f-P{fill:var(--sp-P)}.sp-f-exact{fill:var(--sp-exact)}.sp-f-wrong{fill:var(--sp-wrong)}.sp-f-spirit{fill:var(--sp-spirit)}.sp-f-missed{fill:var(--sp-missed)}.sp-f-violated{fill:var(--sp-violated)}.sp-f-mcp{fill:var(--sp-mcp)}.sp-f-sec{fill:var(--sp-sec)}.sp-f-warning{fill:var(--sp-warning)}.sp-f-info{fill:var(--sp-info)}.sp-f-error{fill:var(--sp-error)}.sp-f-real{fill:var(--sp-real)}.sp-f-policy{fill:var(--sp-policy)}.sp-f-fp{fill:var(--sp-fp)}.sp-f-unguarded{fill:var(--sp-unguarded)}.sp-f-logic{fill:var(--sp-logic)}.sp-f-security{fill:var(--sp-security)}.sp-f-file{fill:var(--sp-file)}.sp-f-tokens{fill:var(--sp-tokens)}.sp-f-licence{fill:var(--sp-licence)}.sp-f-d5{fill:var(--sp-d5)}.sp-f-d20{fill:var(--sp-d20)}.sp-f-d100{fill:var(--sp-d100)}.sp-f-ink{fill:var(--sp-ink)}.sp-s-T0{stroke:var(--sp-T0)}.sp-s-T1{stroke:var(--sp-T1)}.sp-s-P{stroke:var(--sp-P)}.sp-s-violated{stroke:var(--sp-violated)}.sp-s-d5{stroke:var(--sp-d5)}.sp-s-d20{stroke:var(--sp-d20)}.sp-s-d100{stroke:var(--sp-d100)}.sp-s-ink{stroke:var(--sp-ink)}@keyframes sp-rise{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@keyframes sp-grow-y{0%{transform:scaleY(0)}to{transform:scaleY(1)}}@keyframes sp-grow-x{0%{transform:scaleX(0)}to{transform:scaleX(1)}}.sp-a{animation:sp-rise .24s var(--ease) both}.sp-a-bar{transform-box:fill-box;transform-origin:50% 100%;animation:sp-grow-y .4s var(--ease) both}.sp-a-hbar{transform-box:fill-box;transform-origin:0;animation:sp-grow-x .4s var(--ease) both}.sp-chartbox.is-grid{padding:18px 0 8px}.sp-grid{font-variant-numeric:tabular-nums;grid-template-columns:minmax(0,1fr);gap:18px 28px;font-size:12px;display:grid}@media (min-width:640px){.sp-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}}.sp-gridrow{grid-template-columns:96px repeat(3,minmax(0,1fr));gap:2px;height:16px;margin-top:2px;display:grid;position:relative}.sp-gridrow.is-newtask{margin-top:6px}.sp-gridrow.is-phase2{margin-top:26px}.sp-gridrow.is-phase2:before{content:"";background:var(--mint);height:2px;position:absolute;top:-6px;left:0;right:0}.sp-gridphase{color:var(--mint);font-size:12px;font-weight:500;position:absolute;top:-24px;left:0}.sp-gridrow--head{height:auto;margin:0 0 6px}.sp-gridarm{text-align:center;color:var(--ink-2);font-size:12px;font-weight:500}.sp-gridlabel{white-space:nowrap;text-overflow:ellipsis;color:var(--muted);padding-right:6px;line-height:16px;overflow:hidden}.sp-gridtask{color:var(--ink);font-weight:500}.sp-cell{text-align:center;color:var(--on-ink);background:var(--sp-na);border-radius:2px;font-size:12px;line-height:16px;display:block}.sp-cell--exact{background:var(--sp-exact)}.sp-cell--wrong{background:var(--sp-wrong)}.sp-cell--spirit{background:var(--sp-spirit)}.sp-cell--missed{background:var(--sp-missed)}.sp-cell--violated{background:var(--sp-violated)}.sp-cell--n_a{background:var(--sp-na)}.sp-cell:hover{outline:1px solid var(--ink);outline-offset:-1px}@media (max-width:1099px){.sp-toc{display:none}.sp-toc-m{top:var(--nav-h);z-index:12;background:var(--surface);border-bottom:1px solid var(--line);margin:0 0 24px;display:block;position:sticky}.sp-toc-m summary{cursor:pointer;min-height:44px;color:var(--ink);justify-content:space-between;align-items:center;padding:10px 0;font-size:14px;font-weight:500;list-style:none;display:flex}.sp-toc-m summary::-webkit-details-marker{display:none}.sp-toc-m summary:after{content:"+";color:var(--muted);font-size:18px;font-weight:400}.sp-toc-m[open] summary:after{content:"−"}.sp-toc-m ol{max-height:60vh;padding:0 0 12px;font-size:14px;line-height:1.4;overflow-y:auto}.sp-toc-m li.l2{padding-left:14px}.sp-toc-m a{color:var(--muted);padding:8px 0;text-decoration:none;display:block}.sp-toc-m li.l1>a{color:var(--ink-2)}.sp-toc-m a.is-active{color:var(--ink)}.sp-h1,.sp-h2{scroll-margin-top:calc(var(--nav-h) + 64px)}}@media (max-width:720px){.sp-chart{aspect-ratio:var(--sp-ar-m,1.4)}.sp-gridrow{grid-template-columns:88px repeat(3,minmax(0,1fr))}}@media (max-width:560px){.sp-article p,.sp-article li,.sp-abstract p{font-size:16px}.sp-h1{margin-top:52px;font-size:22px}}@media (prefers-reduced-motion:reduce){.sp-a,.sp-a-bar,.sp-a-hbar{animation:none}.sp-toc a,.sp-toc a:before{transition:none}}
