@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,ol,ul{margin:0}ol[role=list],ul[role=list]{padding:0;list-style:none}img,svg,video{max-width:100%;display:block}input,button,textarea,select{font:inherit;color:inherit}button{cursor:pointer}@media not print{[hidden]{display:none!important}}}@layer tokens{:root{color-scheme:light dark;--bg:light-dark(#fff,#101214);--bg-2:light-dark(#f6f7f9,#15171a);--surface:light-dark(#f6f7f9,#1b1d21);--paper:light-dark(#fff,#1b1d21);--raised:light-dark(#fff,#22252a);--ink:light-dark(#1f2329,#e2e4e9);--ink-2:light-dark(#4b5059,#b3b8c1);--muted:light-dark(#636873,#9aa0aa);--line:light-dark(#e1e3e8,#2c3036);--line-strong:light-dark(#7d818a,#7e8590);--neutral:light-dark(#0515240f,#ceced912);--neutral-hover:light-dark(#0b120e1f,#e3e4f21f);--brand:light-dark(#1868db,#669df1);--brand-hover:light-dark(#1558bc,#8fb8f6);--brand-ink:light-dark(#1558bc,#8fb8f6);--brand-soft:light-dark(#e9f2fe,#16233a);--on-brand:light-dark(#fff,#101214);--link:light-dark(#1868db,#79a9f3);--focus:light-dark(#1868db,#8fb8f6);--rovo-blue:#1868db;--rovo-purple:#af59e1;--rovo-yellow:#fca700;--rovo-green:#6a9a23;--grad-ai:linear-gradient(115deg, #1868db 0%, #af59e1 38%, #fca700 70%, #6a9a23 100%);--grad-ai-soft:linear-gradient(115deg, #1868db1f, #af59e11f 40%, #fca7001f 70%, #6a9a231f);--glow:0 0 0 1px #af59e133, 0 12px 40px -14px #1868db59;--browser-fill:light-dark(#e9f2fe,#16233a);--browser-line:light-dark(#1868db,#669df1);--browser:light-dark(#1558bc,#8fb8f6);--cloud-fill:light-dark(#f8eefe,#2a1f33);--cloud-line:light-dark(#af59e1,#c97cf4);--cloud:light-dark(#803fa5,#d8a0f7);--manifest-fill:light-dark(#fff7d6,#2e2715);--manifest-line:light-dark(#a46a00,#fca700);--manifest:light-dark(#7a5300,#fbc828);--laptop-fill:light-dark(#eeedfe,#211f3d);--laptop-line:light-dark(#625df5,#8f8bf7);--laptop:light-dark(#4a45c9,#b6b3fa);--outside-fill:light-dark(#fff1e0,#33241a);--outside-line:light-dark(#c45f00,#fb9700);--outside:light-dark(#9e4c00,#fdb35c);--product-fill:light-dark(#f1f2f4,#22252a);--product-line:light-dark(#7d818a,#8a909a);--product:light-dark(#4b5059,#b3b8c1);--kv:light-dark(#6a9a23,#94c748);--kv-soft:light-dark(#f2fbe4,#1f2914);--kv-ink:light-dark(#476b14,#b3df72);--info:light-dark(#1558bc,#8fb8f6);--info-soft:light-dark(#e9f2fe,#16233a);--ok:light-dark(#476b14,#b3df72);--ok-bold:light-dark(#5b7f24,#94c748);--ok-soft:light-dark(#f2fbe4,#1f2914);--bad:light-dark(#ae2e24,#fd9891);--bad-soft:light-dark(#ffeceb,#3a1f1d);--warn:light-dark(#9e4c00,#fdb35c);--warn-soft:light-dark(#fff5db,#33281a);--discovery:light-dark(#803fa5,#d8a0f7);--discovery-soft:light-dark(#f8eefe,#2a1f33);--code-bg:#14161a;--code-bg-2:#1b1e23;--code-ink:#e2e4e9;--code-dim:#a3a9b3;--code-line:#ffffff1f;--code-prompt:#8fb8f6;--code-ok:#b3df72;--code-err:#fd9891;--code-warn:#fbc828;--code-hl:#fca70024;--code-hl-bar:#fca700;--diff-add:#6a9a2333;--diff-add-bar:#94c748;--diff-add-ink:#c6ec8f;--diff-del:#e2483d2e;--diff-del-bar:#f87168;--diff-del-ink:#ffb3ad;--shiki-foreground:#e2e4e9;--shiki-background:transparent;--shiki-token-constant:#fbd779;--shiki-token-string:#b3df72;--shiki-token-string-expression:#b3df72;--shiki-token-comment:#a3a9b3;--shiki-token-keyword:#e3a6f7;--shiki-token-parameter:#f9b6dd;--shiki-token-function:#8fb8f6;--shiki-token-punctuation:#c6cad2;--shiki-token-link:#8fb8f6;--shadow-raised:0 1px 2px light-dark(#1e1f2124,#00000080), 0 0 1px light-dark(#1e1f214f,#000000a0);--shadow-overlay:0 12px 32px -8px light-dark(#1e1f2140,#000000b3), 0 0 1px light-dark(#1e1f214f,#000000a0);--font-body:"Atlassian Sans", ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Ubuntu, "Helvetica Neue", sans-serif;--font-display:var(--font-body);--font-mono:"Atlassian Mono", ui-monospace, Menlo, "Segoe UI Mono", "Ubuntu Mono", monospace;--weight-heading:653;--step--2:.75rem;--step--1:.875rem;--step-0:.875rem;--step-read:1rem;--step-1:1rem;--step-2:1.25rem;--step-3:1.5rem;--step-4:1.75rem;--step-5:2rem;--step-hero:clamp(2.25rem, 1.6rem + 2.4vw, 3.5rem);--measure:70ch;--s-1:.25rem;--s-2:.5rem;--s-3:.75rem;--s-4:1rem;--s-5:1.5rem;--s-6:2rem;--s-7:3rem;--s-8:4.5rem;--s-9:6rem;--r-1:.25rem;--r-2:.5rem;--r-3:.75rem;--r-4:1rem;--gutter:clamp(1rem, 3vw, 2.5rem);--head-h:3.5rem;--sidebar-w:18rem;--content-max:46rem;--wide-max:90rem;--page-max:90rem;--ease:cubic-bezier(.2, .7, .2, 1);--dur:.2s}:root[data-theme=light]{color-scheme:light}:root[data-theme=dark]{color-scheme:dark}}@layer base{html{background:var(--bg);color:var(--ink);font-family:var(--font-body);-webkit-font-smoothing:antialiased;scroll-padding-top:calc(var(--head-h) + 1rem);font-size:100%;line-height:1.4286}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}body{background:var(--bg);min-height:100vh;font-size:var(--step-0);overflow-x:clip}h1,h2,h3,h4{font-family:var(--font-display);text-wrap:balance;line-height:1.2;font-weight:var(--weight-heading);letter-spacing:0;color:var(--ink)}h1{font-size:var(--step-4);line-height:1.143}h2{font-size:var(--step-3);line-height:1.167}h3{font-size:var(--step-2)}h4{font-size:var(--step-1);line-height:1.25}p,li,dd{text-wrap:pretty}a{color:var(--link);text-underline-offset:.18em;text-decoration-thickness:1px}a:hover{text-decoration-thickness:2px}code,kbd,samp,pre{font-family:var(--font-mono);font-variant-ligatures:none;font-size:.88em}:not(pre)>code{background:var(--neutral);border-radius:var(--r-1);overflow-wrap:anywhere;padding:.06em .3em}kbd{border:1px solid var(--line-strong);border-radius:var(--r-2);background:var(--surface);border-bottom-width:2px;padding:0 .35em;font-size:.82em}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}::selection{background:var(--brand-soft);color:var(--ink)}hr{border:0;border-top:1px solid var(--line);margin:var(--s-6) 0}table{border-collapse:collapse}.tnum{font-variant-numeric:tabular-nums}}@layer layout{.topbar{z-index:50;align-items:center;gap:var(--s-2);height:var(--head-h);padding-inline:var(--s-3) var(--gutter);background:color-mix(in srgb, var(--bg) 88%, transparent);backdrop-filter:saturate(1.4)blur(10px);border-bottom:1px solid var(--line);display:flex;position:sticky;top:0}.topbar:after{content:"";background:var(--grad-ai);opacity:.55;height:1px;position:absolute;inset:auto 0 -1px}.topbar__tools{align-items:center;gap:var(--s-1);margin-left:auto;display:flex}.brand{font-weight:var(--weight-heading);color:var(--ink);white-space:nowrap;border-radius:var(--r-2);align-items:center;gap:.55rem;padding:.25rem .4rem;font-size:1rem;text-decoration:none;display:inline-flex}.brand svg{width:26px;height:26px}.icon-btn{border-radius:var(--r-2);width:2.25rem;height:2.25rem;color:var(--ink-2);background:0 0;border:0;place-items:center;display:inline-grid}.icon-btn:hover{background:var(--neutral-hover);color:var(--ink)}.icon-btn svg{width:18px;height:18px}.search-btn{align-items:center;gap:var(--s-2);border:1px solid var(--line);border-radius:var(--r-2);background:var(--surface);min-width:13rem;height:2.25rem;color:var(--muted);font-size:var(--step--1);padding:0 .6rem 0 .7rem;display:inline-flex}.search-btn:hover{border-color:var(--line-strong);color:var(--ink-2)}.search-btn svg{width:16px;height:16px}.search-btn kbd{margin-left:auto}@media (width<=40rem){.search-btn{background:0 0;border:0;justify-content:center;width:2.25rem;min-width:0;padding:0}.search-btn .search-btn__text,.search-btn kbd{display:none}}.shell{min-height:calc(100vh - var(--head-h));grid-template-columns:minmax(0,1fr);display:grid}.shell__main{flex-direction:column;min-width:0;display:flex}.shell__main>main{flex:1}.sidebar{background:var(--bg-2);border-right:1px solid var(--line);font-size:var(--step--1)}.sidebar__inner{padding:var(--s-4) var(--s-3) var(--s-6);gap:var(--s-4);display:grid}.sidebar__close{display:none}@media (width>=64rem){.shell{grid-template-columns:var(--sidebar-w) minmax(0, 1fr)}.sidebar{top:var(--head-h);height:calc(100vh - var(--head-h));overscroll-behavior:contain;scrollbar-width:thin;position:sticky;overflow-y:auto}html[data-sidebar=hidden] .shell{grid-template-columns:minmax(0,1fr)}html[data-sidebar=hidden] .sidebar{display:none}}@media (width<=63.99rem){html.js .sidebar{z-index:60;overscroll-behavior:contain;visibility:hidden;width:min(20rem,88vw);transition:transform var(--dur) var(--ease), visibility 0s linear var(--dur);box-shadow:var(--shadow-overlay);position:fixed;inset:0 auto 0 0;overflow-y:auto;transform:translate(-102%)}html.js[data-drawer=open] .sidebar{visibility:visible;transition:transform var(--dur) var(--ease);transform:none}html.js .sidebar__close{justify-self:end;display:inline-grid}html:not(.js) .sidebar{border-right:0;border-top:1px solid var(--line);order:2}}.scrim{z-index:55;background:#0b0d1080;position:fixed;inset:0}@media (prefers-reduced-motion:reduce){.sidebar{transition:none!important}}.page,.wrap{width:100%;max-width:var(--wide-max);padding-inline:var(--gutter);margin-inline:auto}.readable{max-width:var(--content-max)}.site-foot{content-visibility:auto;contain-intrinsic-size:auto 12rem;margin-top:var(--s-8);border-top:1px solid var(--line);padding-block:var(--s-5) var(--s-6);font-size:var(--step--1);color:var(--ink-2)}.site-foot__row{gap:var(--s-3) var(--s-6);flex-wrap:wrap;justify-content:space-between;align-items:baseline;display:flex}.site-foot__fine{margin-top:var(--s-3);color:var(--muted);max-width:90ch}.site-foot__fine a{color:inherit}.credit{color:var(--ink);align-items:center;gap:.35em;display:inline-flex}.credit a{color:var(--ink);font-weight:600}.heart{vertical-align:-.15em;width:1.05em;height:1.05em;display:inline-block}.page-head{padding-block:var(--s-7) var(--s-5);max-width:52rem}.page-head .lede{margin-top:var(--s-3)}.lede{font-size:var(--step-1);color:var(--ink-2);max-width:62ch;line-height:1.55}.section{padding-block:var(--s-7) 0}.section>h2,.lesson{padding-block:var(--s-5) 0}.lesson__main{min-width:0}.prose{font-size:var(--step-read);line-height:1.6}.prose>*+*{margin-top:var(--s-4)}.prose :where(p,li,dd,blockquote){max-width:var(--measure)}.prose :where(h2){margin-top:var(--s-7);margin-bottom:var(--s-3);font-size:var(--step-3)}.prose :where(h3){margin-top:var(--s-6);font-size:var(--step-1)}.prose :where(ul,ol){padding-left:1.3em}.prose :where(li+li){margin-top:.35em}.prose :where(strong,b){font-weight:700}}@layer components{.btn{border-radius:var(--r-2);background:var(--neutral);min-height:2.25rem;color:var(--ink);font-weight:600;font-size:var(--step--1);transition:background var(--dur) var(--ease), border-color var(--dur) var(--ease);border:0;justify-content:center;align-items:center;gap:.45em;padding:.4rem .85rem;line-height:1.2;text-decoration:none;display:inline-flex}.btn:hover{background:var(--neutral-hover)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn--primary,.btn--primary:hover,.btn--quiet{color:var(--ink-2);background:0 0;border-color:#0000}.btn--ai{background:var(--brand);color:var(--on-brand);min-height:2.75rem;font-size:var(--step-1);border-radius:var(--r-3);box-shadow:var(--glow);padding:.55rem 1.25rem;position:relative}.btn--ai:before{content:"";border-radius:calc(var(--r-3) + 2px);background:var(--grad-ai);-webkit-mask-composite:xor;pointer-events:none;padding:2px;position:absolute;inset:-2px;-webkit-mask-image:linear-gradient(#000 0 0),linear-gradient(#000 0 0);-webkit-mask-position:0 0,0 0;-webkit-mask-size:auto,auto;-webkit-mask-repeat:repeat,repeat;-webkit-mask-clip:content-box,border-box;-webkit-mask-origin:content-box,border-box;mask-composite:exclude;mask-mode:match-source,match-source}.btn--ai:hover{background:var(--brand-hover)}.btn--small{min-height:2rem;padding:.25rem .6rem;font-size:.8rem}.seg{flex-wrap:wrap;gap:4px;display:inline-flex}.seg button{background:var(--neutral);border-radius:var(--r-1);min-height:2rem;font-weight:500;font-size:var(--step--1);color:var(--ink-2);border:0;padding:.35rem .7rem}.seg button[aria-pressed=true]{background:var(--brand-soft);color:var(--brand-ink);box-shadow:inset 0 0 0 1px var(--brand)}.seg button:not([aria-pressed=true]):hover{background:var(--neutral-hover)}.switch{cursor:pointer;grid-template-columns:auto 1fr auto;align-items:start;gap:.7rem;padding:.6rem 0;display:grid}.switch input,.nav-switch input{appearance:none;background:var(--line-strong);cursor:pointer;width:2.4rem;height:1.35rem;transition:background var(--dur) var(--ease);border-radius:999px;flex:none;margin:.15rem 0 0;position:relative}.switch input:after,.nav-switch input:after{content:"";width:calc(1.35rem - 6px);height:calc(1.35rem - 6px);transition:transform var(--dur) var(--ease);background:#fff;border-radius:50%;position:absolute;top:3px;left:3px}.switch input:checked,.nav-switch input:checked{background:var(--ok-bold)}.switch input:checked:after,.nav-switch input:checked:after{transform:translate(1.05rem)}.switch__label{font-weight:700;font-size:var(--step--1);line-height:1.35}.switch__label small{color:var(--muted);margin-top:.15rem;font-size:.82rem;font-weight:400;display:block}.chip{font-family:var(--font-mono);color:var(--z,var(--ink-2));border-radius:var(--r-1);background:color-mix(in srgb, var(--z,var(--ink-2)) 12%, var(--paper));white-space:nowrap;border:0;align-items:center;gap:.35em;padding:.1rem .4rem;font-size:.72rem;font-weight:600;display:inline-flex}.who{font-family:var(--font-body);text-transform:uppercase;letter-spacing:.03em;border-radius:var(--r-1);white-space:nowrap;padding:.1rem .45rem;font-size:.6875rem;font-weight:700}.panel{background:var(--bg);border:1px solid var(--line);border-radius:var(--r-3)}.sim-label{font-family:var(--font-body);letter-spacing:.03em;text-transform:uppercase;color:var(--warn);background:var(--warn-soft);border-radius:var(--r-1);align-items:center;gap:.35em;padding:.1rem .4rem;font-size:.6875rem;font-weight:700;display:inline-flex}.stub{border:1px solid var(--code-line);border-radius:var(--r-3);background:var(--code-bg);color:var(--code-ink);max-width:100%;overflow:hidden}.stub__head{border-bottom:1px solid var(--code-line);background:var(--code-bg-2);font-family:var(--font-mono);color:var(--code-dim);align-items:center;gap:.6rem;min-width:0;padding:.4rem .45rem .4rem .85rem;font-size:.74rem;display:flex}.stub__kind{font-family:var(--font-body);text-transform:uppercase;letter-spacing:.03em;flex:none;font-size:.6875rem;font-weight:700}.stub__file{color:var(--code-ink);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:600;overflow:hidden;background:0 0!important;padding:0!important}.stub__copy{border-radius:var(--r-2);font-family:var(--font-body);min-height:1.9rem;color:var(--code-ink);background:#ffffff14;border:0;flex:none;margin-left:auto;padding:.25rem .6rem;font-size:.75rem;font-weight:600}.stub__copy:hover{background:#ffffff29}.stub__copy[data-state=done]{color:#c6ec8f;background:#6a9a2333}.stub pre{tab-size:2;margin:0;padding:.85rem 0;font-size:.84rem;line-height:1.6;overflow-x:auto;background:0 0!important}.stub pre code{min-width:max-content;font-size:inherit;background:0 0;padding:0;display:block}.stub .line{width:100%;min-height:1.6em;padding-inline:.95rem 1.2rem;display:inline-block}.stub .line.hl{background:var(--code-hl);box-shadow:inset 3px 0 0 var(--code-hl-bar)}.stub--terminal{background:var(--code-bg);border-color:var(--code-line)}.stub--terminal .stub__head{border-bottom-color:var(--code-line);color:var(--code-dim)}.stub--terminal .stub__file{color:var(--code-ink)}.stub--terminal .stub__copy{color:var(--code-ink);background:#a1bdd914}.stub--terminal .stub__copy:hover{background:#a6c5e229}.stub--terminal pre{--shiki-token-function:var(--code-prompt);--shiki-token-string:var(--code-ink);color:var(--code-ink)}.stub--terminal .line:before{content:"$ ";color:var(--code-dim);user-select:none}.kv{background:var(--kv-soft);border-radius:var(--r-1);max-width:var(--measure);font-size:var(--step--1);border-left:0;grid-template-columns:auto 1fr;align-items:start;gap:.65rem;padding:.7rem .9rem;line-height:1.5;display:grid}.kv svg{width:20px;height:20px;color:var(--kv);margin-top:.05rem}.kv__label{color:var(--kv-ink);font-weight:600}.example{border:1px dashed var(--line-strong);border-radius:var(--r-3);padding:var(--s-3) var(--s-4) var(--s-4);background:var(--surface)}.example__head{align-items:center;gap:var(--s-2) var(--s-3);margin-bottom:var(--s-3);flex-wrap:wrap;display:flex}.example__title{font-weight:700;font-size:var(--step--1)}.example>:not(.example__head)+*{margin-top:var(--s-3)}.example pre.out{background:var(--code-bg);color:var(--code-ink);border-radius:var(--r-2);margin:0;padding:.8rem 1rem;font-size:.8rem;line-height:1.6;overflow-x:auto}.example pre.out .p{color:var(--code-prompt)}.example pre.out .ok{color:var(--code-ok)}.example pre.out .e{color:var(--code-err)}.example pre.out .d{color:var(--code-dim)}.mock-panel{border:1px solid var(--line);border-radius:var(--r-2);background:var(--surface);overflow-wrap:anywhere;max-width:26rem;padding:.8rem 1rem;font-family:system-ui,-apple-system,Segoe UI,sans-serif;font-size:.92rem}.mock-panel__title{color:var(--muted);margin-bottom:.4rem;font-size:.8rem;font-weight:700}.mock-panel p+p{margin-top:.25rem}.mock-lozenge{background:var(--neutral);color:var(--ink-2);text-transform:uppercase;vertical-align:.1em;border-radius:3px;margin-left:.4rem;padding:0 .35rem;font-size:.72rem;font-weight:700;display:inline-block}.mock-panel ul{margin:.2rem 0 0;padding-left:1.2rem}.continue{border:1px solid var(--line);border-left:4px solid var(--brand);background:var(--paper);border-radius:var(--r-1);gap:.25rem;max-width:30rem;padding:.75rem 1rem;display:grid}.continue a{color:var(--ink);align-items:center;gap:.4rem;font-weight:700;display:inline-flex}.continue svg{width:16px;height:16px}.nav-group__head{align-items:center;gap:.25rem;display:flex}.nav-group__link{border-radius:var(--r-2);min-height:2rem;color:var(--ink);font-weight:var(--weight-heading);flex:1;align-items:center;gap:.5rem;padding:.2rem .5rem;text-decoration:none;display:flex}.nav-group__link:hover{background:var(--neutral)}.nav-group__link[aria-current=page]{background:var(--brand-soft);color:var(--brand-ink)}.nav-group__tag{font-family:var(--font-mono);letter-spacing:.05em;text-transform:uppercase;color:var(--ink-2);border:1px solid var(--line);border-radius:999px;padding:.05rem .45rem;font-size:.66rem;font-weight:600}.nav-optional{font-family:var(--font-mono);letter-spacing:.05em;text-transform:uppercase;color:var(--muted);margin-left:auto;font-size:.62rem}.nav-group__count{font-family:var(--font-mono);color:var(--muted);font-variant-numeric:tabular-nums;font-size:.7rem}.nav-group__toggle{border-radius:var(--r-1);width:1.75rem;height:1.75rem;color:var(--ink-2);background:0 0;border:0;place-items:center;display:inline-grid}.nav-group__toggle:hover{background:var(--neutral-hover)}.nav-group__toggle svg{width:15px;height:15px;transition:transform var(--dur) var(--ease)}.nav-group__toggle[aria-expanded=true] svg{transform:rotate(90deg)}html:not(.js) .nav-group__toggle,html.js .nav-group:not([data-open])>.nav-list{display:none}.nav-list{gap:1px;margin-top:.15rem;display:grid}.nav-list>li>a{border-radius:var(--r-2);color:var(--ink-2);align-items:flex-start;gap:.55rem;padding:.4rem .5rem .4rem .6rem;line-height:1.35;text-decoration:none;display:flex}.nav-list>li>a:hover{background:var(--neutral);color:var(--ink)}.nav-list>li>a[aria-current=page]{background:var(--paper);color:var(--ink);box-shadow:inset 2px 0 0 var(--brand), var(--shadow-raised);font-weight:600}.nav-mark{border:1.5px solid var(--line-strong);background:0 0;border-radius:50%;flex:none;width:.85rem;height:.85rem;margin-top:.15rem}[data-status=started]>a .nav-mark{border-color:var(--brand);background:conic-gradient(var(--brand) 0 50%, transparent 50% 100%)}[data-status=done]>a .nav-mark{border-color:var(--ok-bold);background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='m3 6.2 2 2L9 4' fill='none' stroke='white' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / 100% no-repeat, var(--ok-bold)}.nav-steps{border-left:1px solid var(--line);gap:1px;margin:.2rem 0 .4rem 1.05rem;padding-left:.6rem;display:grid}.nav-steps a{border-radius:var(--r-1);color:var(--ink-2);gap:.5rem;padding:.25rem .4rem;font-size:.8rem;line-height:1.35;text-decoration:none;display:flex}.nav-steps a:hover{background:var(--neutral)}.nav-step__n{font-family:var(--font-mono);min-width:1.1rem;color:var(--muted);flex:none;padding-top:.05rem;font-size:.7rem}.nav-steps [data-state=done] .nav-step__n{color:var(--ok)}.nav-steps [data-state=current] a{color:var(--ink);font-weight:600}.nav-steps [data-state=current] .nav-step__n{color:var(--brand-ink)}.nav-steps [data-state=locked] a{color:var(--muted)}.nav-foot{gap:var(--s-2);padding-top:var(--s-3);border-top:1px solid var(--line);display:grid}.nav-faq{border-radius:var(--r-2);color:var(--ink);align-items:center;gap:.5rem;padding:.4rem .5rem;font-weight:600;text-decoration:none;display:flex}.nav-faq:hover{background:var(--neutral)}.nav-faq[aria-current=page]{background:var(--brand-soft);color:var(--brand-ink)}.nav-faq svg{width:16px;height:16px}.nav-switch{color:var(--ink-2);cursor:pointer;align-items:center;gap:.55rem;padding:.35rem .5rem;display:flex}.nav-foot .btn{justify-self:start}.nav-foot .btn svg{width:16px;height:16px}.nojs-menu{display:none}@media (width<=63.99rem){html:not(.js) .nojs-menu{font-size:var(--step--1);display:inline}}html:not(.js) .sidebar-toggle{display:none}.step{--num:2.25rem;padding:0 0 var(--s-6) 0;max-width:none;position:relative;margin:0!important}.step+.step{margin-top:0!important}.step:not([data-state=locked]){content-visibility:auto;contain-intrinsic-size:auto 40rem;overflow-clip-margin:1.25rem}.step:before{content:"";left:calc(var(--num) / 2 - 1px);top:calc(var(--num) + .35rem);background:var(--line);border-radius:2px;width:2px;position:absolute;bottom:.35rem}.step:last-of-type:before{display:none}.step[data-state=done]:before{background:var(--ok-bold);opacity:.55}.step__head{grid-template-columns:var(--num) minmax(0, 1fr) auto;align-items:center;gap:var(--s-3);display:grid}.step__n{width:var(--num);height:var(--num);background:var(--paper);border:1.5px solid var(--line-strong);font-family:var(--font-mono);color:var(--ink-2);border-radius:50%;place-items:center;font-size:.85rem;font-weight:600;display:grid;position:relative}.step__n svg{width:16px;height:16px;display:none}.step[data-state=current] .step__n{color:var(--brand-ink);background:linear-gradient(var(--paper), var(--paper)) padding-box, var(--grad-ai) border-box;box-shadow:var(--glow);border:2px solid #0000}.step[data-state=done] .step__n{background:var(--ok-bold);border-color:var(--ok-bold);color:#fff}.step[data-state=done] .step__num,.step[data-state=locked] .step__num{display:none}.step[data-state=done] .step__tick,.step[data-state=locked] .step__lock{display:block}.step[data-state=locked] .step__n{background:var(--surface);color:var(--muted);border-style:dashed}.step__title{font-size:var(--step-2);line-height:1.3;margin:0!important}.step[data-state=locked] .step__title{color:var(--muted);font-weight:600}.step__file code{background:var(--neutral);border-radius:var(--r-1);color:var(--ink-2);padding:.15rem .45rem;font-size:.75rem}.step__body,.step__locked,.step__banner{margin-left:calc(var(--num) + var(--s-3))}.step__body{margin-top:var(--s-3)}.step__body>*+*{margin-top:var(--s-4)}.step__locked{font-size:var(--step--1);color:var(--muted);margin-top:.2rem}.step__banner{margin-top:var(--s-3);align-items:center;gap:var(--s-3);padding:var(--s-3) var(--s-4);border-radius:var(--r-2);background:var(--info-soft);color:var(--info);font-size:var(--step--1);flex-wrap:wrap;display:flex}.step__help{font-size:var(--step--1);color:var(--ink-2);flex-wrap:wrap;align-items:center;gap:.35rem;display:flex}.step__help svg{width:16px;height:16px}.step__check label{padding:var(--s-3) var(--s-4);border:1.5px dashed var(--line-strong);border-radius:var(--r-3);background:var(--surface);font-size:var(--step-0);cursor:pointer;max-width:var(--content-max);align-items:flex-start;gap:.7rem;font-weight:600;display:flex}.step__check label:hover{border-color:var(--brand)}.step__check input{width:1.5rem;height:1.5rem;accent-color:var(--ok-bold);cursor:pointer;flex:none;margin:0}.step[data-state=done] .step__check label{border-style:solid;border-color:var(--ok-bold);background:var(--ok-soft);color:var(--ok)}.step__next{font-size:var(--step--1);font-weight:600}html:not(.js) .step__check{display:none}.scrolly{margin-block:var(--s-7)}.scrolly__title{margin-bottom:var(--s-4)}.scrolly__grid{gap:var(--s-4);display:grid}.scrolly__stage{z-index:6}html.js .scrolly__stage{top:calc(var(--head-h) + var(--s-2));position:sticky}.scrolly .amap{padding:var(--s-3);background:var(--paper)}.scrolly .arch{max-height:min(56vh,34rem);margin-inline:auto;min-width:0!important}.scrolly .amap__info,.scrolly .amap__caption{display:none}.scrolly__scenes{z-index:5;justify-items:center;gap:34vh;padding-block:4vh 28vh;display:grid;position:relative}.scene{width:min(100%,40rem)}.scene__card{padding:var(--s-4) var(--s-5);border:1px solid var(--line);border-radius:var(--r-3);background:var(--paper);box-shadow:var(--shadow-overlay);font-size:var(--step-read);transition:border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease), opacity var(--dur) var(--ease);line-height:1.6}.scene__card>*+*{margin-top:var(--s-3)}html.js .scene:not([data-active]) .scene__card{box-shadow:none;background:var(--bg-2)}.scene[data-active] .scene__card{background:linear-gradient(var(--paper), var(--paper)) padding-box, var(--grad-ai) border-box;box-shadow:var(--glow), var(--shadow-overlay);border:1.5px solid #0000}@media (height<=559px){html.js .scrolly__stage{position:static}.scrolly__scenes{gap:var(--s-4);padding-block:var(--s-4) 0}}html:not(.js) .scrolly__scenes{gap:var(--s-4);padding-block:var(--s-4) 0}.explain{border:1px solid var(--line);border-left:4px solid var(--z-line);border-radius:var(--r-3);padding:var(--s-4) var(--s-5);background:var(--paper);max-width:var(--content-max);scroll-margin-top:calc(var(--head-h) + var(--s-4))}.explain:target{box-shadow:var(--glow)}.explain__zone{font-family:var(--font-mono);letter-spacing:.05em;text-transform:uppercase;color:var(--z);align-items:center;gap:.4rem;font-size:.7rem;display:flex}.explain__zone .dot{background:var(--z-line)}.explain__title{font-size:var(--step-2)!important;margin:.25rem 0 0!important}.explain__kitchen{color:var(--kv-ink);font-weight:600}.explain__body,.explain__body>*+*{margin-top:var(--s-3)}.explain__kv{margin-top:var(--s-3);padding:var(--s-2) var(--s-3);border-radius:var(--r-2);background:var(--kv-soft);color:var(--kv-ink);font-size:var(--step--1)}.explain__kv-label{font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;margin-right:.4rem;font-size:.68rem;font-weight:700}.explain__docs{margin-top:var(--s-2);font-size:var(--step--1)}.prose a.term,a.term{color:inherit;text-decoration:underline dotted;text-decoration-color:var(--line-strong);text-underline-offset:.22em;text-decoration-thickness:2px}a.term:hover{text-decoration-color:var(--brand)}.concept-card{z-index:70;padding:var(--s-3) var(--s-4);border-radius:var(--r-3);background:var(--raised);border:1px solid var(--line);box-shadow:var(--shadow-overlay);font-size:var(--step--1);color:var(--ink-2);position:absolute}.concept-card__head{color:var(--ink);margin-bottom:.25rem}.concept-card__kitchen{color:var(--kv-ink)}.concept-card__kitchen:before{content:"· ";color:var(--muted)}html:not([data-view=kitchen]) .v-kitchen-block,html[data-view=kitchen] .v-tech-block{display:none}.lf__kitchen,.v-kitchen-block{color:var(--kv-ink)}.lf{border:1px solid var(--line);border-radius:var(--r-4);background:var(--paper);padding:var(--s-4);gap:var(--s-3);box-shadow:var(--shadow-raised);display:grid}.lf__title{font-weight:var(--weight-heading);font-size:var(--step-1);margin-bottom:var(--s-2)}.lf__nav{flex-wrap:wrap;gap:.35rem;display:flex}.lf__clue{border:1px solid var(--line);background:var(--paper);font-size:var(--step--1);color:var(--ink-2);border-radius:999px;align-items:center;gap:.4rem;padding:.3rem .65rem .3rem .3rem;display:inline-flex}.lf__clue[aria-pressed=true]{border-color:var(--brand);background:var(--brand-soft);color:var(--brand-ink);font-weight:600}.lf__n{background:var(--neutral);width:1.4rem;height:1.4rem;font-family:var(--font-mono);border-radius:50%;place-items:center;font-size:.72rem;display:inline-grid}.lf__clue[aria-pressed=true] .lf__n{background:var(--brand);color:var(--on-brand)}html:not(.js) .lf__nav{display:none}.lf__explain{gap:var(--s-2);font-size:var(--step-0);min-height:5.5em;display:grid}html.js .lf.is-ready .lf__explain>li:not([data-on]){display:none}.lf__step{color:var(--ink-2);font-size:var(--step--1)}.lf__files{gap:var(--s-3);display:grid}@media (width>=80rem){.lf__files{grid-template-columns:repeat(2,minmax(0,1fr))}}.lf__file{border-radius:var(--r-3);background:var(--code-bg);margin:0;overflow:hidden}.lf__head{justify-content:space-between;gap:var(--s-2);background:var(--code-bg-2);border-bottom:1px solid var(--code-line);color:var(--code-dim);font-size:var(--step--1);flex-wrap:wrap;padding:.5rem .8rem;display:flex}.lf__head code{color:var(--code-ink);background:0 0}.lf__role{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.05em;font-size:.7rem}.lf__role .v-kitchen{color:#b3df72}.lf__role .v-tech,.lf__role .v-kitchen{transition:none}html:not([data-view=kitchen]) .lf__role .v-kitchen,html[data-view=kitchen] .lf__role .v-tech{display:none}.lf__pre{max-height:22rem;color:var(--code-ink);margin:0;padding:.6rem 0;font-size:.8rem;line-height:1.6;overflow:auto}.lf__line{white-space:pre;padding-right:1rem;display:block}.lf__line.is-hl{background:var(--code-hl);box-shadow:inset 3px 0 0 var(--code-hl-bar)}.lf__no{text-align:right;width:2.6rem;color:var(--code-dim);user-select:none;padding-right:.8rem;display:inline-block}.diff{gap:var(--s-3);max-width:58rem;display:grid}.diff__hunk{border-radius:var(--r-3);background:var(--code-bg);border:1px solid var(--code-line);margin:0;overflow:hidden}.diff__head{background:var(--code-bg-2);border-bottom:1px solid var(--code-line);color:var(--code-dim);font-size:var(--step--1);flex-wrap:wrap;align-items:center;gap:.4rem .75rem;padding:.5rem .8rem;display:flex}.diff__kind{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.06em;color:#b3df72;font-size:.7rem;font-weight:700}.diff__file{font-weight:600;color:var(--code-ink)!important;background:0 0!important}.diff__count{font-family:var(--font-mono);font-size:.75rem}.diff__head .stub__copy{margin-left:auto}.diff__note{background:var(--code-bg-2);max-width:none;color:var(--code-ink);font-size:var(--step--1);border-bottom:1px solid var(--code-line);margin:0;padding:.5rem .9rem}.diff__notes{margin:0;padding-left:2rem}.diff__notes li+li{margin-top:.15rem}.diff__body{overflow-x:auto}.diff__table{border-collapse:collapse;width:100%;font-family:var(--font-mono);color:var(--code-ink);font-size:.8rem;line-height:1.6}.diff__no{text-align:right;width:2.6rem;color:var(--code-dim);user-select:none;vertical-align:top;padding:0 .5rem}.diff__sign{text-align:center;user-select:none;vertical-align:top;width:1.4rem;font-weight:700}.diff__code{white-space:pre;padding-right:1rem}.diff__code code{font-size:inherit;background:0 0!important;padding:0!important}.diff__line--add{background:var(--diff-add)}.diff__line--add .diff__sign{color:var(--diff-add-ink);box-shadow:inset 3px 0 0 var(--diff-add-bar)}.diff__line--del{background:var(--diff-del)}.diff__line--del .diff__sign{color:var(--diff-del-ink);box-shadow:inset 3px 0 0 var(--diff-del-bar)}.diff__line--del .diff__code{text-decoration:line-through #ffb3ad80}.diff__pager{align-items:center;gap:var(--s-2) var(--s-3);flex-wrap:wrap;display:flex}.diff__pos{font-family:var(--font-mono);font-size:var(--step--1);color:var(--ink-2)}.diff__why{font-size:var(--step--1);color:var(--ink-2)}.diff__why-label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.06em;color:var(--ink-2);font-size:.7rem;font-weight:700}.checkpoint{margin-block:var(--s-5);padding:var(--s-3) var(--s-4);border:1px solid var(--line);border-radius:var(--r-2);background:var(--surface);font-size:var(--step--1);color:var(--ink-2);align-items:center;gap:.6rem;display:flex}.checkpoint svg{flex:none;width:16px;height:16px}.search-dialog{border:1px solid var(--line-strong);border-radius:var(--r-3);background:var(--surface);width:min(42rem,100vw - 2rem);max-height:min(80vh,44rem);color:var(--ink);margin:8vh auto auto;padding:0}.search-dialog::backdrop{background:#00000073}.search-dialog__head{gap:var(--s-2);padding:var(--s-3);border-bottom:1px solid var(--line);align-items:center;display:flex}.search-dialog input[type=search]{border:1px solid var(--line-strong);background:var(--paper);border-radius:var(--r-2);min-width:0;font-size:var(--step-0);flex:1;padding:.6rem .8rem}.search-dialog__body{max-height:calc(min(80vh,44rem) - 4.5rem);padding:var(--s-2) var(--s-3) var(--s-4);overflow-y:auto}.search-results{padding:0;list-style:none}.search-results li+li{border-top:1px solid var(--line)}.search-results a{color:var(--ink);padding:.7rem .4rem;text-decoration:none;display:block}.search-results a:hover,.search-results a:focus-visible{background:color-mix(in srgb, var(--brand) 12%, transparent)}.search-results .r-title{font-weight:700}.search-results .r-meta{font-family:var(--font-body);color:var(--muted);text-transform:uppercase;letter-spacing:.03em;font-size:.7rem}.search-results .r-excerpt{font-size:var(--step--1);color:var(--ink-2);margin-top:.2rem;display:block}.search-results mark{background:var(--brand-soft);color:inherit;padding:0 .1em}.search-status{padding:var(--s-3) .4rem;color:var(--muted);font-size:var(--step--1)}}@layer utilities{.sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.muted{color:var(--muted)}.muted code{color:var(--ink-2)}.small{font-size:var(--step--1)}.eyebrow{font-family:var(--font-mono);font-size:var(--step--2);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2);font-weight:600;line-height:1rem}.stack{gap:var(--stack-gap,var(--s-4));flex-direction:column;display:flex}.cluster{gap:var(--cluster-gap,var(--s-2) var(--s-3));flex-wrap:wrap;align-items:center;display:flex}.skip-link{left:var(--s-4);z-index:100;background:var(--ink);color:var(--bg);padding:var(--s-2) var(--s-4);border-radius:var(--r-2);position:absolute;top:-10rem}.skip-link:focus{top:var(--s-2)}.z-browser{--z:var(--browser);--z-fill:var(--browser-fill);--z-line:var(--browser-line)}.z-cloud{--z:var(--cloud);--z-fill:var(--cloud-fill);--z-line:var(--cloud-line)}.z-manifest{--z:var(--manifest);--z-fill:var(--manifest-fill);--z-line:var(--manifest-line)}.z-laptop{--z:var(--laptop);--z-fill:var(--laptop-fill);--z-line:var(--laptop-line)}.z-outside{--z:var(--outside);--z-fill:var(--outside-fill);--z-line:var(--outside-line)}.z-product{--z:var(--product);--z-fill:var(--product-fill);--z-line:var(--product-line)}.dot{background:var(--z,var(--ink));border-radius:50%;flex:none;width:.62em;height:.62em;display:inline-block}}@layer print{@media print{:root{--bg:#fff;--surface:#fff;--paper:#fff;--ink:#000;--ink-2:#222;--muted:#444;--line:#bbb;color-scheme:light}html,body{color:#000;font-size:11pt;background:#fff!important}*{content-visibility:visible!important}.topbar,.sidebar,.scrim,.stub__copy,.progress-ui,.step__check,.step__locked,.step__banner,.diff__pager,.amap__player,[data-search-open],.search-dialog{display:none!important}.shell,[data-step-body][hidden],[data-hunk][hidden]{display:block!important}.step[data-state=locked] .step__title{color:#000!important}a{color:#000;text-decoration:none}.step,.explain,.stub,.diff__hunk,.faq-item,details{break-inside:avoid;box-shadow:none!important}details:not([open])>:not(summary){display:block}}}.theme-toggle[data-astro-cid-6lp36acm] svg{display:none}html:not([data-theme]) .theme-toggle[data-astro-cid-6lp36acm] .t-auto,html[data-theme=light] .theme-toggle[data-astro-cid-6lp36acm] .t-light,html[data-theme=dark] .theme-toggle[data-astro-cid-6lp36acm] .t-dark{display:block}
