@anthusai/papyrus 1.10.0 → 1.12.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/amplify/data/resource.js +70 -3
- package/amplify/data/resource.ts +75 -3
- package/amplify/data/schema.js +67 -0
- package/amplify/data/schema.ts +72 -0
- package/amplify/functions/category-action/handler.ts +190 -20
- package/amplify/functions/console-chat-responder/src/main.rs +1 -1
- package/amplify/functions/content-actions/handler.py +23 -0
- package/amplify/functions/content-actions/requirements.txt +1 -1
- package/amplify/functions/content-actions/resource.js +1 -1
- package/amplify/functions/content-actions/resource.ts +1 -1
- package/amplify/functions/renditions/requirements.txt +1 -1
- package/amplify/functions/shared/curation-delegation.ts +67 -0
- package/amplify/functions/shared/reference-curation-metadata.ts +20 -0
- package/amplify/functions/shared/slack-events.ts +2 -2
- package/amplify/publication/renditions-function.js +1 -1
- package/amplify/publication/renditions-function.ts +1 -1
- package/app/api/local-preview/derive/route.ts +28 -0
- package/app/api/local-preview/media/route.ts +25 -0
- package/app/globals.css +28 -28
- package/app/layout.tsx +8 -5
- package/app/newsroom/[section]/[...selection]/page.tsx +0 -1
- package/app/newsroom/[section]/page.tsx +0 -1
- package/app/newsroom/insights/[threadId]/page.tsx +5 -16
- package/app/newsroom/insights/page.tsx +4 -12
- package/components/administration-delegations-panel.tsx +204 -0
- package/components/board-card-excerpts.tsx +45 -0
- package/components/curation-delegation-client.ts +81 -0
- package/components/markus-ir-preview.tsx +47 -2
- package/components/news-desk-page.tsx +0 -1
- package/components/news-desk-taxonomy-client.ts +32 -220
- package/components/newsroom-article-editor.tsx +135 -39
- package/components/newsroom-assignment-detail.tsx +35 -1
- package/components/newsroom-board-view.tsx +29 -7
- package/components/newsroom-newsprint-board.css +9 -2
- package/components/newsroom-ops-overview.tsx +27 -5
- package/components/newsroom-organizer-shell.tsx +25 -7
- package/components/newsroom-organizer.css +218 -4
- package/components/newsroom-references-view.tsx +56 -21
- package/components/priming-proof-page.tsx +17 -8
- package/components/prospectus-account-chooser.tsx +98 -0
- package/components/reference-cyclotron-status.tsx +5 -5
- package/components/reference-cyclotron-suggestion.tsx +143 -0
- package/components/reference-live-agreement.tsx +62 -0
- package/components/story-reporting-trail-client.ts +91 -0
- package/components/story-reporting-trail.tsx +115 -0
- package/components/topic-steering-workspace.tsx +203 -674
- package/components/ui/sheet.tsx +1 -0
- package/components/wiki-concepts-view.tsx +153 -0
- package/components/wiki-index-client.ts +51 -0
- package/lib/content-actions-client.ts +3 -0
- package/lib/content-actions-demo.ts +55 -3
- package/lib/content-item-lifecycle.ts +4 -2
- package/lib/content-source-context.ts +9 -1
- package/lib/curation-delegation-helpers.ts +59 -0
- package/lib/cyclotron-suggestions.ts +263 -0
- package/lib/front-matter-fields.ts +42 -0
- package/lib/graphql-content-repository.ts +42 -7
- package/lib/local-preview-seed.ts +174 -3
- package/lib/local-preview-tenant.ts +27 -0
- package/lib/newsroom-articles.ts +2 -0
- package/lib/newsroom-board.ts +4 -0
- package/lib/newsroom-forum-routes.ts +2 -43
- package/lib/newsroom-index-filters.ts +3 -40
- package/lib/newsroom-media-backend.ts +5 -0
- package/lib/newsroom-nav.ts +1 -3
- package/lib/newsroom-organizer-nav.ts +5 -12
- package/lib/newsroom-section-routing.ts +1 -1
- package/lib/newsroom-sections.ts +12 -0
- package/lib/papyrus-web-locations.ts +3 -24
- package/lib/priming-proof-report.ts +1 -0
- package/lib/prospectus-tenant.ts +22 -0
- package/lib/relevance-decisions.ts +29 -0
- package/lib/semantic-graph.ts +5 -5
- package/lib/site-brand.ts +9 -0
- package/lib/story-reporting-trail.ts +106 -0
- package/lib/tenant-keys.ts +32 -0
- package/lib/wiki.ts +56 -0
- package/package.json +21 -1
- package/routes.manifest.json +23 -7
|
@@ -2,20 +2,36 @@
|
|
|
2
2
|
|
|
3
3
|
import { useEffect, useId, useState } from "react";
|
|
4
4
|
import Link from "next/link";
|
|
5
|
-
import { usePathname } from "next/navigation";
|
|
6
|
-
import { BookOpen, ClipboardList,
|
|
5
|
+
import { usePathname, useRouter, useSearchParams } from "next/navigation";
|
|
6
|
+
import { BookOpen, ClipboardList, Menu, Search, MessagesSquare, PanelLeftClose, PanelLeftOpen, Settings, UserRound, LogIn, LogOut } from "lucide-react";
|
|
7
7
|
import { ORGANIZER_NAV_GROUPS, ORGANIZER_PRIMARY_NAV, ORGANIZER_SETTINGS_DESTINATION } from "../lib/newsroom-organizer-nav";
|
|
8
8
|
import { browserPathToInternalNewsroomPath } from "../lib/newsroom-base-path";
|
|
9
9
|
import { getNewsroomNavHref } from "../lib/newsroom-nav";
|
|
10
10
|
import { SITE_BRAND } from "../lib/site-brand";
|
|
11
11
|
import { useOptionalNewsDeskClient } from "./news-desk-client-provider";
|
|
12
12
|
import { ReaderAuthControl } from "./reader-auth-control";
|
|
13
|
+
import { ProspectusAccountChooser, useProspectusAccountSummary } from "./prospectus-account-chooser";
|
|
13
14
|
import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetDescription, SheetTrigger } from "./ui/sheet";
|
|
14
15
|
import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuSeparator } from "./ui/dropdown-menu";
|
|
15
16
|
import type { NewsroomOpsShellProps } from "./newsroom-ops-shell";
|
|
16
17
|
import "./newsroom-organizer.css";
|
|
17
18
|
|
|
18
|
-
|
|
19
|
+
/** The standard place to search the knowledge base; the Search page is the results page. */
|
|
20
|
+
function OrganizerSearch({ demo }: { demo: boolean }) {
|
|
21
|
+
const router = useRouter();
|
|
22
|
+
const searchParams = useSearchParams();
|
|
23
|
+
const [text, setText] = useState(searchParams.get("q") ?? "");
|
|
24
|
+
return <form className="organizer-search" role="search" onSubmit={event => {
|
|
25
|
+
event.preventDefault();
|
|
26
|
+
const query = text.trim();
|
|
27
|
+
if (query) router.push(getNewsroomNavHref(`/newsroom/search?q=${encodeURIComponent(query)}`, demo));
|
|
28
|
+
}}>
|
|
29
|
+
<Search size={14} aria-hidden="true" />
|
|
30
|
+
<input aria-label="Search the knowledge base" data-newsroom-search type="search" onChange={event => setText(event.target.value)} placeholder="Search" value={text} />
|
|
31
|
+
</form>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const ICONS = { articles: ClipboardList, references: BookOpen, messages: MessagesSquare };
|
|
19
35
|
|
|
20
36
|
/** Navigation is a presentation layer; existing route and server authorization still own access. */
|
|
21
37
|
function Navigation({ activePath, demo, admin, surface, onNavigate }: { activePath: string; demo: boolean; admin: boolean; surface: string; onNavigate?: () => void }) {
|
|
@@ -39,6 +55,7 @@ function Account({ placement }: { placement: "sidebar" | "header" }) {
|
|
|
39
55
|
const session = useOptionalNewsDeskClient();
|
|
40
56
|
const auth = session?.shell.auth ?? { status: "loading" as const, label: "Checking sign-in" };
|
|
41
57
|
const [open, setOpen] = useState(false);
|
|
58
|
+
const accountSummary = useProspectusAccountSummary();
|
|
42
59
|
useEffect(() => {
|
|
43
60
|
const media = matchMedia("(max-width: 900px)");
|
|
44
61
|
const close = () => setOpen(false);
|
|
@@ -46,12 +63,13 @@ function Account({ placement }: { placement: "sidebar" | "header" }) {
|
|
|
46
63
|
return () => media.removeEventListener("change", close);
|
|
47
64
|
}, []);
|
|
48
65
|
return <DropdownMenu open={open} onOpenChange={setOpen}>
|
|
49
|
-
<DropdownMenuTrigger className={`organizer-account organizer-account-${placement}`} aria-label="Account menu" title="Account menu">
|
|
50
|
-
<UserRound size={18} aria-hidden="true" /><span><strong>{auth.label}</strong><small>{auth.status === "signedIn" ? "Account & preferences" : auth.status === "signedOut" ? "Not signed in" : "Checking session"}</small></span>
|
|
66
|
+
<DropdownMenuTrigger id={`organizer-account-trigger-${placement}`} className={`organizer-account organizer-account-${placement}`} aria-label="Account menu" title="Account menu">
|
|
67
|
+
<UserRound size={18} aria-hidden="true" /><span><strong>{auth.label}</strong><small>{accountSummary ?? (auth.status === "signedIn" ? "Account & preferences" : auth.status === "signedOut" ? "Not signed in" : "Checking session")}</small></span>
|
|
51
68
|
</DropdownMenuTrigger>
|
|
52
69
|
<DropdownMenuContent className="organizer-account-popup" side={placement === "sidebar" ? "top" : "bottom"} align="end">
|
|
53
70
|
<DropdownMenuGroup>
|
|
54
71
|
<DropdownMenuLabel>{auth.label}</DropdownMenuLabel><DropdownMenuSeparator />
|
|
72
|
+
<ProspectusAccountChooser />
|
|
55
73
|
<DropdownMenuItem render={<Link href={getNewsroomNavHref(ORGANIZER_SETTINGS_DESTINATION.path)} />}><Settings aria-hidden="true" />{ORGANIZER_SETTINGS_DESTINATION.label}</DropdownMenuItem>
|
|
56
74
|
<ReaderAuthControl authState={auth} renderAction={({ disabled, onClick, signedIn }) => <DropdownMenuItem disabled={disabled} closeOnClick={false} onClick={onClick}>
|
|
57
75
|
{signedIn ? <LogOut aria-hidden="true" /> : <LogIn aria-hidden="true" />}{signedIn ? "Sign out" : "Sign in"}
|
|
@@ -107,7 +125,7 @@ export function NewsroomOrganizerShell({ activeTab, appTitle, backHref = "/", ba
|
|
|
107
125
|
return <div className="newsroom-organizer" data-news-desk data-newsroom-ops-shell="true" data-newsroom-chrome="organizer" data-sidebar-collapsed={collapsed || !showNavigation ? "true" : "false"}>
|
|
108
126
|
{showNavigation && <aside className="organizer-sidebar" hidden={collapsed} id="organizer-sidebar">
|
|
109
127
|
<div className="organizer-sidebar-head">
|
|
110
|
-
<Link className="organizer-brand" href={getNewsroomNavHref("/newsroom", demo)}>{appTitle}<small>The newsroom</small></Link>
|
|
128
|
+
<Link className="organizer-brand" href={getNewsroomNavHref("/newsroom", demo)}>{SITE_BRAND.components?.NewsroomLogo ? <SITE_BRAND.components.NewsroomLogo className="organizer-brand-logo" /> : appTitle}<small>The newsroom</small></Link>
|
|
111
129
|
{sidebarToggle}
|
|
112
130
|
</div>
|
|
113
131
|
<Navigation activePath={activePath} demo={demo} admin={admin} surface="sidebar" />
|
|
@@ -117,7 +135,7 @@ export function NewsroomOrganizerShell({ activeTab, appTitle, backHref = "/", ba
|
|
|
117
135
|
<header className="organizer-topbar" data-newsroom-ops-topbar>
|
|
118
136
|
{showNavigation && collapsed && sidebarToggle}
|
|
119
137
|
<Link className="organizer-masthead" href={backHref} title={backLabel}>{appTitle}</Link>
|
|
120
|
-
<h1 data-newsroom-ops-title>{pageTitle}</h1><div className="organizer-header-actions">{headerActions}</div><Account placement="header" />
|
|
138
|
+
<h1 data-newsroom-ops-title>{pageTitle}</h1><OrganizerSearch demo={demo} /><div className="organizer-header-actions">{headerActions}</div><Account placement="header" />
|
|
121
139
|
</header>
|
|
122
140
|
<main className="organizer-main">{demo && <p className="organizer-demo-notice">Demo workspace · synthetic examples</p>}{children}</main>
|
|
123
141
|
</div>
|
|
@@ -15,9 +15,9 @@ body:has(.newsroom-organizer)>[data-staging-banner]{flex-shrink:0}
|
|
|
15
15
|
.organizer-brand small{display:block;font:400 10px Newsroom UI,system-ui;letter-spacing:.3em;text-transform:uppercase;margin-top:12px}
|
|
16
16
|
.organizer-destinations{min-height:0;overflow:auto;overscroll-behavior:contain;flex:1;padding-right:1px}
|
|
17
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-
|
|
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}
|
|
20
|
-
.organizer-destinations a[aria-current=page]{border-bottom:
|
|
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)}
|
|
21
21
|
.newsroom-organizer :is(a,button):focus-visible,.organizer-menu :is(a,button):focus-visible{outline:2px solid currentColor;outline-offset:-3px}
|
|
22
22
|
.organizer-workspace{display:flex;flex-direction:column;min-height:0;min-width:0;overflow:hidden;padding:0 16px}
|
|
23
23
|
.organizer-topbar{height:48px;min-height:48px;display:flex;align-items:center;gap:16px;border-bottom:1px solid var(--org-ink)}
|
|
@@ -39,7 +39,7 @@ body:has(.newsroom-organizer)>[data-staging-banner]{flex-shrink:0}
|
|
|
39
39
|
.organizer-native-board{display:flex;flex-direction:column;flex:1;min-height:0;min-width:0;gap:8px}
|
|
40
40
|
.organizer-board-view-toggle{display:flex;gap:4px;flex-shrink:0}
|
|
41
41
|
.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:var(--org-ink);
|
|
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)}
|
|
43
43
|
.organizer-board-note{font-size:11px;line-height:1.5;margin:0;color:var(--org-muted);white-space:nowrap}
|
|
44
44
|
@media(min-width:901px){.newsroom-organizer[data-sidebar-collapsed=false] .organizer-masthead{display:none}}
|
|
45
45
|
.organizer-board-body{position:relative;display:grid;grid-template-columns:minmax(0,1fr);flex:1;min-width:0;min-height:0;gap:16px}
|
|
@@ -82,3 +82,217 @@ body:has(.newsroom-organizer)>[data-staging-banner]{flex-shrink:0}
|
|
|
82
82
|
.newsroom-embedded-article [class*="grid-cols-2"],.newsroom-embedded-article [class*="lg:grid"]{grid-template-columns:minmax(0,1fr) !important}
|
|
83
83
|
@container (min-width:1100px){.newsroom-embedded-article [class*="lg:grid"]{grid-template-columns:repeat(2,minmax(0,1fr)) !important}}
|
|
84
84
|
.newsroom-organizer [class*="rounded"]:not([data-slot=avatar]):not([class*="animate-spin"]):not([role=progressbar]),.organizer-menu,.organizer-account-popup,[data-slot=dialog-content],[data-slot=popover-content],[data-slot=dropdown-menu-content],[data-slot=select-content],[data-slot=tooltip-content]{border-radius:0 !important}
|
|
85
|
+
|
|
86
|
+
:root.light-theme .newsroom-organizer,:root.light-theme .organizer-menu,:root.light-theme .organizer-account-popup{--org-ink:var(--foreground-strong);--org-muted:var(--foreground)}
|
|
87
|
+
.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
|
+
.newsroom-organizer [class~="text-primary-foreground"],.newsroom-organizer [class~="text-secondary-foreground"]{color:var(--org-ink) !important}
|
|
89
|
+
.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)}
|
|
92
|
+
.news-desk-columns--administration .category-steering-section--lead>.category-steering-section__header{display:none}
|
|
93
|
+
.news-desk-columns--administration .news-desk-settings-shell{display:grid;grid-template-columns:minmax(0,1fr);gap:24px;align-items:start}
|
|
94
|
+
.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
|
+
.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
|
+
.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
|
+
.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)}
|
|
99
|
+
.news-desk-columns--administration .news-desk-settings-panel{display:grid;gap:24px;min-width:0}
|
|
100
|
+
.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
|
+
.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)}
|
|
104
|
+
.news-desk-columns--administration .news-desk-doctrine-list{display:grid;gap:24px;min-width:0;max-width:none;width:100%}
|
|
105
|
+
.news-desk-columns--administration .news-desk-doctrine-card{display:grid;gap:16px;min-width:0;padding:0;border:0}
|
|
106
|
+
.news-desk-columns--administration .news-desk-doctrine-card+.news-desk-doctrine-card{padding-top:24px;border-top:1px solid var(--org-line)}
|
|
107
|
+
.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
|
+
.news-desk-columns--administration .news-desk-doctrine-card__header>div{display:grid;gap:2px}
|
|
109
|
+
.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)}
|
|
111
|
+
.news-desk-columns--administration .news-desk-doctrine-card__footer{padding-top:0;border-top:0}
|
|
112
|
+
.news-desk-columns--administration .news-desk-doctrine-card__actions{justify-content:flex-end}
|
|
113
|
+
.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}
|
|
116
|
+
.news-desk-columns--administration .news-desk-doctrine-card__field textarea{min-height:96px;max-height:360px;field-sizing:content;resize:vertical}
|
|
117
|
+
.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
|
+
.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}
|
|
119
|
+
.news-desk-columns--administration .news-desk-doctrine-card__field input[type=checkbox]{width:18px;height:18px;margin:0;accent-color:var(--administration-strong)}
|
|
120
|
+
.news-desk-columns--administration details{border-top:1px solid var(--org-line);padding-top:12px}
|
|
121
|
+
.news-desk-columns--administration details[open]{display:grid;gap:16px}
|
|
122
|
+
.news-desk-columns--administration [data-news-desk-admin-panel]{display:grid;gap:24px;align-content:start}
|
|
123
|
+
.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)}
|
|
125
|
+
.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}
|
|
127
|
+
.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
|
+
.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
|
+
.news-desk-columns--administration .news-desk-administration-category-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:24px;align-items:start}
|
|
130
|
+
.news-desk-columns--administration .news-desk-administration-category-list{display:grid;gap:0;min-width:0;max-height:min(46dvh,420px);overflow:auto;padding:0;border:1px solid var(--org-line)}
|
|
131
|
+
.news-desk-columns--administration .news-desk-administration-category-list>.story-label{padding:12px 12px 6px;border-top:1px solid var(--org-line)}
|
|
132
|
+
.news-desk-columns--administration .news-desk-administration-category-list>.story-label:first-child{border-top:0}
|
|
133
|
+
.news-desk-columns--administration .news-desk-administration-category-list>.news-desk-primary-action-button{margin:12px}
|
|
134
|
+
.news-desk-columns--administration .news-desk-administration-category-list>.category-steering-empty{padding:12px;border:0}
|
|
135
|
+
.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
|
+
.news-desk-columns--administration .news-desk-administration-category-list>.story-label+.news-desk-administration-category-button{border-top:0}
|
|
137
|
+
.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)}
|
|
140
|
+
.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
|
+
.news-desk-columns--administration .news-desk-user-list{display:grid;gap:0;max-width:960px}
|
|
142
|
+
.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)}
|
|
143
|
+
.news-desk-columns--administration .news-desk-user-row:first-child{padding-top:0;border-top:0}
|
|
144
|
+
.news-desk-columns--administration .news-desk-user-row>div:first-child{display:grid;gap:6px;min-width:0}
|
|
145
|
+
.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
|
+
.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}
|
|
149
|
+
.news-desk-columns--administration .news-desk-user-row__actions{display:flex;flex-wrap:wrap;gap:8px}
|
|
150
|
+
.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}
|
|
152
|
+
.news-desk-columns--administration .news-desk-merge-panel{display:grid;gap:16px;margin-top:24px;padding:16px;border:1px solid var(--org-line)}
|
|
153
|
+
.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)}
|
|
155
|
+
@container (min-width:600px){
|
|
156
|
+
.news-desk-columns--administration .news-desk-settings-nav{grid-template-columns:repeat(4,minmax(0,1fr))}
|
|
157
|
+
.news-desk-columns--administration .news-desk-settings-nav a span{display:block}
|
|
158
|
+
.news-desk-columns--administration .news-desk-user-row{grid-template-columns:minmax(0,1fr) auto}
|
|
159
|
+
.news-desk-columns--administration .news-desk-user-row__actions{justify-content:flex-end;max-width:260px}
|
|
160
|
+
}
|
|
161
|
+
@container (min-width:900px){
|
|
162
|
+
.news-desk-columns--administration .news-desk-settings-shell{grid-template-columns:240px minmax(0,1fr);gap:32px}
|
|
163
|
+
.news-desk-columns--administration .news-desk-settings-nav{grid-template-columns:minmax(0,1fr);gap:0;position:sticky;top:0}
|
|
164
|
+
.news-desk-columns--administration .news-desk-settings-nav a{border-width:0 0 1px;padding:12px 8px}
|
|
165
|
+
.news-desk-columns--administration .news-desk-settings-nav a[data-active=true]{box-shadow:inset 3px 0 0 var(--administration-strong);border-bottom-color:var(--org-line)}
|
|
166
|
+
.news-desk-columns--administration .news-desk-administration-category-layout{grid-template-columns:minmax(220px,280px) minmax(0,1fr)}
|
|
167
|
+
.news-desk-columns--administration .news-desk-administration-category-list{max-height:none}
|
|
168
|
+
}
|
|
169
|
+
.newsroom-assignment-detail-desk{display:grid;gap:4px;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--org-muted)}
|
|
170
|
+
.newsroom-assignment-detail-error{margin:0;text-transform:none;letter-spacing:0;color:var(--org-ink);font-weight:700}
|
|
171
|
+
[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}
|
|
174
|
+
.newsroom-desk-legacy-value{display:block;font-size:11px;color:var(--org-muted);overflow-wrap:anywhere}
|
|
175
|
+
.newsroom-article-view-toggle{display:inline-flex}
|
|
176
|
+
.newsroom-article-front-matter>summary{cursor:pointer;font-size:14px;font-weight:600;padding:6px 0;list-style-position:inside}
|
|
177
|
+
.newsroom-article-front-matter[open]>summary{margin-bottom:6px}
|
|
178
|
+
.story-trail{container-type:inline-size;display:grid;gap:20px}
|
|
179
|
+
.story-trail-section h3{margin:0 0 8px;font-size:12px;text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid var(--org-ink);padding-bottom:4px}
|
|
180
|
+
.story-trail-section h3 small{font-weight:400;color:var(--org-muted);margin-left:6px}
|
|
181
|
+
.story-trail-list,.story-trail-events{list-style:none;margin:0;padding:0;display:grid;gap:12px}
|
|
182
|
+
.story-trail-list>li{border-bottom:1px solid var(--org-line);padding-bottom:12px;display:grid;gap:4px}
|
|
183
|
+
.story-trail-list>li:last-child{border-bottom:0}
|
|
184
|
+
.story-trail-events{gap:2px;padding-left:12px;border-left:2px solid var(--org-line);font-size:13px}
|
|
185
|
+
.story-trail-row{display:flex;flex-wrap:wrap;gap:8px;align-items:baseline}
|
|
186
|
+
.story-trail-meta,.story-trail-empty{font-size:12px;color:var(--org-muted);margin:0}
|
|
187
|
+
.story-trail-chip{font-size:11px;border:1px solid var(--org-ink);padding:0 6px;text-transform:uppercase;letter-spacing:.04em}
|
|
188
|
+
.story-trail-message pre{white-space:pre-wrap;overflow-wrap:anywhere;margin:6px 0 0;font-size:12px;max-height:320px;overflow:auto}
|
|
189
|
+
.story-trail-message summary{cursor:pointer;font-size:13px}
|
|
190
|
+
@container (min-width:900px){.story-trail{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:32px;align-items:start}}
|
|
191
|
+
.newsroom-article-older-version{margin:0 0 12px;padding:8px 12px;border:1px solid var(--org-ink);border-left-width:5px;font-weight:600}
|
|
192
|
+
.newsroom-article-link-button{background:none;border:0;padding:0;font:inherit;text-decoration:underline;cursor:pointer;color:inherit}
|
|
193
|
+
.story-trail-list>li[data-story-reference-focused]{border-left:3px solid var(--org-ink);padding-left:10px}
|
|
194
|
+
.story-trail-list>li[data-story-trail-feed-reference]{border-left:1px solid var(--org-line);padding-left:10px}
|
|
195
|
+
.wiki{display:grid;grid-template-columns:minmax(200px,260px) minmax(0,1fr);gap:24px;align-items:start}
|
|
196
|
+
.wiki-sidebar{display:grid;gap:8px;position:sticky;top:0;max-height:100vh;overflow:auto;border-right:1px solid var(--org-line);padding-right:16px}
|
|
197
|
+
.wiki-home{text-align:left;background:none;border:0;border-bottom:1px solid var(--org-ink);padding:4px 0;font:inherit;font-weight:600;cursor:pointer;color:var(--org-ink)}
|
|
198
|
+
.wiki-home[aria-current="page"]{text-decoration:underline;text-underline-offset:4px}
|
|
199
|
+
.wiki-search,.wiki-kind{font:inherit;border:1px solid var(--org-ink);border-radius:0;padding:4px 8px;background:transparent;color:var(--org-ink)}
|
|
200
|
+
.wiki-sidebar-list,.wiki-concept-list{list-style:none;margin:0;padding:0;display:grid;gap:6px}
|
|
201
|
+
.wiki-sidebar-list a{color:var(--org-ink);text-decoration:none}
|
|
202
|
+
.wiki-sidebar-list a[aria-current="page"]{font-weight:700;text-decoration:underline;text-underline-offset:4px}
|
|
203
|
+
.wiki-main{min-width:0;max-width:820px}
|
|
204
|
+
.wiki-page h1{margin:0 0 6px}
|
|
205
|
+
.wiki-page h2{font-size:12px;text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid var(--org-ink);padding-bottom:4px;margin:24px 0 8px}
|
|
206
|
+
.wiki-page h3{font-size:13px;margin:12px 0 4px}
|
|
207
|
+
.wiki-page-tools{display:flex;justify-content:flex-end;margin-bottom:8px}
|
|
208
|
+
.wiki-tool-link{background:none;border:0;padding:0;font:inherit;color:var(--org-ink);text-decoration:underline;text-underline-offset:3px;cursor:pointer}
|
|
209
|
+
.wiki-link,.wiki-concept-list a{color:var(--org-ink);text-decoration:underline;text-underline-offset:3px}
|
|
210
|
+
.wiki-concept-list li{display:flex;flex-wrap:wrap;gap:8px;align-items:baseline}
|
|
211
|
+
.wiki-chip{font-size:11px;border:1px solid var(--org-ink);padding:0 6px;text-transform:uppercase;letter-spacing:.04em}
|
|
212
|
+
.wiki-meta,.wiki-empty{font-size:12px;color:var(--org-muted);margin:0}
|
|
213
|
+
@media (max-width:760px){.wiki{grid-template-columns:minmax(0,1fr)}.wiki-sidebar{position:static;max-height:240px;border-right:0;padding-right:0}}
|
|
214
|
+
.organizer-board-body .kb-issue-detail [data-markus-preview] a,.organizer-board-body .kb-issue-detail .wiki-link{display:inline;min-height:0;padding:0}
|
|
215
|
+
.newsroom-article-front-matter-fields{display:grid;gap:10px;max-width:640px}
|
|
216
|
+
.newsroom-article-front-matter-fields label{display:grid;gap:4px;font-size:13px;font-weight:600}
|
|
217
|
+
.newsroom-article-summary{border-bottom:1px solid var(--org-line);margin-bottom:12px;padding-bottom:10px}
|
|
218
|
+
.newsroom-article-subtitle{margin:0 0 4px;font-size:18px;font-weight:600;line-height:1.3}
|
|
219
|
+
.newsroom-article-blurb{margin:0;font-size:14px;line-height:1.45}
|
|
220
|
+
.organizer-search{display:flex;align-items:center;gap:6px;border-bottom:1px solid var(--org-ink);padding:2px 0;min-width:140px;max-width:240px}
|
|
221
|
+
.organizer-search input{font:inherit;font-size:13px;border:0;background:transparent;color:var(--org-ink);outline:0;width:100%;padding:2px 0}
|
|
222
|
+
.organizer-search input:focus-visible{text-decoration:underline;text-underline-offset:4px}
|
|
223
|
+
@media (max-width:900px){.organizer-search{min-width:0;max-width:120px}}
|
|
224
|
+
.taxonomy-view-switch{display:flex;gap:20px;border-bottom:1px solid var(--org-line);margin-bottom:12px}
|
|
225
|
+
.taxonomy-view-switch a{color:var(--org-ink);text-decoration:none;padding:4px 0;border-bottom:2px solid transparent}
|
|
226
|
+
.taxonomy-view-switch a[aria-current="page"]{font-weight:700;border-bottom-color:var(--org-ink)}
|
|
227
|
+
.news-desk-settings-shell[data-settings-nav="hidden"]{display:block}
|
|
228
|
+
.news-desk-columns--taxonomy{display:block;margin:0;--administration-quiet:var(--org-muted);--administration-strong:var(--org-ink)}
|
|
229
|
+
.news-desk-columns--taxonomy .category-steering-section--lead>.category-steering-section__header{display:flex}
|
|
230
|
+
.news-desk-columns--taxonomy .news-desk-main-column{display:grid;grid-template-columns:minmax(220px,300px) minmax(0,1fr);gap:0 40px;align-items:start;grid-column:auto;container-type:inline-size}
|
|
231
|
+
.news-desk-columns--taxonomy .news-desk-desk-list{display:grid;grid-template-columns:minmax(0,1fr);gap:0}
|
|
232
|
+
.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
|
+
.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
|
+
.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)}
|
|
239
|
+
.news-desk-columns--taxonomy .news-desk-desk-detail{margin:0;display:grid;gap:24px;min-width:0}
|
|
240
|
+
.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)}
|
|
243
|
+
.news-desk-columns--taxonomy .news-desk-topic-detail__header dl{display:flex;flex-wrap:wrap;gap:8px 32px;margin:0}
|
|
244
|
+
.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}
|
|
247
|
+
.news-desk-columns--taxonomy .news-desk-desk-detail__grid{grid-template-columns:minmax(0,1fr);gap:32px}
|
|
248
|
+
@container (min-width:900px){.news-desk-columns--taxonomy .news-desk-desk-detail__grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}}
|
|
249
|
+
.news-desk-columns--taxonomy .category-steering-category-card{display:grid;gap:14px;border:0;padding:0;background:none}
|
|
250
|
+
.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
|
+
.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}
|
|
254
|
+
.news-desk-columns--taxonomy .news-desk-desk-subtopics{border-top:1px solid var(--org-line);padding-top:16px}
|
|
255
|
+
.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}
|
|
257
|
+
.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
|
+
.news-desk-columns--taxonomy .news-desk-ledger-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:24px}
|
|
259
|
+
.news-desk-columns--taxonomy .news-desk-ledger-item{display:grid;gap:4px;border:0;padding:0}
|
|
260
|
+
.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}
|
|
262
|
+
@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}
|
|
266
|
+
.news-desk-columns--taxonomy .category-steering-category-card button:disabled{border-color:var(--org-line);opacity:.6;cursor:default}
|
|
267
|
+
.news-desk-columns--taxonomy .news-desk-rail-column .category-steering-section__header{border-bottom:0;padding-bottom:4px}
|
|
268
|
+
.organizer-account-chooser{padding:8px 12px;border-bottom:1px solid var(--org-line);display:grid;gap:6px}
|
|
269
|
+
.organizer-account-chooser ul{list-style:none;margin:0;padding:0;display:grid}
|
|
270
|
+
.organizer-account-chooser li button{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;text-align:left;background:none;border:0;border-left:3px solid transparent;padding:6px 8px;font:inherit;color:var(--org-ink);cursor:pointer}
|
|
271
|
+
.organizer-account-chooser li button[data-selected]{border-left-color:var(--org-ink);font-weight:700}
|
|
272
|
+
.organizer-account-chooser li button:disabled{opacity:.6;cursor:default}
|
|
273
|
+
.organizer-account-chooser li button span{display:grid;gap:1px}
|
|
274
|
+
.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}
|
|
276
|
+
.organizer-account-chooser-link{color:var(--org-ink);text-decoration:underline;text-underline-offset:3px}
|
|
277
|
+
[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}
|
|
278
|
+
[data-reference-cyclotron-status] :is(.cyclotron-status-note,.cyclotron-status-definition,.cyclotron-status-header p,.cyclotron-status-override){color:var(--org-ink)}
|
|
279
|
+
[data-reference-cyclotron-status] .cyclotron-status[data-variant="strip"]>span+span::before{color:var(--org-ink)}
|
|
280
|
+
[data-reference-cyclotron-status] .cyclotron-status-bar{border-radius:0;background:transparent;border:1px solid var(--org-ink)}
|
|
281
|
+
[data-reference-cyclotron-status] .cyclotron-status-bar>span{opacity:1}
|
|
282
|
+
[data-reference-cyclotron-status] :is(.cyclotron-review-secondary,.cyclotron-review-choice,.cyclotron-review-submit){border-radius:0;opacity:1}
|
|
283
|
+
.news-desk-columns--administration .news-desk-delegation-note{margin:0;color:var(--administration-strong);max-width:68ch}
|
|
284
|
+
.news-desk-columns--administration .news-desk-delegation-form{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr) auto;gap:12px;align-items:end}
|
|
285
|
+
.news-desk-columns--administration .news-desk-delegation-error{margin:0;padding:8px 0 8px 12px;border-left:3px solid var(--org-ink);color:var(--administration-strong);font-weight:600}
|
|
286
|
+
.news-desk-columns--administration .news-desk-delegation-token{display:grid;gap:12px;min-width:0;padding:16px;border:2px solid var(--org-ink)}
|
|
287
|
+
.news-desk-columns--administration .news-desk-delegation-token h3{margin:0;font-size:20px}
|
|
288
|
+
.news-desk-columns--administration .news-desk-delegation-token p{margin:0}
|
|
289
|
+
.news-desk-columns--administration .news-desk-delegation-token__row{display:flex;flex-wrap:wrap;gap:8px;align-items:stretch}
|
|
290
|
+
.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)}
|
|
291
|
+
.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}
|
|
292
|
+
.news-desk-columns--administration .news-desk-delegation-list{list-style:none;margin:0;padding:0;display:grid}
|
|
293
|
+
.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)}
|
|
294
|
+
.news-desk-columns--administration .news-desk-delegation-list li>div{display:grid;gap:2px}
|
|
295
|
+
.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}
|
|
296
|
+
.news-desk-columns--administration .news-desk-delegation-state{font:600 12px/1.4 Newsroom UI,system-ui,sans-serif;color:var(--administration-strong)}
|
|
297
|
+
.news-desk-columns--administration .news-desk-delegation-confirm{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
|
|
298
|
+
@container (max-width:640px){.news-desk-columns--administration .news-desk-delegation-form{grid-template-columns:minmax(0,1fr)}.news-desk-columns--administration .news-desk-delegation-list li{grid-template-columns:minmax(0,1fr)}}
|
|
@@ -49,6 +49,15 @@ import { normalizeReferenceCurationStatus } from "../lib/reference-policy";
|
|
|
49
49
|
import { newsroomListRowClassName } from "../lib/newsroom-list-selection";
|
|
50
50
|
import { ReferenceSourcePreview } from "./reference-source-preview";
|
|
51
51
|
import { ReferenceRelevanceReview } from "./reference-relevance-review";
|
|
52
|
+
import {
|
|
53
|
+
CountsAsTrainingLabelNote,
|
|
54
|
+
DelegatedCurationNote,
|
|
55
|
+
ReferenceSuggestionBlock,
|
|
56
|
+
ReferenceSuggestionProvenance,
|
|
57
|
+
ReferenceSuggestionRowLine,
|
|
58
|
+
} from "./reference-cyclotron-suggestion";
|
|
59
|
+
import { ReferenceLiveAgreement } from "./reference-live-agreement";
|
|
60
|
+
import type { DelegatedCuration, ShadowAgreement } from "../lib/cyclotron-suggestions";
|
|
52
61
|
import { ReferenceCyclotronPriming, type PrimingFormInput } from "./reference-cyclotron-priming";
|
|
53
62
|
import { ReferenceCyclotronStatus, type ReviewRateChoice } from "./reference-cyclotron-status";
|
|
54
63
|
import type { PrimingRequestView } from "../lib/relevance-status";
|
|
@@ -75,6 +84,12 @@ type NewsroomReferencesViewProps = {
|
|
|
75
84
|
demo?: boolean;
|
|
76
85
|
/** The relevance cyclotron's current decisions, keyed by reference lineage. */
|
|
77
86
|
decisions?: Map<string, RelevanceDecisionView>;
|
|
87
|
+
/** Reference lineage ids whose latest curation Message was made by a person. */
|
|
88
|
+
humanCuratedReferenceLineageIds?: Set<string>;
|
|
89
|
+
/** Delegated curations by reference lineage. */
|
|
90
|
+
delegatedCurations?: Map<string, DelegatedCuration>;
|
|
91
|
+
/** The live-agreement payload; the strip is hidden without it. */
|
|
92
|
+
shadowAgreement?: ShadowAgreement | null;
|
|
78
93
|
disabled?: boolean;
|
|
79
94
|
onRelevanceReview?: (reference: ReferenceRecord, curation: RelevanceCuration) => void;
|
|
80
95
|
initialReferenceLineageId?: string | null;
|
|
@@ -212,17 +227,14 @@ function useReferencePreviewAttachments(
|
|
|
212
227
|
return previewAttachments;
|
|
213
228
|
}
|
|
214
229
|
|
|
215
|
-
function decisionSummary(decision: RelevanceDecisionView): string {
|
|
216
|
-
const sure = decision.confidence == null ? "confidence unknown" : `${Math.round(decision.confidence * 100)}% sure`;
|
|
217
|
-
return `${decision.label} · ${sure}${decision.version != null ? ` · version ${decision.version}` : ""}`;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
230
|
function needsReview(reference: ReferenceRecord, decision: RelevanceDecisionView | undefined): boolean {
|
|
221
231
|
return Boolean(decision?.reviewRecommended)
|
|
222
232
|
&& normalizeReferenceCurationStatus(reference.curationStatus) === "pending";
|
|
223
233
|
}
|
|
224
234
|
|
|
225
235
|
function ReferenceDetailPanel({
|
|
236
|
+
countsAsTrainingLabel,
|
|
237
|
+
delegated,
|
|
226
238
|
decision,
|
|
227
239
|
demo,
|
|
228
240
|
disabled,
|
|
@@ -232,6 +244,8 @@ function ReferenceDetailPanel({
|
|
|
232
244
|
reference,
|
|
233
245
|
onClose,
|
|
234
246
|
}: {
|
|
247
|
+
countsAsTrainingLabel?: boolean;
|
|
248
|
+
delegated?: DelegatedCuration;
|
|
235
249
|
decision?: RelevanceDecisionView;
|
|
236
250
|
demo?: boolean;
|
|
237
251
|
disabled?: boolean;
|
|
@@ -267,25 +281,39 @@ function ReferenceDetailPanel({
|
|
|
267
281
|
) : null}
|
|
268
282
|
</div>
|
|
269
283
|
|
|
270
|
-
{decision
|
|
271
|
-
<
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
284
|
+
{decision ? (
|
|
285
|
+
<div className="space-y-3" data-reference-relevance-decision={lineageId}>
|
|
286
|
+
<ReferenceSuggestionBlock
|
|
287
|
+
decision={decision}
|
|
288
|
+
disabled={disabled}
|
|
289
|
+
onCurate={onRelevanceReview}
|
|
290
|
+
referenceLineageId={lineageId}
|
|
291
|
+
settled={status !== "pending"}
|
|
292
|
+
statusLabel={referenceStatusLabel(status)}
|
|
293
|
+
/>
|
|
294
|
+
<ReferenceSuggestionProvenance decision={decision} />
|
|
295
|
+
{status === "pending" && onRelevanceReview ? (
|
|
296
|
+
<details className="text-sm text-foreground">
|
|
297
|
+
<summary className="cursor-pointer font-semibold underline-offset-4 hover:underline">Review with a reason</summary>
|
|
298
|
+
<div className="mt-2">
|
|
299
|
+
<ReferenceRelevanceReview
|
|
300
|
+
decision={decision}
|
|
301
|
+
disabled={disabled}
|
|
302
|
+
onCurate={onRelevanceReview}
|
|
303
|
+
referenceLineageId={lineageId}
|
|
304
|
+
/>
|
|
305
|
+
</div>
|
|
306
|
+
</details>
|
|
307
|
+
) : null}
|
|
308
|
+
</div>
|
|
281
309
|
) : null}
|
|
310
|
+
{delegated ? <DelegatedCurationNote delegated={delegated} referenceLineageId={lineageId} /> : countsAsTrainingLabel ? <CountsAsTrainingLabelNote referenceLineageId={lineageId} /> : null}
|
|
282
311
|
|
|
283
312
|
<div
|
|
284
313
|
className="flex flex-wrap items-center gap-2"
|
|
285
314
|
data-news-desk-reference-curation-cluster
|
|
286
315
|
data-reference-curation-status={status}
|
|
287
316
|
>
|
|
288
|
-
{decision && status === "pending" && onRelevanceReview ? null : <>
|
|
289
317
|
<Button
|
|
290
318
|
aria-label="Accept reference"
|
|
291
319
|
aria-pressed={status === "accepted"}
|
|
@@ -312,7 +340,6 @@ function ReferenceDetailPanel({
|
|
|
312
340
|
<ThumbsDownIcon className="size-4" />
|
|
313
341
|
Reject
|
|
314
342
|
</Button>
|
|
315
|
-
</>}
|
|
316
343
|
<Button
|
|
317
344
|
aria-label="Archive reference"
|
|
318
345
|
disabled={archiveDisabled}
|
|
@@ -409,6 +436,9 @@ export function NewsroomReferencesView({
|
|
|
409
436
|
cyclotronStatus,
|
|
410
437
|
cyclotronPriming,
|
|
411
438
|
decisions,
|
|
439
|
+
humanCuratedReferenceLineageIds,
|
|
440
|
+
delegatedCurations,
|
|
441
|
+
shadowAgreement = null,
|
|
412
442
|
onRequestReviewRate,
|
|
413
443
|
demo = false,
|
|
414
444
|
disabled = false,
|
|
@@ -523,6 +553,7 @@ export function NewsroomReferencesView({
|
|
|
523
553
|
Review source intake before it becomes accepted evidence.
|
|
524
554
|
</p>
|
|
525
555
|
</div>
|
|
556
|
+
<ReferenceLiveAgreement agreement={shadowAgreement} />
|
|
526
557
|
<ReferenceCurationControls disabled={disabled} />
|
|
527
558
|
{priming && !disabled ? <ReferencePriming {...priming} /> : null}
|
|
528
559
|
{cyclotronPriming && !disabled ? (
|
|
@@ -595,12 +626,12 @@ export function NewsroomReferencesView({
|
|
|
595
626
|
</div>
|
|
596
627
|
<p className="mt-2 text-xs text-muted-foreground">{formatReferenceListDate(reference)}</p>
|
|
597
628
|
{decision ? (
|
|
598
|
-
<
|
|
599
|
-
<
|
|
629
|
+
<div className="flex flex-wrap items-center gap-2" data-reference-relevance-row={lineageId}>
|
|
630
|
+
<ReferenceSuggestionRowLine decision={decision} referenceLineageId={lineageId} />
|
|
600
631
|
{needsReview(reference, decision) ? (
|
|
601
632
|
<Badge variant="outline"><span aria-hidden="true">●</span> Needs review</Badge>
|
|
602
633
|
) : null}
|
|
603
|
-
</
|
|
634
|
+
</div>
|
|
604
635
|
) : null}
|
|
605
636
|
</button>
|
|
606
637
|
);
|
|
@@ -650,6 +681,8 @@ export function NewsroomReferencesView({
|
|
|
650
681
|
<ScrollArea className="min-h-0 flex-1">
|
|
651
682
|
{selectedReference ? (
|
|
652
683
|
<ReferenceDetailPanel
|
|
684
|
+
countsAsTrainingLabel={humanCuratedReferenceLineageIds?.has(referenceLineageId(selectedReference))}
|
|
685
|
+
delegated={delegatedCurations?.get(referenceLineageId(selectedReference))}
|
|
653
686
|
decision={decisions?.get(referenceLineageId(selectedReference))}
|
|
654
687
|
demo={demo}
|
|
655
688
|
disabled={disabled}
|
|
@@ -681,6 +714,8 @@ export function NewsroomReferencesView({
|
|
|
681
714
|
{selectedReference ? (
|
|
682
715
|
<ScrollArea className="max-h-[75dvh]">
|
|
683
716
|
<ReferenceDetailPanel
|
|
717
|
+
countsAsTrainingLabel={humanCuratedReferenceLineageIds?.has(referenceLineageId(selectedReference))}
|
|
718
|
+
delegated={delegatedCurations?.get(referenceLineageId(selectedReference))}
|
|
684
719
|
decision={decisions?.get(referenceLineageId(selectedReference))}
|
|
685
720
|
demo={demo}
|
|
686
721
|
disabled={disabled}
|
|
@@ -4,15 +4,24 @@ import {
|
|
|
4
4
|
type PrimingProofReport,
|
|
5
5
|
} from "../lib/priming-proof-report";
|
|
6
6
|
|
|
7
|
-
function ProofMethod({ heldOutSize, teachingSource }: { heldOutSize: number | null; teachingSource: string | null }) {
|
|
7
|
+
function ProofMethod({ heldOutSize, teachingSource, design }: { heldOutSize: number | null; teachingSource: string | null; design: string | null }) {
|
|
8
8
|
return (
|
|
9
9
|
<section aria-labelledby="priming-proof-method" className="space-y-2 text-sm leading-relaxed">
|
|
10
10
|
<h2 id="priming-proof-method" className="text-base font-semibold uppercase tracking-wide">How the number is made</h2>
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
{design === null ? (
|
|
12
|
+
<p>
|
|
13
|
+
Editors already decided which candidate sources belong in this publication. A fixed, balanced sample of those
|
|
14
|
+
decisions{heldOutSize === null ? "" : ` (${heldOutSize} sources)`} is frozen as the held-out set and never used
|
|
15
|
+
for teaching. A classifier that always gives the same answer agrees on half of it.
|
|
16
|
+
</p>
|
|
17
|
+
) : (
|
|
18
|
+
<p>
|
|
19
|
+
Editors already decided which candidate sources belong in this publication
|
|
20
|
+
{heldOutSize === null ? "" : `, ${heldOutSize} of them`}. Design: {design}. No source is ever judged by a
|
|
21
|
+
classifier that was taught from that same source. The two outcomes are not equally common, so read agreement
|
|
22
|
+
beside precision and recall: a classifier that always gives the majority answer would still agree often.
|
|
23
|
+
</p>
|
|
24
|
+
)}
|
|
16
25
|
<p>
|
|
17
26
|
Editors teach the classifier with labels: their other reviews of candidate sources, and sources they paste,
|
|
18
27
|
check after Papyrus extracts them, and mark publish or reject.
|
|
@@ -33,7 +42,7 @@ export function PrimingProofPage({ report }: { report: PrimingProofReport | null
|
|
|
33
42
|
<h1 className="text-3xl font-bold">Does teaching the classifier work?</h1>
|
|
34
43
|
<p className="text-muted-foreground">No approved proof run has been published for this publication yet.</p>
|
|
35
44
|
</header>
|
|
36
|
-
<ProofMethod heldOutSize={null} teachingSource={null} />
|
|
45
|
+
<ProofMethod heldOutSize={null} teachingSource={null} design={null} />
|
|
37
46
|
</main>
|
|
38
47
|
);
|
|
39
48
|
}
|
|
@@ -84,7 +93,7 @@ export function PrimingProofPage({ report }: { report: PrimingProofReport | null
|
|
|
84
93
|
</table>
|
|
85
94
|
</div>
|
|
86
95
|
</section>
|
|
87
|
-
<ProofMethod heldOutSize={report.heldOut.size} teachingSource={report.priming.source} />
|
|
96
|
+
<ProofMethod heldOutSize={report.heldOut.size} teachingSource={report.priming.source} design={report.heldOut.design ?? null} />
|
|
88
97
|
<p className="break-all text-xs text-muted-foreground">
|
|
89
98
|
Held-out fingerprint {report.heldOut.fingerprint}
|
|
90
99
|
{report.priming.fingerprint ? ` · labels fingerprint ${report.priming.fingerprint}` : ""}
|