@anthusai/papyrus 2.0.3 → 3.1.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.
Files changed (49) hide show
  1. package/amplify/plugins/editorial-checks/function/handler.py +11 -0
  2. package/amplify/plugins/editorial-checks/function/requirements.txt +1 -0
  3. package/amplify/plugins/editorial-checks/function/resource.js +43 -0
  4. package/amplify/plugins/editorial-checks/function/resource.ts +60 -0
  5. package/amplify/plugins/editorial-checks/papyrus.plugin.js +50 -0
  6. package/amplify/plugins/editorial-checks/papyrus.plugin.ts +63 -0
  7. package/amplify/plugins/editorial-checks/schema.js +94 -0
  8. package/amplify/plugins/editorial-checks/schema.ts +96 -0
  9. package/amplify/plugins/registry.js +2 -0
  10. package/amplify/plugins/registry.ts +2 -0
  11. package/components/editorial-checks-admin-panel.tsx +337 -0
  12. package/components/editorial-finding-card.tsx +162 -0
  13. package/components/editorial-findings-panel.tsx +91 -0
  14. package/components/editorial-preview-popover.tsx +103 -0
  15. package/components/markus-body-editor.tsx +213 -0
  16. package/components/markus-ir-preview.tsx +147 -6
  17. package/components/newsroom-article-editor.tsx +138 -11
  18. package/components/newsroom-board-view.tsx +6 -7
  19. package/components/newsroom-ops-shell.tsx +7 -3
  20. package/components/newsroom-organizer.css +57 -61
  21. package/components/newsroom-theme-fonts/broadsheet-green.css +10 -0
  22. package/components/newsroom-theme-fonts/broadsheet-green.tsx +6 -0
  23. package/components/newsroom-theme-fonts/newspaper-gothic.css +9 -0
  24. package/components/newsroom-theme-fonts/newspaper-gothic.tsx +6 -0
  25. package/components/newsroom-theme-fonts/night-desk.css +10 -0
  26. package/components/newsroom-theme-fonts/night-desk.tsx +6 -0
  27. package/components/newsroom-theme-fonts/refined-newsprint.css +11 -0
  28. package/components/newsroom-theme-fonts/refined-newsprint.tsx +6 -0
  29. package/components/newsroom-theme.css +39 -0
  30. package/components/newsroom-theme.tsx +33 -0
  31. package/components/topic-steering-workspace.tsx +19 -1
  32. package/components/use-editorial-checks.ts +131 -0
  33. package/lib/editorial-checks-backend.ts +16 -0
  34. package/lib/editorial-checks-client.ts +194 -0
  35. package/lib/editorial-checks-demo.ts +147 -0
  36. package/lib/editorial-checks-settings.ts +24 -0
  37. package/lib/editorial-checks.ts +178 -0
  38. package/lib/editorial-preview.ts +228 -0
  39. package/lib/newsroom-board.ts +27 -2
  40. package/lib/site-brand.ts +17 -0
  41. package/package.json +34 -2
  42. package/routes.manifest.json +1 -1
  43. package/components/newsroom-fonts/playfair-display-700.ttf +0 -0
  44. package/components/newsroom-fonts/playfair-display-900.ttf +0 -0
  45. package/components/newsroom-fonts/playfair-display-OFL.txt +0 -93
  46. package/components/newsroom-fonts/plus-jakarta-sans-400.ttf +0 -0
  47. package/components/newsroom-fonts/plus-jakarta-sans-600.ttf +0 -0
  48. package/components/newsroom-fonts/plus-jakarta-sans-OFL.txt +0 -93
  49. package/components/newsroom-newsprint-board.css +0 -7
@@ -1,35 +1,31 @@
1
- @font-face{font-family:Newsroom Display;src:url('./newsroom-fonts/playfair-display-700.ttf') format('truetype');font-weight:700;font-display:swap}
2
- @font-face{font-family:Newsroom Display;src:url('./newsroom-fonts/playfair-display-900.ttf') format('truetype');font-weight:900;font-display:swap}
3
- @font-face{font-family:Newsroom UI;src:url('./newsroom-fonts/plus-jakarta-sans-400.ttf') format('truetype');font-weight:400;font-display:swap}
4
- @font-face{font-family:Newsroom UI;src:url('./newsroom-fonts/plus-jakarta-sans-600.ttf') format('truetype');font-weight:600;font-display:swap}
5
- .newsroom-organizer,.organizer-menu,.organizer-account-popup{--org-paper:var(--background);--org-ink:var(--foreground);--org-line:var(--border);--org-muted:var(--muted-foreground);font-family:Newsroom UI,system-ui,sans-serif;color:var(--org-ink);background:var(--org-paper)}
1
+ .newsroom-organizer,.organizer-menu,.organizer-account-popup{font-family:var(--kb-theme-ui-font);color:var(--org-ink);background:var(--org-paper)}
6
2
  .newsroom-organizer{display:grid;grid-template-columns:264px minmax(0,1fr);height:100dvh;max-height:100dvh;overflow:clip;font-size:14px}
7
3
  .newsroom-organizer[data-sidebar-collapsed=true]{grid-template-columns:minmax(0,1fr)}
8
4
  body:has(.newsroom-organizer){display:flex;flex-direction:column;height:100dvh;overflow:hidden}
9
5
  body:has(.newsroom-organizer)>[data-staging-banner]{flex-shrink:0}
10
6
  .papyrus-console-page:has(.newsroom-organizer){display:flex;flex:1;min-height:0;min-width:0;overflow:hidden}
11
7
  .papyrus-console-page .newsroom-organizer{height:100%;max-height:100%;flex:1}
12
- .newsroom-organizer h1,.newsroom-organizer h2,.newsroom-organizer h3{font-family:Newsroom Display,Georgia,serif}
13
- .organizer-sidebar{min-height:0;display:flex;flex-direction:column;border-right:1px solid var(--org-line);padding:16px;gap:16px;overflow:hidden}
14
- .organizer-sidebar[hidden]{display:none}.organizer-brand{font:900 40px/1.1 Newsroom Display,Georgia,serif;padding-bottom:20px;border-bottom:3px double var(--org-ink)}
15
- .organizer-brand small{display:block;font:400 10px Newsroom UI,system-ui;letter-spacing:.3em;text-transform:uppercase;margin-top:12px}
8
+ .newsroom-organizer h1,.newsroom-organizer h2,.newsroom-organizer h3{font-family:var(--kb-theme-title-font)}
9
+ .organizer-sidebar{background:var(--org-sidebar);min-height:0;display:flex;flex-direction:column;border-right:1px solid var(--org-line);padding:16px;gap:16px;overflow:hidden}
10
+ .organizer-sidebar[hidden]{display:none}.organizer-brand{font:900 40px/1.1 var(--font-wordmark),Georgia,serif;padding-bottom:14px;border-bottom:2px solid var(--org-ink)}
11
+ .organizer-brand small{display:block;font:500 10px/1 var(--kb-theme-ui-font);letter-spacing:.24em;text-transform:uppercase;color:var(--org-muted);margin-top:6px}
16
12
  .organizer-destinations{min-height:0;overflow:auto;overscroll-behavior:contain;flex:1;padding-right:1px}
17
- .organizer-destinations section+section{margin-top:24px}.organizer-destinations h3{font:600 10px Newsroom UI,system-ui;letter-spacing:.07em;text-transform:uppercase;color:var(--org-muted);margin:16px 0 8px}
18
- .organizer-destinations a{display:flex;flex-direction:column;align-items:start;gap:6px;padding:14px 8px;border-bottom:1px solid var(--org-line);color:var(--org-ink);text-decoration:none;min-height:44px}
19
- .organizer-destinations a strong{font:700 16px Newsroom Display,Georgia,serif}.organizer-destinations a small{font:400 11px/1.5 Newsroom UI,system-ui;white-space:normal;overflow-wrap:anywhere;color:var(--org-muted)}
20
- .organizer-destinations a[aria-current=page]{border-bottom:3px double var(--org-ink);color:var(--org-ink);box-shadow:inset 3px 0 0 var(--org-ink)}
13
+ .organizer-destinations section+section{margin-top:24px}.organizer-destinations h3{font:var(--kb-theme-label-weight,600) 10px/1 var(--kb-theme-ui-font);letter-spacing:.1em;text-transform:uppercase;color:var(--org-accent);margin:16px 0 8px}
14
+ .organizer-destinations a{display:flex;flex-direction:column;align-items:start;gap:3px;padding:9px 8px 9px 10px;color:var(--org-ink);text-decoration:none;min-height:44px}
15
+ .organizer-destinations a strong{font:600 15px/1.2 var(--kb-theme-title-font)}.organizer-destinations a small{font:400 12px/1.35 var(--kb-theme-ui-font);white-space:normal;overflow-wrap:anywhere;color:var(--org-muted)}
16
+ .organizer-destinations a[aria-current=page]{color:var(--org-ink);box-shadow:inset 3px 0 0 var(--org-accent)}
21
17
  .newsroom-organizer :is(a,button):focus-visible,.organizer-menu :is(a,button):focus-visible{outline:2px solid currentColor;outline-offset:-3px}
22
18
  .organizer-workspace{display:flex;flex-direction:column;min-height:0;min-width:0;overflow:hidden;padding:0 16px}
23
- .organizer-topbar{height:48px;min-height:48px;display:flex;align-items:center;gap:16px;border-bottom:1px solid var(--org-ink)}
24
- .organizer-masthead{font:900 28px Newsroom Display,Georgia,serif;white-space:nowrap;max-width:30vw;overflow:hidden;text-overflow:ellipsis}
25
- .organizer-topbar h1{font:400 12px Newsroom UI,system-ui;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0}
19
+ .organizer-topbar{height:48px;min-height:48px;display:flex;align-items:center;gap:16px;border-bottom:1px solid var(--org-line)}
20
+ .organizer-masthead{font:900 28px var(--font-wordmark),Georgia,serif;white-space:nowrap;max-width:30vw;overflow:hidden;text-overflow:ellipsis}
21
+ .organizer-topbar h1{font:400 12px var(--kb-theme-ui-font);flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0}
26
22
  .organizer-toggle{display:flex;align-items:center;justify-content:center;width:36px;min-height:36px;padding:0;border:1px solid var(--org-line);flex-shrink:0}
27
23
  .organizer-sidebar-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}.organizer-sidebar-head .organizer-brand{flex:1;min-width:0}
28
24
  .organizer-header-actions{display:flex;align-items:center;gap:8px;min-width:0;max-width:45%;overflow-x:auto}
29
25
  .organizer-main{min-width:0;min-height:0;overflow:auto;overscroll-behavior:contain;flex:1;padding:16px 0}
30
26
  .organizer-main>[data-category-steering]{min-height:0}.organizer-demo-notice{font-size:11px;color:var(--org-muted);margin-bottom:12px}
31
27
  .organizer-account{display:flex;align-items:center;gap:10px;min-height:44px;flex-shrink:0;border:1px solid var(--org-line);padding:8px;text-align:left;border-radius:3px}
32
- .organizer-account span{min-width:0}.organizer-account strong{display:block;font:600 11px Newsroom UI,system-ui;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.organizer-account small{display:block;font-size:9px;color:var(--org-muted);margin-top:2px}
28
+ .organizer-account span{min-width:0}.organizer-account strong{display:block;font:600 11px var(--kb-theme-ui-font);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.organizer-account small{display:block;font-size:9px;color:var(--org-muted);margin-top:2px}
33
29
  .organizer-account-header{display:none;padding:8px;min-width:36px;min-height:36px}.organizer-account-header span{display:none}
34
30
  .newsroom-organizer[data-sidebar-collapsed=true] .organizer-account-header{display:flex}
35
31
  .organizer-account-popup{min-width:250px;max-width:calc(100vw - 32px);border:1px solid var(--org-line);padding:6px;border-radius:4px}
@@ -39,7 +35,7 @@ body:has(.newsroom-organizer)>[data-staging-banner]{flex-shrink:0}
39
35
  .organizer-native-board{display:flex;flex-direction:column;flex:1;min-height:0;min-width:0;gap:8px}
40
36
  .organizer-board-view-toggle{display:flex;gap:4px;flex-shrink:0}
41
37
  .organizer-header-button{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:4px 12px;border:1px solid var(--org-line);font:inherit;color:inherit;background:transparent;text-decoration:none;white-space:nowrap;cursor:pointer}
42
- .organizer-header-button[aria-pressed=true]{background:transparent;color:var(--org-ink);font-weight:700;box-shadow:inset 0 -3px 0 var(--org-ink)}
38
+ .organizer-header-button[aria-pressed=true]{background:transparent;color:var(--org-ink);font-weight:600;border-color:var(--org-ink)}
43
39
  .organizer-board-note{font-size:11px;line-height:1.5;margin:0;color:var(--org-muted);white-space:nowrap}
44
40
  @media(min-width:901px){.newsroom-organizer[data-sidebar-collapsed=false] .organizer-masthead{display:none}}
45
41
  .organizer-board-body{position:relative;display:grid;grid-template-columns:minmax(0,1fr);flex:1;min-width:0;min-height:0;gap:16px}
@@ -57,7 +53,7 @@ body:has(.newsroom-organizer)>[data-staging-banner]{flex-shrink:0}
57
53
  .organizer-masthead{font-size:24px;max-width:36vw}.organizer-topbar h1{font-size:10px}.organizer-account-header{display:flex}.organizer-header-actions{gap:4px;max-width:35%}
58
54
  .organizer-bottom-nav{display:block;border-top:1px solid var(--org-ink);background:var(--org-paper);padding:4px 8px max(4px,env(safe-area-inset-bottom))}
59
55
  .organizer-bottom-nav ul{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:4px;list-style:none;margin:0;padding:0}
60
- .organizer-bottom-nav :is(a,button){display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;min-height:54px;width:100%;font:400 10px Newsroom UI,system-ui;padding:6px 0;text-decoration:none;border-radius:8px}
56
+ .organizer-bottom-nav :is(a,button){display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;min-height:54px;width:100%;font:400 10px var(--kb-theme-ui-font);padding:6px 0;text-decoration:none;border-radius:8px}
61
57
  .organizer-bottom-nav a[aria-current=page]{background:var(--muted);font-weight:600}
62
58
  .organizer-board-body[data-detail-open=true]{grid-template-columns:minmax(0,1fr)}
63
59
  .organizer-board-body>.kb-issue-detail{position:absolute;inset:0;z-index:2;overflow:auto}
@@ -87,32 +83,32 @@ body:has(.newsroom-organizer)>[data-staging-banner]{flex-shrink:0}
87
83
  .newsroom-organizer [class~="bg-primary"],.newsroom-organizer [class~="bg-secondary"],.newsroom-organizer [data-slot=button][class*="bg-primary"]{background:transparent !important;color:var(--org-ink) !important;border:1px solid var(--org-ink) !important;font-weight:700}
88
84
  .newsroom-organizer [class~="text-primary-foreground"],.newsroom-organizer [class~="text-secondary-foreground"]{color:var(--org-ink) !important}
89
85
  .newsroom-organizer [data-selected=true],.newsroom-organizer [aria-current=true]{background:transparent !important;color:var(--org-ink) !important;box-shadow:inset 3px 0 0 var(--org-ink);font-weight:600}
90
- .newsroom-organizer .news-desk-columns--administration{--administration-gap:16px;--administration-quiet:color-mix(in srgb,rgb(var(--ink-solid-rgb)) 64%,var(--org-paper));--administration-strong:rgb(var(--ink-solid-rgb));container-type:inline-size;font-family:Newsroom UI,system-ui,sans-serif;font-size:14px;line-height:1.5;max-width:1280px}
91
- .news-desk-columns--administration :is(h2,h3,strong){font-family:Newsroom Display,Georgia,serif;color:var(--administration-strong)}
86
+ .newsroom-organizer .news-desk-columns--administration{--administration-gap:16px;--administration-quiet:color-mix(in oklab,var(--org-ink) 64%,var(--org-paper));--administration-strong:var(--org-ink);container-type:inline-size;font-family:var(--kb-theme-ui-font);font-size:14px;line-height:1.5;max-width:1280px}
87
+ .news-desk-columns--administration :is(h2,h3,strong){font-family:var(--kb-theme-title-font);color:var(--administration-strong)}
92
88
  .news-desk-columns--administration .category-steering-section--lead>.category-steering-section__header{display:none}
93
89
  .news-desk-columns--administration .news-desk-settings-shell{display:grid;grid-template-columns:minmax(0,1fr);gap:24px;align-items:start}
94
90
  .news-desk-columns--administration .news-desk-settings-nav{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;border-right:0;padding-right:0}
95
91
  .news-desk-columns--administration .news-desk-settings-nav a{display:flex;flex-direction:column;gap:4px;padding:12px;border:1px solid var(--org-line);background:transparent;color:inherit;text-decoration:none;min-height:44px;min-width:0}
96
92
  .news-desk-columns--administration .news-desk-settings-nav a[data-active=true]{border-color:var(--administration-strong);box-shadow:inset 0 -2px 0 var(--administration-strong);background:transparent}
97
93
  .news-desk-columns--administration .news-desk-settings-nav a strong{font-size:16px;font-weight:700;line-height:1.2}
98
- .news-desk-columns--administration .news-desk-settings-nav a span{display:none;font:400 12px/1.4 Newsroom UI,system-ui,sans-serif;letter-spacing:0;text-transform:none;color:var(--administration-quiet)}
94
+ .news-desk-columns--administration .news-desk-settings-nav a span{display:none;font:400 12px/1.4 var(--kb-theme-ui-font);letter-spacing:0;text-transform:none;color:var(--administration-quiet)}
99
95
  .news-desk-columns--administration .news-desk-settings-panel{display:grid;gap:24px;min-width:0}
100
96
  .news-desk-columns--administration .category-steering-section__header{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:4px 16px;margin:0 0 16px;padding-bottom:8px;border-bottom:2px solid var(--administration-strong)}
101
97
  .news-desk-columns--administration .category-steering-section__header h2{margin:0;font-size:22px;font-weight:700;line-height:1.2}
102
- .news-desk-columns--administration .category-steering-section__header span{font:400 12px/1.4 Newsroom UI,system-ui,sans-serif;letter-spacing:0;text-transform:none;color:var(--administration-quiet)}
103
- .news-desk-columns--administration .story-label{margin:0;font:600 11px/1.4 Newsroom UI,system-ui,sans-serif;letter-spacing:.07em;text-transform:uppercase;color:var(--administration-quiet)}
98
+ .news-desk-columns--administration .category-steering-section__header span{font:400 12px/1.4 var(--kb-theme-ui-font);letter-spacing:0;text-transform:none;color:var(--administration-quiet)}
99
+ .news-desk-columns--administration .story-label{margin:0;font:600 11px/1.4 var(--kb-theme-ui-font);letter-spacing:.07em;text-transform:uppercase;color:var(--administration-quiet)}
104
100
  .news-desk-columns--administration .news-desk-doctrine-list{display:grid;gap:24px;min-width:0;max-width:none;width:100%}
105
101
  .news-desk-columns--administration .news-desk-doctrine-card{display:grid;gap:16px;min-width:0;padding:0;border:0}
106
102
  .news-desk-columns--administration .news-desk-doctrine-card+.news-desk-doctrine-card{padding-top:24px;border-top:1px solid var(--org-line)}
107
103
  .news-desk-columns--administration .news-desk-doctrine-card__header,.news-desk-columns--administration .news-desk-doctrine-card__footer,.news-desk-columns--administration .news-desk-doctrine-card__actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px}
108
104
  .news-desk-columns--administration .news-desk-doctrine-card__header>div{display:grid;gap:2px}
109
105
  .news-desk-columns--administration .news-desk-doctrine-card h3{margin:0;font-size:20px;font-weight:700;line-height:1.2}
110
- .news-desk-columns--administration .news-desk-doctrine-card__header>span,.news-desk-columns--administration .news-desk-doctrine-card__footer>span,.news-desk-columns--administration .news-desk-doctrine-card__actions>span{font:600 11px/1.4 Newsroom UI,system-ui,sans-serif;letter-spacing:.07em;text-transform:uppercase;color:var(--administration-quiet)}
106
+ .news-desk-columns--administration .news-desk-doctrine-card__header>span,.news-desk-columns--administration .news-desk-doctrine-card__footer>span,.news-desk-columns--administration .news-desk-doctrine-card__actions>span{font:600 11px/1.4 var(--kb-theme-ui-font);letter-spacing:.07em;text-transform:uppercase;color:var(--administration-quiet)}
111
107
  .news-desk-columns--administration .news-desk-doctrine-card__footer{padding-top:0;border-top:0}
112
108
  .news-desk-columns--administration .news-desk-doctrine-card__actions{justify-content:flex-end}
113
109
  .news-desk-columns--administration .news-desk-doctrine-card__field{display:grid;gap:6px;min-width:0}
114
- .news-desk-columns--administration .news-desk-doctrine-card__field>span{font:600 11px/1.4 Newsroom UI,system-ui,sans-serif;letter-spacing:.07em;text-transform:uppercase;color:var(--administration-quiet)}
115
- .news-desk-columns--administration :is(.news-desk-doctrine-card__field,.news-desk-merge-panel) :is(input:not([type=checkbox]),select,textarea){width:100%;max-width:100%;min-height:40px;padding:8px 10px;border:1px solid var(--org-line);background:transparent;color:var(--administration-strong);font:400 14px/1.5 Newsroom UI,system-ui,sans-serif;letter-spacing:0}
110
+ .news-desk-columns--administration .news-desk-doctrine-card__field>span{font:600 11px/1.4 var(--kb-theme-ui-font);letter-spacing:.07em;text-transform:uppercase;color:var(--administration-quiet)}
111
+ .news-desk-columns--administration :is(.news-desk-doctrine-card__field,.news-desk-merge-panel) :is(input:not([type=checkbox]),select,textarea){width:100%;max-width:100%;min-height:40px;padding:8px 10px;border:1px solid var(--org-line);background:transparent;color:var(--administration-strong);font:400 14px/1.5 var(--kb-theme-ui-font);letter-spacing:0}
116
112
  .news-desk-columns--administration .news-desk-doctrine-card__field textarea{min-height:96px;max-height:360px;field-sizing:content;resize:vertical}
117
113
  .news-desk-columns--administration .news-desk-doctrine-card__field :is(input,select,textarea):focus-visible{outline:2px solid var(--administration-strong);outline-offset:-1px}
118
114
  .news-desk-columns--administration .news-desk-doctrine-card__field:has(input[type=checkbox]){grid-auto-flow:column;justify-content:start;align-items:center;gap:12px}
@@ -121,9 +117,9 @@ body:has(.newsroom-organizer)>[data-staging-banner]{flex-shrink:0}
121
117
  .news-desk-columns--administration details[open]{display:grid;gap:16px}
122
118
  .news-desk-columns--administration [data-news-desk-admin-panel]{display:grid;gap:24px;align-content:start}
123
119
  .news-desk-columns--administration [data-news-desk-admin-panel]>.news-desk-doctrine-card{padding-top:24px;border-top:1px solid var(--org-line)}
124
- .news-desk-columns--administration summary{cursor:pointer;min-height:32px;display:flex;align-items:center;font:600 12px/1.4 Newsroom UI,system-ui,sans-serif;letter-spacing:.07em;text-transform:uppercase;color:var(--administration-quiet)}
120
+ .news-desk-columns--administration summary{cursor:pointer;min-height:32px;display:flex;align-items:center;font:600 12px/1.4 var(--kb-theme-ui-font);letter-spacing:.07em;text-transform:uppercase;color:var(--administration-quiet)}
125
121
  .news-desk-columns--administration details[open] summary{margin-bottom:0}
126
- .news-desk-columns--administration :is(.news-desk-doctrine-card__actions button,.news-desk-user-row__actions button,.news-desk-primary-action-button,.news-desk-merge-panel button){display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:36px;padding:4px 12px;border:1px solid var(--org-line);background:transparent;color:var(--administration-strong);font:600 12px/1.2 Newsroom UI,system-ui,sans-serif;letter-spacing:.05em;text-transform:uppercase;white-space:nowrap;cursor:pointer}
122
+ .news-desk-columns--administration :is(.news-desk-doctrine-card__actions button,.news-desk-user-row__actions button,.news-desk-primary-action-button,.news-desk-merge-panel button){display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:36px;padding:4px 12px;border:1px solid var(--org-line);background:transparent;color:var(--administration-strong);font:600 12px/1.2 var(--kb-theme-ui-font);letter-spacing:.05em;text-transform:uppercase;white-space:nowrap;cursor:pointer}
127
123
  .news-desk-columns--administration .news-desk-doctrine-card__actions button:last-child:not(:only-child),.news-desk-columns--administration .news-desk-doctrine-card__actions button:only-child,.news-desk-columns--administration .news-desk-primary-action-button,.news-desk-columns--administration [data-news-desk-merge-confirm]{background:transparent;border:2px solid var(--org-ink);color:var(--org-ink);font-weight:700}
128
124
  .news-desk-columns--administration :is(.news-desk-doctrine-card__actions,.news-desk-user-row__actions) button:disabled,.news-desk-columns--administration .news-desk-primary-action-button:disabled{background:transparent;border-color:var(--org-line);color:var(--administration-quiet);opacity:.6;cursor:default}
129
125
  .news-desk-columns--administration .news-desk-administration-category-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:24px;align-items:start}
@@ -135,8 +131,8 @@ body:has(.newsroom-organizer)>[data-staging-banner]{flex-shrink:0}
135
131
  .news-desk-columns--administration .news-desk-administration-category-button{display:grid;gap:2px;width:100%;padding:10px 12px;border:0;border-left:3px solid transparent;border-top:1px solid var(--org-line);background:transparent;text-align:left;color:inherit;cursor:pointer;min-height:44px}
136
132
  .news-desk-columns--administration .news-desk-administration-category-list>.story-label+.news-desk-administration-category-button{border-top:0}
137
133
  .news-desk-columns--administration .news-desk-administration-category-button[data-selected=true]{border-left-color:var(--administration-strong);background:color-mix(in srgb,var(--administration-strong) 7%,transparent)}
138
- .news-desk-columns--administration .news-desk-administration-category-button span{font:700 15px/1.25 Newsroom Display,Georgia,serif;color:var(--administration-strong)}
139
- .news-desk-columns--administration .news-desk-administration-category-button small{font:400 12px/1.4 Newsroom UI,system-ui,sans-serif;letter-spacing:0;text-transform:none;color:var(--administration-quiet)}
134
+ .news-desk-columns--administration .news-desk-administration-category-button span{font:700 15px/1.25 var(--kb-theme-title-font);color:var(--administration-strong)}
135
+ .news-desk-columns--administration .news-desk-administration-category-button small{font:400 12px/1.4 var(--kb-theme-ui-font);letter-spacing:0;text-transform:none;color:var(--administration-quiet)}
140
136
  .news-desk-columns--administration .news-desk-administration-category-doctrine{display:grid;gap:0;margin-top:16px;padding-top:24px;border-top:1px solid var(--org-line)}
141
137
  .news-desk-columns--administration .news-desk-user-list{display:grid;gap:0;max-width:960px}
142
138
  .news-desk-columns--administration .news-desk-user-row{display:grid;grid-template-columns:minmax(0,1fr);gap:12px;align-items:start;padding:16px 0;border-top:1px solid var(--org-line)}
@@ -144,14 +140,14 @@ body:has(.newsroom-organizer)>[data-staging-banner]{flex-shrink:0}
144
140
  .news-desk-columns--administration .news-desk-user-row>div:first-child{display:grid;gap:6px;min-width:0}
145
141
  .news-desk-columns--administration .news-desk-user-row header{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;justify-content:flex-start}
146
142
  .news-desk-columns--administration .news-desk-user-row strong{font-size:18px;font-weight:700;line-height:1.2}
147
- .news-desk-columns--administration .news-desk-user-row header span{font:600 11px/1.4 Newsroom UI,system-ui,sans-serif;letter-spacing:.07em;text-transform:uppercase;color:var(--administration-quiet)}
148
- .news-desk-columns--administration .news-desk-user-row p{margin:0;font:400 13px/1.5 Newsroom UI,system-ui,sans-serif;letter-spacing:0;text-transform:none;color:var(--administration-quiet);overflow-wrap:anywhere}
143
+ .news-desk-columns--administration .news-desk-user-row header span{font:600 11px/1.4 var(--kb-theme-ui-font);letter-spacing:.07em;text-transform:uppercase;color:var(--administration-quiet)}
144
+ .news-desk-columns--administration .news-desk-user-row p{margin:0;font:400 13px/1.5 var(--kb-theme-ui-font);letter-spacing:0;text-transform:none;color:var(--administration-quiet);overflow-wrap:anywhere}
149
145
  .news-desk-columns--administration .news-desk-user-row__actions{display:flex;flex-wrap:wrap;gap:8px}
150
146
  .news-desk-columns--administration .news-desk-chip-row{display:flex;flex-wrap:wrap;gap:6px}
151
- .news-desk-columns--administration .news-desk-chip-row span{padding:2px 8px;border:1px solid var(--org-line);font:400 12px/1.5 Newsroom UI,system-ui,sans-serif;letter-spacing:0;text-transform:none;color:var(--administration-quiet);overflow-wrap:anywhere}
147
+ .news-desk-columns--administration .news-desk-chip-row span{padding:2px 8px;border:1px solid var(--org-line);font:400 12px/1.5 var(--kb-theme-ui-font);letter-spacing:0;text-transform:none;color:var(--administration-quiet);overflow-wrap:anywhere}
152
148
  .news-desk-columns--administration .news-desk-merge-panel{display:grid;gap:16px;margin-top:24px;padding:16px;border:1px solid var(--org-line)}
153
149
  .news-desk-columns--administration .category-steering-alert{padding:10px 12px;border:1px solid var(--org-line);border-left:3px solid var(--administration-strong);font-size:13px;line-height:1.5;color:var(--administration-strong)}
154
- .news-desk-columns--administration .category-steering-empty{padding:16px;border:1px dashed var(--org-line);font:400 14px/1.5 Newsroom UI,system-ui,sans-serif;letter-spacing:0;text-transform:none;color:var(--administration-quiet)}
150
+ .news-desk-columns--administration .category-steering-empty{padding:16px;border:1px dashed var(--org-line);font:400 14px/1.5 var(--kb-theme-ui-font);letter-spacing:0;text-transform:none;color:var(--administration-quiet)}
155
151
  @container (min-width:600px){
156
152
  .news-desk-columns--administration .news-desk-settings-nav{grid-template-columns:repeat(4,minmax(0,1fr))}
157
153
  .news-desk-columns--administration .news-desk-settings-nav a span{display:block}
@@ -169,8 +165,8 @@ body:has(.newsroom-organizer)>[data-staging-banner]{flex-shrink:0}
169
165
  .newsroom-assignment-detail-desk{display:grid;gap:4px;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--org-muted)}
170
166
  .newsroom-assignment-detail-error{margin:0;text-transform:none;letter-spacing:0;color:var(--org-ink);font-weight:700}
171
167
  [data-slot=select-content],[data-slot=select-item],[data-slot=dropdown-menu-item],[data-slot=dropdown-menu-content],[role=option],[role=menuitem],[role=listbox],[role=menu]{border-radius:0 !important}
172
- .newsroom-desk-group-heading{margin:16px 0 8px;font:700 12px Newsroom Display,Georgia,serif;text-transform:uppercase;letter-spacing:.08em;border-bottom:1px solid var(--org-ink);padding-bottom:4px}
173
- .newsroom-desk-group-heading small{font:400 11px Newsroom UI,system-ui;text-transform:none;letter-spacing:0;color:var(--org-muted);margin-left:8px}
168
+ .newsroom-desk-group-heading{margin:16px 0 8px;font:700 12px var(--kb-theme-title-font);text-transform:uppercase;letter-spacing:.08em;border-bottom:1px solid var(--org-ink);padding-bottom:4px}
169
+ .newsroom-desk-group-heading small{font:400 11px var(--kb-theme-ui-font);text-transform:none;letter-spacing:0;color:var(--org-muted);margin-left:8px}
174
170
  .newsroom-desk-legacy-value{display:block;font-size:11px;color:var(--org-muted);overflow-wrap:anywhere}
175
171
  .newsroom-article-view-toggle{display:inline-flex}
176
172
  .newsroom-article-front-matter>summary{cursor:pointer;font-size:14px;font-weight:600;padding:6px 0;list-style-position:inside}
@@ -232,37 +228,37 @@ body:has(.newsroom-organizer)>[data-staging-banner]{flex-shrink:0}
232
228
  .news-desk-columns--taxonomy .news-desk-desk-card{border-top:0;border-bottom:1px solid var(--org-line);border-left:3px solid transparent;padding:12px 0 12px 12px;gap:2px;background:none}
233
229
  .news-desk-columns--taxonomy .news-desk-desk-card[data-selected="true"]{border-left-color:var(--org-ink);background:none;padding:12px 0 12px 12px}
234
230
  .news-desk-columns--taxonomy .news-desk-desk-card[data-selected="true"] strong{text-decoration:underline;text-underline-offset:4px}
235
- .news-desk-columns--taxonomy .news-desk-desk-card>span{font:600 11px/1.4 Newsroom UI,system-ui,sans-serif;letter-spacing:.07em;color:var(--org-muted)}
236
- .news-desk-columns--taxonomy .news-desk-desk-card strong{font:700 18px/1.2 Newsroom Display,Georgia,serif;color:var(--org-ink)}
237
- .news-desk-columns--taxonomy .news-desk-desk-card p{font:400 13px/1.4 Newsroom UI,system-ui,sans-serif;color:var(--org-ink);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
238
- .news-desk-columns--taxonomy .news-desk-desk-card small{font:400 12px/1.4 Newsroom UI,system-ui,sans-serif;letter-spacing:0;text-transform:none;color:var(--org-muted)}
231
+ .news-desk-columns--taxonomy .news-desk-desk-card>span{font:600 11px/1.4 var(--kb-theme-ui-font);letter-spacing:.07em;color:var(--org-muted)}
232
+ .news-desk-columns--taxonomy .news-desk-desk-card strong{font:700 18px/1.2 var(--kb-theme-title-font);color:var(--org-ink)}
233
+ .news-desk-columns--taxonomy .news-desk-desk-card p{font:400 13px/1.4 var(--kb-theme-ui-font);color:var(--org-ink);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
234
+ .news-desk-columns--taxonomy .news-desk-desk-card small{font:400 12px/1.4 var(--kb-theme-ui-font);letter-spacing:0;text-transform:none;color:var(--org-muted)}
239
235
  .news-desk-columns--taxonomy .news-desk-desk-detail{margin:0;display:grid;gap:24px;min-width:0}
240
236
  .news-desk-columns--taxonomy .news-desk-topic-detail__header{display:grid;gap:12px;border-bottom:3px double var(--org-ink);padding-bottom:16px}
241
- .news-desk-columns--taxonomy .news-desk-topic-detail__header h3{margin:0;font:700 30px/1.15 Newsroom Display,Georgia,serif}
242
- .news-desk-columns--taxonomy .news-desk-topic-detail__header>div>span{font:400 13px/1.4 Newsroom UI,system-ui,sans-serif;color:var(--org-muted)}
237
+ .news-desk-columns--taxonomy .news-desk-topic-detail__header h3{margin:0;font:700 30px/1.15 var(--kb-theme-title-font)}
238
+ .news-desk-columns--taxonomy .news-desk-topic-detail__header>div>span{font:400 13px/1.4 var(--kb-theme-ui-font);color:var(--org-muted)}
243
239
  .news-desk-columns--taxonomy .news-desk-topic-detail__header dl{display:flex;flex-wrap:wrap;gap:8px 32px;margin:0}
244
240
  .news-desk-columns--taxonomy .news-desk-topic-detail__header dl>div{display:flex;flex-direction:column-reverse;gap:2px}
245
- .news-desk-columns--taxonomy .news-desk-topic-detail__header dt{font:600 11px/1.4 Newsroom UI,system-ui,sans-serif;letter-spacing:.07em;text-transform:uppercase;color:var(--org-muted)}
246
- .news-desk-columns--taxonomy .news-desk-topic-detail__header dd{margin:0;font:700 22px/1.1 Newsroom Display,Georgia,serif}
241
+ .news-desk-columns--taxonomy .news-desk-topic-detail__header dt{font:600 11px/1.4 var(--kb-theme-ui-font);letter-spacing:.07em;text-transform:uppercase;color:var(--org-muted)}
242
+ .news-desk-columns--taxonomy .news-desk-topic-detail__header dd{margin:0;font:700 22px/1.1 var(--kb-theme-title-font)}
247
243
  .news-desk-columns--taxonomy .news-desk-desk-detail__grid{grid-template-columns:minmax(0,1fr);gap:32px}
248
244
  @container (min-width:900px){.news-desk-columns--taxonomy .news-desk-desk-detail__grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}}
249
245
  .news-desk-columns--taxonomy .category-steering-category-card{display:grid;gap:14px;border:0;padding:0;background:none}
250
246
  .news-desk-columns--taxonomy .category-steering-category-card>header,.news-desk-columns--taxonomy .category-steering-category-card>footer{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:8px 12px}
251
247
  .news-desk-columns--taxonomy .category-steering-category-card label{display:grid;gap:6px}
252
- .news-desk-columns--taxonomy .category-steering-category-card label>span{font:600 11px/1.4 Newsroom UI,system-ui,sans-serif;letter-spacing:.07em;text-transform:uppercase;color:var(--org-muted)}
253
- .news-desk-columns--taxonomy .category-steering-category-card :is(input,textarea){width:100%;min-height:40px;padding:8px 10px;border:1px solid var(--org-line);border-radius:0;background:transparent;color:var(--org-ink);font:400 14px/1.5 Newsroom UI,system-ui,sans-serif}
248
+ .news-desk-columns--taxonomy .category-steering-category-card label>span{font:600 11px/1.4 var(--kb-theme-ui-font);letter-spacing:.07em;text-transform:uppercase;color:var(--org-muted)}
249
+ .news-desk-columns--taxonomy .category-steering-category-card :is(input,textarea){width:100%;min-height:40px;padding:8px 10px;border:1px solid var(--org-line);border-radius:0;background:transparent;color:var(--org-ink);font:400 14px/1.5 var(--kb-theme-ui-font)}
254
250
  .news-desk-columns--taxonomy .news-desk-desk-subtopics{border-top:1px solid var(--org-line);padding-top:16px}
255
251
  .news-desk-columns--taxonomy .news-desk-chip-row{display:flex;flex-wrap:wrap;gap:8px}
256
- .news-desk-columns--taxonomy .news-desk-chip-row span{border:1px solid var(--org-ink);padding:2px 8px;font:400 13px/1.4 Newsroom UI,system-ui,sans-serif;border-radius:0}
252
+ .news-desk-columns--taxonomy .news-desk-chip-row span{border:1px solid var(--org-ink);padding:2px 8px;font:400 13px/1.4 var(--kb-theme-ui-font);border-radius:0}
257
253
  .news-desk-columns--taxonomy .news-desk-rail-column{grid-column:auto;padding:0;margin-top:32px;border-top:1px solid var(--org-ink);padding-top:16px}
258
254
  .news-desk-columns--taxonomy .news-desk-ledger-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:24px}
259
255
  .news-desk-columns--taxonomy .news-desk-ledger-item{display:grid;gap:4px;border:0;padding:0}
260
256
  .news-desk-columns--taxonomy .news-desk-ledger-item header{display:flex;flex-wrap:wrap;justify-content:space-between;gap:4px 8px}
261
- .news-desk-columns--taxonomy .news-desk-ledger-item p{margin:0;font:400 13px/1.45 Newsroom UI,system-ui,sans-serif}
257
+ .news-desk-columns--taxonomy .news-desk-ledger-item p{margin:0;font:400 13px/1.45 var(--kb-theme-ui-font)}
262
258
  @media (max-width:900px){.news-desk-columns--taxonomy .news-desk-main-column{grid-template-columns:minmax(0,1fr);gap:24px}}
263
- .news-desk-columns--taxonomy :is(.category-steering-category-card>header span,.category-steering-category-card>footer span,.news-desk-desk-detail__grid span,.category-steering-subcategory-list__label,.news-desk-ledger-item header span){color:var(--org-ink);opacity:1;font:600 11px/1.4 Newsroom UI,system-ui,sans-serif;letter-spacing:.07em;text-transform:uppercase}
264
- .news-desk-columns--taxonomy .category-steering-category-card>header strong{font:700 12px/1.4 Newsroom UI,system-ui,sans-serif;letter-spacing:.07em;text-transform:uppercase;color:var(--org-ink)}
265
- .news-desk-columns--taxonomy .category-steering-category-card button{display:inline-flex;align-items:center;justify-content:center;min-height:36px;padding:4px 12px;border:2px solid var(--org-ink);border-radius:0;background:transparent;color:var(--org-ink);font:700 12px/1.2 Newsroom UI,system-ui,sans-serif;letter-spacing:.05em;text-transform:uppercase;cursor:pointer}
259
+ .news-desk-columns--taxonomy :is(.category-steering-category-card>header span,.category-steering-category-card>footer span,.news-desk-desk-detail__grid span,.category-steering-subcategory-list__label,.news-desk-ledger-item header span){color:var(--org-ink);opacity:1;font:600 11px/1.4 var(--kb-theme-ui-font);letter-spacing:.07em;text-transform:uppercase}
260
+ .news-desk-columns--taxonomy .category-steering-category-card>header strong{font:700 12px/1.4 var(--kb-theme-ui-font);letter-spacing:.07em;text-transform:uppercase;color:var(--org-ink)}
261
+ .news-desk-columns--taxonomy .category-steering-category-card button{display:inline-flex;align-items:center;justify-content:center;min-height:36px;padding:4px 12px;border:2px solid var(--org-ink);border-radius:0;background:transparent;color:var(--org-ink);font:700 12px/1.2 var(--kb-theme-ui-font);letter-spacing:.05em;text-transform:uppercase;cursor:pointer}
266
262
  .news-desk-columns--taxonomy .category-steering-category-card button:disabled{border-color:var(--org-line);opacity:.6;cursor:default}
267
263
  .news-desk-columns--taxonomy .news-desk-rail-column .category-steering-section__header{border-bottom:0;padding-bottom:4px}
268
264
  .organizer-account-chooser{padding:8px 12px;border-bottom:1px solid var(--org-line);display:grid;gap:6px}
@@ -272,15 +268,15 @@ body:has(.newsroom-organizer)>[data-staging-banner]{flex-shrink:0}
272
268
  .organizer-account-chooser li button:disabled{opacity:.6;cursor:default}
273
269
  .organizer-account-chooser li button span{display:grid;gap:1px}
274
270
  .organizer-account-chooser li button small,.organizer-account-chooser-note{font-size:12px;color:var(--org-ink);margin:0}
275
- .organizer-account-chooser-heading{margin:0;font:600 11px/1.4 Newsroom UI,system-ui,sans-serif;letter-spacing:.07em;text-transform:uppercase}
271
+ .organizer-account-chooser-heading{margin:0;font:600 11px/1.4 var(--kb-theme-ui-font);letter-spacing:.07em;text-transform:uppercase}
276
272
  .organizer-account-chooser-link{color:var(--org-ink);text-decoration:underline;text-underline-offset:3px}
277
- .organizer-account-create-start,.organizer-account-create button{background:none;border:1px solid var(--org-ink);border-radius:0;color:var(--org-ink);font:600 12px/1.4 Newsroom UI,system-ui,sans-serif;padding:4px 10px;cursor:pointer;text-underline-offset:3px}
273
+ .organizer-account-create-start,.organizer-account-create button{background:none;border:1px solid var(--org-ink);border-radius:0;color:var(--org-ink);font:600 12px/1.4 var(--kb-theme-ui-font);padding:4px 10px;cursor:pointer;text-underline-offset:3px}
278
274
  .organizer-account-create-start:hover,.organizer-account-create button:hover{text-decoration:underline}
279
275
  .organizer-account-create-start:focus-visible,.organizer-account-create button:focus-visible,.organizer-account-create input:focus-visible{outline:2px solid var(--org-ink);outline-offset:1px}
280
276
  .organizer-account-create button:disabled{cursor:default;text-decoration:line-through}
281
277
  .organizer-account-create{display:grid;gap:6px}
282
- .organizer-account-create label{display:grid;gap:2px;font:600 11px/1.4 Newsroom UI,system-ui,sans-serif;letter-spacing:.07em;text-transform:uppercase}
283
- .organizer-account-create input{background:transparent;border:0;border-bottom:2px solid var(--org-ink);border-radius:0;color:var(--org-ink);font:400 14px/1.4 Newsroom UI,system-ui,sans-serif;padding:4px 0;text-transform:none;letter-spacing:0}
278
+ .organizer-account-create label{display:grid;gap:2px;font:600 11px/1.4 var(--kb-theme-ui-font);letter-spacing:.07em;text-transform:uppercase}
279
+ .organizer-account-create input{background:transparent;border:0;border-bottom:2px solid var(--org-ink);border-radius:0;color:var(--org-ink);font:400 14px/1.4 var(--kb-theme-ui-font);padding:4px 0;text-transform:none;letter-spacing:0}
284
280
  .organizer-account-create span{display:flex;gap:8px}
285
281
  [data-reference-cyclotron-status] .cyclotron-status[data-variant]{border-radius:0;background:transparent;border-top:1px solid var(--org-ink);border-bottom:1px solid var(--org-ink);padding-left:0;padding-right:0}
286
282
  [data-reference-cyclotron-status] :is(.cyclotron-status-note,.cyclotron-status-definition,.cyclotron-status-header p,.cyclotron-status-override){color:var(--org-ink)}
@@ -296,22 +292,22 @@ body:has(.newsroom-organizer)>[data-staging-banner]{flex-shrink:0}
296
292
  .news-desk-columns--administration .news-desk-delegation-token p{margin:0}
297
293
  .news-desk-columns--administration .news-desk-delegation-token__row{display:flex;flex-wrap:wrap;gap:8px;align-items:stretch}
298
294
  .news-desk-columns--administration .news-desk-delegation-token__row code{flex:1 1 280px;min-width:0;padding:8px 10px;border:1px solid var(--org-line);font:500 13px/1.5 ui-monospace,Menlo,monospace;overflow-wrap:anywhere;color:var(--administration-strong)}
299
- .news-desk-columns--administration .news-desk-delegation-token__row button,.news-desk-columns--administration .news-desk-delegation-list button{min-height:36px;padding:4px 12px;border:1px solid var(--org-line);background:transparent;color:var(--administration-strong);font:600 12px/1.2 Newsroom UI,system-ui,sans-serif;letter-spacing:.05em;text-transform:uppercase;cursor:pointer}
295
+ .news-desk-columns--administration .news-desk-delegation-token__row button,.news-desk-columns--administration .news-desk-delegation-list button{min-height:36px;padding:4px 12px;border:1px solid var(--org-line);background:transparent;color:var(--administration-strong);font:600 12px/1.2 var(--kb-theme-ui-font);letter-spacing:.05em;text-transform:uppercase;cursor:pointer}
300
296
  .news-desk-columns--administration .news-desk-delegation-list{list-style:none;margin:0;padding:0;display:grid}
301
297
  .news-desk-columns--administration .news-desk-delegation-list li{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:8px 16px;align-items:center;padding:12px 0;border-top:1px solid var(--org-line)}
302
298
  .news-desk-columns--administration .news-desk-delegation-list li>div{display:grid;gap:2px}
303
299
  .news-desk-columns--administration .news-desk-delegation-list li[data-delegation-live=true] .news-desk-delegation-state{font-weight:700;text-decoration:underline;text-underline-offset:4px}
304
- .news-desk-columns--administration .news-desk-delegation-state{font:600 12px/1.4 Newsroom UI,system-ui,sans-serif;color:var(--administration-strong)}
300
+ .news-desk-columns--administration .news-desk-delegation-state{font:600 12px/1.4 var(--kb-theme-ui-font);color:var(--administration-strong)}
305
301
  .news-desk-columns--administration .news-desk-delegation-confirm{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
306
302
  .news-desk-columns--administration .news-desk-delegation-pending-list{list-style:none;margin:0;padding:0;display:grid}
307
303
  .news-desk-columns--administration .news-desk-delegation-pending-list li{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:12px 24px;align-items:center;padding:16px 0 16px 12px;border-top:1px solid var(--org-line);border-left:3px solid var(--org-ink)}
308
304
  .news-desk-columns--administration .news-desk-delegation-pending-list li>div{display:grid;gap:2px}
309
- .news-desk-columns--administration .news-desk-delegation-pending-list li>div>strong{font:700 18px/1.2 Newsroom Display,Georgia,serif}
310
- .news-desk-columns--administration .news-desk-delegation-pending-list li>div>span{font:400 13px/1.4 Newsroom UI,system-ui,sans-serif}
305
+ .news-desk-columns--administration .news-desk-delegation-pending-list li>div>strong{font:700 18px/1.2 var(--kb-theme-title-font)}
306
+ .news-desk-columns--administration .news-desk-delegation-pending-list li>div>span{font:400 13px/1.4 var(--kb-theme-ui-font)}
311
307
  .news-desk-columns--administration .news-desk-delegation-countdown{font-weight:600!important;font-variant-numeric:tabular-nums}
312
308
  .news-desk-columns--administration .news-desk-delegation-code{font:700 34px/1.1 ui-monospace,Menlo,monospace;letter-spacing:.14em;color:var(--org-ink);padding:6px 0;border-top:2px solid var(--org-ink);border-bottom:2px solid var(--org-ink)}
313
309
  .news-desk-columns--administration .news-desk-delegation-decision{display:flex;gap:8px}
314
- .news-desk-columns--administration .news-desk-delegation-decision button{min-height:40px;padding:4px 18px;border:1px solid var(--org-ink);border-radius:0;background:transparent;color:var(--org-ink);font:700 12px/1.2 Newsroom UI,system-ui,sans-serif;letter-spacing:.07em;text-transform:uppercase;cursor:pointer}
310
+ .news-desk-columns--administration .news-desk-delegation-decision button{min-height:40px;padding:4px 18px;border:1px solid var(--org-ink);border-radius:0;background:transparent;color:var(--org-ink);font:700 12px/1.2 var(--kb-theme-ui-font);letter-spacing:.07em;text-transform:uppercase;cursor:pointer}
315
311
  .news-desk-columns--administration .news-desk-delegation-decision button:hover:not(:disabled){text-decoration:underline;text-underline-offset:4px}
316
312
  .news-desk-columns--administration .news-desk-delegation-decision button:disabled{cursor:default;text-decoration:line-through}
317
313
  .news-desk-columns--administration .news-desk-delegation-decision button:focus-visible{outline:2px solid var(--org-ink);outline-offset:2px}
@@ -0,0 +1,10 @@
1
+ @import "@fontsource-variable/newsreader/wght.css";
2
+ @import "@fontsource-variable/hanken-grotesk/wght.css";
3
+ @import "@fontsource/ibm-plex-mono/latin-400.css";
4
+ @import "@fontsource/ibm-plex-mono/latin-500.css";
5
+
6
+ /* Fontsource names variable families "<Family> Variable"; the Kanbus theme names the plain family. */
7
+ [data-kanbus-theme="broadsheet-green"][data-kanbus-theme] {
8
+ --kb-theme-title-font: "Newsreader Variable", Newsreader, "Iowan Old Style", Georgia, serif;
9
+ --kb-theme-ui-font: "Hanken Grotesk Variable", "Hanken Grotesk", system-ui, sans-serif;
10
+ }
@@ -0,0 +1,6 @@
1
+ import "./broadsheet-green.css";
2
+
3
+ /** Bundles the broadsheet-green fonts; loaded only when a brand uses this theme. */
4
+ export default function Fonts() {
5
+ return null;
6
+ }
@@ -0,0 +1,9 @@
1
+ @import "@fontsource-variable/libre-franklin/wght.css";
2
+ @import "@fontsource-variable/jetbrains-mono/wght.css";
3
+
4
+ /* Fontsource names variable families "<Family> Variable"; the Kanbus theme names the plain family. */
5
+ [data-kanbus-theme="newspaper-gothic"][data-kanbus-theme] {
6
+ --kb-theme-title-font: "Libre Franklin Variable", "Libre Franklin", system-ui, sans-serif;
7
+ --kb-theme-ui-font: "Libre Franklin Variable", "Libre Franklin", system-ui, sans-serif;
8
+ --kb-theme-mono-font: "JetBrains Mono Variable", "JetBrains Mono", ui-monospace, Menlo, monospace;
9
+ }
@@ -0,0 +1,6 @@
1
+ import "./newspaper-gothic.css";
2
+
3
+ /** Bundles the newspaper-gothic fonts; loaded only when a brand uses this theme. */
4
+ export default function Fonts() {
5
+ return null;
6
+ }
@@ -0,0 +1,10 @@
1
+ @import "@fontsource-variable/literata/wght.css";
2
+ @import "@fontsource-variable/public-sans/wght.css";
3
+ @import "@fontsource-variable/jetbrains-mono/wght.css";
4
+
5
+ /* Fontsource names variable families "<Family> Variable"; the Kanbus theme names the plain family. */
6
+ [data-kanbus-theme="night-desk"][data-kanbus-theme] {
7
+ --kb-theme-title-font: "Literata Variable", Literata, "Iowan Old Style", Georgia, serif;
8
+ --kb-theme-ui-font: "Public Sans Variable", "Public Sans", system-ui, sans-serif;
9
+ --kb-theme-mono-font: "JetBrains Mono Variable", "JetBrains Mono", ui-monospace, Menlo, monospace;
10
+ }
@@ -0,0 +1,6 @@
1
+ import "./night-desk.css";
2
+
3
+ /** Bundles the night-desk fonts; loaded only when a brand uses this theme. */
4
+ export default function Fonts() {
5
+ return null;
6
+ }
@@ -0,0 +1,11 @@
1
+ @import "@fontsource-variable/source-serif-4/wght.css";
2
+ @import "@fontsource/ibm-plex-sans/latin-400.css";
3
+ @import "@fontsource/ibm-plex-sans/latin-500.css";
4
+ @import "@fontsource/ibm-plex-sans/latin-600.css";
5
+ @import "@fontsource/ibm-plex-mono/latin-400.css";
6
+ @import "@fontsource/ibm-plex-mono/latin-500.css";
7
+
8
+ /* Fontsource names variable families "<Family> Variable"; the Kanbus theme names the plain family. */
9
+ [data-kanbus-theme="refined-newsprint"][data-kanbus-theme] {
10
+ --kb-theme-title-font: "Source Serif 4 Variable", "Source Serif 4", "Iowan Old Style", Georgia, serif;
11
+ }
@@ -0,0 +1,6 @@
1
+ import "./refined-newsprint.css";
2
+
3
+ /** Bundles the refined-newsprint fonts; loaded only when a brand uses this theme. */
4
+ export default function Fonts() {
5
+ return null;
6
+ }
@@ -0,0 +1,39 @@
1
+ /* The newsroom is one Kanbus theme scope ([data-kanbus-theme] on the organizer root and on
2
+ the portaled menus). The theme's --kb-theme-* tokens are the only source of colour and type:
3
+ the organizer's --org-* variables and the shared shadcn tokens are mapped from them here.
4
+ Publications adjust the look by overriding --kb-theme-* in their theme.css. */
5
+
6
+ /* The wordmark stays Playfair Display (next/font exposes it as --font-serif on body; the Kanbus
7
+ scope remaps --font-serif to the title face, so keep a separate handle). */
8
+ body { --font-wordmark: var(--font-serif); }
9
+
10
+ [data-kanbus-theme]:is(.newsroom-organizer, .organizer-menu, .organizer-account-popup) {
11
+ --org-paper: var(--kb-theme-paper);
12
+ --org-ink: var(--kb-theme-ink);
13
+ --org-line: var(--kb-theme-rule);
14
+ --org-muted: var(--kb-theme-muted);
15
+ --org-accent: var(--kb-theme-accent);
16
+ --org-on-accent: var(--kb-theme-on-accent);
17
+ --org-sidebar: var(--kb-theme-sidebar);
18
+ --org-panel: var(--kb-theme-panel);
19
+ --org-title-font: var(--kb-theme-title-font);
20
+ --org-ui-font: var(--kb-theme-ui-font);
21
+ --org-mono-font: var(--kb-theme-mono-font);
22
+
23
+ --foreground: var(--kb-theme-ink);
24
+ --foreground-strong: var(--kb-theme-ink);
25
+ --foreground-muted: var(--kb-theme-muted);
26
+ --card-foreground: var(--kb-theme-ink);
27
+ --popover: var(--kb-theme-panel);
28
+ --popover-foreground: var(--kb-theme-ink);
29
+ --primary: var(--kb-theme-accent);
30
+ --primary-foreground: var(--kb-theme-on-accent);
31
+ --secondary: color-mix(in oklab, var(--kb-theme-paper) 94%, var(--kb-theme-ink));
32
+ --secondary-foreground: var(--kb-theme-ink);
33
+ --muted: color-mix(in oklab, var(--kb-theme-paper) 94%, var(--kb-theme-ink));
34
+ --muted-foreground: var(--kb-theme-muted);
35
+ --accent: color-mix(in oklab, var(--kb-theme-paper) 92%, var(--kb-theme-ink));
36
+ --accent-foreground: var(--kb-theme-ink);
37
+ --input: var(--kb-theme-rule);
38
+ --ring: var(--kb-theme-accent);
39
+ }
@@ -0,0 +1,33 @@
1
+ "use client";
2
+
3
+ import dynamic from "next/dynamic";
4
+ import type { KanbusThemeId } from "@kanbus/ui";
5
+ import "@kanbus/ui/styles/kanban.css";
6
+ import "@kanbus/ui/styles/themes/index.css";
7
+ import "./newsroom-theme.css";
8
+ import { getKanbusTheme, SITE_BRAND } from "../lib/site-brand";
9
+ import { useResolvedPapyrusTheme } from "./use-resolved-papyrus-theme";
10
+
11
+ /**
12
+ * The Kanbus theme scope for the whole newsroom. The publication hard-codes its
13
+ * theme (`SiteBrand.kanbusTheme`); only light/dark follows the editor's setting.
14
+ * Spread onto the newsroom root and onto the portaled menus that render outside it.
15
+ */
16
+ export function useNewsroomThemeAttributes() {
17
+ const mode = useResolvedPapyrusTheme();
18
+ // Same attributes as `kanbusThemeAttributes(theme, mode)` from @kanbus/ui; spelled out so server-side tests need no ESM-only import.
19
+ return { "data-kanbus-theme": getKanbusTheme(SITE_BRAND), "data-color-mode": mode };
20
+ }
21
+
22
+ const THEME_FONTS: Record<KanbusThemeId, ReturnType<typeof dynamic>> = {
23
+ "refined-newsprint": dynamic(() => import("./newsroom-theme-fonts/refined-newsprint")),
24
+ "newspaper-gothic": dynamic(() => import("./newsroom-theme-fonts/newspaper-gothic")),
25
+ "night-desk": dynamic(() => import("./newsroom-theme-fonts/night-desk")),
26
+ "broadsheet-green": dynamic(() => import("./newsroom-theme-fonts/broadsheet-green")),
27
+ };
28
+
29
+ /** Loads the font files for the brand's theme only (the Playfair wordmark comes from the root layout). */
30
+ export function NewsroomThemeFonts() {
31
+ const Fonts = THEME_FONTS[getKanbusTheme(SITE_BRAND)];
32
+ return <Fonts />;
33
+ }
@@ -13,6 +13,7 @@ import { usePathname, useRouter } from "next/navigation";
13
13
  import type { ReactNode, RefObject } from "react";
14
14
  import { useCallback, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, useTransition } from "react";
15
15
  import amplifyOutputs from "papyrus-amplify-outputs";
16
+ import { EditorialChecksAdminPanel } from "./editorial-checks-admin-panel";
16
17
  import { SignupEntriesPanel } from "./signup-entries-panel";
17
18
  import { pluginSettings, type PluginOutputs } from "../lib/plugin-settings";
18
19
  import { generateClient } from "aws-amplify/data";
@@ -246,7 +247,7 @@ type AssignmentAction = "claim" | "release" | "complete" | "cancel" | "reopen" |
246
247
  type ReportingPacketReviewDecision = "select" | "merge" | "brief" | "hold" | "kill";
247
248
  type AssignmentDeskViewMode = "queue" | "budget";
248
249
  type UserRoleAction = "grant" | "revoke";
249
- type AdministrationPanel = "users" | "policies" | "sections" | "procedures" | "delegations" | "signups";
250
+ type AdministrationPanel = "users" | "policies" | "sections" | "procedures" | "delegations" | "signups" | "editorial-checks";
250
251
  export type NewsDeskTab = "overview" | "desks" | "topics" | "concepts" | "references" | "messages" | "assignments" | "administration" | "search";
251
252
  type LexicalRuleScope = "publication" | "corpus" | "classifier" | "category";
252
253
  type AnalysisReindexMode = "online-update" | "classifier-retrain" | "scoped-topic-rebuild" | "entity-graph-rebuild" | "generated-analysis-rebuild";
@@ -4317,6 +4318,17 @@ function AdministrationDeskView({
4317
4318
  <strong>Agent delegations</strong>
4318
4319
  <span>Let an agent curate References for you</span>
4319
4320
  </Link>
4321
+ {editorialChecksPluginEnabled() ? (
4322
+ <Link
4323
+ href={administrationPanelHref("editorial-checks", isDemo)}
4324
+ data-news-desk-admin-nav="editorial-checks"
4325
+ data-active={administrationPanel === "editorial-checks" || undefined}
4326
+ onClick={() => onPanelChange("editorial-checks")}
4327
+ >
4328
+ <strong>Editorial checks</strong>
4329
+ <span>Policies the article editor checks drafts against</span>
4330
+ </Link>
4331
+ ) : null}
4320
4332
  {signupPluginEnabled() ? (
4321
4333
  <Link
4322
4334
  href={administrationPanelHref("signups", isDemo)}
@@ -4331,6 +4343,7 @@ function AdministrationDeskView({
4331
4343
  </nav>}
4332
4344
  <div className="news-desk-settings-panel">
4333
4345
  {administrationPanel === "signups" ? <SignupEntriesPanel /> : null}
4346
+ {administrationPanel === "editorial-checks" ? <EditorialChecksAdminPanel /> : null}
4334
4347
  {administrationPanel === "delegations" ? <AdministrationDelegationsPanel disabled={disabled} /> : null}
4335
4348
  {administrationPanel === "users" ? (
4336
4349
  <AdministrationUsersPanel
@@ -12794,9 +12807,14 @@ function signupPluginEnabled(): boolean {
12794
12807
  return pluginSettings(amplifyOutputs as PluginOutputs, "signup") !== null;
12795
12808
  }
12796
12809
 
12810
+ function editorialChecksPluginEnabled(): boolean {
12811
+ return pluginSettings(amplifyOutputs as PluginOutputs, "editorial-checks") !== null;
12812
+ }
12813
+
12797
12814
  function normalizeAdministrationPanel(value: string | null | undefined): AdministrationPanel {
12798
12815
  if (value === "policies" || value === "sections" || value === "procedures" || value === "delegations") return value;
12799
12816
  if (value === "signups" && signupPluginEnabled()) return value;
12817
+ if (value === "editorial-checks" && editorialChecksPluginEnabled()) return value;
12800
12818
  return "users";
12801
12819
  }
12802
12820