@krigsvold/theme 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  `@krigsvold/theme` is the framework-independent source of truth for Krigsvold. It contains Light/Dark semantic colors and the typography, spacing, shape, depth, and interaction definitions extracted from krigsvold.org.
4
4
 
5
+ ## Design direction
6
+
7
+ For the design direction and criteria for expanding the system, read the [Krigsvold design charter](docs/charter.md).
8
+
5
9
  ## Choose what to adopt
6
10
 
7
11
  | Import | Effect |
@@ -50,3 +54,13 @@ Version 2.1 adds optional [`layout.css`](docs/layout.md), the `layout` JavaScrip
50
54
  ## Releases
51
55
 
52
56
  Stable GitHub releases can publish automatically through npm trusted publishing. See [release setup](docs/releasing.md) for the one-time package authorization and release order.
57
+
58
+ ## Foundations specification
59
+
60
+ Read the [working foundations specification](docs/foundations.md) for spacing relationships, responsive composition, typography, density, surfaces, motion, accessibility, and the distinction between shipped values and proposed application roles.
61
+
62
+ ## Consolidated language candidate
63
+
64
+ [Grammar](docs/grammar.md), [source decisions](docs/source-decisions.md), [framework and migration guide](docs/consolidation.md), and [machine-readable support](language.json) describe the unreleased core 2.2.0 / Astro 1.2.0 consolidation. Existing defaults remain compatible; the source profile is opt-in.
65
+
66
+ [Grammar coverage review](docs/coverage.md), [validated forms](docs/patterns/forms.md), and [query/results patterns](docs/patterns/query-results.md) extend the experimental grammar to 0.3.
package/dist/dark.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.1.0",
2
+ "version": "2.2.0",
3
3
  "id": "krigsvold-dark",
4
4
  "name": "Krigsvold Dark",
5
5
  "mode": "dark",
package/dist/full.css CHANGED
@@ -3,3 +3,4 @@
3
3
  @import './typography.css';
4
4
  @import './components.css';
5
5
  @import './layout.css';
6
+ @import './patterns.css';
@@ -1,4 +1,4 @@
1
- /* Krigsvold Dark 2.1.0. MIT. */
1
+ /* Krigsvold Dark 2.2.0. MIT. */
2
2
  pre code.hljs { display: block; overflow-x: auto; padding: 1em; }
3
3
  code.hljs { padding: 3px 5px; }
4
4
  .hljs { background: #061325; color: #EEF8FA; }
@@ -1,4 +1,4 @@
1
- /* Krigsvold Light 2.1.0. MIT. */
1
+ /* Krigsvold Light 2.2.0. MIT. */
2
2
  pre code.hljs { display: block; overflow-x: auto; padding: 1em; }
3
3
  code.hljs { padding: 3px 5px; }
4
4
  .hljs { background: #FBFAF7; color: #17202A; }
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const data = {"name":"Krigsvold","version":"2.1.0","heritage":{"navy950":"#061325","navy900":"#0A1D35","navy800":"#123456","blue600":"#286A9D","ice400":"#9ED5E6","ice200":"#D9EEF4","ice100":"#EEF8FA","paper":"#FBFAF7","ink":"#17202A","muted":"#56616C","rule":"#D9DEE2","gold":"#B58A3B"},"design":{"radius":{"sm":".15rem","md":".3rem","lg":".4rem","control":".15rem","card":"0"},"spacing":{"1":".25rem","2":".5rem","3":".75rem","4":"1rem","6":"1.5rem","8":"2rem","12":"3rem","16":"4rem","24":"6rem"},"fonts":{"serif":"'Roboto Slab', Georgia, serif","sans":"'Roboto', Arial, sans-serif","display":"'Roboto Slab', Georgia, serif","mono":"'Roboto Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace","ui":"'Roboto', Arial, sans-serif","code":"'Roboto Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"},"widths":{"reading-width":"760px","content-width":"1320px","archive-width":"1320px"},"shadows":{"shadow-sm":"0 10px 35px rgb(0 0 0 / 12%)","shadow-md":"0 18px 44px rgb(6 19 37 / 18%)","shadow-lg":"0 24px 65px rgb(10 29 53 / 12%)"},"motion":{"transition":".15s ease-in","reduced":"0s"},"breakpoints":{"sm":"576px","md":"768px","lg":"992px","xl":"1200px","xxl":"1400px"}},"foundation":{"origin":"https://krigsvold.org/","sourceRepository":"basuhoward/krigsvold.org","sourceCommit":"e92e989b6e850b3a9cd8fbb565edb7eba6d3a6f7","sourceFiles":["assets/css/krigsvold.css","_includes/head.html","assets/css/material-kit.css","assets/scss/material-kit/bootstrap/_variables.scss"],"tokens":{"color-navy-950":"#061325","color-navy-900":"#0a1d35","color-navy-800":"#123456","color-blue-600":"#286a9d","color-ice-400":"#9ed5e6","color-ice-200":"#d9eef4","color-ice-100":"#eef8fa","color-paper":"#fbfaf7","color-ink":"#17202a","color-muted":"#56616c","color-rule":"#d9dee2","color-gold":"#b58a3b","font-serif":"'Roboto Slab', Georgia, serif","font-display":"'Roboto Slab', Georgia, serif","font-sans":"'Roboto', Arial, sans-serif","font-mono":"'Roboto Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace","space-1":".25rem","space-2":".5rem","space-3":".75rem","space-4":"1rem","space-6":"1.5rem","space-8":"2rem","space-12":"3rem","space-16":"4rem","space-24":"6rem","reading-width":"760px","content-width":"1320px","archive-width":"1320px","radius-sm":".15rem","radius-md":".3rem","radius-lg":".4rem","radius-control":".15rem","radius-card":"0","shadow-sm":"0 10px 35px rgb(0 0 0 / 12%)","shadow-md":"0 18px 44px rgb(6 19 37 / 18%)","shadow-lg":"0 24px 65px rgb(10 29 53 / 12%)","shadow-card":"none","transition-ui":".15s ease-in","motion-duration":".15s","text-body":"1.06rem","text-h1":"clamp(2.8rem, 6vw, 5.5rem)","text-h2":"2.1rem","text-h3":"1.42rem","text-display":"clamp(3.4rem, 7vw, 6.8rem)","text-section":"clamp(2rem, 4vw, 3.5rem)","leading-body":"1.65","leading-heading":"1.13","leading-display":".98","weight-heading":"700","tracking-heading":"-.025em","tracking-display":"-.045em","tracking-label":".16em","tracking-button":".035em","border-width":"1px","focus-width":"3px","focus-gap":"3px","gutter":".75rem","section-space":"clamp(4.5rem, 8vw, 7.5rem)","control-height":"2.75rem","control-padding":".9rem","button-padding":".625rem 1.5rem","text-button":".75rem","leading-button":"1.667","divider-width":"3rem","divider-thickness":"3px","link-underline-offset":".18em","hero-overlay":"linear-gradient(90deg, rgba(3,15,30,.93) 0%, rgba(6,27,51,.76) 52%, rgba(7,28,48,.42) 100%)","breakpoint-sm":"576px","breakpoint-md":"768px","breakpoint-lg":"992px","breakpoint-xl":"1200px","breakpoint-xxl":"1400px","layout-gap":"2rem","layout-gap-small":"1rem","layout-gap-large":"3rem","layout-sidebar-width":"20rem","layout-main-min":"30rem","layout-grid-min":"20rem","layout-split-min":"22rem","layout-section-space":"clamp(4.5rem, 8vw, 7.5rem)"},"typographyRoles":{"serif":{"family":"Roboto Slab","usage":"Editorial headings, ledes, quotations","weights":[400,700]},"display":{"family":"Roboto Slab","usage":"Hero and page titles, section headings","weights":[400,700]},"sans":{"family":"Roboto","usage":"Body prose, navigation, controls, tables, metadata","weights":[400,500,700],"styles":["normal","italic"]},"mono":{"family":"Roboto Mono","usage":"Code, terminal text, keyboard notation","weights":[400,500,700],"styles":["normal","italic"],"provenance":"New redistributable companion selected for the Roboto family"}},"normalization":{"spacing":"Quarter-rem scale organizing the source site’s recurring spacing; values are not taken from the theme demo.","focus":"Explicit 3px visible focus ring and offset added for reusable controls.","controlHeight":"44px minimum interaction target added to the generic primitives.","readingWidth":"760px text measure from source hero/subtitle limits, generalized to reading containers.","card":"Flat editorial card from .work-card, with a 3px top rule; larger feature shadows remain separately available.","motion":"Source Material Kit .15s ease-in transition, reduced to zero when requested."}},"capabilities":{"web-core":{"applied":["colors","typography variables","spacing","shape","depth","interaction variables","layout primitives"],"optional":["font loading","element typography","components"]},"astro":{"applied":["web-core","document shell","container","section heading","card","button","page header","site header","site footer","article layout","landing layout","documentation layout"],"hostOwned":["navigation","content","consent","analytics","personal identity"]},"vim":{"applied":["colors","syntax"],"separateConfiguration":["monospace font"],"unsupported":["web layout","proportional typography"]},"emacs":{"applied":["colors","syntax"],"separateConfiguration":["font roles"],"unsupported":["web layout"]},"terminal":{"applied":["colors"],"separateConfiguration":["monospace font"],"unsupported":["web layout","serif","sans"]},"firefox":{"applied":["browser chrome colors"],"unsupported":["fonts","website content","spacing","components"]},"chrome":{"applied":["browser chrome colors"],"unsupported":["fonts","website content","spacing","components"]}},"layout":{"schemaVersion":1,"primitives":["container","stack","cluster","grid","sidebar","split"],"compositions":["article","landing","documentation"],"defaults":{"space":"regular","columns":3,"splitRatio":"equal","sidebarSide":"end"},"tokens":{"layout-gap":"2rem","layout-gap-small":"1rem","layout-gap-large":"3rem","layout-sidebar-width":"20rem","layout-main-min":"30rem","layout-grid-min":"20rem","layout-split-min":"22rem","layout-section-space":"clamp(4.5rem, 8vw, 7.5rem)"},"sources":[{"url":"https://krigsvold.org/","repository":"basuhoward/krigsvold.org","commit":"a3cf072c516c59ed35814e0fa153028cc91ceecd","files":["src/layouts/Page.astro","src/components/HomeContent.astro","src/components/HomeHero.astro","src/styles/site.css"]},{"url":"https://krigsvoldtheme.dev/","repository":"krigsvoldtheme/krigsvoldtheme","commit":"880bdd2bd8430bbdfd8d728faaae0c21199540b1","files":["site/src/pages/index.astro","site/src/styles/global.css","site/src/components/FoundationSpecimen.astro"]}],"normalization":{"intrinsicSizing":"Columns and sidebars respond to their available container width, including nested containers, rather than only to viewport breakpoints.","readingOrder":"Sidebar side selects matching DOM order; split content retains its source order at all widths.","scope":"Namespaced optional layout classes; no global reset, framework dependency, image, personal identity, or scripts."}},"themes":{"light":{"id":"krigsvold-light","name":"Krigsvold Light","mode":"light","tokens":{"bg":"#FBFAF7","panel":"#EEF8FA","panel2":"#D9EEF4","text":"#17202A","muted":"#56616C","accent":"#286A9D","accent2":"#79571F","on-accent":"#FFFFFF","accent-hover":"#1E557F","line":"#D9DEE2","control-line":"#75828D","focus":"#286A9D","selection":"#C6E2EC","selection-text":"#17202A","green":"#35644E","danger":"#9A3542","warning":"#79571F","error-bg":"#F5E6E6","error-text":"#9A3542","shadow":"0 10px 40px #0613251A","surface-canvas":"#FBFAF7","surface-subtle":"#FEFEFC","surface-sunken":"#E4EDF0","surface-overlay":"#FFFFFF","text-strong":"#061325","text-subtle":"#56616C","text-disabled":"#62717B","text-inverse":"#FFFFFF","link":"#286A9D","link-hover":"#123456","link-visited":"#655477","border-subtle":"#D9DEE2","border-strong":"#75828D","input-bg":"#FFFFFF","input-text":"#17202A","input-placeholder":"#62717B","input-border":"#75828D","button-secondary-bg":"#D9EEF4","button-secondary-text":"#17202A","button-secondary-hover":"#C6E2EC","disabled-bg":"#E4EDF0","disabled-text":"#62717B","focus-ring":"#286A9D","focus-offset":"#FBFAF7","hover-bg":"#EEF8FA","active-bg":"#D9EEF4","code-bg":"#EEF8FA","code-text":"#17202A","quote-border":"#286A9D","table-stripe":"#EEF8FA","scrollbar-track":"#EEF8FA","scrollbar-thumb":"#75828D","overlay-scrim":"#061325AA","info":"#286A9D","info-bg":"#E3F1F5","info-text":"#123456","success":"#35644E","success-bg":"#E7F1E9","success-text":"#285039","warning-bg":"#F5ECD9","warning-text":"#79571F","danger-bg":"#F5E6E6","danger-text":"#9A3542","chart-1":"#286A9D","chart-2":"#35644E","chart-3":"#79571F","chart-4":"#9A3542","chart-5":"#655477","chart-6":"#187178","chart-7":"#985238","chart-8":"#56616C","chart-grid":"#D9DEE2","chart-axis":"#56616C","syntax-keyword":"#286A9D","syntax-string":"#35644E","syntax-function":"#123456","syntax-type":"#79571F","syntax-variable":"#17202A","syntax-comment":"#56616C","syntax-number":"#9A3542","syntax-operator":"#56616C","syntax-constant":"#655477","syntax-tag":"#286A9D","syntax-attribute":"#79571F","syntax-regexp":"#35644E","syntax-invalid":"#9A3542","syntax-property":"#123456","syntax-decorator":"#655477"}},"dark":{"id":"krigsvold-dark","name":"Krigsvold Dark","mode":"dark","tokens":{"bg":"#061325","panel":"#0A1D35","panel2":"#123456","text":"#EEF8FA","muted":"#B3CCD5","accent":"#9ED5E6","accent2":"#D9B876","on-accent":"#061325","accent-hover":"#D9EEF4","line":"#345066","control-line":"#7A929F","focus":"#9ED5E6","selection":"#244C61","selection-text":"#EEF8FA","green":"#A6CFB5","danger":"#F0A4AF","warning":"#E0BF84","error-bg":"#302335","error-text":"#F0A4AF","shadow":"0 10px 40px #00000055","surface-canvas":"#061325","surface-subtle":"#07182B","surface-sunken":"#040E1C","surface-overlay":"#123456","text-strong":"#FBFAF7","text-subtle":"#B3CCD5","text-disabled":"#8BA4B2","text-inverse":"#061325","link":"#9ED5E6","link-hover":"#D9EEF4","link-visited":"#C6B6DB","border-subtle":"#345066","border-strong":"#7A929F","input-bg":"#0A1D35","input-text":"#EEF8FA","input-placeholder":"#B3CCD5","input-border":"#7A929F","button-secondary-bg":"#123456","button-secondary-text":"#EEF8FA","button-secondary-hover":"#1C4565","disabled-bg":"#183044","disabled-text":"#8BA4B2","focus-ring":"#9ED5E6","focus-offset":"#061325","hover-bg":"#123456","active-bg":"#1C4565","code-bg":"#0A1D35","code-text":"#EEF8FA","quote-border":"#9ED5E6","table-stripe":"#0A1D35","scrollbar-track":"#0A1D35","scrollbar-thumb":"#607B8D","overlay-scrim":"#061325CC","info":"#9ED5E6","info-bg":"#103549","info-text":"#D9EEF4","success":"#A6CFB5","success-bg":"#16362B","success-text":"#B7DDC3","warning-bg":"#3B301F","warning-text":"#E8CB97","danger-bg":"#3D2330","danger-text":"#F4B4BC","chart-1":"#9ED5E6","chart-2":"#D9B876","chart-3":"#A6CFB5","chart-4":"#F0A4AF","chart-5":"#C6B6DB","chart-6":"#8FCBC7","chart-7":"#E1AC90","chart-8":"#D4D8D9","chart-grid":"#345066","chart-axis":"#B3CCD5","syntax-keyword":"#9ED5E6","syntax-string":"#A6CFB5","syntax-function":"#C2E4EF","syntax-type":"#D9B876","syntax-variable":"#EEF8FA","syntax-comment":"#B3CCD5","syntax-number":"#F0A4AF","syntax-operator":"#B3CCD5","syntax-constant":"#C6B6DB","syntax-tag":"#9ED5E6","syntax-attribute":"#D9B876","syntax-regexp":"#A6CFB5","syntax-invalid":"#F0A4AF","syntax-property":"#C2E4EF","syntax-decorator":"#C6B6DB"}}}};
1
+ const data = {"name":"Krigsvold","version":"2.2.0","heritage":{"navy950":"#061325","navy900":"#0A1D35","navy800":"#123456","blue600":"#286A9D","ice400":"#9ED5E6","ice200":"#D9EEF4","ice100":"#EEF8FA","paper":"#FBFAF7","ink":"#17202A","muted":"#56616C","rule":"#D9DEE2","gold":"#B58A3B"},"design":{"radius":{"sm":".15rem","md":".3rem","lg":".4rem","control":".15rem","card":"0"},"spacing":{"1":".25rem","2":".5rem","3":".75rem","4":"1rem","6":"1.5rem","8":"2rem","12":"3rem","16":"4rem","24":"6rem"},"fonts":{"serif":"'Roboto Slab', Georgia, serif","sans":"'Roboto', Arial, sans-serif","display":"'Roboto Slab', Georgia, serif","mono":"'Roboto Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace","ui":"'Roboto', Arial, sans-serif","code":"'Roboto Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"},"widths":{"reading-width":"760px","content-width":"1320px","archive-width":"1320px"},"shadows":{"shadow-sm":"0 10px 35px rgb(0 0 0 / 12%)","shadow-md":"0 18px 44px rgb(6 19 37 / 18%)","shadow-lg":"0 24px 65px rgb(10 29 53 / 12%)"},"motion":{"transition":".15s ease-in","reduced":"0s"},"breakpoints":{"sm":"576px","md":"768px","lg":"992px","xl":"1200px","xxl":"1400px"}},"foundation":{"origin":"https://krigsvold.org/","sourceRepository":"basuhoward/krigsvold.org","sourceCommit":"e92e989b6e850b3a9cd8fbb565edb7eba6d3a6f7","sourceFiles":["assets/css/krigsvold.css","_includes/head.html","assets/css/material-kit.css","assets/scss/material-kit/bootstrap/_variables.scss"],"tokens":{"color-navy-950":"#061325","color-navy-900":"#0a1d35","color-navy-800":"#123456","color-blue-600":"#286a9d","color-ice-400":"#9ed5e6","color-ice-200":"#d9eef4","color-ice-100":"#eef8fa","color-paper":"#fbfaf7","color-ink":"#17202a","color-muted":"#56616c","color-rule":"#d9dee2","color-gold":"#b58a3b","font-serif":"'Roboto Slab', Georgia, serif","font-display":"'Roboto Slab', Georgia, serif","font-sans":"'Roboto', Arial, sans-serif","font-mono":"'Roboto Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace","space-1":".25rem","space-2":".5rem","space-3":".75rem","space-4":"1rem","space-6":"1.5rem","space-8":"2rem","space-12":"3rem","space-16":"4rem","space-24":"6rem","reading-width":"760px","content-width":"1320px","archive-width":"1320px","radius-sm":".15rem","radius-md":".3rem","radius-lg":".4rem","radius-control":".15rem","radius-card":"0","shadow-sm":"0 10px 35px rgb(0 0 0 / 12%)","shadow-md":"0 18px 44px rgb(6 19 37 / 18%)","shadow-lg":"0 24px 65px rgb(10 29 53 / 12%)","shadow-card":"none","transition-ui":".15s ease-in","motion-duration":".15s","text-body":"1.06rem","text-h1":"clamp(2.8rem, 6vw, 5.5rem)","text-h2":"2.1rem","text-h3":"1.42rem","text-display":"clamp(3.4rem, 7vw, 6.8rem)","text-section":"clamp(2rem, 4vw, 3.5rem)","leading-body":"1.65","leading-heading":"1.13","leading-display":".98","weight-heading":"700","tracking-heading":"-.025em","tracking-display":"-.045em","tracking-label":".16em","tracking-button":".035em","border-width":"1px","focus-width":"3px","focus-gap":"3px","gutter":".75rem","section-space":"clamp(4.5rem, 8vw, 7.5rem)","control-height":"2.75rem","control-padding":".9rem","button-padding":".625rem 1.5rem","text-button":".75rem","leading-button":"1.667","divider-width":"3rem","divider-thickness":"3px","link-underline-offset":".18em","hero-overlay":"linear-gradient(90deg, rgba(3,15,30,.93) 0%, rgba(6,27,51,.76) 52%, rgba(7,28,48,.42) 100%)","breakpoint-sm":"576px","breakpoint-md":"768px","breakpoint-lg":"992px","breakpoint-xl":"1200px","breakpoint-xxl":"1400px","layout-gap":"2rem","layout-gap-small":"1rem","layout-gap-large":"3rem","layout-sidebar-width":"20rem","layout-main-min":"30rem","layout-grid-min":"20rem","layout-split-min":"22rem","layout-section-space":"clamp(4.5rem, 8vw, 7.5rem)"},"typographyRoles":{"serif":{"family":"Roboto Slab","usage":"Editorial headings, ledes, quotations","weights":[400,700]},"display":{"family":"Roboto Slab","usage":"Hero and page titles, section headings","weights":[400,700]},"sans":{"family":"Roboto","usage":"Body prose, navigation, controls, tables, metadata","weights":[400,500,700],"styles":["normal","italic"]},"mono":{"family":"Roboto Mono","usage":"Code, terminal text, keyboard notation","weights":[400,500,700],"styles":["normal","italic"],"provenance":"New redistributable companion selected for the Roboto family"}},"normalization":{"spacing":"Quarter-rem scale organizing the source site’s recurring spacing; values are not taken from the theme demo.","focus":"Explicit 3px visible focus ring and offset added for reusable controls.","controlHeight":"44px minimum interaction target added to the generic primitives.","readingWidth":"760px text measure from source hero/subtitle limits, generalized to reading containers.","card":"Flat editorial card from .work-card, with a 3px top rule; larger feature shadows remain separately available.","motion":"Source Material Kit .15s ease-in transition, reduced to zero when requested."}},"capabilities":{"web-core":{"applied":["colors","typography variables","spacing","shape","depth","interaction variables","layout primitives"],"optional":["font loading","element typography","components"]},"astro":{"applied":["web-core","document shell","container","section heading","card","button","page header","site header","site footer","article layout","landing layout","documentation layout"],"hostOwned":["navigation","content","consent","analytics","personal identity"]},"vim":{"applied":["colors","syntax"],"separateConfiguration":["monospace font"],"unsupported":["web layout","proportional typography"]},"emacs":{"applied":["colors","syntax"],"separateConfiguration":["font roles"],"unsupported":["web layout"]},"terminal":{"applied":["colors"],"separateConfiguration":["monospace font"],"unsupported":["web layout","serif","sans"]},"firefox":{"applied":["browser chrome colors"],"unsupported":["fonts","website content","spacing","components"]},"chrome":{"applied":["browser chrome colors"],"unsupported":["fonts","website content","spacing","components"]}},"layout":{"schemaVersion":1,"primitives":["container","stack","cluster","grid","sidebar","split"],"compositions":["article","landing","documentation"],"defaults":{"space":"regular","columns":3,"splitRatio":"equal","sidebarSide":"end"},"tokens":{"layout-gap":"2rem","layout-gap-small":"1rem","layout-gap-large":"3rem","layout-sidebar-width":"20rem","layout-main-min":"30rem","layout-grid-min":"20rem","layout-split-min":"22rem","layout-section-space":"clamp(4.5rem, 8vw, 7.5rem)"},"sources":[{"url":"https://krigsvold.org/","repository":"basuhoward/krigsvold.org","commit":"a3cf072c516c59ed35814e0fa153028cc91ceecd","files":["src/layouts/Page.astro","src/components/HomeContent.astro","src/components/HomeHero.astro","src/styles/site.css"]},{"url":"https://krigsvoldtheme.dev/","repository":"krigsvoldtheme/krigsvoldtheme","commit":"880bdd2bd8430bbdfd8d728faaae0c21199540b1","files":["site/src/pages/index.astro","site/src/styles/global.css","site/src/components/FoundationSpecimen.astro"]}],"normalization":{"intrinsicSizing":"Columns and sidebars respond to their available container width, including nested containers, rather than only to viewport breakpoints.","readingOrder":"Sidebar side selects matching DOM order; split content retains its source order at all widths.","scope":"Namespaced optional layout classes; no global reset, framework dependency, image, personal identity, or scripts."}},"themes":{"light":{"id":"krigsvold-light","name":"Krigsvold Light","mode":"light","tokens":{"bg":"#FBFAF7","panel":"#EEF8FA","panel2":"#D9EEF4","text":"#17202A","muted":"#56616C","accent":"#286A9D","accent2":"#79571F","on-accent":"#FFFFFF","accent-hover":"#1E557F","line":"#D9DEE2","control-line":"#75828D","focus":"#286A9D","selection":"#C6E2EC","selection-text":"#17202A","green":"#35644E","danger":"#9A3542","warning":"#79571F","error-bg":"#F5E6E6","error-text":"#9A3542","shadow":"0 10px 40px #0613251A","surface-canvas":"#FBFAF7","surface-subtle":"#FEFEFC","surface-sunken":"#E4EDF0","surface-overlay":"#FFFFFF","text-strong":"#061325","text-subtle":"#56616C","text-disabled":"#62717B","text-inverse":"#FFFFFF","link":"#286A9D","link-hover":"#123456","link-visited":"#655477","border-subtle":"#D9DEE2","border-strong":"#75828D","input-bg":"#FFFFFF","input-text":"#17202A","input-placeholder":"#62717B","input-border":"#75828D","button-secondary-bg":"#D9EEF4","button-secondary-text":"#17202A","button-secondary-hover":"#C6E2EC","disabled-bg":"#E4EDF0","disabled-text":"#62717B","focus-ring":"#286A9D","focus-offset":"#FBFAF7","hover-bg":"#EEF8FA","active-bg":"#D9EEF4","code-bg":"#EEF8FA","code-text":"#17202A","quote-border":"#286A9D","table-stripe":"#EEF8FA","scrollbar-track":"#EEF8FA","scrollbar-thumb":"#75828D","overlay-scrim":"#061325AA","info":"#286A9D","info-bg":"#E3F1F5","info-text":"#123456","success":"#35644E","success-bg":"#E7F1E9","success-text":"#285039","warning-bg":"#F5ECD9","warning-text":"#79571F","danger-bg":"#F5E6E6","danger-text":"#9A3542","chart-1":"#286A9D","chart-2":"#35644E","chart-3":"#79571F","chart-4":"#9A3542","chart-5":"#655477","chart-6":"#187178","chart-7":"#985238","chart-8":"#56616C","chart-grid":"#D9DEE2","chart-axis":"#56616C","syntax-keyword":"#286A9D","syntax-string":"#35644E","syntax-function":"#123456","syntax-type":"#79571F","syntax-variable":"#17202A","syntax-comment":"#56616C","syntax-number":"#9A3542","syntax-operator":"#56616C","syntax-constant":"#655477","syntax-tag":"#286A9D","syntax-attribute":"#79571F","syntax-regexp":"#35644E","syntax-invalid":"#9A3542","syntax-property":"#123456","syntax-decorator":"#655477"}},"dark":{"id":"krigsvold-dark","name":"Krigsvold Dark","mode":"dark","tokens":{"bg":"#061325","panel":"#0A1D35","panel2":"#123456","text":"#EEF8FA","muted":"#B3CCD5","accent":"#9ED5E6","accent2":"#D9B876","on-accent":"#061325","accent-hover":"#D9EEF4","line":"#345066","control-line":"#7A929F","focus":"#9ED5E6","selection":"#244C61","selection-text":"#EEF8FA","green":"#A6CFB5","danger":"#F0A4AF","warning":"#E0BF84","error-bg":"#302335","error-text":"#F0A4AF","shadow":"0 10px 40px #00000055","surface-canvas":"#061325","surface-subtle":"#07182B","surface-sunken":"#040E1C","surface-overlay":"#123456","text-strong":"#FBFAF7","text-subtle":"#B3CCD5","text-disabled":"#8BA4B2","text-inverse":"#061325","link":"#9ED5E6","link-hover":"#D9EEF4","link-visited":"#C6B6DB","border-subtle":"#345066","border-strong":"#7A929F","input-bg":"#0A1D35","input-text":"#EEF8FA","input-placeholder":"#B3CCD5","input-border":"#7A929F","button-secondary-bg":"#123456","button-secondary-text":"#EEF8FA","button-secondary-hover":"#1C4565","disabled-bg":"#183044","disabled-text":"#8BA4B2","focus-ring":"#9ED5E6","focus-offset":"#061325","hover-bg":"#123456","active-bg":"#1C4565","code-bg":"#0A1D35","code-text":"#EEF8FA","quote-border":"#9ED5E6","table-stripe":"#0A1D35","scrollbar-track":"#0A1D35","scrollbar-thumb":"#607B8D","overlay-scrim":"#061325CC","info":"#9ED5E6","info-bg":"#103549","info-text":"#D9EEF4","success":"#A6CFB5","success-bg":"#16362B","success-text":"#B7DDC3","warning-bg":"#3B301F","warning-text":"#E8CB97","danger-bg":"#3D2330","danger-text":"#F4B4BC","chart-1":"#9ED5E6","chart-2":"#D9B876","chart-3":"#A6CFB5","chart-4":"#F0A4AF","chart-5":"#C6B6DB","chart-6":"#8FCBC7","chart-7":"#E1AC90","chart-8":"#D4D8D9","chart-grid":"#345066","chart-axis":"#B3CCD5","syntax-keyword":"#9ED5E6","syntax-string":"#A6CFB5","syntax-function":"#C2E4EF","syntax-type":"#D9B876","syntax-variable":"#EEF8FA","syntax-comment":"#B3CCD5","syntax-number":"#F0A4AF","syntax-operator":"#B3CCD5","syntax-constant":"#C6B6DB","syntax-tag":"#9ED5E6","syntax-attribute":"#D9B876","syntax-regexp":"#A6CFB5","syntax-invalid":"#F0A4AF","syntax-property":"#C2E4EF","syntax-decorator":"#C6B6DB"}}}};
2
2
  const {themes,heritage,design,foundation,capabilities,layout,version}=data;
3
3
  const {light,dark}=themes;
4
4
  module.exports={themes,light,dark,heritage,design,foundation,capabilities,layout,version,default:themes};
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- const data = {"name":"Krigsvold","version":"2.1.0","heritage":{"navy950":"#061325","navy900":"#0A1D35","navy800":"#123456","blue600":"#286A9D","ice400":"#9ED5E6","ice200":"#D9EEF4","ice100":"#EEF8FA","paper":"#FBFAF7","ink":"#17202A","muted":"#56616C","rule":"#D9DEE2","gold":"#B58A3B"},"design":{"radius":{"sm":".15rem","md":".3rem","lg":".4rem","control":".15rem","card":"0"},"spacing":{"1":".25rem","2":".5rem","3":".75rem","4":"1rem","6":"1.5rem","8":"2rem","12":"3rem","16":"4rem","24":"6rem"},"fonts":{"serif":"'Roboto Slab', Georgia, serif","sans":"'Roboto', Arial, sans-serif","display":"'Roboto Slab', Georgia, serif","mono":"'Roboto Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace","ui":"'Roboto', Arial, sans-serif","code":"'Roboto Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"},"widths":{"reading-width":"760px","content-width":"1320px","archive-width":"1320px"},"shadows":{"shadow-sm":"0 10px 35px rgb(0 0 0 / 12%)","shadow-md":"0 18px 44px rgb(6 19 37 / 18%)","shadow-lg":"0 24px 65px rgb(10 29 53 / 12%)"},"motion":{"transition":".15s ease-in","reduced":"0s"},"breakpoints":{"sm":"576px","md":"768px","lg":"992px","xl":"1200px","xxl":"1400px"}},"foundation":{"origin":"https://krigsvold.org/","sourceRepository":"basuhoward/krigsvold.org","sourceCommit":"e92e989b6e850b3a9cd8fbb565edb7eba6d3a6f7","sourceFiles":["assets/css/krigsvold.css","_includes/head.html","assets/css/material-kit.css","assets/scss/material-kit/bootstrap/_variables.scss"],"tokens":{"color-navy-950":"#061325","color-navy-900":"#0a1d35","color-navy-800":"#123456","color-blue-600":"#286a9d","color-ice-400":"#9ed5e6","color-ice-200":"#d9eef4","color-ice-100":"#eef8fa","color-paper":"#fbfaf7","color-ink":"#17202a","color-muted":"#56616c","color-rule":"#d9dee2","color-gold":"#b58a3b","font-serif":"'Roboto Slab', Georgia, serif","font-display":"'Roboto Slab', Georgia, serif","font-sans":"'Roboto', Arial, sans-serif","font-mono":"'Roboto Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace","space-1":".25rem","space-2":".5rem","space-3":".75rem","space-4":"1rem","space-6":"1.5rem","space-8":"2rem","space-12":"3rem","space-16":"4rem","space-24":"6rem","reading-width":"760px","content-width":"1320px","archive-width":"1320px","radius-sm":".15rem","radius-md":".3rem","radius-lg":".4rem","radius-control":".15rem","radius-card":"0","shadow-sm":"0 10px 35px rgb(0 0 0 / 12%)","shadow-md":"0 18px 44px rgb(6 19 37 / 18%)","shadow-lg":"0 24px 65px rgb(10 29 53 / 12%)","shadow-card":"none","transition-ui":".15s ease-in","motion-duration":".15s","text-body":"1.06rem","text-h1":"clamp(2.8rem, 6vw, 5.5rem)","text-h2":"2.1rem","text-h3":"1.42rem","text-display":"clamp(3.4rem, 7vw, 6.8rem)","text-section":"clamp(2rem, 4vw, 3.5rem)","leading-body":"1.65","leading-heading":"1.13","leading-display":".98","weight-heading":"700","tracking-heading":"-.025em","tracking-display":"-.045em","tracking-label":".16em","tracking-button":".035em","border-width":"1px","focus-width":"3px","focus-gap":"3px","gutter":".75rem","section-space":"clamp(4.5rem, 8vw, 7.5rem)","control-height":"2.75rem","control-padding":".9rem","button-padding":".625rem 1.5rem","text-button":".75rem","leading-button":"1.667","divider-width":"3rem","divider-thickness":"3px","link-underline-offset":".18em","hero-overlay":"linear-gradient(90deg, rgba(3,15,30,.93) 0%, rgba(6,27,51,.76) 52%, rgba(7,28,48,.42) 100%)","breakpoint-sm":"576px","breakpoint-md":"768px","breakpoint-lg":"992px","breakpoint-xl":"1200px","breakpoint-xxl":"1400px","layout-gap":"2rem","layout-gap-small":"1rem","layout-gap-large":"3rem","layout-sidebar-width":"20rem","layout-main-min":"30rem","layout-grid-min":"20rem","layout-split-min":"22rem","layout-section-space":"clamp(4.5rem, 8vw, 7.5rem)"},"typographyRoles":{"serif":{"family":"Roboto Slab","usage":"Editorial headings, ledes, quotations","weights":[400,700]},"display":{"family":"Roboto Slab","usage":"Hero and page titles, section headings","weights":[400,700]},"sans":{"family":"Roboto","usage":"Body prose, navigation, controls, tables, metadata","weights":[400,500,700],"styles":["normal","italic"]},"mono":{"family":"Roboto Mono","usage":"Code, terminal text, keyboard notation","weights":[400,500,700],"styles":["normal","italic"],"provenance":"New redistributable companion selected for the Roboto family"}},"normalization":{"spacing":"Quarter-rem scale organizing the source site’s recurring spacing; values are not taken from the theme demo.","focus":"Explicit 3px visible focus ring and offset added for reusable controls.","controlHeight":"44px minimum interaction target added to the generic primitives.","readingWidth":"760px text measure from source hero/subtitle limits, generalized to reading containers.","card":"Flat editorial card from .work-card, with a 3px top rule; larger feature shadows remain separately available.","motion":"Source Material Kit .15s ease-in transition, reduced to zero when requested."}},"capabilities":{"web-core":{"applied":["colors","typography variables","spacing","shape","depth","interaction variables","layout primitives"],"optional":["font loading","element typography","components"]},"astro":{"applied":["web-core","document shell","container","section heading","card","button","page header","site header","site footer","article layout","landing layout","documentation layout"],"hostOwned":["navigation","content","consent","analytics","personal identity"]},"vim":{"applied":["colors","syntax"],"separateConfiguration":["monospace font"],"unsupported":["web layout","proportional typography"]},"emacs":{"applied":["colors","syntax"],"separateConfiguration":["font roles"],"unsupported":["web layout"]},"terminal":{"applied":["colors"],"separateConfiguration":["monospace font"],"unsupported":["web layout","serif","sans"]},"firefox":{"applied":["browser chrome colors"],"unsupported":["fonts","website content","spacing","components"]},"chrome":{"applied":["browser chrome colors"],"unsupported":["fonts","website content","spacing","components"]}},"layout":{"schemaVersion":1,"primitives":["container","stack","cluster","grid","sidebar","split"],"compositions":["article","landing","documentation"],"defaults":{"space":"regular","columns":3,"splitRatio":"equal","sidebarSide":"end"},"tokens":{"layout-gap":"2rem","layout-gap-small":"1rem","layout-gap-large":"3rem","layout-sidebar-width":"20rem","layout-main-min":"30rem","layout-grid-min":"20rem","layout-split-min":"22rem","layout-section-space":"clamp(4.5rem, 8vw, 7.5rem)"},"sources":[{"url":"https://krigsvold.org/","repository":"basuhoward/krigsvold.org","commit":"a3cf072c516c59ed35814e0fa153028cc91ceecd","files":["src/layouts/Page.astro","src/components/HomeContent.astro","src/components/HomeHero.astro","src/styles/site.css"]},{"url":"https://krigsvoldtheme.dev/","repository":"krigsvoldtheme/krigsvoldtheme","commit":"880bdd2bd8430bbdfd8d728faaae0c21199540b1","files":["site/src/pages/index.astro","site/src/styles/global.css","site/src/components/FoundationSpecimen.astro"]}],"normalization":{"intrinsicSizing":"Columns and sidebars respond to their available container width, including nested containers, rather than only to viewport breakpoints.","readingOrder":"Sidebar side selects matching DOM order; split content retains its source order at all widths.","scope":"Namespaced optional layout classes; no global reset, framework dependency, image, personal identity, or scripts."}},"themes":{"light":{"id":"krigsvold-light","name":"Krigsvold Light","mode":"light","tokens":{"bg":"#FBFAF7","panel":"#EEF8FA","panel2":"#D9EEF4","text":"#17202A","muted":"#56616C","accent":"#286A9D","accent2":"#79571F","on-accent":"#FFFFFF","accent-hover":"#1E557F","line":"#D9DEE2","control-line":"#75828D","focus":"#286A9D","selection":"#C6E2EC","selection-text":"#17202A","green":"#35644E","danger":"#9A3542","warning":"#79571F","error-bg":"#F5E6E6","error-text":"#9A3542","shadow":"0 10px 40px #0613251A","surface-canvas":"#FBFAF7","surface-subtle":"#FEFEFC","surface-sunken":"#E4EDF0","surface-overlay":"#FFFFFF","text-strong":"#061325","text-subtle":"#56616C","text-disabled":"#62717B","text-inverse":"#FFFFFF","link":"#286A9D","link-hover":"#123456","link-visited":"#655477","border-subtle":"#D9DEE2","border-strong":"#75828D","input-bg":"#FFFFFF","input-text":"#17202A","input-placeholder":"#62717B","input-border":"#75828D","button-secondary-bg":"#D9EEF4","button-secondary-text":"#17202A","button-secondary-hover":"#C6E2EC","disabled-bg":"#E4EDF0","disabled-text":"#62717B","focus-ring":"#286A9D","focus-offset":"#FBFAF7","hover-bg":"#EEF8FA","active-bg":"#D9EEF4","code-bg":"#EEF8FA","code-text":"#17202A","quote-border":"#286A9D","table-stripe":"#EEF8FA","scrollbar-track":"#EEF8FA","scrollbar-thumb":"#75828D","overlay-scrim":"#061325AA","info":"#286A9D","info-bg":"#E3F1F5","info-text":"#123456","success":"#35644E","success-bg":"#E7F1E9","success-text":"#285039","warning-bg":"#F5ECD9","warning-text":"#79571F","danger-bg":"#F5E6E6","danger-text":"#9A3542","chart-1":"#286A9D","chart-2":"#35644E","chart-3":"#79571F","chart-4":"#9A3542","chart-5":"#655477","chart-6":"#187178","chart-7":"#985238","chart-8":"#56616C","chart-grid":"#D9DEE2","chart-axis":"#56616C","syntax-keyword":"#286A9D","syntax-string":"#35644E","syntax-function":"#123456","syntax-type":"#79571F","syntax-variable":"#17202A","syntax-comment":"#56616C","syntax-number":"#9A3542","syntax-operator":"#56616C","syntax-constant":"#655477","syntax-tag":"#286A9D","syntax-attribute":"#79571F","syntax-regexp":"#35644E","syntax-invalid":"#9A3542","syntax-property":"#123456","syntax-decorator":"#655477"}},"dark":{"id":"krigsvold-dark","name":"Krigsvold Dark","mode":"dark","tokens":{"bg":"#061325","panel":"#0A1D35","panel2":"#123456","text":"#EEF8FA","muted":"#B3CCD5","accent":"#9ED5E6","accent2":"#D9B876","on-accent":"#061325","accent-hover":"#D9EEF4","line":"#345066","control-line":"#7A929F","focus":"#9ED5E6","selection":"#244C61","selection-text":"#EEF8FA","green":"#A6CFB5","danger":"#F0A4AF","warning":"#E0BF84","error-bg":"#302335","error-text":"#F0A4AF","shadow":"0 10px 40px #00000055","surface-canvas":"#061325","surface-subtle":"#07182B","surface-sunken":"#040E1C","surface-overlay":"#123456","text-strong":"#FBFAF7","text-subtle":"#B3CCD5","text-disabled":"#8BA4B2","text-inverse":"#061325","link":"#9ED5E6","link-hover":"#D9EEF4","link-visited":"#C6B6DB","border-subtle":"#345066","border-strong":"#7A929F","input-bg":"#0A1D35","input-text":"#EEF8FA","input-placeholder":"#B3CCD5","input-border":"#7A929F","button-secondary-bg":"#123456","button-secondary-text":"#EEF8FA","button-secondary-hover":"#1C4565","disabled-bg":"#183044","disabled-text":"#8BA4B2","focus-ring":"#9ED5E6","focus-offset":"#061325","hover-bg":"#123456","active-bg":"#1C4565","code-bg":"#0A1D35","code-text":"#EEF8FA","quote-border":"#9ED5E6","table-stripe":"#0A1D35","scrollbar-track":"#0A1D35","scrollbar-thumb":"#607B8D","overlay-scrim":"#061325CC","info":"#9ED5E6","info-bg":"#103549","info-text":"#D9EEF4","success":"#A6CFB5","success-bg":"#16362B","success-text":"#B7DDC3","warning-bg":"#3B301F","warning-text":"#E8CB97","danger-bg":"#3D2330","danger-text":"#F4B4BC","chart-1":"#9ED5E6","chart-2":"#D9B876","chart-3":"#A6CFB5","chart-4":"#F0A4AF","chart-5":"#C6B6DB","chart-6":"#8FCBC7","chart-7":"#E1AC90","chart-8":"#D4D8D9","chart-grid":"#345066","chart-axis":"#B3CCD5","syntax-keyword":"#9ED5E6","syntax-string":"#A6CFB5","syntax-function":"#C2E4EF","syntax-type":"#D9B876","syntax-variable":"#EEF8FA","syntax-comment":"#B3CCD5","syntax-number":"#F0A4AF","syntax-operator":"#B3CCD5","syntax-constant":"#C6B6DB","syntax-tag":"#9ED5E6","syntax-attribute":"#D9B876","syntax-regexp":"#A6CFB5","syntax-invalid":"#F0A4AF","syntax-property":"#C2E4EF","syntax-decorator":"#C6B6DB"}}}};
1
+ const data = {"name":"Krigsvold","version":"2.2.0","heritage":{"navy950":"#061325","navy900":"#0A1D35","navy800":"#123456","blue600":"#286A9D","ice400":"#9ED5E6","ice200":"#D9EEF4","ice100":"#EEF8FA","paper":"#FBFAF7","ink":"#17202A","muted":"#56616C","rule":"#D9DEE2","gold":"#B58A3B"},"design":{"radius":{"sm":".15rem","md":".3rem","lg":".4rem","control":".15rem","card":"0"},"spacing":{"1":".25rem","2":".5rem","3":".75rem","4":"1rem","6":"1.5rem","8":"2rem","12":"3rem","16":"4rem","24":"6rem"},"fonts":{"serif":"'Roboto Slab', Georgia, serif","sans":"'Roboto', Arial, sans-serif","display":"'Roboto Slab', Georgia, serif","mono":"'Roboto Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace","ui":"'Roboto', Arial, sans-serif","code":"'Roboto Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"},"widths":{"reading-width":"760px","content-width":"1320px","archive-width":"1320px"},"shadows":{"shadow-sm":"0 10px 35px rgb(0 0 0 / 12%)","shadow-md":"0 18px 44px rgb(6 19 37 / 18%)","shadow-lg":"0 24px 65px rgb(10 29 53 / 12%)"},"motion":{"transition":".15s ease-in","reduced":"0s"},"breakpoints":{"sm":"576px","md":"768px","lg":"992px","xl":"1200px","xxl":"1400px"}},"foundation":{"origin":"https://krigsvold.org/","sourceRepository":"basuhoward/krigsvold.org","sourceCommit":"e92e989b6e850b3a9cd8fbb565edb7eba6d3a6f7","sourceFiles":["assets/css/krigsvold.css","_includes/head.html","assets/css/material-kit.css","assets/scss/material-kit/bootstrap/_variables.scss"],"tokens":{"color-navy-950":"#061325","color-navy-900":"#0a1d35","color-navy-800":"#123456","color-blue-600":"#286a9d","color-ice-400":"#9ed5e6","color-ice-200":"#d9eef4","color-ice-100":"#eef8fa","color-paper":"#fbfaf7","color-ink":"#17202a","color-muted":"#56616c","color-rule":"#d9dee2","color-gold":"#b58a3b","font-serif":"'Roboto Slab', Georgia, serif","font-display":"'Roboto Slab', Georgia, serif","font-sans":"'Roboto', Arial, sans-serif","font-mono":"'Roboto Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace","space-1":".25rem","space-2":".5rem","space-3":".75rem","space-4":"1rem","space-6":"1.5rem","space-8":"2rem","space-12":"3rem","space-16":"4rem","space-24":"6rem","reading-width":"760px","content-width":"1320px","archive-width":"1320px","radius-sm":".15rem","radius-md":".3rem","radius-lg":".4rem","radius-control":".15rem","radius-card":"0","shadow-sm":"0 10px 35px rgb(0 0 0 / 12%)","shadow-md":"0 18px 44px rgb(6 19 37 / 18%)","shadow-lg":"0 24px 65px rgb(10 29 53 / 12%)","shadow-card":"none","transition-ui":".15s ease-in","motion-duration":".15s","text-body":"1.06rem","text-h1":"clamp(2.8rem, 6vw, 5.5rem)","text-h2":"2.1rem","text-h3":"1.42rem","text-display":"clamp(3.4rem, 7vw, 6.8rem)","text-section":"clamp(2rem, 4vw, 3.5rem)","leading-body":"1.65","leading-heading":"1.13","leading-display":".98","weight-heading":"700","tracking-heading":"-.025em","tracking-display":"-.045em","tracking-label":".16em","tracking-button":".035em","border-width":"1px","focus-width":"3px","focus-gap":"3px","gutter":".75rem","section-space":"clamp(4.5rem, 8vw, 7.5rem)","control-height":"2.75rem","control-padding":".9rem","button-padding":".625rem 1.5rem","text-button":".75rem","leading-button":"1.667","divider-width":"3rem","divider-thickness":"3px","link-underline-offset":".18em","hero-overlay":"linear-gradient(90deg, rgba(3,15,30,.93) 0%, rgba(6,27,51,.76) 52%, rgba(7,28,48,.42) 100%)","breakpoint-sm":"576px","breakpoint-md":"768px","breakpoint-lg":"992px","breakpoint-xl":"1200px","breakpoint-xxl":"1400px","layout-gap":"2rem","layout-gap-small":"1rem","layout-gap-large":"3rem","layout-sidebar-width":"20rem","layout-main-min":"30rem","layout-grid-min":"20rem","layout-split-min":"22rem","layout-section-space":"clamp(4.5rem, 8vw, 7.5rem)"},"typographyRoles":{"serif":{"family":"Roboto Slab","usage":"Editorial headings, ledes, quotations","weights":[400,700]},"display":{"family":"Roboto Slab","usage":"Hero and page titles, section headings","weights":[400,700]},"sans":{"family":"Roboto","usage":"Body prose, navigation, controls, tables, metadata","weights":[400,500,700],"styles":["normal","italic"]},"mono":{"family":"Roboto Mono","usage":"Code, terminal text, keyboard notation","weights":[400,500,700],"styles":["normal","italic"],"provenance":"New redistributable companion selected for the Roboto family"}},"normalization":{"spacing":"Quarter-rem scale organizing the source site’s recurring spacing; values are not taken from the theme demo.","focus":"Explicit 3px visible focus ring and offset added for reusable controls.","controlHeight":"44px minimum interaction target added to the generic primitives.","readingWidth":"760px text measure from source hero/subtitle limits, generalized to reading containers.","card":"Flat editorial card from .work-card, with a 3px top rule; larger feature shadows remain separately available.","motion":"Source Material Kit .15s ease-in transition, reduced to zero when requested."}},"capabilities":{"web-core":{"applied":["colors","typography variables","spacing","shape","depth","interaction variables","layout primitives"],"optional":["font loading","element typography","components"]},"astro":{"applied":["web-core","document shell","container","section heading","card","button","page header","site header","site footer","article layout","landing layout","documentation layout"],"hostOwned":["navigation","content","consent","analytics","personal identity"]},"vim":{"applied":["colors","syntax"],"separateConfiguration":["monospace font"],"unsupported":["web layout","proportional typography"]},"emacs":{"applied":["colors","syntax"],"separateConfiguration":["font roles"],"unsupported":["web layout"]},"terminal":{"applied":["colors"],"separateConfiguration":["monospace font"],"unsupported":["web layout","serif","sans"]},"firefox":{"applied":["browser chrome colors"],"unsupported":["fonts","website content","spacing","components"]},"chrome":{"applied":["browser chrome colors"],"unsupported":["fonts","website content","spacing","components"]}},"layout":{"schemaVersion":1,"primitives":["container","stack","cluster","grid","sidebar","split"],"compositions":["article","landing","documentation"],"defaults":{"space":"regular","columns":3,"splitRatio":"equal","sidebarSide":"end"},"tokens":{"layout-gap":"2rem","layout-gap-small":"1rem","layout-gap-large":"3rem","layout-sidebar-width":"20rem","layout-main-min":"30rem","layout-grid-min":"20rem","layout-split-min":"22rem","layout-section-space":"clamp(4.5rem, 8vw, 7.5rem)"},"sources":[{"url":"https://krigsvold.org/","repository":"basuhoward/krigsvold.org","commit":"a3cf072c516c59ed35814e0fa153028cc91ceecd","files":["src/layouts/Page.astro","src/components/HomeContent.astro","src/components/HomeHero.astro","src/styles/site.css"]},{"url":"https://krigsvoldtheme.dev/","repository":"krigsvoldtheme/krigsvoldtheme","commit":"880bdd2bd8430bbdfd8d728faaae0c21199540b1","files":["site/src/pages/index.astro","site/src/styles/global.css","site/src/components/FoundationSpecimen.astro"]}],"normalization":{"intrinsicSizing":"Columns and sidebars respond to their available container width, including nested containers, rather than only to viewport breakpoints.","readingOrder":"Sidebar side selects matching DOM order; split content retains its source order at all widths.","scope":"Namespaced optional layout classes; no global reset, framework dependency, image, personal identity, or scripts."}},"themes":{"light":{"id":"krigsvold-light","name":"Krigsvold Light","mode":"light","tokens":{"bg":"#FBFAF7","panel":"#EEF8FA","panel2":"#D9EEF4","text":"#17202A","muted":"#56616C","accent":"#286A9D","accent2":"#79571F","on-accent":"#FFFFFF","accent-hover":"#1E557F","line":"#D9DEE2","control-line":"#75828D","focus":"#286A9D","selection":"#C6E2EC","selection-text":"#17202A","green":"#35644E","danger":"#9A3542","warning":"#79571F","error-bg":"#F5E6E6","error-text":"#9A3542","shadow":"0 10px 40px #0613251A","surface-canvas":"#FBFAF7","surface-subtle":"#FEFEFC","surface-sunken":"#E4EDF0","surface-overlay":"#FFFFFF","text-strong":"#061325","text-subtle":"#56616C","text-disabled":"#62717B","text-inverse":"#FFFFFF","link":"#286A9D","link-hover":"#123456","link-visited":"#655477","border-subtle":"#D9DEE2","border-strong":"#75828D","input-bg":"#FFFFFF","input-text":"#17202A","input-placeholder":"#62717B","input-border":"#75828D","button-secondary-bg":"#D9EEF4","button-secondary-text":"#17202A","button-secondary-hover":"#C6E2EC","disabled-bg":"#E4EDF0","disabled-text":"#62717B","focus-ring":"#286A9D","focus-offset":"#FBFAF7","hover-bg":"#EEF8FA","active-bg":"#D9EEF4","code-bg":"#EEF8FA","code-text":"#17202A","quote-border":"#286A9D","table-stripe":"#EEF8FA","scrollbar-track":"#EEF8FA","scrollbar-thumb":"#75828D","overlay-scrim":"#061325AA","info":"#286A9D","info-bg":"#E3F1F5","info-text":"#123456","success":"#35644E","success-bg":"#E7F1E9","success-text":"#285039","warning-bg":"#F5ECD9","warning-text":"#79571F","danger-bg":"#F5E6E6","danger-text":"#9A3542","chart-1":"#286A9D","chart-2":"#35644E","chart-3":"#79571F","chart-4":"#9A3542","chart-5":"#655477","chart-6":"#187178","chart-7":"#985238","chart-8":"#56616C","chart-grid":"#D9DEE2","chart-axis":"#56616C","syntax-keyword":"#286A9D","syntax-string":"#35644E","syntax-function":"#123456","syntax-type":"#79571F","syntax-variable":"#17202A","syntax-comment":"#56616C","syntax-number":"#9A3542","syntax-operator":"#56616C","syntax-constant":"#655477","syntax-tag":"#286A9D","syntax-attribute":"#79571F","syntax-regexp":"#35644E","syntax-invalid":"#9A3542","syntax-property":"#123456","syntax-decorator":"#655477"}},"dark":{"id":"krigsvold-dark","name":"Krigsvold Dark","mode":"dark","tokens":{"bg":"#061325","panel":"#0A1D35","panel2":"#123456","text":"#EEF8FA","muted":"#B3CCD5","accent":"#9ED5E6","accent2":"#D9B876","on-accent":"#061325","accent-hover":"#D9EEF4","line":"#345066","control-line":"#7A929F","focus":"#9ED5E6","selection":"#244C61","selection-text":"#EEF8FA","green":"#A6CFB5","danger":"#F0A4AF","warning":"#E0BF84","error-bg":"#302335","error-text":"#F0A4AF","shadow":"0 10px 40px #00000055","surface-canvas":"#061325","surface-subtle":"#07182B","surface-sunken":"#040E1C","surface-overlay":"#123456","text-strong":"#FBFAF7","text-subtle":"#B3CCD5","text-disabled":"#8BA4B2","text-inverse":"#061325","link":"#9ED5E6","link-hover":"#D9EEF4","link-visited":"#C6B6DB","border-subtle":"#345066","border-strong":"#7A929F","input-bg":"#0A1D35","input-text":"#EEF8FA","input-placeholder":"#B3CCD5","input-border":"#7A929F","button-secondary-bg":"#123456","button-secondary-text":"#EEF8FA","button-secondary-hover":"#1C4565","disabled-bg":"#183044","disabled-text":"#8BA4B2","focus-ring":"#9ED5E6","focus-offset":"#061325","hover-bg":"#123456","active-bg":"#1C4565","code-bg":"#0A1D35","code-text":"#EEF8FA","quote-border":"#9ED5E6","table-stripe":"#0A1D35","scrollbar-track":"#0A1D35","scrollbar-thumb":"#607B8D","overlay-scrim":"#061325CC","info":"#9ED5E6","info-bg":"#103549","info-text":"#D9EEF4","success":"#A6CFB5","success-bg":"#16362B","success-text":"#B7DDC3","warning-bg":"#3B301F","warning-text":"#E8CB97","danger-bg":"#3D2330","danger-text":"#F4B4BC","chart-1":"#9ED5E6","chart-2":"#D9B876","chart-3":"#A6CFB5","chart-4":"#F0A4AF","chart-5":"#C6B6DB","chart-6":"#8FCBC7","chart-7":"#E1AC90","chart-8":"#D4D8D9","chart-grid":"#345066","chart-axis":"#B3CCD5","syntax-keyword":"#9ED5E6","syntax-string":"#A6CFB5","syntax-function":"#C2E4EF","syntax-type":"#D9B876","syntax-variable":"#EEF8FA","syntax-comment":"#B3CCD5","syntax-number":"#F0A4AF","syntax-operator":"#B3CCD5","syntax-constant":"#C6B6DB","syntax-tag":"#9ED5E6","syntax-attribute":"#D9B876","syntax-regexp":"#A6CFB5","syntax-invalid":"#F0A4AF","syntax-property":"#C2E4EF","syntax-decorator":"#C6B6DB"}}}};
2
2
  const {themes,heritage,design,foundation,capabilities,layout,version}=data;
3
3
  const {light,dark}=themes;
4
4
  export {themes,light,dark,heritage,design,foundation,capabilities,layout,version};
@@ -0,0 +1,255 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "family": "krigsvold",
4
+ "grammarVersion": "0.3",
5
+ "maturity": "experimental",
6
+ "source": {
7
+ "repository": "basuhoward/krigsvold.org",
8
+ "commit": "a3cf072c516c59ed35814e0fa153028cc91ceecd"
9
+ },
10
+ "guidance": {
11
+ "grammar": "docs/grammar.md",
12
+ "decisions": "docs/source-decisions.md",
13
+ "foundations": "docs/foundations.md",
14
+ "coverage": "docs/coverage.md",
15
+ "validatedForm": "docs/patterns/forms.md",
16
+ "queryResults": "docs/patterns/query-results.md"
17
+ },
18
+ "implementation": {
19
+ "core": {
20
+ "version": "2.2.0",
21
+ "status": "unreleased-candidate",
22
+ "sourceProfile": "opt-in; existing defaults retained"
23
+ },
24
+ "Astro": {
25
+ "version": "1.2.0",
26
+ "status": "unreleased-candidate",
27
+ "core": "^2.2.0",
28
+ "additions": [
29
+ "TableOfContents",
30
+ "ArticleLayout contents slot",
31
+ "SiteFooter grouped variant"
32
+ ]
33
+ },
34
+ "React": {
35
+ "version": "0.1.0",
36
+ "status": "experimental-unpublished",
37
+ "core": "2.1.0",
38
+ "repository": "howardjp/design-workbench",
39
+ "branch": "work/registry-foundations"
40
+ },
41
+ "Vue": {
42
+ "status": "not-implemented"
43
+ },
44
+ "Svelte": {
45
+ "status": "not-implemented"
46
+ },
47
+ "native": {
48
+ "status": "not-implemented"
49
+ }
50
+ },
51
+ "patterns": [
52
+ {
53
+ "id": "reading-contents",
54
+ "basis": "application-extension",
55
+ "variants": [
56
+ "index",
57
+ "inline"
58
+ ],
59
+ "rules": [
60
+ "Contents precedes body",
61
+ "Depth 2 parents and depth 3 children",
62
+ "Supporting information remains separate",
63
+ "Reflow according to available container width"
64
+ ]
65
+ },
66
+ {
67
+ "id": "grouped-footer",
68
+ "basis": "source-translation",
69
+ "rules": [
70
+ "Host supplies identity and destinations",
71
+ "Preserve independent family anatomy",
72
+ "Ownership and contact belong in base slot"
73
+ ]
74
+ },
75
+ {
76
+ "id": "collection-editor",
77
+ "basis": "application-extension",
78
+ "availability": "React specimen only",
79
+ "states": [
80
+ "empty",
81
+ "no-match",
82
+ "reading",
83
+ "editing",
84
+ "saving",
85
+ "saved",
86
+ "failed-save",
87
+ "unsaved-navigation",
88
+ "undo"
89
+ ]
90
+ },
91
+ {
92
+ "id": "validated-form",
93
+ "basis": "application-extension",
94
+ "availability": "React interactive reference; Astro native-HTML guidance",
95
+ "states": [
96
+ "invalid",
97
+ "pending",
98
+ "failed-save",
99
+ "retry",
100
+ "saved",
101
+ "changed-reset",
102
+ "keep",
103
+ "discard"
104
+ ],
105
+ "rules": [
106
+ "Field/group/region relationships",
107
+ "Retain values on failure",
108
+ "Summary links focus controls",
109
+ "Guard specimen reset; host navigation remains host-owned"
110
+ ]
111
+ },
112
+ {
113
+ "id": "query-results",
114
+ "basis": "application-extension",
115
+ "availability": "React interactive reference; Astro native-HTML guidance",
116
+ "states": [
117
+ "draft-query",
118
+ "pending",
119
+ "failed-load",
120
+ "retry",
121
+ "no-match",
122
+ "empty-source",
123
+ "selected",
124
+ "preparing",
125
+ "failed-prepare",
126
+ "prepared",
127
+ "cancelled"
128
+ ],
129
+ "rules": [
130
+ "Separate draft and committed scope",
131
+ "Stable record identities",
132
+ "Current-page selection only",
133
+ "Cancel invalidates late completion",
134
+ "Keep all table columns in labelled scrolling region"
135
+ ]
136
+ }
137
+ ],
138
+ "openGates": [
139
+ "Manual assistive-technology review",
140
+ "Localization and RTL",
141
+ "Sustained consumer use",
142
+ "Broader form and data workflow evidence",
143
+ "Matched origin code specimen"
144
+ ],
145
+ "coverage": [
146
+ {
147
+ "id": "G01",
148
+ "domain": "Source authority",
149
+ "status": "Documented",
150
+ "rule": "Origin objects, translations and extensions remain distinct."
151
+ },
152
+ {
153
+ "id": "G02",
154
+ "domain": "Field / group / region spacing",
155
+ "status": "Rule clarified + reference",
156
+ "rule": "Use relational roles; do not inherit page-section spacing inside forms."
157
+ },
158
+ {
159
+ "id": "G03",
160
+ "domain": "Density and targets",
161
+ "status": "Claim corrected; compact open",
162
+ "rule": "Comfortable examples only; 44px is a design target, not blanket certification."
163
+ },
164
+ {
165
+ "id": "G04",
166
+ "domain": "Typography and hierarchy",
167
+ "status": "Observed roles retained",
168
+ "rule": "Keep prose, UI, selective display and code roles; no decorative monospace."
169
+ },
170
+ {
171
+ "id": "G05",
172
+ "domain": "Surfaces and layers",
173
+ "status": "Rule corrected + reference",
174
+ "rule": "Modal, popup and inline disclosure have different interaction contracts."
175
+ },
176
+ {
177
+ "id": "G06",
178
+ "domain": "Action placement and scope",
179
+ "status": "Rule clarified + reference",
180
+ "rule": "Commands name and follow their field, object or collection scope."
181
+ },
182
+ {
183
+ "id": "G07",
184
+ "domain": "Responsive composition",
185
+ "status": "Reference checks",
186
+ "rule": "Reflow fields/actions; scroll only genuine comparison surfaces; retain source order."
187
+ },
188
+ {
189
+ "id": "G08",
190
+ "domain": "Substantial forms",
191
+ "status": "New experimental contract",
192
+ "rule": "Validate, retain values, retry and guard specimen reset."
193
+ },
194
+ {
195
+ "id": "G09",
196
+ "domain": "Query / sort / page",
197
+ "status": "New experimental contract",
198
+ "rule": "Draft query differs from applied results; changed query starts page 1."
199
+ },
200
+ {
201
+ "id": "G10",
202
+ "domain": "Selection",
203
+ "status": "New bounded contract",
204
+ "rule": "Binary current-page selection; scope changes reset on commit, failure retains it."
205
+ },
206
+ {
207
+ "id": "G11",
208
+ "domain": "Pending / failed / empty states",
209
+ "status": "Reference coverage expanded",
210
+ "rule": "Keep useful previous content and distinguish no matches from empty source data."
211
+ },
212
+ {
213
+ "id": "G12",
214
+ "domain": "Focus and recovery",
215
+ "status": "Reference checks; manual open",
216
+ "rule": "Summary links, modal dismissal, return trigger and late-response cancellation."
217
+ },
218
+ {
219
+ "id": "G13",
220
+ "domain": "Top / side / focused frames",
221
+ "status": "Existing support retained",
222
+ "rule": "Frame follows task; source navigation direction is not a family restriction."
223
+ },
224
+ {
225
+ "id": "G14",
226
+ "domain": "Reading / contents / footer",
227
+ "status": "Existing source contracts retained",
228
+ "rule": "Contents, body, support and host identity remain separate."
229
+ },
230
+ {
231
+ "id": "G15",
232
+ "domain": "Cross-framework agreement",
233
+ "status": "Availability clarified",
234
+ "rule": "Rules cross frameworks; React state/focus props do not become Astro APIs."
235
+ },
236
+ {
237
+ "id": "G16",
238
+ "domain": "Figure / footnote / maths / archive vocabulary",
239
+ "status": "Open",
240
+ "rule": "Do not infer shipped components from origin CSS."
241
+ },
242
+ {
243
+ "id": "G17",
244
+ "domain": "Localization / RTL / assistive technology",
245
+ "status": "Open",
246
+ "rule": "Long-text checks are partial evidence; no manual or locale certification."
247
+ },
248
+ {
249
+ "id": "G18",
250
+ "domain": "Sustained use / dashboard breadth",
251
+ "status": "Open",
252
+ "rule": "Focused references do not establish production fitness or cover all application patterns."
253
+ }
254
+ ]
255
+ }
package/dist/light.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.1.0",
2
+ "version": "2.2.0",
3
3
  "id": "krigsvold-light",
4
4
  "name": "Krigsvold Light",
5
5
  "mode": "light",
@@ -0,0 +1,47 @@
1
+ /* Additive pattern anatomy. Existing classes and default layouts are unchanged. */
2
+ .krigsvold-reading-context { container:krigsvold-reading / inline-size; }
3
+ .krigsvold-reading-layout { display:grid; gap:2.5rem; align-items:start; }
4
+ .krigsvold-reading-layout > * { min-inline-size:0; max-inline-size:100%; }
5
+ .krigsvold-contents { min-inline-size:0; max-inline-size:100%; padding:1.2rem 1.4rem; font:1rem/1.5 var(--krigsvold-font-sans); color:var(--krigsvold-source-ink,var(--krigsvold-text)); background:var(--krigsvold-source-support,var(--krigsvold-panel)); overflow-wrap:anywhere; }
6
+ .krigsvold-contents__label { margin:0 0 .5rem; font-weight:700; }
7
+ .krigsvold-contents ul { list-style:none; padding:0; margin:0; }
8
+ .krigsvold-contents > ul > li { margin-block:.5rem 1rem; break-inside:avoid; }
9
+ .krigsvold-contents a { display:block; padding-block:.35rem; text-decoration:none; }
10
+ .krigsvold-contents a:hover { text-decoration:underline; }
11
+ .krigsvold-contents > ul > li > a { font-weight:700; }
12
+ .krigsvold-contents li ul { padding-inline-start:.85rem; }
13
+ .krigsvold-contents li li { margin-block:.25rem; }
14
+ .krigsvold-contents--inline > ul { columns:2 16rem; column-gap:2rem; }
15
+ @container krigsvold-reading (min-width:74rem) {
16
+ .krigsvold-reading-layout { grid-template-columns:20rem minmax(0,760px); gap:clamp(2rem,4cqi,5rem); justify-content:center; }
17
+ .krigsvold-reading-layout__contents { position:sticky; top:6rem; max-block-size:calc(100vh - 7rem); overflow:auto; }
18
+ .krigsvold-reading-layout .krigsvold-contents--index { background:transparent; padding:1.25rem 0 0; }
19
+ }
20
+ @media (orientation:portrait) { .krigsvold-reading-layout { grid-template-columns:minmax(0,1fr); } .krigsvold-reading-layout__contents { position:static; max-block-size:none; overflow:visible; } }
21
+ .krigsvold-site-footer--grouped { background:var(--krigsvold-color-navy-950); color:rgba(255,255,255,.72); font:1rem/1.65 var(--krigsvold-font-sans); border:0; padding-block:5rem 1.5rem; }
22
+ .krigsvold-site-footer--grouped a { color:inherit; text-decoration:none; padding-block:0; }
23
+ .krigsvold-site-footer--grouped a:hover { color:white; text-decoration:underline; }
24
+ .krigsvold-site-footer__groups { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:3rem; }
25
+ .krigsvold-site-footer__groups > *, .krigsvold-site-footer__identity, .krigsvold-site-footer__base > * { min-inline-size:0; }
26
+ .krigsvold-site-footer__group h2 { font-family:var(--krigsvold-font-sans); color:white; margin:0 0 1rem; font-size:.76rem; font-weight:700; letter-spacing:.12em; text-transform:uppercase; }
27
+ .krigsvold-site-footer__group ul { list-style:none; padding:0; margin:0; }
28
+ .krigsvold-site-footer__group li { margin-block:.45rem; }
29
+ .krigsvold-site-footer__base { display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:1rem 2rem; margin-block-start:2.5rem; padding-block-start:1.5rem; border-block-start:1px solid rgba(255,255,255,.16); font-size:.82rem; }
30
+ .krigsvold-site-footer__identity :where(img,svg) { max-inline-size:100%; block-size:auto; }
31
+ .krigsvold-site-footer--grouped :where(:focus-visible) { outline:3px solid white; outline-offset:3px; }
32
+ .krigsvold-site-footer__top { display:grid; grid-template-columns:repeat(6,minmax(0,1fr)); gap:3rem; }
33
+ .krigsvold-site-footer__identity { grid-column:span 2; }
34
+ .krigsvold-site-footer__groups { grid-column:span 4; }
35
+ .krigsvold-site-footer__group a { font-size:.88rem; font-weight:500; }
36
+ .krigsvold-site-footer--grouped > .krigsvold-container { inline-size:100%; padding-inline:12px; }
37
+ @media(min-width:576px) { .krigsvold-site-footer--grouped > .krigsvold-container { max-inline-size:540px; } }
38
+ @media(min-width:768px) { .krigsvold-site-footer--grouped > .krigsvold-container { max-inline-size:720px; } }
39
+ @media(min-width:992px) { .krigsvold-site-footer--grouped > .krigsvold-container { max-inline-size:960px; } }
40
+ @media(min-width:1200px) { .krigsvold-site-footer--grouped > .krigsvold-container { max-inline-size:1140px; } }
41
+ @media(min-width:1400px) { .krigsvold-site-footer--grouped > .krigsvold-container { max-inline-size:1320px; } }
42
+ @media(max-width:991.98px) { .krigsvold-site-footer__top { display:block; } .krigsvold-site-footer__identity { margin-block-end:2.5rem; } }
43
+ @media(max-width:767.98px) { .krigsvold-site-footer__groups { grid-template-columns:repeat(2,minmax(0,1fr)); gap:2rem; } }
44
+ @media(max-width:359px) { .krigsvold-site-footer__groups { grid-template-columns:minmax(0,1fr); } }
45
+ @media print { .krigsvold-reading-layout { display:block; } .krigsvold-reading-layout__contents { position:static; max-block-size:none; overflow:visible; margin-block-end:2rem; } }
46
+
47
+ .krigsvold-site-footer__top:not(:has(.krigsvold-site-footer__identity)) .krigsvold-site-footer__groups { grid-column:1 / -1; }
@@ -0,0 +1,23 @@
1
+ /* Opt-in source translation. Existing semantic palettes and default primitives are unchanged. */
2
+ .krigsvold-source-profile {
3
+ --krigsvold-field-gap:.5rem; --krigsvold-group-gap:1.5rem; --krigsvold-region-gap:3rem;
4
+ color:var(--krigsvold-source-ink,var(--krigsvold-text));
5
+ }
6
+ [data-krigsvold="light"] {
7
+ --krigsvold-source-ink:var(--krigsvold-color-ink);
8
+ --krigsvold-source-heading:var(--krigsvold-color-navy-900);
9
+ --krigsvold-source-support:var(--krigsvold-color-ice-100);
10
+ --krigsvold-source-label:var(--krigsvold-color-blue-600);
11
+ --krigsvold-source-button-bg:var(--krigsvold-color-navy-950); --krigsvold-source-button-hover:var(--krigsvold-color-blue-600); --krigsvold-source-button-text:white;
12
+ }
13
+ .krigsvold-source-profile .krigsvold-prose { font-size:var(--krigsvold-text-body); line-height:var(--krigsvold-leading-body); }
14
+ .krigsvold-source-profile :where(h1,h2,h3) { color:var(--krigsvold-source-heading,var(--krigsvold-text-strong)); }
15
+ .krigsvold-source-profile .krigsvold-page-header__copy::after { display:none; }
16
+ .krigsvold-source-profile { font-size:1rem; }
17
+ .krigsvold-source-profile .krigsvold-button:not(:disabled) { background:var(--krigsvold-source-button-bg,var(--krigsvold-accent)); border-color:var(--krigsvold-source-button-bg,var(--krigsvold-accent)); color:var(--krigsvold-source-button-text,var(--krigsvold-on-accent)); }
18
+ .krigsvold-source-profile .krigsvold-button:not(:disabled):hover { background:var(--krigsvold-source-button-hover,var(--krigsvold-accent-hover)); }
19
+ .krigsvold-source-profile .krigsvold-prose :where(blockquote) { border-inline-start:4px solid var(--krigsvold-color-blue-600); padding-inline-start:1.2rem; font-family:var(--krigsvold-font-serif); }
20
+
21
+ [data-krigsvold="dark"] { --krigsvold-source-ink:var(--krigsvold-text); --krigsvold-source-heading:var(--krigsvold-text-strong); --krigsvold-source-support:var(--krigsvold-panel); --krigsvold-source-label:var(--krigsvold-accent); --krigsvold-source-button-bg:var(--krigsvold-accent); --krigsvold-source-button-hover:var(--krigsvold-accent-hover); --krigsvold-source-button-text:var(--krigsvold-on-accent); }
22
+
23
+ .krigsvold-source-profile .krigsvold-page-header { background:transparent; color:var(--krigsvold-source-ink,var(--krigsvold-text)); }
package/dist/tokens.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "Krigsvold",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "heritage": {
5
5
  "navy950": "#061325",
6
6
  "navy900": "#0A1D35",
@@ -0,0 +1,57 @@
1
+ # Krigsvold design charter
2
+
3
+ Version 1.0 · Adopted October 21, 2026
4
+
5
+ This charter establishes the direction for Krigsvold's development as a complete design system. Its starting observation is agreed: Krigsvold feels icy. The meaning of that character is still developing; the principles below make it specific enough to explore and evaluate. Existing package contracts remain in force; this document introduces no token, API, or compatibility changes and does not imply that the proposed component inventory has shipped.
6
+
7
+ ## Purpose and character
8
+
9
+ Krigsvold should give digital experiences a sense of clarity, stillness, precision, and space. Its icy character should emerge through crisp typography, deliberate boundaries, aligned regions, and controlled contrast. People should be able to understand the structure of an unfamiliar page and find the information or action they need.
10
+
11
+ The existing navy, glacier blue, paper surfaces, bronze accents, and Roboto family provide a starting vocabulary. Roboto supports body and interface text; Roboto Slab gives headings a strong presence; Roboto Mono supports code and numerical work. Literal imagery of ice is optional. The character should remain apparent in an ordinary form or table and in both Light and Dark modes.
12
+
13
+ Krigsvold's originating sites offer useful evidence, but the system should support publishing, services, collections, and interactive applications. A reading experience deserves as much care as a working panel. Adopting projects supply their own identity, content, and organizational purpose.
14
+
15
+ ## Design principles
16
+
17
+ **Make structure legible.** Establish clear regions for orientation, content, supporting information, and action. Use alignment, typographic hierarchy, boundaries, and contrasting surfaces to explain those regions. A boundary should communicate a meaningful change in purpose, state, or context.
18
+
19
+ **Give space a defined role.** Separate major regions generously when their purposes differ. Within a working region, spacing should group related information and support efficient comparison. A compact table and an expansive page can belong to the same system. Density must be an explicit choice with readable text and usable controls.
20
+
21
+ **Use contrast to clarify importance.** Navy, glacier tones, light surfaces, and bronze should establish an understandable hierarchy. Assign color through semantic roles, including status and interaction states. Color is one source of information; labels, shape, position, and other cues must preserve meaning when color distinctions are unavailable.
22
+
23
+ **Treat precision as assistance.** Labels should identify what information is required. Status should distinguish what has happened, what is happening, and what someone can do next. Errors should explain a useful recovery path and retain entered work where possible. Icy clarity must remain approachable when a person is uncertain or a task fails.
24
+
25
+ **Keep change controlled.** Transitions should establish a new state or location without competing with the task. Use restrained motion and provide understandable updates when motion is reduced or absent. Stable alignment and persistent context matter during loading, filtering, expansion, and navigation.
26
+
27
+ ## Foundations and component contracts
28
+
29
+ The specification should cover semantic color, typography, spacing, reading and content widths, responsive composition, density, borders, shape, elevation, layering, and motion. Define the relationships among page regions and the local spacing inside them. Reference scales, semantic tokens, and component dimensions need separate explanations. Numerical values and public names belong in versioned specifications; the charter supplies criteria for their development.
30
+
31
+ Expand the component inventory through forms, navigation, feedback, disclosure, overlays, data presentation, and complete task patterns. Each supported component needs a purpose, anatomy, applicable states, interaction rules, content guidance, responsive behavior, and accessibility acceptance criteria. Demonstrate combinations such as a filtered collection or a validated form. Distinguish planned, experimental, and stable capabilities.
32
+
33
+ Accessibility is a condition of acceptance. Review keyboard operation, focus visibility and restoration, labels and announcements, contrast, text enlargement, reflow, forced colors, and reduced motion where applicable. Support long content, localization, and changes in reading direction. Document what works without JavaScript and which interactions require it. Preserve source order and access to information as layouts change.
34
+
35
+ ## Relationship with Martlet
36
+
37
+ Krigsvold and Martlet share blue, white, gold, order, and restraint. Their different emotional temperatures emerged through their development. Krigsvold's charter should describe its own character; each design decision does not need an opposing Martlet decision. Sound usability and accessibility can produce identical answers in both families.
38
+
39
+ Share interaction contracts, accessibility work, tests, and tooling where practical. Keep independent judgments about typography, spatial organization, surfaces, and visual emphasis. Krigsvold's icy character needs to be recognizable beyond its palette or a distinctive hero. Neither family is restricted to institutional or editorial work.
40
+
41
+ ## Living baselines
42
+
43
+ [krigsvold.org](https://krigsvold.org/) is the starting ground truth for Krigsvold and remains a live baseline throughout the system's development. Its real content, tasks, and ongoing use provide evidence for design decisions. The baseline describes what works today and can evolve as generalization exposes better solutions.
44
+
45
+ An inherited decision that fails when generalized should be removed or revised. Establish a working replacement against both the originating site's real usage and the broader conditions that exposed the failure. Historical fidelity does not justify retaining a design that no longer works.
46
+
47
+ Carry the validated improvement into the packages and specifications, then back into the originating website. Verify the revised site in use so it becomes the next live baseline. Record the failure, the replacement, and the reasons for the change, and follow the release and migration requirements of affected contracts.
48
+
49
+ This feedback loop continues throughout development: observe real use, generalize, test, replace what fails, and improve the baseline. Controlled examples and automated checks support that work; they cannot establish real-world fitness on their own.
50
+
51
+ ## Evidence and review
52
+
53
+ The next milestone is four comparative experiences: an article with supporting material, a substantial form, a searchable collection, and an application dashboard. Ground these comparisons in real content and tasks, and give both families the same content and functionality. Continue evaluating changes against the live baseline while exploring contexts beyond it. With brand marks removed, review whether Krigsvold's structure, rhythm, and emphasis still convey its character. Check that generous regional spacing and any compact local density remain useful at narrow widths and with enlarged text.
54
+
55
+ The live sites should exercise the system as consumers. Move reusable decisions into the packages and specifications while keeping site identity, navigation, routing, content, analytics, and consent policy with the host. Examples embedded in a site should use its shared page shell. Standalone starters should make their purpose clear.
56
+
57
+ Maintainers should document the reasons for consequential changes and identify provisional decisions. Review proposals against the charter, demonstrated user needs, and compatibility obligations. Version and deprecate stable contracts deliberately. The charter can change as practical use gives greater precision to the meaning of icy clarity.
@@ -0,0 +1,29 @@
1
+ # Krigsvold consolidation
2
+
3
+ Core 2.2.0 and Astro 1.2.0 are **experimental release candidates**. Existing theme colors, typography defaults, component defaults, and Astro slots are retained. Do not install an unpublished version from npm. Use the paired review branches or packed archives to evaluate this change.
4
+
5
+ The core owns [grammar](grammar.md), [source decisions](source-decisions.md), [foundation requirements](foundations.md), `language.json`, and framework-independent pattern CSS. Astro owns rendering and slots. React owns its events, controlled state and focus APIs. Documentation and agent references must identify the exact guidance revision. Publication does not establish grammar stability.
6
+
7
+ ## Opt into source roles
8
+
9
+ Import `@krigsvold/theme/source-profile.css` after the regular core styles. Apply `krigsvold-source-profile` to an existing `.krigsvold` container (or pass it through Astro `bodyClass`) within `data-krigsvold="light"` or `"dark"`. This restores audited reading roles and removes the unsupported page-header accent in that scope. New field/group/region relationships remain experimental. Nested opposite appearances must start their own source-profile scope.
10
+
11
+ `full.css` includes additive `patterns.css`; color-only imports still load no pattern styling. Existing palette JSON is unchanged apart from version metadata. No personal identity, analytics, legal policy, imagery, automatic global stripe, or navigation orientation is imposed.
12
+
13
+ ## Content and footer anatomy
14
+
15
+ Use TableOfContents with `items` containing `href`, `label`, and optional `depth: 2 | 3`; the default depth is 2. A depth-3 item requires a preceding depth-2 parent. Native nested lists retain parent/child semantics. `variant="index"` belongs in ArticleLayout's `contents` slot. `variant="inline"` is an in-body alternative. Localize `label` explicitly.
16
+
17
+ ArticleLayout retains its existing `sidebar` slot and end-side supporting region. Its new `contents` slot precedes the body; supporting material still follows the body. DocumentationLayout's existing `navigation` slot is unchanged. A TOC does not make every page require a left rail.
18
+
19
+ SiteFooter defaults to the existing plain rendering. `variant="grouped"` accepts `groups: {label, links: {href, label}[]}[]`, plus `identity` and `base` slots. Existing `links`, `navigationLabel`, class and default slot remain supported in either variant. The host supplies its own mark, ownership, contact, translated group names and destinations. Krigsvold uses a wide identity column plus four groups and an independent base row; fewer or more groups wrap within that region.
20
+
21
+ ## Navigation and interaction boundaries
22
+
23
+ Both languages permit top, side and focused frames. Astro SiteHeader remains a wrapping link header; no dropdown, menu controller or React state API is claimed. The source desktop dropdown is white even on a dark parent; below 992px it becomes transparent and in-flow. This is guidance for a host-owned menu, not a new Astro dropdown component.
24
+
25
+ Preserve native semantics, focus visibility, retained input, actionable validation, save retry, draft protection and undo where appropriate. These behavioral obligations cross frameworks; their React implementations do not become Astro props. Full dark mode and new app controls remain extensions. Figure, footnote, maths, archive/card variants and richer data workflows remain gaps.
26
+
27
+ ## Experimental distribution
28
+
29
+ The GitHub pre-release publishes the verified package under npm’s `next` dist-tag. The existing `latest` tag stays unchanged. An experimental publication does not establish grammar stability or manual assistive-technology conformance. Promote a release only through a separate reviewed release decision.
@@ -0,0 +1,40 @@
1
+ # Krigsvold grammar coverage review
2
+
3
+ Review 0.3 · October 24, 2026 · Experimental
4
+
5
+ The baseline grammar described intent and an experimental collection/editor. This review adds decision rules for grouping, density, action scope, layers, validated forms and queried results. Existing origin objects remain authoritative. New application patterns are justified extensions and are not retrospectively attributed to the origin site.
6
+
7
+ | ID | Domain | Disposition | Rule or remaining work | Evidence surface |
8
+ | --- | --- | --- | --- | --- |
9
+ | G01 | Source authority | Documented | Origin objects, translations and extensions remain distinct. | Source audit and source-decisions.md |
10
+ | G02 | Field / group / region spacing | Rule clarified + reference | Use relational roles; do not inherit page-section spacing inside forms. | Validated-form reference |
11
+ | G03 | Density and targets | Claim corrected; compact open | Comfortable examples only; 44px is a design target, not blanket certification. | Foundations; target-size checks |
12
+ | G04 | Typography and hierarchy | Observed roles retained | Keep prose, UI, selective display and code roles; no decorative monospace. | Source decisions; existing React/Astro checks |
13
+ | G05 | Surfaces and layers | Rule corrected + reference | Modal, popup and inline disclosure have different interaction contracts. | Native dialog in form/results |
14
+ | G06 | Action placement and scope | Rule clarified + reference | Commands name and follow their field, object or collection scope. | Validated-form and results references |
15
+ | G07 | Responsive composition | Reference checks | Reflow fields/actions; scroll only genuine comparison surfaces; retain source order. | Narrow/enlarged-text browser checks |
16
+ | G08 | Substantial forms | New experimental contract | Validate, retain values, retry and guard specimen reset. | docs/patterns/forms.md |
17
+ | G09 | Query / sort / page | New experimental contract | Draft query differs from applied results; changed query starts page 1. | docs/patterns/query-results.md |
18
+ | G10 | Selection | New bounded contract | Binary current-page selection; scope changes reset on commit, failure retains it. | Results reference; no mixed/select-all API |
19
+ | G11 | Pending / failed / empty states | Reference coverage expanded | Keep useful previous content and distinguish no matches from empty source data. | Form/results/collection specimens |
20
+ | G12 | Focus and recovery | Reference checks; manual open | Summary links, modal dismissal, return trigger and late-response cancellation. | Browser assertions; manual AT still open |
21
+ | G13 | Top / side / focused frames | Existing support retained | Frame follows task; source navigation direction is not a family restriction. | AppShell and existing browser checks |
22
+ | G14 | Reading / contents / footer | Existing source contracts retained | Contents, body, support and host identity remain separate. | Astro candidate and source audit |
23
+ | G15 | Cross-framework agreement | Availability clarified | Rules cross frameworks; React state/focus props do not become Astro APIs. | language.json; native-HTML guidance |
24
+ | G16 | Figure / footnote / maths / archive vocabulary | Open | Do not infer shipped components from origin CSS. | Source decisions; no new API claim |
25
+ | G17 | Localization / RTL / assistive technology | Open | Long-text checks are partial evidence; no manual or locale certification. | Consumer and manual review required |
26
+ | G18 | Sustained use / dashboard breadth | Open | Focused references do not establish production fitness or cover all application patterns. | Future consumer evidence |
27
+
28
+ ## Acceptance and limits
29
+
30
+ Each pattern contract names its purpose, anatomy, scope, states, keyboard/focus behavior, responsive behavior and implementation availability. Automated results are recorded separately from documented requirements. A rule is not stable merely because a specimen passes. New form and results specimens use deterministic session state and simulated latency/failure. They do not add a new application or change the collection/editor into a production service.
31
+
32
+ The foundations no longer claim that every React target is 44 pixels, no longer require a backdrop for all overlays, and now acknowledge the optional core source-profile aliases. Modal focus behavior, native read-only/disabled distinctions, selection scope and draft-versus-applied query are explicit. Compatibility remains additive; existing package defaults and APIs are retained.
33
+
34
+ ## Framework boundaries
35
+
36
+ Core owns grammar, semantic roles and source profiles. React supplies interactive specimens using existing exports. Astro retains its documented component inventory and can use the same native HTML semantics; host scripts own form/query controllers. The main reference and agent snapshots identify this exact canonical revision. No framework receives an implementation claim from shared prose alone.
37
+
38
+ ## Reference method
39
+
40
+ The source audit, adopted charter and actual exported APIs govern these decisions. Carbon's [form](https://www.carbondesignsystem.com/building-blocks/core/patterns/forms), [loading](https://www.carbondesignsystem.com/building-blocks/core/patterns/loading) and [filtering](https://www.carbondesignsystem.com/building-blocks/core/patterns/filtering) guidance informed the breadth of questions, not either language's palette or composition. Our search controls retain visible labels under our own grammar. Target sizing follows the distinctions in [W3C SC 2.5.8](https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html), without treating automated checks as overall WCAG certification.
@@ -0,0 +1,108 @@
1
+ # Krigsvold foundations specification
2
+
3
+ Version 0.1 · Working specification · October 21, 2026
4
+
5
+ The [adopted charter](charter.md) governs this specification. The values below describe the shipped `@krigsvold/theme` 2.1.0 foundation and layout contracts. Normative requirements describe what new components must satisfy; they do not certify existing components. Application-specific experiments must remain identifiable until real usage validates them.
6
+
7
+ ## Character and hierarchy
8
+
9
+ Krigsvold makes substantial work feel clear and composed. Roboto supports continuous interface work; Roboto Slab establishes strong headings. Use aligned regions, precise rules, explicit metadata, restrained ice surfaces, and space between tasks. Precision must never become terse or hostile error copy.
10
+
11
+ A page identifies its purpose, then its primary task, then supporting information. Use one main landmark and a descriptive h1. Related controls form a group with a visible heading or legend. Put explanations close to the decisions they explain. Do not communicate hierarchy, selection, validation, or maturity through color alone.
12
+
13
+ ## Shipped measurements
14
+
15
+ All CSS properties carry the `--krigsvold-` prefix. Numbers in spacing token names are family-local identifiers, not interchangeable units. In particular, `space-3` differs between Martlet and Krigsvold. Cross-family components use semantic relationships and family adapters rather than copying numeric token names.
16
+
17
+ | Token | Shipped value |
18
+ | --- | --- |
19
+ | `space-1` | `.25rem` |
20
+ | `space-2` | `.5rem` |
21
+ | `space-3` | `.75rem` |
22
+ | `space-4` | `1rem` |
23
+ | `space-6` | `1.5rem` |
24
+ | `space-8` | `2rem` |
25
+ | `space-12` | `3rem` |
26
+ | `space-16` | `4rem` |
27
+ | `space-24` | `6rem` |
28
+ | `reading-width` | `760px` |
29
+ | `content-width` | `1320px` |
30
+ | `archive-width` | `1320px` |
31
+ | `radius-control` | `.15rem` |
32
+ | `radius-card` | `0` |
33
+ | `motion-duration` | `.15s` |
34
+ | `text-body` | `1.06rem` |
35
+ | `text-h1` | `clamp(2.8rem, 6vw, 5.5rem)` |
36
+ | `text-h2` | `2.1rem` |
37
+ | `text-h3` | `1.42rem` |
38
+ | `text-display` | `clamp(3.4rem, 7vw, 6.8rem)` |
39
+ | `text-section` | `clamp(2rem, 4vw, 3.5rem)` |
40
+ | `leading-body` | `1.65` |
41
+ | `leading-heading` | `1.13` |
42
+ | `leading-display` | `.98` |
43
+ | `focus-width` | `3px` |
44
+ | `focus-gap` | `3px` |
45
+ | `gutter` | `.75rem` |
46
+ | `control-height` | `2.75rem` |
47
+ | `control-padding` | `.9rem` |
48
+ | `button-padding` | `.625rem 1.5rem` |
49
+ | `text-button` | `.75rem` |
50
+ | `leading-button` | `1.667` |
51
+ | `layout-gap` | `2rem` |
52
+ | `layout-gap-small` | `1rem` |
53
+ | `layout-gap-large` | `3rem` |
54
+ | `layout-sidebar-width` | `20rem` |
55
+ | `layout-main-min` | `30rem` |
56
+ | `layout-grid-min` | `20rem` |
57
+ | `layout-split-min` | `22rem` |
58
+ | `layout-section-space` | `clamp(4.5rem, 8vw, 7.5rem)` |
59
+
60
+ The complete [foundation JSON](../dist/foundation.json) and [layout contract](../dist/layout.json) remain the machine-readable sources for shipped values. Typography roles are Cambo/Lato/Cinzel/IBM Plex Mono for Martlet and Roboto/Roboto Slab/Roboto Mono for Krigsvold. A missing font must leave the page readable using the supplied fallback stacks. Font loading must not hide controls or critical instructions.
61
+
62
+ ## Spacing relationships
63
+
64
+ Use small layout spacing inside a related group, regular spacing between sibling groups, and large spacing between distinct tasks. Public reading pages use the shipped section spacing; an application does not inherit a public hero's vertical padding merely because it has a title. Margins on content must not double the parent's layout gap. A nested layout establishes its own spacing context.
65
+
66
+ The initial React workbench proposes `field-gap`, `group-gap`, `region-gap`, `page-gutter`, and `row-padding` as application roles. The 2.2.0 candidate also exposes the field/group/region aliases in an opt-in source profile. These assignments remain experimental and do not alter the stable reference scale. Measure the distinction between fields, groups, and regions during real registry work before promoting them. Never compress an interface simply to fit more rows.
67
+
68
+ ## Responsive composition
69
+
70
+ Containers are bounded by reading, content, or archive measure. Layout primitives wrap according to their content minima: grids use their minimum cell size; sidebar and split regions wrap without changing source order. The smallest viewport must have one coherent reading and focus order. Breakpoints are consequences of content, not device names.
71
+
72
+ At 320 CSS pixels and at 400% zoom on a 1280-pixel viewport, navigation wraps, forms become one column, and action groups wrap. Long identifiers and translated copy cannot force page-wide overflow. A genuinely two-dimensional table may scroll inside a labelled, keyboard-focusable region. Keep captions, selection controls, and row actions discoverable. Do not remove columns solely to conceal overflow.
73
+
74
+ ## Type and density
75
+
76
+ Use the documented font roles and unitless line heights. Application fields, tables, and navigation use the sans family. Preserve a clear heading-to-body hierarchy without applying public hero sizes to an editor panel. Text must remain usable at 200% resizing and with user text-spacing overrides. Labels remain visible when a field contains a value.
77
+
78
+ This specification recognizes comfortable density only. Compact density is proposed and requires a real high-volume task before adoption. New standalone actions should target 44 by 44 CSS pixels where practical. This is a design target, not a measured claim about every existing link or control. Assess WCAG 2.2 target sizing at 24 by 24 CSS pixels or a documented exception; inspect adjacent target spacing and inline/native exceptions in the actual composition. A denser row changes padding and hierarchy, never silently shrinks interaction targets or body text. Existing smaller legacy controls need review rather than retrospective certification.
79
+
80
+ ## Surfaces and layering
81
+
82
+ Use semantic canvas, subtle, sunken, and overlay colors from the theme. Flat surfaces and rules establish most structure. Shadow tokens exist but do not justify elevating every section. Modal dialog content needs an accessible name, a clear dismissal path and modal background treatment. Non-modal popups and disclosures retain their own interaction contracts; they do not automatically require a backdrop or focus trap.
83
+
84
+ Proposed application layers are base 0, sticky context 10, and transient non-modal feedback 20. Native modal dialogs use the browser top layer and must not depend on a fabricated large z-index. Sticky regions may not obscure focused controls or error summaries. Avoid sticky layout on small screens unless it remains usable at zoom.
85
+
86
+ ## Motion
87
+
88
+ Use the shipped duration and easing for brief state changes. Motion communicates a change; it must not delay submitting, saving, navigating, or reading feedback. With `prefers-reduced-motion: reduce`, remove nonessential transitions, smooth scrolling, and decorative animation. Never require animation to understand a saved or failed state. Loading and saving states include text and remain announced without repeated alerts.
89
+
90
+ ## Accessibility and interaction contracts
91
+
92
+ Target WCAG 2.2 AA. Verify normal text contrast of 4.5:1, large text 3:1, and essential control boundaries and focus indicators 3:1 against adjacent colors. Measure actual combinations in both light and dark modes. Tokens alone cannot certify a composition. Retain a visible focus ring, logical keyboard order, a skip link, native form semantics, and meaningful names.
93
+
94
+ Validation associates field errors with controls, marks invalid controls, and offers an error summary that can receive focus. Keep entered values after failure. Announce successful saves with a polite status; use an alert for blocking failures. A modal traps focus through native dialog behavior, supports Escape, and returns focus to its trigger. Disabled and read-only are distinct states. Loading, empty, no-match, invalid, unavailable, saving, saved, failed, conflict, and unsaved-navigation states must be explicitly designed.
95
+
96
+ ## Evidence and change control
97
+
98
+ The live baseline is https://krigsvold.org/. It supplies evidence for publishing and public navigation. The [design workbench](https://github.com/howardjp/design-workbench) supplies an experimental administration consumer. Its existence is not proof of sustained use or complete accessibility. Record the task, observed failure, proposed change, tests, and result in real use. Replace an inherited decision when generalization fails, then update the original site and verify the result there.
99
+
100
+ Before a foundation becomes stable, document its consumers, browser and assistive-technology coverage, responsive and contrast checks, migration impact, and acceptance criteria. Review same-content article, substantial form, searchable collection, and dashboard experiences across both families. Promote aliases only after evidence; version public changes and publish migrations. The current React packages and workbench remain experimental. The construction plan and registry contract describe the remaining work.
101
+
102
+ ## Source reconciliation and consolidation
103
+
104
+ The October 23 source audit refines this working specification. Use [source decisions](source-decisions.md) for observed objects, [grammar](grammar.md) for experimental application relationships, and [consolidation](consolidation.md) for opt-in profiles and framework support. The shipped 2.1.0 measurements above are historical baseline values, not proof that all defaults match the observed source cascade. The 2.2.0 candidate adds opt-in relationship aliases without promoting them to stable foundation requirements.
105
+
106
+ ## Coverage review 0.3
107
+
108
+ The [coverage ledger](coverage.md) records the reviewed domains, corrections, focused form/results contracts and remaining evidence. The new references supply controlled state coverage, not sustained production use. Target-sizing interpretation follows [W3C SC 2.5.8](https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html).
@@ -0,0 +1,75 @@
1
+ # Krigsvold: a grammar of clear regions
2
+
3
+ Experimental grammar 0.3 · Core 2.2.0 candidate · Astro 1.2.0 candidate · React 0.1.0
4
+
5
+ Krigsvold makes complex work legible through purposeful regions, stable alignment, controlled contrast, and precise state. Its clarity must remain approachable when a person is uncertain or an operation fails. Its adopted charter supplies the criteria for these experimental application rules.
6
+
7
+ ## Source authority and current decisions
8
+
9
+ Existing origin objects are the baseline. Read the `decisions` MCP reference or the source-decision profile before choosing visual rules. Distinguish observed source roles, a contextual translation, and a new application extension. Do not add a global gold stripe, decorative monospace labels, arbitrary accent rules, or mechanically opposite family layouts. Keep new capabilities only with a stated task purpose. The October 23 audit is a fixed record; the reconciliation ledger records implemented decisions and remaining gaps. This remains an experimental grammar, not a declaration of stability.
10
+
11
+ ## Assign each region a job
12
+
13
+ Identify orientation, scope, work, supporting information, and commands. Align related information so that a person can compare it without reconstructing the layout. Use a boundary when purpose or context changes; use local proximity inside a working region. A border around every field does not explain the larger structure, and a large empty gap does not automatically make it clear.
14
+
15
+ The optional source profile exposes `--krigsvold-field-gap`, `--krigsvold-group-gap`, and `--krigsvold-region-gap`. This pattern maps local grouping to the existing 0.5rem scale step, groups to 1.5rem, and distinct regions to the existing 3rem scale step. These experimental application roles explain relationships rather than replacing the foundation's reference scale. Regional space and compact local rows can coexist. Density is a region-level decision; keep readable text, visible focus, and usable targets.
16
+
17
+ ## Make hierarchy exact
18
+
19
+ Use Roboto for interface and body text, Roboto Slab for heading roles, and Roboto Mono where code or numerical comparison benefits. Establish common edges for related labels, values, and actions. Keep the existing navy, glacier, paper, and bronze vocabulary assigned through semantic roles. Contrast should identify importance and interaction state, not merely alternate decorative sections.
20
+
21
+ Keep the desktop navigation popup white with ink text and source pointer/elevation, even inside a dark header. Below 992px its source mobile submenu becomes transparent and in-flow. Use other surface changes only to distinguish purpose or depth. A selected result needs a visible non-color cue as well as contrast. Metadata must remain subordinate without becoming illegible. Truncation is appropriate only when the complete information remains available at a predictable destination.
22
+
23
+ ## Make scope visible
24
+
25
+ Keep commands near the region they affect. Distinguish collection operations from object operations and persistent state from draft state. Show the current scope beside filtering and search. A result-row activation opens its record; a separate Edit action starts modification. Selection does not silently imply a destructive command or an edit.
26
+
27
+ Use explicit labels for what is pending, completed, unavailable, or failed. Put the recovery action where the failure occurred. Precision is assistance: explain a useful next step rather than displaying only a diagnostic code.
28
+
29
+ ## Keep change controlled
30
+
31
+ Retain context while results, details, and forms change. Prefer stable region boundaries during loading and filtering; preserve useful previous information when it remains valid. A save's pending state prevents duplicate submission without hiding the work. A failed save keeps the changed data visible and recoverable. Move keyboard focus when a new task surface requires orientation, and announce state changes without unnecessary interruptions.
32
+
33
+ Before leaving a changed editor, offer an explicit choice and preserve the draft when that choice is cancelled. Use reversible operations and undo where the domain permits. Explain irreversible consequences before commitment. Transitions may clarify state, but the same information must remain understandable without animation.
34
+
35
+ ## Let the frame follow the work
36
+
37
+ A horizontal navbar, side rail, or focused workspace without primary navigation can each be Krigsvold. Choose based on destination count, frequency, available space, and the task's need for persistent context. Vertical navigation is not a language rule. A reading page deserves the same coherent regional structure as an operations console.
38
+
39
+ At narrow widths, place regions in a meaningful reading order rather than compressing all of them into unusable columns. Keep the current object identifiable and supply a clear return route. Long labels, enlarged text, and translated content must not depend on fixed-width assumptions.
40
+
41
+ ## Choose a grouping, then a density
42
+
43
+ Assign orientation, query, work, supporting context and commands distinct jobs. Align comparable information within each job. Use a boundary when scope changes; do not repeat a border around every local relationship. A region can be compact internally while remaining clearly separated from the next region.
44
+
45
+ Use comfortable density for the current reference patterns. A compact mode remains proposed, with no new public density prop. Adjust related padding locally only while preserving readable text, usable targets, visible labels and the field/group/region hierarchy. Source page section spacing does not belong inside an editor. A source index or footer is an object-specific composition; it does not establish a universal application rail or surface.
46
+
47
+ ## Bind actions to committed scope
48
+
49
+ Put a field's assistance beside that field, object commands beside the object, and collection commands beside a named collection. A pending query and its previous results are different scopes: identify both. Retain input and useful results after failure, with a recovery action that names the failed operation. Selection belongs to stable record identities in a declared result scope; clearing, retaining or extending it must follow a documented transition, not an accidental rerender.
50
+
51
+ The validated-form and query-results contracts add concrete state transitions, focus destinations and narrow-layout rules. They are application extensions. Shared native keyboard conventions do not make the languages interchangeable, and a shared grammar rule does not imply the same framework API. The coverage ledger distinguishes documented rules, checked reference behavior and open consumer evidence.
52
+
53
+ ## Use layers for their actual purpose
54
+
55
+ An inline disclosure stays in document flow. A non-modal popup anchors to its trigger and retains the source navigation surface. A modal interrupts the task, names its consequence and uses the native dialog top layer with a clear dismissal route. A backdrop belongs to the modal; it is not required for every overlay. Keep focus visible and return it to a meaningful trigger when a temporary surface closes. Motion never carries the only explanation of a state change.
56
+
57
+ ## Working pattern: collection and detail workspace
58
+
59
+ The Notes workspace specimen puts collection scope and search in a common command region. Results use aligned rows with title, collection, and preview. A clear selected edge identifies the opened record. The detail region remains beside results when width permits, so a person can move through records without losing the collection. Editing is explicit and stays within the detail region. Local working density supports scanning; stronger separation distinguishes the collection from the current note.
60
+
61
+ When the available width is insufficient, results precede the detail region and opening a note moves focus to its heading. Closing returns focus to the collection heading. The layout changes while scope and task meanings persist.
62
+
63
+ This pattern does not require every Krigsvold application to use a split view. A sustained-reading task may use a dedicated page. The language's regional, alignment, contrast, and state rules apply in either frame.
64
+
65
+ ## State and recovery rules
66
+
67
+ Search names its scope and reports the result count. No matches offer a clear reset; an empty collection offers creation. Changing folders is an explicit context change. Opening and editing remain separate actions. Save success returns the note to a committed reading state; failure keeps the editor and offers retry. A context change from a changed editor requires a keep-or-discard choice. Moving a saved note to trash preserves an undo route.
68
+
69
+ The specimen contains fictional, session-only data. Reload restores initial examples. Its failure-inspection control deliberately fails one save and is separate from ordinary product commands. It does not implement network retrieval, durable storage, collaboration, or rich text.
70
+
71
+ ## Review the grammar
72
+
73
+ Can someone identify the current region, command scope, selected record, and save state without relying on color? Does aligned information support comparison? Are boundaries meaningful rather than repetitive decoration? Does the regional structure remain understandable in a compact table, a form, and a reading experience? Test these questions across complete transitions, not only the populated initial view.
74
+
75
+ Expected keyboard behavior and accessible semantics need not differ from Martlet. Independence comes from coherent decisions that serve the task, not arbitrary opposites. Manual assistive-technology review, localization, RTL adaptation, and sustained consumer evidence remain open before stability.
@@ -0,0 +1,37 @@
1
+ # Krigsvold: a validated form
2
+
3
+ Experimental pattern contract 0.3 · Application extension · React reference specimen
4
+
5
+ ## Purpose and composition
6
+
7
+ Use this pattern for a deliberate submission with multiple related fields and recoverable errors. The specimen is a publication request with title, summary, request type, response name/address and a notification preference. It is a controlled documentation example; it sends nothing and stores nothing beyond the mounted specimen.
8
+
9
+ Define a request region, a response region and a command region. Use shared edges within each region, and a restrained boundary only where the job changes. Short related fields may align in columns when space permits. Supporting guidance follows the work in source order and can sit beside it when each region retains useful width. The command row belongs to the form it commits.
10
+
11
+ Use the field relationship for label, control, hint and error; group spacing for sibling fields; and region spacing between different decisions. A native fieldset and legend identify a real group. Do not add a card per field. Keep the primary submit action after the editable groups. Secondary discard/reset actions describe their consequence and remain visually subordinate. The specimen uses comfortable density; it introduces no compact-density API.
12
+
13
+ ## Validation and state transitions
14
+
15
+ | Trigger | Result | Focus and retained work |
16
+ | --- | --- | --- |
17
+ | Submit invalid fields | Show a summary and field-linked errors; mark only invalid controls. | Focus the summary; its links focus the actual controls. Keep all input. |
18
+ | Edit after an error | Retain the error until revalidation on submission. | Keep focus in the edited field. Do not announce validation on every keystroke. |
19
+ | Submit valid data | Enter pending state and prevent another submission. | Keep the form visible; make inputs temporarily unavailable and announce saving. |
20
+ | Simulated save failure | Explain that work is retained and offer retry. | Focus the actionable failure summary; preserve every field and preference. |
21
+ | Retry successfully | Commit the submitted values to the local example state and announce success. | Keep the same form and orientation; do not clear fields or move focus merely for success. |
22
+ | Reset a changed specimen | Open a native confirmation dialog with Keep editing and Discard changes. | Escape and Keep editing preserve the draft and return focus to Reset specimen. Discard resets the specimen and returns focus to that trigger. |
23
+ | Reset an unchanged specimen | Reset immediately. | Preserve orientation; no unnecessary dialog. |
24
+
25
+ The pending operation is short and simulated. Unmounting invalidates its completion; a late timer cannot update another specimen. Reset is unavailable while saving. The draft guard covers the specimen's Reset action; documentation navigation is outside that guard and unmounts the example. This is an explicit hosting boundary, not a claim of full application navigation protection.
26
+
27
+ ## Semantics and responsive behavior
28
+
29
+ Use native form, label, input, select, textarea, checkbox, fieldset and button semantics. Required indicators appear in labels and requirements in hints. Read-only text remains inspectable and available to native form behavior; disabled controls are temporarily unavailable. Do not invent readOnly support for a native select or checkbox. Name the form, error summary and dialog, and expose meaningful pending/saved state without repeated announcements.
30
+
31
+ At narrow widths the groups and actions stack in source order. Long text and enlarged text wrap without clipping. The guidance region follows the fields; no visual reordering changes keyboard order. Reduced motion does not remove state text. For print, retain the current values and context; hide only documentation inspection controls.
32
+
33
+ ## Implementation and evidence boundaries
34
+
35
+ React composes Field, TextInput, Textarea, Select, Checkbox, Fieldset, Button, ErrorSummary and Dialog. These are existing exports; no new form-controller API is implied. Core supplies typography and spacing roles. Astro can express the same native HTML structure, but validation, transport, draft management and focus transitions remain host code; there is no Astro Form controller in this candidate.
36
+
37
+ The reference includes validation, pending, failed/retry, saved and discard-dialog examples. Browser assertions cover values, linked errors, focus restoration, reflow and automated accessibility. Real server errors, conflict resolution, authentication, uploads and manual assistive-technology review remain outside this specimen. New controls and full dark mode remain experimental.
@@ -0,0 +1,42 @@
1
+ # Krigsvold: query, results and selection
2
+
3
+ Experimental pattern contract 0.3 · Application extension · React reference specimen
4
+
5
+ ## Purpose and composition
6
+
7
+ Use a results table when the task benefits from comparing several attributes across records. The reference uses the existing component catalogue as its dataset. Search, group filter, sorting, paging and selection are host logic composed from existing primitives. The preparation dialog makes no remote request or actual review decision.
8
+
9
+ Give query, committed results and selection commands separate jobs. Align names, groups and purposes within the table so comparisons share common edges. Keep the applied scope and pending request distinguishable. Selected-item commands operate on the visible result page and stay beside its count. These regional rules apply whether the query sits above or beside the work.
10
+
11
+ Visible search and filter labels name their scope. Enter or Apply query submits the draft query. Changing an unapplied input does not relabel old results. Show the committed query, result count and page independently of what is being typed. Put a table caption on the table and a keyboard-accessible name on its scrolling region. Do not make every row simultaneously mean selection, navigation and editing.
12
+
13
+ ## Query and result contract
14
+
15
+ | Event | Required behavior |
16
+ | --- | --- |
17
+ | Apply a changed search, filter or sort | Start at page 1. Retain old results with their applied-scope label while pending. Disable selection commands during the transition. |
18
+ | Pending result request | Announce loading, mark the result region busy, and retain useful content. Do not label previous results as matches for the new request. |
19
+ | Request fails | Explain that the previous results are still shown; preserve the failed request for Retry. Keep its old selection, with commands unavailable until results are current. |
20
+ | Retry succeeds | Commit the new result scope and announce its count. Clear the old page selection. |
21
+ | Change page | Request the page within the committed query/filter/sort; clear selection when the new page commits. |
22
+ | Refresh unchanged results | Retain selected identities that are still on the committed page. Do not restore selection by row index. |
23
+ | No matches | Name the applied scope and offer Clear query; retain the dataset. |
24
+ | Empty source dataset | Explain that no source records exist; do not present it as a failed query. |
25
+
26
+ The reference simulates asynchronous completion and an optional one-shot failure. Each request carries a generation: an obsolete completion cannot replace newer state or update an unmounted specimen. The available sample data and sorting are deterministic. No remote retrieval, server pagination or durable selection is claimed.
27
+
28
+ ## Selection and dialog contract
29
+
30
+ Selection means the checked records on the currently committed result page. Native checkboxes name each record. There is no select-all control, cross-page selection, mixed checkbox state or implied edit permission in this contract. The count is textual; row color is supplementary. Query/filter/sort/page changes clear selection only when their new result set commits. A failed request retains previous selection and scope for recovery.
31
+
32
+ Review selection opens a native modal listing the exact selected component names. Prepare comparison is a simulated operation. Failure keeps the dialog and selection available for retry. Success closes the dialog, retains selection and announces completion. Cancel or Escape cancels an in-flight preparation, preserves selection and returns focus to Review selection. A late completion cannot announce success after dismissal. No action in this specimen promotes component maturity or records a real readiness review.
33
+
34
+ Native dialog semantics make the background inert and keep modal keyboard behavior conventional. Non-modal navigation popups and disclosures do not inherit that modal contract or require a backdrop.
35
+
36
+ ## Responsive behavior and implementation
37
+
38
+ Query controls wrap into one coherent sequence; status and commands wrap without clipping. A genuinely comparative table may scroll within its labelled region at narrow widths. Keep its caption, row-selection labels and all columns. Do not hide data or turn each row into a different task simply to remove horizontal scrolling. Surrounding prose and controls must still reflow.
39
+
40
+ React uses Field, TextInput, Select, Checkbox, DataTable, Pagination, Button and Dialog. A host owns querying, sorting, paging, selection and request cancellation. Core owns the existing family styles. Astro native HTML guidance shares these semantics, but an interactive results controller is not supplied by the Astro package. Both languages permit a table or a list when the task supports it; neither is compulsory for one family.
41
+
42
+ Tests exercise changed/unapplied scope, pending and failed retrieval, retry, no matches, paging, selection reset, modal failure/cancel/success, focus restoration, long text, narrow reflow and automated accessibility. Manual screen-reader review, localization/RTL, large datasets and real network races remain open consumer work.
@@ -0,0 +1,51 @@
1
+ # Krigsvold source decisions
2
+
3
+ Origin reconciliation 0.2 · Consolidation candidate · Original palette and existing defaults retained
4
+
5
+ Use krigsvold.org as the authority for existing objects. This profile distinguishes restored source roles from application extensions. The full grammar remains experimental. Original source commit: `a3cf072c516c59ed35814e0fa153028cc91ceecd`, repository `basuhoward/krigsvold.org`. Review `src/styles/site.css`, `src/components/SiteHeader.astro`, `SiteFooter.astro`, `src/layouts/Page.astro` and active Material Kit styles. The audit and reconciliation ledger record evidence and remaining limits.
6
+
7
+ ## Existing source objects
8
+
9
+ | Role | Decision | Source / reason |
10
+ | --- | --- | --- |
11
+ | Canvas/type | Paper #fbfaf7, ink #17202a, Roboto 1rem/1.65. Editorial prose 1.06rem/1.65. | Host overrides and live origin. |
12
+ | Headings | Roboto Slab, weight 700, source scale/leading/tracking. | Source global/editorial/masthead roles. Medium-weight alternate docs headings were removed. |
13
+ | UI labels | Roboto; .76rem/.16em uppercase blue eyebrow where the source uses it. | Source eyebrow and navbar. Roboto Mono is for code and useful numerical work, not ordinary status/folder labels. |
14
+ | Reading | Bounded 760px editorial measure with source hierarchy. Supporting facts can have their own region. | Page layout and editorial CSS. An accent rail/mono label is not mandatory article anatomy. |
15
+ | Desktop navbar | Navy rgba(6,19,37,.84), .4rem radius, white 20% border, 14px blur, source navbar shadow. | Source site-navbar. Docs retains a contained in-flow variant because there is no photographic masthead. |
16
+ | Desktop popup | White surface, ink text, ice hover; 15rem min width; .55rem padding; .3rem radius; source rule and `0 18px 44px rgba(6,19,37,.18)` shadow; white 12px pointer. | Source dropdown and live observation. The light surface is independent of the dark parent and full-page mode. |
17
+ | Popup item | .9rem/1.65 Roboto; .62rem/.7rem padding; small item radius. | Source dropdown-item. Use source SVG chevron. |
18
+ | Mobile navigation | Collapsed Menu below 992px; submenu static/indented/transparent on navy; no popup pointer, border or shadow. | Source mobile overrides. Do not impose desktop popup styling here. |
19
+ | Navigation behavior | Native details retains click/Enter/Space and exclusive groups; Escape restores summary, blur closes; mobile Menu Escape restores trigger. | Explicit implementation translation of source dropdown capability. Hover is visual feedback, not the only access route. |
20
+ | Search | Source field material, label and underline retained. Docs uses an explicitly labelled live component filter rather than site-wide GET search. | Source site-search visual role; task-specific documentation extension. |
21
+ | Primary action | Navy with blue hover in light mode; .75rem bold uppercase UI type, .035em tracking, .625rem/1.5rem padding. | Observed source navy button and foundation dimensions. Dark mode uses semantic contrast roles. |
22
+ | Input | Native control and own small radius, theme/source padding; keep visible labels. | Source control vocabulary; site-search is not the default general form geometry. |
23
+ | Table | .95rem UI type, .85rem/.7rem cells, top alignment, source rule; no arbitrary compact-family default. | Editorial source table. Explicit compact density remains future task-specific work. |
24
+ | Quote | 4px blue leading rule, Slab quotation text. | Editorial blockquote. |
25
+ | Footer | Navy identity column spanning two tracks, four link groups, and a separate ownership/contact base line; 5rem/1.5rem vertical padding, 48px desktop gap. | SiteFooter/site.css. The adopting host owns identities, organizations and destinations. |
26
+
27
+ ## Explicit application extensions
28
+
29
+ AppShell is an application frame, not the entire origin website. Both languages support top, side and none. The existing Krigsvold default side frame is retained for compatibility with the workbench; it is not a grammar requirement. The hard-coded rail colophon is removed.
30
+
31
+ No origin object establishes a universal Krigsvold TOC. The experimental index/inline extension uses native fragment navigation, unnumbered depth-aware hierarchy and reading order before body. A persistent rail appears only when the available width supports it. No invented accent top rule or mono eyebrow is required. DefinitionList supports rows, stack and grid in either family; source fellow facts already demonstrate stacking.
32
+
33
+ Task dialogs, validation summaries, notices, badges, switches, tabs, file controls and controlled result paging are explicit new application objects. They preserve native semantics, visible focus, clear labels and recoverable operations. ErrorSummary uses a leading severity rule, consistent with its task rather than a forced opposite Martlet treatment. Tabs use a selected underline, not an invented filled institutional badge. Invalid styling means `aria-invalid="true"`, never mere attribute presence.
34
+
35
+ Field/group/region roles are .5/1.5/3rem source-scale values with experimental relational assignments. Local density serves comparison; generous source page section spacing remains a different role. A 3px selection edge explains the current note, while nonnumeric status/folder labels use Roboto. The results/detail composition is a task choice, not compulsory Krigsvold anatomy.
36
+
37
+ Dark mode keeps the source object hierarchy and existing semantic contrast roles. The source desktop navbar popup remains light; mobile remains transparent on navy. New status/error/switch surfaces are application extensions and need state/contrast evidence. Code keeps theme roles pending a matched origin code specimen review.
38
+
39
+ ## Boundary and evidence
40
+
41
+ The theme-site crystal is the existing system mark used by documentation. It does not replace an adopting application's own identity or the origin institution's snowflake badge. Docs preview, finder, copy/download controls, simulated failure and session-only notes are host tooling.
42
+
43
+ Polar imagery, title/arms, award content, legal policy and analytics remain host responsibilities. Origin masthead, evidence/fellow/card/figure/FAQ variants outside the current 22 exports remain named vocabulary gaps, not silently shipped components. Full accessibility, RTL/localization and sustained-use evidence remain open. Read this profile with the grammar/API references; catalogue hashes do not ratify design choices.
44
+
45
+ ## Framework consolidation
46
+
47
+ Core 2.2.0 and Astro 1.2.0 are unreleased candidates. The source profile is an opt-in import and class; existing core defaults and existing Astro slots remain compatible. New TableOfContents and grouped SiteFooter anatomy are available in the paired candidate packages. React 0.1.0 retains its existing theme 2.1.0 dependency and React-specific events and focus contracts. Framework support is recorded in language.json. These additions do not make the grammar stable.
48
+
49
+ ## Grammar review 0.3
50
+
51
+ Validated forms and queried results add explicit application contracts for grouping, action scope, committed versus draft queries, current-page selection and modal recovery. These are experimental extensions, with separate family composition choices and shared native behavior. No original palette, mark, header direction or existing component default changes. Read docs/coverage.md and docs/patterns/ for the bounded evidence and remaining vocabulary.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@krigsvold/theme",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -48,7 +48,10 @@
48
48
  "./package.json": "./package.json",
49
49
  "./legacy.css": "./dist/legacy.css",
50
50
  "./layout.css": "./dist/layout.css",
51
- "./layout.json": "./dist/layout.json"
51
+ "./layout.json": "./dist/layout.json",
52
+ "./patterns.css": "./dist/patterns.css",
53
+ "./source-profile.css": "./dist/source-profile.css",
54
+ "./language.json": "./dist/language.json"
52
55
  },
53
56
  "publishConfig": {
54
57
  "access": "public"