From f1fa264ed7f9d8488cae18bc6f7bd40859275a10 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sat, 10 Jan 2026 21:31:06 +0000 Subject: [PATCH] fix: spec TOC --- docs/404.html | 16 +- docs/_astro/index.BpjWaW-v.css | 1 + docs/_astro/index.DViPM5fQ.css | 1 - docs/index.html | 301 +++++++++++++++++-------------- docs/spec/1.0.0-rc.1/index.html | 265 ++++++++++++++------------- docs/spec/1.0.0-rc.2/index.html | 271 ++++++++++++++-------------- docs/spec/1.0.0-rc.3/index.html | 273 ++++++++++++++-------------- docs/spec/1.0.0-rc.4/index.html | 301 +++++++++++++++++-------------- docs/spec/1.0.0-rc.5/index.html | 301 +++++++++++++++++-------------- src/components/SpecSection.astro | 5 + src/utils/parseSpecContent.ts | 71 +++++--- 11 files changed, 960 insertions(+), 846 deletions(-) create mode 100644 docs/_astro/index.BpjWaW-v.css delete mode 100644 docs/_astro/index.DViPM5fQ.css diff --git a/docs/404.html b/docs/404.html index d269979..9e5ce60 100644 --- a/docs/404.html +++ b/docs/404.html @@ -9,15 +9,17 @@ document.documentElement.classList.add("dark"); } })(); -

+

404 -

+

Page not found -

+

The page you're looking for doesn't exist. -

+

Go to homepage
\ No newline at end of file diff --git a/docs/_astro/index.BpjWaW-v.css b/docs/_astro/index.BpjWaW-v.css new file mode 100644 index 0000000..e4eb191 --- /dev/null +++ b/docs/_astro/index.BpjWaW-v.css @@ -0,0 +1 @@ +/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:"DM Sans",system-ui,sans-serif;--font-mono:"JetBrains Mono","SF Mono",Consolas,monospace;--color-sky-400:oklch(74.6% .16 232.661);--color-sky-500:oklch(68.5% .169 237.323);--color-sky-600:oklch(58.8% .158 241.966);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-gray-950:oklch(13% .028 261.692);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--radius-md:.375rem;--radius-lg:.5rem;--radius-2xl:1rem;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-accent:#1f8dd6;--color-accent-light:#4da6e8;--font-display:"Bricolage Grotesque",system-ui,sans-serif;--header-height:4rem;--sidebar-width:260px;--content-max-width:800px;--section-padding-x:2rem;--transition-fast:.15s cubic-bezier(.4,0,.2,1)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;height:100%}body{font-family:var(--font-sans);color:#0a0a0a;background-color:#fafafa;font-size:16px;font-weight:400;line-height:1.7;overflow-x:hidden}.dark body{color:#fafafa;background-color:#0a0a0a}h1,h2,h3,h4,h5,h6{font-family:var(--font-display);letter-spacing:-.02em;color:#0a0a0a;font-weight:700;line-height:1.2}.dark h1,.dark h2,.dark h3,.dark h4,.dark h5,.dark h6{color:#fafafa}h1{letter-spacing:-.03em;font-size:clamp(2.5rem,6vw,4.5rem);font-weight:800}h2{margin-top:3rem;margin-bottom:1.5rem;font-size:clamp(1.75rem,4vw,2.5rem)}h3{margin-top:2rem;margin-bottom:1rem;font-size:clamp(1.25rem,2vw,1.5rem)}p{margin-bottom:1.25rem}a{color:var(--color-accent);transition:color var(--transition-fast);word-break:break-word;text-decoration:none}a:hover{color:var(--color-accent-light)}code{font-family:var(--font-mono);background-color:#0000000d;border-radius:4px;padding:.2em .4em;font-size:.875em}.dark code{background-color:#ffffff1a}pre{font-family:var(--font-mono);background-color:#e5e5e5;border-radius:8px;padding:1.25rem;line-height:1.6;overflow-x:auto}.dark pre{background-color:#262626}pre>code{padding:0;font-size:.875rem;background-color:#0000!important}ul,ol{margin-bottom:1.25rem;padding-left:1.5rem}ul{list-style-type:disc}ol{list-style-type:decimal}li{margin-bottom:.5rem}ol ol,ul ol,ul ul ol,ul ol ol,ol ul ol,ol ol ol{list-style-type:decimal}blockquote{border-left:3px solid var(--color-accent);color:#525252;margin:1.5rem 0;padding-left:1.5rem;font-style:italic}.dark blockquote{color:#a3a3a3}strong{font-weight:600}::selection{color:#0a0a0a;background-color:#0ea5e933}.dark ::selection{color:#fafafa}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}}@layer components{.section-container{max-width:calc(var(--content-max-width) + var(--sidebar-width) + 4rem);padding:0 var(--section-padding-x);margin:0 auto}.prose-spec{max-width:var(--content-max-width)}.prose-spec h2{border-bottom:1px solid #e5e5e5;margin-top:4rem;padding-bottom:.75rem}.dark .prose-spec h2{border-bottom-color:#262626}.prose-spec h3{color:#525252}.dark .prose-spec h3{color:#a3a3a3}.prose-spec img{border-radius:8px;max-width:100%;height:auto;margin:2rem 0}}@layer utilities{.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-full{top:100%}.right-6{right:calc(var(--spacing)*6)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.left-0{left:calc(var(--spacing)*0)}.left-1\/2{left:50%}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.mx-auto{margin-inline:auto}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-8{margin-top:calc(var(--spacing)*8)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.-ml-0\.5{margin-left:calc(var(--spacing)*-.5)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-auto{height:auto}.max-h-\[70vh\]{max-height:70vh}.min-h-\[75vh\]{min-height:75vh}.min-h-screen{min-height:100vh}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-12{width:calc(var(--spacing)*12)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-6xl{max-width:var(--container-6xl)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-100\%\]{--tw-translate-y:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-8{gap:calc(var(--spacing)*8)}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-gray-200{border-color:var(--color-gray-200)}.border-transparent{border-color:#0000}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-50\/85{background-color:#f9fafbd9}@supports (color:color-mix(in lab,red,red)){.bg-gray-50\/85{background-color:color-mix(in oklab,var(--color-gray-50)85%,transparent)}}.bg-gray-100{background-color:var(--color-gray-100)}.bg-sky-500\/15{background-color:#00a5ef26}@supports (color:color-mix(in lab,red,red)){.bg-sky-500\/15{background-color:color-mix(in oklab,var(--color-sky-500)15%,transparent)}}.bg-sky-600{background-color:var(--color-sky-600)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-\[linear-gradient\(theme\(colors\.gray\.950\)_1px\,transparent_1px\)\,linear-gradient\(90deg\,theme\(colors\.gray\.950\)_1px\,transparent_1px\)\]{background-image:linear-gradient(#030712 1px,#0000 1px),linear-gradient(90deg,#030712 1px,#0000 1px)}.from-gray-100{--tw-gradient-from:var(--color-gray-100);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-gray-50{--tw-gradient-to:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.bg-\[size\:60px_60px\]{background-size:60px 60px}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.pt-8{padding-top:calc(var(--spacing)*8)}.pr-4{padding-right:calc(var(--spacing)*4)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pl-6{padding-left:calc(var(--spacing)*6)}.text-center{text-align:center}.text-left{text-align:left}.font-display{font-family:var(--font-display)}.font-mono{font-family:var(--font-mono)}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.8125rem\]{font-size:.8125rem}.text-\[8rem\]{font-size:8rem}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-gray-300{color:var(--color-gray-300)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-950{color:var(--color-gray-950)}.text-sky-600{color:var(--color-sky-600)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.no-underline{text-decoration-line:none}.opacity-0{opacity:0}.opacity-\[0\.03\]{opacity:.03}.shadow-lg{--tw-shadow:0 8px 30px var(--tw-shadow-color,#0000001f);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-700{transition-delay:.7s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}@media(hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\:border-sky-600:hover{border-color:var(--color-sky-600)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-sky-500:hover{background-color:var(--color-sky-500)}.hover\:bg-white\/50:hover{background-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/50:hover{background-color:color-mix(in oklab,var(--color-white)50%,transparent)}}.hover\:text-gray-950:hover{color:var(--color-gray-950)}.hover\:text-sky-600:hover{color:var(--color-sky-600)}.hover\:shadow-md:hover{--tw-shadow:0 4px 12px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.data-\[open\]\:visible[data-open]{visibility:visible}.data-\[open\]\:translate-y-0[data-open]{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[open\]\:opacity-100[data-open]{opacity:1}@media(min-width:40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:py-28{padding-block:calc(var(--spacing)*28)}.sm\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.sm\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.sm\:text-\[12rem\]{font-size:12rem}}@media(min-width:48rem){.md\:flex{display:flex}.md\:hidden{display:none}}@media(min-width:64rem){.lg\:sticky{position:sticky}.lg\:top-24{top:calc(var(--spacing)*24)}.lg\:mr-8{margin-right:calc(var(--spacing)*8)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:max-h-\[calc\(100vh-8rem\)\]{max-height:calc(100vh - 8rem)}.lg\:w-64{width:calc(var(--spacing)*64)}.lg\:flex-shrink-0{flex-shrink:0}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:self-start{align-self:flex-start}.lg\:overflow-y-auto{overflow-y:auto}.lg\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.lg\:pr-8{padding-right:calc(var(--spacing)*8)}}.dark\:border-gray-800:where(.dark,.dark *){border-color:var(--color-gray-800)}.dark\:bg-gray-900:where(.dark,.dark *){background-color:var(--color-gray-900)}.dark\:bg-gray-950:where(.dark,.dark *){background-color:var(--color-gray-950)}.dark\:bg-gray-950\/85:where(.dark,.dark *){background-color:#030712d9}@supports (color:color-mix(in lab,red,red)){.dark\:bg-gray-950\/85:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-gray-950)85%,transparent)}}.dark\:bg-sky-500\/20:where(.dark,.dark *){background-color:#00a5ef33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-sky-500\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-sky-500)20%,transparent)}}.dark\:bg-\[linear-gradient\(theme\(colors\.gray\.50\)_1px\,transparent_1px\)\,linear-gradient\(90deg\,theme\(colors\.gray\.50\)_1px\,transparent_1px\)\]:where(.dark,.dark *){background-image:linear-gradient(#f9fafb 1px,#0000 1px),linear-gradient(90deg,#f9fafb 1px,#0000 1px)}.dark\:from-gray-900:where(.dark,.dark *){--tw-gradient-from:var(--color-gray-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:to-gray-950:where(.dark,.dark *){--tw-gradient-to:var(--color-gray-950);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:text-gray-50:where(.dark,.dark *){color:var(--color-gray-50)}.dark\:text-gray-400:where(.dark,.dark *){color:var(--color-gray-400)}.dark\:text-gray-500:where(.dark,.dark *){color:var(--color-gray-500)}.dark\:text-gray-700:where(.dark,.dark *){color:var(--color-gray-700)}.dark\:text-sky-400:where(.dark,.dark *){color:var(--color-sky-400)}.dark\:opacity-\[0\.05\]:where(.dark,.dark *){opacity:.05}.dark\:shadow-none:where(.dark,.dark *){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark\:contrast-90:where(.dark,.dark *){--tw-contrast:contrast(90%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.dark\:hue-rotate-180:where(.dark,.dark *){--tw-hue-rotate:hue-rotate(180deg);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.dark\:invert:where(.dark,.dark *){--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}@media(hover:hover){.dark\:hover\:bg-gray-800:where(.dark,.dark *):hover{background-color:var(--color-gray-800)}.dark\:hover\:bg-gray-900:where(.dark,.dark *):hover{background-color:var(--color-gray-900)}.dark\:hover\:bg-white\/10:where(.dark,.dark *):hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-white\/10:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:hover\:text-gray-50:where(.dark,.dark *):hover{color:var(--color-gray-50)}}}html{scroll-behavior:smooth}[id]{scroll-margin-top:calc(var(--header-height) + 2rem)}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes fade-in-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes slide-in-left{0%{opacity:0;transform:translate(-20px)}to{opacity:1;transform:translate(0)}}@keyframes bounce-subtle{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}.animate-fade-in{opacity:0;animation:.4s ease-out forwards fade-in}.animate-fade-in-up{opacity:0;animation:.6s cubic-bezier(.16,1,.3,1) forwards fade-in-up}.animate-fade-in-down{opacity:0;animation:.25s ease-out forwards fade-in-down}.animate-slide-in-left{opacity:0;animation:.6s cubic-bezier(.16,1,.3,1) forwards slide-in-left}.animate-bounce-subtle{animation:2s ease-in-out infinite bounce-subtle}.delay-100{animation-delay:.1s}.delay-200{animation-delay:.2s}.delay-300{animation-delay:.3s}.delay-400{animation-delay:.4s}.delay-500{animation-delay:.5s}.delay-600{animation-delay:.6s}.delay-700{animation-delay:.7s}.delay-800{animation-delay:.8s}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false} diff --git a/docs/_astro/index.DViPM5fQ.css b/docs/_astro/index.DViPM5fQ.css deleted file mode 100644 index 6e252ef..0000000 --- a/docs/_astro/index.DViPM5fQ.css +++ /dev/null @@ -1 +0,0 @@ -/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:"DM Sans",system-ui,sans-serif;--font-mono:"JetBrains Mono","SF Mono",Consolas,monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--radius-lg:.5rem;--radius-2xl:1rem;--shadow-md:0 4px 12px #00000014;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-accent:#1f8dd6;--color-accent-light:#4da6e8;--color-accent-muted:#1f8dd626;--color-text-primary:#0a0a0a;--color-text-secondary:#525252;--color-text-muted:#737373;--color-bg-primary:#fafafa;--color-bg-secondary:#f5f5f5;--color-bg-code:#f0f0f0;--color-bg-code-inline:#0000000f;--color-border:#e5e5e5;--color-border-strong:#d4d4d4;--color-dark-text-primary:#fafafa;--color-dark-text-secondary:#a3a3a3;--color-dark-text-muted:#737373;--color-dark-bg-primary:#0a0a0a;--color-dark-bg-secondary:#141414;--color-dark-bg-code:#1a1a1a;--color-dark-bg-code-inline:#ffffff1a;--color-dark-border:#262626;--color-dark-border-strong:#404040;--color-dark-accent-muted:#1f8dd633;--font-display:"Bricolage Grotesque",system-ui,sans-serif;--header-height:4rem;--sidebar-width:260px;--content-max-width:800px;--section-padding-x:2rem;--transition-fast:.15s cubic-bezier(.4,0,.2,1);--transition-base:.25s cubic-bezier(.4,0,.2,1)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;height:100%}body{font-family:var(--font-sans);color:var(--color-text-primary);background-color:var(--color-bg-primary);font-size:16px;font-weight:400;line-height:1.7;overflow-x:hidden}.dark body{color:var(--color-dark-text-primary);background-color:var(--color-dark-bg-primary)}h1,h2,h3,h4,h5,h6{font-family:var(--font-display);color:var(--color-text-primary);letter-spacing:-.02em;font-weight:700;line-height:1.2}.dark h1,.dark h2,.dark h3,.dark h4,.dark h5,.dark h6{color:var(--color-dark-text-primary)}h1{letter-spacing:-.03em;font-size:clamp(2.5rem,6vw,4.5rem);font-weight:800}h2{margin-top:3rem;margin-bottom:1.5rem;font-size:clamp(1.75rem,4vw,2.5rem)}h3{margin-top:2rem;margin-bottom:1rem;font-size:clamp(1.25rem,2vw,1.5rem)}p{margin-bottom:1.25rem}a{color:var(--color-accent);transition:color var(--transition-fast);word-break:break-word;text-decoration:none}a:hover{color:var(--color-accent-light)}code{font-family:var(--font-mono);background-color:var(--color-bg-code-inline);border-radius:4px;padding:.2em .4em;font-size:.875em}.dark code{background-color:var(--color-dark-bg-code-inline)}pre{font-family:var(--font-mono);background-color:var(--color-bg-code);border-radius:8px;padding:1.25rem;line-height:1.6;overflow-x:auto}.dark pre{background-color:var(--color-dark-bg-code)}pre>code{padding:0;font-size:.875rem;background-color:#0000!important}ul,ol{margin-bottom:1.25rem;padding-left:1.5rem}ul{list-style-type:disc}ol{list-style-type:decimal}li{margin-bottom:.5rem}ol ol,ul ol,ul ul ol,ul ol ol,ol ul ol,ol ol ol{list-style-type:decimal}blockquote{border-left:3px solid var(--color-accent);color:var(--color-text-secondary);margin:1.5rem 0;padding-left:1.5rem;font-style:italic}.dark blockquote{color:var(--color-dark-text-secondary)}strong{font-weight:600}::selection{background-color:var(--color-accent-muted);color:var(--color-text-primary)}.dark ::selection{background-color:var(--color-dark-accent-muted);color:var(--color-dark-text-primary)}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}}@layer components{.glass{-webkit-backdrop-filter:blur(12px);background:#fafafad9}.dark .glass{background:#0a0a0ad9}.gradient-text{background:linear-gradient(135deg,var(--color-text-primary)0%,var(--color-accent)100%);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text}.dark .gradient-text{background:linear-gradient(135deg,var(--color-dark-text-primary)0%,var(--color-accent-light)100%);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text}.section-container{max-width:calc(var(--content-max-width) + var(--sidebar-width) + 4rem);padding:0 var(--section-padding-x);margin:0 auto}.prose-spec{max-width:var(--content-max-width)}.prose-spec h2{border-bottom:1px solid var(--color-border);margin-top:4rem;padding-bottom:.75rem}.dark .prose-spec h2{border-bottom-color:var(--color-dark-border)}.prose-spec h3{color:var(--color-text-secondary)}.dark .prose-spec h3{color:var(--color-dark-text-secondary)}.prose-spec img{border-radius:8px;max-width:100%;height:auto;margin:2rem 0}.border-subtle{border-color:var(--color-border)}.dark .border-subtle{border-color:var(--color-dark-border)}.btn{font-family:var(--font-sans);transition:all var(--transition-fast);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;gap:.5rem;padding:.625rem 1.25rem;font-size:.875rem;font-weight:500;display:inline-flex}.btn-primary{background-color:var(--color-accent);color:#fff}.btn-primary:hover{background-color:var(--color-accent-light);box-shadow:var(--shadow-md);transform:translateY(-1px)}.btn-ghost{color:var(--color-text-secondary);background-color:#0000}.btn-ghost:hover{background-color:var(--color-bg-secondary);color:var(--color-text-primary)}.dark .btn-ghost{color:var(--color-dark-text-secondary)}.dark .btn-ghost:hover{background-color:var(--color-dark-bg-secondary);color:var(--color-dark-text-primary)}.sidebar-link{color:var(--color-text-muted);transition:all var(--transition-fast);border-left:2px solid #0000;border-radius:6px;margin-left:-2px;padding:.5rem 1rem;font-size:.875rem;display:block}.sidebar-link:hover{color:var(--color-text-primary);background-color:var(--color-bg-secondary)}.dark .sidebar-link{color:var(--color-dark-text-muted)}.dark .sidebar-link:hover{color:var(--color-dark-text-primary);background-color:var(--color-dark-bg-secondary)}.sidebar-link.active{color:var(--color-accent);border-left-color:var(--color-accent);background-color:var(--color-accent-muted)}.dark .sidebar-link.active{color:var(--color-accent-light);background-color:var(--color-dark-accent-muted)}.sidebar-link-sub{padding-left:1.5rem;font-size:.8125rem}.version-badge{font-family:var(--font-mono);background-color:var(--color-bg-secondary);border:1px solid var(--color-border);color:var(--color-text-muted);border-radius:9999px;align-items:center;padding:.25rem .75rem;font-size:.75rem;font-weight:500;display:inline-flex}.dark .version-badge{background-color:var(--color-dark-bg-secondary);border-color:var(--color-dark-border);color:var(--color-dark-text-muted)}.faq-item{border-bottom:1px solid var(--color-border)}.dark .faq-item{border-bottom-color:var(--color-dark-border)}.faq-question{text-align:left;width:100%;font-family:var(--font-display);color:var(--color-text-primary);cursor:pointer;transition:color var(--transition-fast);justify-content:space-between;align-items:center;padding:1.5rem 0;font-size:1.125rem;font-weight:600;display:flex}.dark .faq-question{color:var(--color-dark-text-primary)}.faq-question:hover{color:var(--color-accent)}.faq-answer{color:var(--color-text-secondary);padding-bottom:1.5rem}.dark .faq-answer{color:var(--color-dark-text-secondary)}#layout,#menu,.menu-link{transition:all var(--transition-base)}}@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.right-2{right:calc(var(--spacing)*2)}.right-6{right:calc(var(--spacing)*6)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-8{bottom:calc(var(--spacing)*8)}.left-1\/2{left:50%}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.mx-auto{margin-inline:auto}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-8{margin-top:calc(var(--spacing)*8)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.table{display:table}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-auto{height:auto}.max-h-\[70vh\]{max-height:70vh}.min-h-\[75vh\]{min-height:75vh}.min-h-screen{min-height:100vh}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-12{width:calc(var(--spacing)*12)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-6xl{max-width:var(--container-6xl)}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-100\%\]{--tw-translate-y:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.appearance-none{appearance:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-8{gap:calc(var(--spacing)*8)}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-\[var\(--color-border\)\]{border-color:var(--color-border)}.border-transparent{border-color:#0000}.bg-\[var\(--color-accent\)\]{background-color:var(--color-accent)}.bg-\[var\(--color-bg-primary\)\]{background-color:var(--color-bg-primary)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[var\(--color-bg-secondary\)\]{--tw-gradient-from:var(--color-bg-secondary);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-\[var\(--color-bg-primary\)\]{--tw-gradient-to:var(--color-bg-primary);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.p-2{padding:calc(var(--spacing)*2)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-8{padding-block:calc(var(--spacing)*8)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.pt-8{padding-top:calc(var(--spacing)*8)}.pr-4{padding-right:calc(var(--spacing)*4)}.pr-8{padding-right:calc(var(--spacing)*8)}.text-center{text-align:center}.font-display{font-family:var(--font-display)}.font-mono{font-family:var(--font-mono)}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[8rem\]{font-size:8rem}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-\[var\(--color-border-strong\)\]{color:var(--color-border-strong)}.text-\[var\(--color-text-muted\)\]{color:var(--color-text-muted)}.text-\[var\(--color-text-primary\)\]{color:var(--color-text-primary)}.text-\[var\(--color-text-secondary\)\]{color:var(--color-text-secondary)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.no-underline{text-decoration-line:none}.opacity-\[0\.03\]{opacity:.03}.shadow-lg{--tw-shadow:0 8px 30px var(--tw-shadow-color,#0000001f);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-400{transition-delay:.4s}.delay-700{transition-delay:.7s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}@media(hover:hover){.hover\:border-\[var\(--color-accent\)\]:hover{border-color:var(--color-accent)}.hover\:bg-\[var\(--color-accent-light\)\]:hover{background-color:var(--color-accent-light)}.hover\:bg-\[var\(--color-bg-secondary\)\]:hover{background-color:var(--color-bg-secondary)}.hover\:bg-white\/50:hover{background-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/50:hover{background-color:color-mix(in oklab,var(--color-white)50%,transparent)}}.hover\:text-\[var\(--color-accent\)\]:hover{color:var(--color-accent)}.hover\:text-\[var\(--color-text-primary\)\]:hover{color:var(--color-text-primary)}}.focus\:border-\[var\(--color-accent\)\]:focus{border-color:var(--color-accent)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}@media(min-width:40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:py-28{padding-block:calc(var(--spacing)*28)}.sm\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.sm\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.sm\:text-\[12rem\]{font-size:12rem}}@media(min-width:48rem){.md\:flex{display:flex}.md\:hidden{display:none}}@media(min-width:64rem){.lg\:sticky{position:sticky}.lg\:top-24{top:calc(var(--spacing)*24)}.lg\:mr-8{margin-right:calc(var(--spacing)*8)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:max-h-\[calc\(100vh-8rem\)\]{max-height:calc(100vh - 8rem)}.lg\:w-64{width:calc(var(--spacing)*64)}.lg\:flex-shrink-0{flex-shrink:0}.lg\:gap-8{gap:calc(var(--spacing)*8)}.lg\:self-start{align-self:flex-start}.lg\:overflow-y-auto{overflow-y:auto}.lg\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.lg\:pr-8{padding-right:calc(var(--spacing)*8)}}@media(prefers-color-scheme:dark){.dark\:border-\[var\(--color-dark-border\)\]{border-color:var(--color-dark-border)}.dark\:bg-\[var\(--color-dark-bg-primary\)\]{background-color:var(--color-dark-bg-primary)}.dark\:bg-\[var\(--color-dark-bg-secondary\)\]{background-color:var(--color-dark-bg-secondary)}.dark\:from-\[var\(--color-dark-bg-secondary\)\]{--tw-gradient-from:var(--color-dark-bg-secondary);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:to-\[var\(--color-dark-bg-primary\)\]{--tw-gradient-to:var(--color-dark-bg-primary);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.dark\:text-\[var\(--color-dark-border-strong\)\]{color:var(--color-dark-border-strong)}.dark\:text-\[var\(--color-dark-text-muted\)\]{color:var(--color-dark-text-muted)}.dark\:text-\[var\(--color-dark-text-primary\)\]{color:var(--color-dark-text-primary)}.dark\:text-\[var\(--color-dark-text-secondary\)\]{color:var(--color-dark-text-secondary)}.dark\:opacity-\[0\.05\]{opacity:.05}.dark\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark\:contrast-90{--tw-contrast:contrast(90%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.dark\:hue-rotate-180{--tw-hue-rotate:hue-rotate(180deg);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.dark\:invert{--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}@media(hover:hover){.dark\:hover\:bg-\[var\(--color-dark-bg-secondary\)\]:hover{background-color:var(--color-dark-bg-secondary)}.dark\:hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-white\/10:hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.dark\:hover\:text-\[var\(--color-dark-text-primary\)\]:hover{color:var(--color-dark-text-primary)}}}}html{scroll-behavior:smooth}[id]{scroll-margin-top:calc(var(--header-height) + 2rem)}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes fade-in-up{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes slide-in-left{0%{opacity:0;transform:translate(-20px)}to{opacity:1;transform:translate(0)}}@keyframes bounce-subtle{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}.animate-fade-in{opacity:0;animation:.4s ease-out forwards fade-in}.animate-fade-in-up{opacity:0;animation:.6s cubic-bezier(.16,1,.3,1) forwards fade-in-up}.animate-fade-in-down{opacity:0;animation:.25s ease-out forwards fade-in-down}.animate-slide-in-left{opacity:0;animation:.6s cubic-bezier(.16,1,.3,1) forwards slide-in-left}.animate-bounce-subtle{animation:2s ease-in-out infinite bounce-subtle}.delay-100{animation-delay:.1s}.delay-200{animation-delay:.2s}.delay-300{animation-delay:.3s}.delay-400{animation-delay:.4s}.delay-500{animation-delay:.5s}.delay-600{animation-delay:.6s}.delay-700{animation-delay:.7s}.delay-800{animation-delay:.8s}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false} diff --git a/docs/index.html b/docs/index.html index 0849665..585c109 100644 --- a/docs/index.html +++ b/docs/index.html @@ -8,112 +8,131 @@ document.documentElement.classList.add("dark"); } })(); - -

Git Common-Flow

+ text-gray-600 dark:text-gray-400"> A sensible git workflow for teams who ship -

v1.0.0-rc.5
+v1.0.0-rc.5
Git Common-Flow diagram Git Common-Flow diagram
+About + +Read the Spec + +FAQ +

About Common-Flow

+ text-gray-500 dark:text-gray-500 + hover:text-sky-600 transition-colors" aria-label="Scroll to content">

About Common-Flow

A practical git workflow that combines the best of GitHub Flow with versioned releases

Common-Flow is an attempt to gather a sensible selection of the most common @@ -124,8 +143,7 @@ into account how a lot of open source projects most commonly use git.

In short, Common-Flow is essentially GitHub Flow with the addition of versioned releases, optional release branches, and without the requirement to deploy to production all the time.

+ text-gray-950 dark:text-gray-50" data-astro-cid-x2lc2h5w> Key Principles

  • The "master" branch is the mainline branch with latest changes, and must not @@ -138,43 +156,33 @@ the master branch.
  • (e.g. "2.11.4").
  • Release branches can be used to avoid change freezes on master. They are not required, instead they are available if you need them.
  • -

+

Author -

The Git Common-Flow specification is authored +

The Git Common-Flow specification is authored by Jim Myhrberg.

If you'd like to leave feedback, please open an issue on GitHub.

+ text-gray-500 dark:text-gray-500" data-astro-cid-x2lc2h5w> License -

The Specification

+

The Specification

The complete Git Common-Flow specification

Terminology

    +

Terminology

  • Master Branch - Must be named "master", must always have passing tests, and is not guaranteed to always work in production environments.
  • Change Branches - Any branch that introduces changes like a new feature, a @@ -195,13 +203,13 @@ also for long-term maintenance of older version.
  • "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.

      -
    1. TL;DR +
    2. TL;DR
      1. Do not break the master branch.
      2. A release is a git tag.
    3. -
    4. The Master Branch +
    5. The Master Branch
      1. A branch named "master" MUST exist and it MUST be referred to as the "master branch".
      2. @@ -215,7 +223,7 @@ release/production" state to reduce any friction with creating a new release.
    6. -
    7. Change Branches +
    8. Change Branches
      1. Each change (feature, bugfix, etc.) MUST be performed on separate branches that SHOULD be referred to as "change branches".
      2. @@ -249,7 +257,7 @@ you do decide to use merge instead of rebase, you MUST NOT use a mixture of both methods, pick one and stick to it.
    9. -
    10. Pull Requests +
    11. Pull Requests
      1. To merge a change branch into its merge target, you MUST open a "pull request" (or equivalent).
      2. @@ -271,7 +279,7 @@ changes with others there. This leaves a clear and visible history of how, when, and why the code looks and behaves the way it does.
    12. -
    13. Versioning +
    14. Versioning
      1. A "version string" is a typically mostly numeric string that identifies a specific version of a project. The version string itself MUST NOT have a @@ -294,7 +302,7 @@ MUST only contain the exact version string, meaning it MUST NOT have a Semantic Versioning (http://semver.org/).
    15. -
    16. Releases +
    17. Releases
      1. To create a new release, you MUST create a git tag named as the exact version string of the release. This kind of tag MUST be referred to as a @@ -324,7 +332,7 @@ line of the tag annotation SHOULD read "Release 2.11.4". The second line MUST be blank, and the changelog MUST start on the third line.
    18. -
    19. Short-Term Release Branches +
    20. Short-Term Release Branches
      1. Any branch that has a name starting with "release-" SHOULD be referred to as a "release branch".
      2. @@ -351,7 +359,7 @@ back into its source branch and then deleted. Typically the source branch will be the master branch.
    21. -
    22. Long-term Release Branches +
    23. Long-term Release Branches
      1. Any release branch which has a name ending with a non-specific version string, MUST be referred to as a "long-term release branch". For example @@ -393,7 +401,7 @@ merge commit itself. Effectively creating a new commit that reverses all the relevant changes.
    24. -
    25. Git Best Practices +
    26. Git Best Practices
      1. All commit messages SHOULD follow the Commit Guidelines and format from the official git @@ -419,10 +427,14 @@ and creates a merge commit to mark the integration of the branch with master.
    27. -

FAQ

+

FAQ

Common questions about Git Common-Flow -

\ No newline at end of file diff --git a/docs/spec/1.0.0-rc.1/index.html b/docs/spec/1.0.0-rc.1/index.html index 0c00678..01766a2 100644 --- a/docs/spec/1.0.0-rc.1/index.html +++ b/docs/spec/1.0.0-rc.1/index.html @@ -8,117 +8,135 @@ document.documentElement.classList.add("dark"); } })(); - -

Git Common-Flow

+ text-gray-600 dark:text-gray-400"> A sensible git workflow for teams who ship -

v1.0.0-rc.1
+v1.0.0-rc.1
Git Common-Flow diagram Git Common-Flow diagram
+About + +Read the Spec + +FAQ +

About Common-Flow

+ text-gray-500 dark:text-gray-500 + hover:text-sky-600 transition-colors" aria-label="Scroll to content">

About Common-Flow

A practical git workflow that combines the best of GitHub Flow with versioned releases

+ text-gray-950 dark:text-gray-50" data-astro-cid-x2lc2h5w> Key Principles

Common-Flow is an attempt to gather a sensible selection of the most common usage patterns of git into a single and concise specification. It is based on @@ -127,43 +145,33 @@ of GitHub Flow, while into account how a lot of open source projects use git.

TL;DR: Common-Flow is basically GitHub Flow with the addition of versioned releases, maintenance releases for old versions, and without the requirement to -deploy to production all the time.

+deploy to production all the time.

Author -

The Git Common-Flow specification is authored +

The Git Common-Flow specification is authored by Jim Myhrberg.

If you'd like to leave feedback, please open an issue on GitHub.

+ text-gray-500 dark:text-gray-500" data-astro-cid-x2lc2h5w> License -

The Specification

+

The Specification

The complete Git Common-Flow specification

Terminology

    +

Terminology

  • Master Branch - Must always have passing tests, is considered bleeding edge, and must be named master.
  • Change Branches - Any branch that introduces changes like a new feature, a @@ -189,7 +197,7 @@ branch.
  • "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.

      -
    1. The Master Branch +
    2. The Master Branch
      1. A branch named "master" MUST exist and it MUST be referred to as the "master branch".
      2. @@ -211,7 +219,7 @@ push your work to the same named branch on the remote server. SHOULD be referred to as the "source branch". Each change branch also needs a designated "merge target branch", typically this will be the same as the source branch. -
      3. Change branches MUST be regularly updated with any changes from their +
      4. Change branches MUST be regularly updated with any changes from their source branch. This MUST be done by rebasing the change branch on top of the source branch. To be clear you MUST NOT merge a source branch into a change branch.
      5. @@ -230,7 +238,7 @@ others, it is RECOMMENDED you do this by creating a pull request and discuss the changes with others there.
    3. -
    4. Git Best Practices +
    5. Git Best Practices
      1. All commit messages SHOULD follow the Commit Guidelines and format from the official git @@ -251,7 +259,7 @@ allows one to revert a merge by reverting a single merge commit, and creates a merge commit to mark the integration of the branch with master.
    6. -
    7. Versioning +
    8. Versioning
      1. The project MUST have its version hard-coded somewhere in the code-base. It is RECOMMENDED that this is done in a file called "VERSION" @@ -264,7 +272,7 @@ but the version string MUST NOT have a "v" prefix. For example "v2.11.4" is bad, and "2.11.4" is good.
    9. -
    10. Releases +
    11. Releases
      1. To create a new release, you MUST create a "version bump" commit directly on the master branch which changes the hard-coded version value of the @@ -325,17 +333,14 @@ into the master branch, that work should have happened against the master branch in the first place.
    12. -

FAQ

+

FAQ

Common questions about Git Common-Flow

\ No newline at end of file diff --git a/docs/spec/1.0.0-rc.2/index.html b/docs/spec/1.0.0-rc.2/index.html index c446d29..dc9d1f0 100644 --- a/docs/spec/1.0.0-rc.2/index.html +++ b/docs/spec/1.0.0-rc.2/index.html @@ -8,117 +8,135 @@ document.documentElement.classList.add("dark"); } })(); - -

Git Common-Flow

+ text-gray-600 dark:text-gray-400"> A sensible git workflow for teams who ship -

v1.0.0-rc.2
+v1.0.0-rc.2
Git Common-Flow diagram Git Common-Flow diagram
+About + +Read the Spec + +FAQ +

About Common-Flow

+ text-gray-500 dark:text-gray-500 + hover:text-sky-600 transition-colors" aria-label="Scroll to content">

About Common-Flow

A practical git workflow that combines the best of GitHub Flow with versioned releases

+ text-gray-950 dark:text-gray-50" data-astro-cid-x2lc2h5w> Key Principles

Common-Flow is an attempt to gather a sensible selection of the most common usage patterns of git into a single and concise specification. It is based on @@ -127,43 +145,33 @@ of GitHub Flow, while into account how a lot of open source projects use git.

TL;DR: Common-Flow is basically GitHub Flow with the addition of versioned releases, maintenance releases for old versions, and without the requirement to -deploy to production all the time.

+deploy to production all the time.

Author -

The Git Common-Flow specification is authored +

The Git Common-Flow specification is authored by Jim Myhrberg.

If you'd like to leave feedback, please open an issue on GitHub.

+ text-gray-500 dark:text-gray-500" data-astro-cid-x2lc2h5w> License -

The Specification

+

The Specification

The complete Git Common-Flow specification

Terminology

    +

Terminology

  • Master Branch - Must always have passing tests, is considered bleeding edge, and must be named master.
  • Change Branches - Any branch that introduces changes like a new feature, a @@ -184,7 +192,7 @@ also for long-term maintenance of older version.
  • "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.

      -
    1. The Master Branch +
    2. The Master Branch
      1. A branch named "master" MUST exist and it MUST be referred to as the "master branch".
      2. @@ -196,7 +204,7 @@ release/production" state to reduce any friction with creating a new release.
    3. -
    4. Change Branches +
    5. Change Branches
      1. Each change (feature, bugfix, etc.) MUST be performed on separate branches that SHOULD be referred to as "change branches". All change @@ -218,7 +226,7 @@ the change branch to the remote server. This will require you to do a force push, and you SHOULD use the "--force-with-lease" git push option.
    6. -
    7. Pull Requests +
    8. Pull Requests
      1. To merge a change branch into its merge target, you MUST open a "pull request" (or equivalent) so others can review and approve your changes.
      2. @@ -231,7 +239,7 @@ others, the RECOMMENDED way to do so is by creating a pull request and discuss the changes with others there.
    9. -
    10. Versioning +
    11. Versioning
      1. The project MUST have its version hard-coded somewhere in the code-base. It is RECOMMENDED that this is done in a file called "VERSION" @@ -244,7 +252,7 @@ but the version string MUST NOT have a "v" prefix. For example "v2.11.4" is bad, and "2.11.4" is good.
    12. -
    13. Releases +
    14. Releases
      1. To create a new release, you MUST create a "version bump" commit which changes the hard-coded version string of the project. The version bump @@ -280,7 +288,7 @@ downwards from the master branch. If a change needs to trickle back up into the master branch, that work should have happened against the master branch in the first place. One exception to this is version bump commits.
      2. There are two types of release branches; short-term, and long-term.
      3. -
      4. Short-Term Release Branches +
      5. Short-Term Release Branches
        1. Used for creating a specific versioned release.
        2. A short-term release branch is RECOMMENDED if there is a lengthy @@ -300,7 +308,7 @@ release branch MUST be merged back into its source branch and then deleted. Typically the source branch will be the master branch.
      6. -
      7. Long-Term Release Branches +
      8. Long-Term Release Branches
        1. Used for work on versions which are not currently part of the master branch. Typically this is useful when you need to create a new @@ -334,7 +342,7 @@ merge commit itself. Effectively creating a new commit that reverses all the relevant changes.
      9. -
      10. Git Best Practices +
      11. Git Best Practices
        1. All commit messages SHOULD follow the Commit Guidelines and format from the official git @@ -359,17 +367,14 @@ and creates a merge commit to mark the integration of the branch with master.
      12. -

FAQ

+

FAQ

Common questions about Git Common-Flow

\ No newline at end of file diff --git a/docs/spec/1.0.0-rc.3/index.html b/docs/spec/1.0.0-rc.3/index.html index d0e2676..433e0a1 100644 --- a/docs/spec/1.0.0-rc.3/index.html +++ b/docs/spec/1.0.0-rc.3/index.html @@ -8,117 +8,135 @@ document.documentElement.classList.add("dark"); } })(); - -

Git Common-Flow

+ text-gray-600 dark:text-gray-400"> A sensible git workflow for teams who ship -

v1.0.0-rc.3
+v1.0.0-rc.3
Git Common-Flow diagram Git Common-Flow diagram
+About + +Read the Spec + +FAQ +

About Common-Flow

+ text-gray-500 dark:text-gray-500 + hover:text-sky-600 transition-colors" aria-label="Scroll to content">

About Common-Flow

A practical git workflow that combines the best of GitHub Flow with versioned releases

+ text-gray-950 dark:text-gray-50" data-astro-cid-x2lc2h5w> Key Principles

Common-Flow is an attempt to gather a sensible selection of the most common usage patterns of git into a single and concise specification. It is based on @@ -127,43 +145,33 @@ of GitHub Flow, while into account how a lot of open source projects use git.

In short, Common-Flow is essentially GitHub Flow with the addition of versioned releases, optional release branches, and without the requirement to deploy to -production all the time.

+production all the time.

Author -

The Git Common-Flow specification is authored +

The Git Common-Flow specification is authored by Jim Myhrberg.

If you'd like to leave feedback, please open an issue on GitHub.

+ text-gray-500 dark:text-gray-500" data-astro-cid-x2lc2h5w> License -

The Specification

+

The Specification

The complete Git Common-Flow specification

Terminology

    +

Terminology

  • Master Branch - Must be named "master", must always have passing tests, and is not guaranteed to always work in production environments.
  • Change Branches - Any branch that introduces changes like a new feature, a @@ -185,13 +193,13 @@ also for long-term maintenance of older version.
  • "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.

      -
    1. TL;DR +
    2. TL;DR
      1. Don't break the master branch.
      2. A release is a git tag.
    3. -
    4. The Master Branch +
    5. The Master Branch
      1. A branch named "master" MUST exist and it MUST be referred to as the "master branch".
      2. @@ -205,7 +213,7 @@ release/production" state to reduce any friction with creating a new release.
    6. -
    7. Change Branches +
    8. Change Branches
      1. Each change (feature, bugfix, etc.) MUST be performed on separate branches that SHOULD be referred to as "change branches". All change @@ -227,7 +235,7 @@ the change branch to the remote server. This will require you to do a force push, and you SHOULD use the "--force-with-lease" git push option.
    9. -
    10. Pull Requests +
    11. Pull Requests
      1. To merge a change branch into its merge target, you MUST open a "pull request" (or equivalent) so others can review and approve your changes.
      2. @@ -240,7 +248,7 @@ others, the RECOMMENDED way to do so is by creating a pull request and discuss the changes with others there.
    12. -
    13. Versioning +
    14. Versioning
      1. The project MUST have its version hard-coded somewhere in the code-base. It is RECOMMENDED that this is done in a file called "VERSION" @@ -253,7 +261,7 @@ but the version string MUST NOT have a "v" prefix. For example "v2.11.4" is bad, and "2.11.4" is good.
    15. -
    16. Releases +
    17. Releases
      1. To create a new release, you MUST create a "version bump" commit which changes the hard-coded version string of the project. The version bump @@ -289,7 +297,7 @@ downwards from the master branch. If a change needs to trickle back up into the master branch, that work should have happened against the master branch in the first place. One exception to this is version bump commits.
      2. There are two types of release branches; short-term, and long-term.
      3. -
      4. Short-Term Release Branches +
      5. Short-Term Release Branches
        1. Used for creating a specific versioned release.
        2. A short-term release branch is RECOMMENDED if there is a lengthy @@ -309,7 +317,7 @@ release branch MUST be merged back into its source branch and then deleted. Typically the source branch will be the master branch.
      6. -
      7. Long-Term Release Branches +
      8. Long-Term Release Branches
        1. Used for work on versions which are not currently part of the master branch. Typically this is useful when you need to create a new @@ -343,7 +351,7 @@ merge commit itself. Effectively creating a new commit that reverses all the relevant changes.
      9. -
      10. Git Best Practices +
      11. Git Best Practices
        1. All commit messages SHOULD follow the Commit Guidelines and format from the official git @@ -368,17 +376,14 @@ and creates a merge commit to mark the integration of the branch with master.
      12. -

FAQ

+

FAQ

Common questions about Git Common-Flow

\ No newline at end of file diff --git a/docs/spec/1.0.0-rc.4/index.html b/docs/spec/1.0.0-rc.4/index.html index 0b20da6..9c710a1 100644 --- a/docs/spec/1.0.0-rc.4/index.html +++ b/docs/spec/1.0.0-rc.4/index.html @@ -8,117 +8,135 @@ document.documentElement.classList.add("dark"); } })(); - -

Git Common-Flow

+ text-gray-600 dark:text-gray-400"> A sensible git workflow for teams who ship -

v1.0.0-rc.4
+v1.0.0-rc.4
Git Common-Flow diagram Git Common-Flow diagram
+About + +Read the Spec + +FAQ +

About Common-Flow

+ text-gray-500 dark:text-gray-500 + hover:text-sky-600 transition-colors" aria-label="Scroll to content">

About Common-Flow

A practical git workflow that combines the best of GitHub Flow with versioned releases

+ text-gray-950 dark:text-gray-50" data-astro-cid-x2lc2h5w> Key Principles

Common-Flow is an attempt to gather a sensible selection of the most common usage patterns of git into a single and concise specification. It is based on @@ -127,43 +145,33 @@ of GitHub Flow, while into account how a lot of open source projects use git.

In short, Common-Flow is essentially GitHub Flow with the addition of versioned releases, optional release branches, and without the requirement to deploy to -production all the time.

+production all the time.

Author -

The Git Common-Flow specification is authored +

The Git Common-Flow specification is authored by Jim Myhrberg.

If you'd like to leave feedback, please open an issue on GitHub.

+ text-gray-500 dark:text-gray-500" data-astro-cid-x2lc2h5w> License -

The Specification

+

The Specification

The complete Git Common-Flow specification

Terminology

    +

Terminology

  • Master Branch - Must be named "master", must always have passing tests, and is not guaranteed to always work in production environments.
  • Change Branches - Any branch that introduces changes like a new feature, a @@ -184,13 +192,13 @@ also for long-term maintenance of older version.
  • "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.

      -
    1. TL;DR +
    2. TL;DR
      1. Don't break the master branch.
      2. A release is a git tag.
    3. -
    4. The Master Branch +
    5. The Master Branch
      1. A branch named "master" MUST exist and it MUST be referred to as the "master branch".
      2. @@ -204,7 +212,7 @@ release/production" state to reduce any friction with creating a new release.
    6. -
    7. Change Branches +
    8. Change Branches
      1. Each change (feature, bugfix, etc.) MUST be performed on separate branches that SHOULD be referred to as "change branches".
      2. @@ -238,7 +246,7 @@ you do decide to use merge instead of rebase, you MUST NOT use a mixture of both methods, pick one and stick to it.
    9. -
    10. Pull Requests +
    11. Pull Requests
      1. To merge a change branch into its merge target, you MUST open a "pull request" (or equivalent).
      2. @@ -259,7 +267,7 @@ others, the RECOMMENDED way to do so is by creating a pull request and discuss the changes with others there.
    12. -
    13. Versioning +
    14. Versioning
      1. A "version string" is a typically mostly numeric string that identifies a specific version of a project. The version string itself MUST NOT have a @@ -282,7 +290,7 @@ MUST only contain the exact version string, meaning it MUST NOT have a Semantic Versioning (http://semver.org/).
    15. -
    16. Releases +
    17. Releases
      1. To create a new release, you MUST create a git tag named as the exact version string of the release. This kind of tag MUST be referred to as a @@ -312,7 +320,7 @@ line of the tag annotation SHOULD read "Release 2.11.4". The second line MUST be blank, and the changelog MUST start on the third line.
    18. -
    19. Short-Term Release Branches +
    20. Short-Term Release Branches
      1. Any branch that has a name starting with "release-" SHOULD be referred to as a "release branch".
      2. @@ -339,7 +347,7 @@ back into its source branch and then deleted. Typically the source branch will be the master branch.
    21. -
    22. Long-term Release Branches +
    23. Long-term Release Branches
      1. Any release branch which has a name ending with a non-specific version string, MUST be referred to as a "long-term release branch". For example @@ -381,7 +389,7 @@ merge commit itself. Effectively creating a new commit that reverses all the relevant changes.
    24. -
    25. Git Best Practices +
    26. Git Best Practices
      1. All commit messages SHOULD follow the Commit Guidelines and format from the official git @@ -407,10 +415,14 @@ and creates a merge commit to mark the integration of the branch with master.
    27. -

FAQ

+

FAQ

Common questions about Git Common-Flow -

\ No newline at end of file diff --git a/docs/spec/1.0.0-rc.5/index.html b/docs/spec/1.0.0-rc.5/index.html index 0849665..585c109 100644 --- a/docs/spec/1.0.0-rc.5/index.html +++ b/docs/spec/1.0.0-rc.5/index.html @@ -8,112 +8,131 @@ document.documentElement.classList.add("dark"); } })(); - -

Git Common-Flow

+ text-gray-600 dark:text-gray-400"> A sensible git workflow for teams who ship -

v1.0.0-rc.5
+v1.0.0-rc.5
Git Common-Flow diagram Git Common-Flow diagram
+About + +Read the Spec + +FAQ +

About Common-Flow

+ text-gray-500 dark:text-gray-500 + hover:text-sky-600 transition-colors" aria-label="Scroll to content">

About Common-Flow

A practical git workflow that combines the best of GitHub Flow with versioned releases

Common-Flow is an attempt to gather a sensible selection of the most common @@ -124,8 +143,7 @@ into account how a lot of open source projects most commonly use git.

In short, Common-Flow is essentially GitHub Flow with the addition of versioned releases, optional release branches, and without the requirement to deploy to production all the time.

+ text-gray-950 dark:text-gray-50" data-astro-cid-x2lc2h5w> Key Principles

  • The "master" branch is the mainline branch with latest changes, and must not @@ -138,43 +156,33 @@ the master branch.
  • (e.g. "2.11.4").
  • Release branches can be used to avoid change freezes on master. They are not required, instead they are available if you need them.
  • -

+

Author -

The Git Common-Flow specification is authored +

The Git Common-Flow specification is authored by Jim Myhrberg.

If you'd like to leave feedback, please open an issue on GitHub.

+ text-gray-500 dark:text-gray-500" data-astro-cid-x2lc2h5w> License -

The Specification

+

The Specification

The complete Git Common-Flow specification

Terminology

    +

Terminology

  • Master Branch - Must be named "master", must always have passing tests, and is not guaranteed to always work in production environments.
  • Change Branches - Any branch that introduces changes like a new feature, a @@ -195,13 +203,13 @@ also for long-term maintenance of older version.
  • "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.

      -
    1. TL;DR +
    2. TL;DR
      1. Do not break the master branch.
      2. A release is a git tag.
    3. -
    4. The Master Branch +
    5. The Master Branch
      1. A branch named "master" MUST exist and it MUST be referred to as the "master branch".
      2. @@ -215,7 +223,7 @@ release/production" state to reduce any friction with creating a new release.
    6. -
    7. Change Branches +
    8. Change Branches
      1. Each change (feature, bugfix, etc.) MUST be performed on separate branches that SHOULD be referred to as "change branches".
      2. @@ -249,7 +257,7 @@ you do decide to use merge instead of rebase, you MUST NOT use a mixture of both methods, pick one and stick to it.
    9. -
    10. Pull Requests +
    11. Pull Requests
      1. To merge a change branch into its merge target, you MUST open a "pull request" (or equivalent).
      2. @@ -271,7 +279,7 @@ changes with others there. This leaves a clear and visible history of how, when, and why the code looks and behaves the way it does.
    12. -
    13. Versioning +
    14. Versioning
      1. A "version string" is a typically mostly numeric string that identifies a specific version of a project. The version string itself MUST NOT have a @@ -294,7 +302,7 @@ MUST only contain the exact version string, meaning it MUST NOT have a Semantic Versioning (http://semver.org/).
    15. -
    16. Releases +
    17. Releases
      1. To create a new release, you MUST create a git tag named as the exact version string of the release. This kind of tag MUST be referred to as a @@ -324,7 +332,7 @@ line of the tag annotation SHOULD read "Release 2.11.4". The second line MUST be blank, and the changelog MUST start on the third line.
    18. -
    19. Short-Term Release Branches +
    20. Short-Term Release Branches
      1. Any branch that has a name starting with "release-" SHOULD be referred to as a "release branch".
      2. @@ -351,7 +359,7 @@ back into its source branch and then deleted. Typically the source branch will be the master branch.
    21. -
    22. Long-term Release Branches +
    23. Long-term Release Branches
      1. Any release branch which has a name ending with a non-specific version string, MUST be referred to as a "long-term release branch". For example @@ -393,7 +401,7 @@ merge commit itself. Effectively creating a new commit that reverses all the relevant changes.
    24. -
    25. Git Best Practices +
    26. Git Best Practices
      1. All commit messages SHOULD follow the Commit Guidelines and format from the official git @@ -419,10 +427,14 @@ and creates a merge commit to mark the integration of the branch with master.
    27. -

FAQ

+

FAQ

Common questions about Git Common-Flow -

\ No newline at end of file diff --git a/src/components/SpecSection.astro b/src/components/SpecSection.astro index 4255a43..7d878c9 100644 --- a/src/components/SpecSection.astro +++ b/src/components/SpecSection.astro @@ -132,6 +132,11 @@ const { terminology, specification, tocItems } = Astro.props; color: #737373; } + /* Scroll margin for anchored spec sections */ + .spec-content :global(ol > li[id]) { + scroll-margin-top: calc(var(--header-height) + 2rem); + } + .spec-content :global(li) { margin-bottom: 0.5rem; color: #525252; diff --git a/src/utils/parseSpecContent.ts b/src/utils/parseSpecContent.ts index e98a67a..e4609c0 100644 --- a/src/utils/parseSpecContent.ts +++ b/src/utils/parseSpecContent.ts @@ -96,6 +96,20 @@ function escapeRegex(str: string): string { return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); } +// Spec section titles in order (used for both ToC and anchor injection) +const SPEC_SECTION_TITLES = [ + "TL;DR", + "The Master Branch", + "Change Branches", + "Pull Requests", + "Versioning", + "Releases", + "Short-Term Release Branches", + "Long-term Release Branches", + "Bug Fixes & Rollback", + "Git Best Practices", +]; + /** * Extract the numbered spec sections (1. TL;DR, 2. The Master Branch, etc.) */ @@ -107,24 +121,8 @@ function extractSpecSections(specContent: string): SpecSection[] { const olMatch = specContent.match(/]*>([\s\S]*?)<\/ol>/i); if (!olMatch) return sections; - // Split by top-level list items - // We need to handle nested lists carefully - const sectionTitles = [ - "TL;DR", - "The Master Branch", - "Change Branches", - "Pull Requests", - "Versioning", - "Releases", - "Short-Term Release Branches", - "Long-term Release Branches", - "Bug Fixes & Rollback", - "Git Best Practices", - ]; - // Find each section by looking for the title pattern - for (let i = 0; i < sectionTitles.length; i++) { - const title = sectionTitles[i]; + for (const title of SPEC_SECTION_TITLES) { const id = slugify(title); // For the content, we'll just use the title for navigation @@ -139,6 +137,27 @@ function extractSpecSections(specContent: string): SpecSection[] { return sections; } +/** + * Add anchor IDs to spec section list items. + * Finds top-level
  • elements that start with section titles and adds IDs. + */ +function addSpecSectionAnchors(specContent: string): string { + let result = specContent; + + for (const title of SPEC_SECTION_TITLES) { + const id = `spec-${slugify(title)}`; + // Match
  • followed by the section title (possibly with whitespace) + // The title appears right after
  • in the rendered HTML + const pattern = new RegExp( + `(
  • )(\\s*${escapeRegex(title)})`, + "i" + ); + result = result.replace(pattern, `
  • $2`); + } + + return result; +} + /** * Extract FAQ items from the FAQ section HTML */ @@ -187,18 +206,13 @@ function extractFAQItems(faqContent: string): FAQItem[] { } /** - * Build table of contents from parsed sections + * Build table of contents from parsed sections. + * Only includes sections rendered in SpecSection (Terminology + Specification). + * Introduction/Summary are in AboutSection and excluded from this ToC. */ function buildTocItems(parsed: Partial): TocItem[] { const items: TocItem[] = []; - // Main sections - if (parsed.introduction) { - items.push({ id: "introduction", title: "Introduction", level: 2 }); - } - if (parsed.summary) { - items.push({ id: "summary", title: "Summary", level: 2 }); - } if (parsed.terminology) { items.push({ id: "terminology", title: "Terminology", level: 2 }); } @@ -256,12 +270,15 @@ export function parseSpecContent(html: string, version: string): ParsedSpec { "License", ]); - const specification = extractSection( + const specificationRaw = extractSection( content, "Git Common-Flow Specification", ["FAQ", "About", "License"] ); + // Add anchor IDs to spec section list items for ToC navigation + const specification = addSpecSectionAnchors(specificationRaw); + const faqContent = extractSection(content, "FAQ", ["About", "License"]); const about = extractSection(content, "About", ["License"]); @@ -269,7 +286,7 @@ export function parseSpecContent(html: string, version: string): ParsedSpec { const license = extractSection(content, "License", []); // Parse subsections - const specSections = extractSpecSections(specification); + const specSections = extractSpecSections(specificationRaw); const faq = extractFAQItems(faqContent); const parsed: ParsedSpec = {