/*
 * @file profile.css
 * @author Jouni Miikki
 * SPDX-License-Identifier: MIT
 * @description Profile SPA view styles (.pf-* prefix) — hero, tabs, cards,
 *   wallet, memory, agents, extensions, packages, knowledge, generator, and
 *   edit panels. Consumes theme.css tokens so it flips with dark/light mode.
 * @version-history
 *   v3.162.3 -- 2026-09-27 -- Page group G9: .cmdk* (the command palette: QuickFind, quick-find.css), .pj-doc-solo and .pj-doc-solo-empty (the document window: SoloWindow, solo-window.css) and .input-field.input-sm (its last user, the invitation page, draws TextField) go with their last users.
 *   v3.162.2 -- 2026-09-27 -- Components draw only their own class names: .pf .sub-tabs (Tabs bar: tab-row.css .tab-row--bar), .pf-edit-label (DisplayPrefsFields: display-prefs-fields.css), .pf .agent-cta and its h3 and p, .pf .pf-device-code, .agc-preset-desc, .agc-boundary and the utilities only AgentConsent still wrote (.pf .flex-row, .pf .text-caption, .pf .mb-1, .pf .mb-half, .pf .p-1, .pf .mt-1; agent-consent.css) go. .pf .text-meta and .input-field.input-sm stay: other pages write them (the invitation page writes .input-sm). The list in v3.162.0 no longer closes this comment early (its star and slash after .pf-edit- did).
 *   v3.162.1 -- 2026-09-27 -- .mmd and .mmd-fallback leave with the Mermaid component under its own names (css/components/mermaid.css, .mermaid-diagram and .mermaid-fallback, a move).
 *   v3.162.0 -- 2026-09-26 -- Page group G8 (Settings overview, P&L, Nodes, Node stats, the AI tab's cards, shared.js): the rules of their classes go with their last user: .pf .vis-pill (Mark onClick, mark.css), the kebab menu (.pj-menu*, CardMenu), the nodes' .pn-* and radio rules, node stats' .pf-figures and .stat-*, the AI cards' .pf-aitr-*, .pf-dr-*, .pf-cmp-* (BoxList, BoxLine, Touch), P&L's .pf-pnl-* and .pf-acc-*, the overview's .pf-lp-* (moved unchanged to number-band.css), .pf-fed-dot, .pf-presence-pill-* (moved unchanged to presence-dot.css), .pf-next, .pf-cortex-*, .pf-landing-section, .pf-menu-title, the dialogs' .pf-edit-*, .pf-pw-*, .pf-presence-*, .pf-waiting*, .pf-home-*, .pf-usage-*, .pf-ai-*, .pf-promo-dismiss, .pf-avatar-* (moved to masthead.css), .pf-start-page (start-page.css footer) and the overview's font rule. .pf-edit-label stays (DisplayPrefsFields writes it).
 *   v3.161.0 -- 2026-09-26 -- Page group G1a: the Agents page, its scope dialog and one agent's AI settings draw
 *     only components now, so .agent-prompt-box, .platform-instructions, .platform-tabs, .platform-content (its
 *     words move to css/components/how-to.css), the scope dialog's .scope-* rules, .pf-chevron, .pf-chevron-open,
 *     .pf-agent-divider, .pf .gh-mark and .pf-aai* (its 44px targets are Layout's Touch with its tabs) go:
 *     nothing writes them.
 *   v3.160.0 -- 2026-09-26 -- Page group G5: the Ecosystem apps tab and the Chat sessions tab draw only components now, so .pf-eco-dim, .pf-eco-pending, -title, .pf-eco-valid, the width rule of the automation's, subscription's and pending selects, .pf-eco-empty, .pf-eco-row.pf-eco-card-revoked (the List's faded row), .pf-eco-section, -title, .pf-eco-sub-row, -add, -direction, .pf-eco-data, -key, -row, -time, -body, .pf-eco-recipe-agents, -agent, -toggle, -radios, -radio, -radio-title, .pf-eco-rec-* (the recommended agent picker), .pf-eco-revoke-input, .pf-eco-adv-* (the advisories, now row boxes), .pf-eco-mcp* (the MCP promo, now the Box), .pf-eco-tech* (the technical details, now the Box), .cs-create-body, .cs-create-desc, and .cs-row and .pf-eco-row in the toggle rows' selector go: nothing writes them. .pf-eco-auto-how, -steps, -doc and .pf-eco-setup-guide-md stay for the design lab's conflict samples.
 *   v3.159.0 -- 2026-09-26 -- Page group G2b: a workspace's cover, its pages, its document and record spaces, its settings, share and review panels, the workspace list, the apps strip, the document view and editor and the map draw only components now, so .pj-ws, .pj-gate-label, .pj-inbox, .pj-section, -head, -title, .pj-space-notice, .pj-rec-field-text, -list, .pj-rec-json, .pj-rec-empty, .pj-errors, .pj-share-* , .pj-space-name, .pj-doc-view (+ its reading width), .pj-doc-meta, .pj-ws-bar, .pj-ws-name-input, .pj-spaces-add, .pj-space-row, .pj-doc-editor, .pj-doc-grid, .pj-doc-preview, .pj-divider, .pj-danger, -title, .pj-doc-toolbar, .pj-doc-vtitle, .pj-tui, .pj-doc-imgbar, .pj-file-btn, -icon, .pj-img-vis, -head, .pj-obj*, .pj-mindmap*, .pj-mm-* and .pj-apps-strip, -head, -empty, -picker go: nothing writes them. The map's rules move to css/components/mind-map.css, the document's to css/components/doc-view.css.
 *   v3.158.0 -- 2026-09-26 -- Page group G2a: the organisms list, an organism's home and settings, its members, agents, invitations, board preview, README, timeline, structure map, and a workspace's People, Activity, Sources and Skills panels and record form draw only components now, so .pj-joined-banner, -actions, .pj-contract-agents, .pj-adopt-btn, .pj-eng, .pj-retire-btn, .pj-draft-form, .pj-empty, .pj-org-globalsearch, .pj-field, -inline, -invalid, .pj-chart, -head, -title, .pj-access, -title, -note, -add, .pj-act, -count, .pj-hidden-input, .pj-sources-desc, .pj-src-*, .pj-org-topbar-actions, .pj-org-sort, .pj-struct-overview, -body, .pj-readme-empty, -bar, -actions, .pj-timeline-body, .pj-tabhead, -desc, .pj-attach, .pj-invite-btns, .pj-eminvite*, .pj-invpanel-accept, .pj-member-access, .pj-orgsearch, .pj-board-composer, -input, .pj-meta-line, .pj-form-group, .pj-form-card and .pj-members-cap go: nothing writes them. .pj-readme, .pj-part-owner, .pj-org-desc and the .pj-search-group* rules stay for the design lab's samples.
 *   v3.157.0 -- 2026-09-26 -- Page group G3: Memory, Access, Security and Usage draw only components now, so the memory list's rules (.mem-group*, .mem-item--grouped, .mem-detail*, .mem-shares, .mem-share-row, .mem-row-check, .mem-vis-pop, .mem-vis-select, .mem-bulkbar*, .mem-actions, .mem-delete-btn, .mem-edit-textarea*, .mem-time, .mem-sort-*, .mem-tools-*, .mem-import-group, .mem-bottom-bar, .mem-new-btn, .mem-search-summary, .key-rules-box), the browse and discover panels (.mem-browse-*, .mem-discover-*), the cart (.mem-cart*), .pf-mem-quota*, .pf-mem-size, .file-tag-cloud, .mem-file-search, .access-empty-row, .access-fed-add, .access-cx-own*, .access-cx-add, .sg-row (from the toggle rows' selector), .pf-2fa-* (now QrCode, CodeGrid and list rows), .pf-ureport-*, .pf-textarea-sm, .pf-code-break, .pf-nowrap, .pf-shrink-0, .pf-hidden and .pf-label-inline go: nothing writes them. .mem-item and .mem-key stay (agents/agent-defaults-section.js), .pf-bold and .pf-flex-fill stay (the design lab's samples).
 *   v3.156.0 -- 2026-09-26 -- Page group G1b: .pj-danger-box, -row, -text, -sub and -confirm go: the agent config tab's delete zone is the SettingBox now and nothing writes them (.pj-danger and .pj-danger-title stay for the workspace panels).
 *   v3.155.0 -- 2026-09-26 -- Page group G4: the classic AI settings (openrouter-settings.js, openrouter/budget-panel.js) and the Services tab draw only components now, so every .pf-or-* rule, .svc-row (from the toggle rows' selector), .svc-detail-code (the Code block's scroll cut), .pf-select-narrow and .action-bar (with its phone lines) go: nothing writes them.
 *   v3.154.0 -- 2026-09-26 -- The overview's figure words read --shape-case-label and the label spacing (* .8, .08em) (a move: the AIMEAT values equal the old ones).
 *   v3.153.0 -- 2026-09-26 -- A rule's and an advisory's lines are the Listing's (.listing-meta): .pf-aitr-row-meta's size and colour and .pf-eco-adv-meta go (a unification: Jouni's decision "Meta line").
 *   v3.152.0 -- 2026-09-26 -- Check lines are the Check line (css/components/check-line.css): the sizes, weights and colours of the permission words, the classic AI radio and retry, the review gate, the share rows, the map options, the invite choice, the recipe choices and the decision rule's gate go; their rows stay (a unification: Jouni's decision "Check line").
 *   v3.151.0 -- 2026-09-26 -- An app's setup guide is the Markdown reader's small cut: the guide's size, line and colour go, its width stays (a unification: Jouni's decision "Small reader").
 *   v3.150.0 -- 2026-09-26 -- An entry's value, a discovered value, a service's schema, an object in a record field, a sample prompt and the Connect prompts are the Code block (css/components/code-block.css): their look goes, their place and height stay (a unification: Jouni's decision "Code block").
 *   v3.149.0 -- 2026-09-26 -- An entry's value, a discovered value, a service's schema, an object in a record field, a sample prompt and the Connect prompts are the Code block (css/components/code-block.css): their look goes, their place and height stay (a unification: Jouni's decision "Code block").
 *   v3.148.0 -- 2026-09-26 -- Check lines are the Check line (css/components/check-line.css): the sizes, weights and colours of the permission words, the classic AI radio and retry, the review gate, the share rows, the map options, the invite choice, the recipe choices and the decision rule's gate go; their rows stay (a unification: Jouni's decision "Check line").
 *   v3.147.0 -- 2026-09-26 -- An app's setup guide is the Markdown reader's small cut: the guide's size, line and colour go, its width stays (a unification: Jouni's decision "Small reader").
 *   v3.146.0 -- 2026-09-26 -- An entry's value, a discovered value, a service's schema, an object in a record field, a sample prompt and the Connect prompts are the Code block (css/components/code-block.css): their look goes, their place and height stay (a unification: Jouni's decision "Code block").
 *   v3.145.0 -- 2026-09-26 -- An entry's value, a discovered value, a service's schema, an object in a record field, a sample prompt and the Connect prompts are the Code block (css/components/code-block.css): their look goes, their place and height stay (a unification: Jouni's decision "Code block").
 *   v3.144.0 -- 2026-09-26 -- An app's setup guide is the Markdown reader's small cut: the guide's size, line and colour go, its width stays (a unification: Jouni's decision "Small reader").
 *   v3.143.0 -- 2026-09-26 -- An entry's value, a discovered value, a service's schema, an object in a record field, a sample prompt and the Connect prompts are the Code block (css/components/code-block.css): their look goes, their place and height stay (a unification: Jouni's decision "Code block").
 *   v3.142.0 -- 2026-09-26 -- An entry's value, a discovered value, a service's schema, an object in a record field, a sample prompt and the Connect prompts are the Code block (css/components/code-block.css): their look goes, their place and height stay (a unification: Jouni's decision "Code block").
 *   v3.141.0 -- 2026-09-26 -- An entry's value, a discovered value, a service's schema, an object in a record field, a sample prompt and the Connect prompts are the Code block (css/components/code-block.css): their look goes, their place and height stay (a unification: Jouni's decision "Code block").
 *   v3.140.0 -- 2026-09-26 -- The classic budget part's 2px grey rule is the split (.og-split): a 1px hairline; its padding and margin stay (a unification: the lead's ruling on the one 2px grey rule).
 *   v3.139.0 -- 2026-09-26 -- The figure on the classic daily budget bar is the Meter's figure (.poster-meter-figure); .pf-or-spend-bar-label goes, its line height stays (a unification: the lead's ruling on a figure written on a meter).
 *   v3.138.0 -- 2026-09-26 -- An ecosystem app's data value and a guidance body are the library's JSON view (css/components/json-view.css): .pf-eco-data-body's .78rem and .pf-eco-adv-body go, the data value's indent stays (a unification: the lead's ruling on a stored value).
 *   v3.137.0 -- 2026-09-26 -- A workspace's activity log and its recent decisions are the Timeline (components/Timeline.js); .pj-act-dot, -list, -item, -time, -who, -act, -what, .pj-decision and .pj-item-text go (a unification: Jouni's decision "Activity log").
 *   v3.136.0 -- 2026-09-26 -- Rating a work item is the library's Rating stars (css/components/rating-stars.css); .star-rating and .star go (a unification: Jouni's decision "Rating stars").
 *   v3.135.0 -- 2026-09-26 -- A small heading over a group of fields, a card or a note is the Sub-heading (.sub-heading: small ink headline letters); the coral small capitals, the bold ink words and the coral headline letters go (a unification: Jouni's decision "Sub-heading").
 *   v3.133.0 -- 2026-09-26 -- A dashed field box is on the page's ground: Packages' install row is the Field row, the decision rule editor loses its grey (a unification: Jouni's decision "Dashed field box").
 *   v3.132.0 -- 2026-09-26 -- A framed box is the Object box (.poster-box), the one that stands out (an opened row, the way to take first) its raised tone; a page rule keeps only its place (a unification: Jouni's decision "Box").
 *   v3.131.0 -- 2026-09-26 -- A list of things to do or of steps is the numbered list (components/NumberedIndex.js: IndexList with IndexItem, or IndexStep for a step that opens nothing): the overview's next steps with the line under each name and the first on the sun, the Wallet key steps, a calibration run's proposals, the MCP and Agents connect steps, the basic agents, a server's setup steps (the number said once), the ecosystem steps out of their grey box, the decision rules' order and the notes of your own AI use; a place keeps only its margin (a unification: Jouni's decision "Numbered list").
 *   v3.130.0 -- 2026-09-26 -- The overview's head is the home's head, the Masthead (components/Masthead.js); the head's own rules go, the address line and the marks keep theirs. The account dialog's preview of your picture is framed as the head frames it (.poster-frame); its size stays (a unification: Jouni's decision "Person head").
 *   v3.129.0 -- 2026-09-26 -- .pf-or-spend-summary goes: nothing writes it any more. Nothing on screen changes.
 *   v3.128.0 -- 2026-09-26 -- A workspace's app launch cards (.pj-apps-grid, .pj-app-card, -name, -desc, -meta) are the library's App cards (css/components/app-cards.css), moved unchanged with their class names; the strip, its head and title stay (UI consolidation phase 5, a move).
 *   v3.127.0 -- 2026-09-26 -- The pending invitations are the Listing: .pj-eminvite-pending-row, -meta, -cancel and .pj-pinv-editor go (a unification: the look most tabs use).
 *   v3.126.0 -- 2026-09-26 -- The People panel's list (.pj-parts, -list, .pj-part-human, -node, -agents) is the library's People list (css/components/people-list.css), moved unchanged with its class names; a person's card (.pj-part-owner) stays (UI consolidation phase 5, a move).
 *   v3.125.0 -- 2026-09-26 -- A record's row (.pj-rec, its line .pj-item, .pj-item-draft, .pj-rec-title, -fields, -edit, -edit-new) is the library's Record row (css/components/record-row.css), moved unchanged with its class names (UI consolidation phase 5, a move).
 *   v3.124.0 -- 2026-09-26 -- A key is the Key (.key-name, css/components/key-name.css): .pf .mem-key, .mem-browse-key and .mem-detail-key keep only their place (a unification: the look most tabs use).
 *   v3.123.0 -- 2026-09-26 -- The comments on a workspace record or document (.pj-comments, .pj-comment, -reply, -head, -body, -actions, -compose) are the library's Comments (css/components/comments.css), moved unchanged with their class names (UI consolidation phase 5, a move).
 *   v3.122.0 -- 2026-09-26 -- The organism row (.pj-org-list, .pj-org-row, its drag state, avatar, main, title row, name, marks, type, lock, archived mark, counts, date, door, open button, the panel it opens, .pj-ws-state, .pj-org-main-static, .pj-req-row, .pj-ws-person, .pj-ws-req and .pj-ws-inbox-empty) is the library's Organism row (css/components/org-row.css), moved unchanged with its class names; .pj-org-desc stays (UI consolidation phase 5, a move).
 *   v3.121.0 -- 2026-09-26 -- An organism's board preview draws its messages as the Board notices: .pj-board-post, -post-head, -author and -body go (a unification: the library part that carries the kind).
 *   v3.120.0 -- 2026-09-26 -- A workspace source search's results, a document's file visibility rows and the app picker's apps are the Listing: .pj-src-result (-label, -meta, :hover), .pj-img-vis-row, .pj-img-vis-name, .pj-apps-picker-row, -name and -owner go (a unification: the look most tabs use).
 *   v3.119.0 -- 2026-09-26 -- A part of an organism page that opens (the archived organisms and workspaces, the organism or workspace map, the structure overview, the development timeline) is the FoldSection: .pj-struct-toggle, its hover and .pj-struct-caret go (a unification: the look most tabs use).
 *   v3.118.0 -- 2026-09-26 -- A pinned app the catalogue no longer has is the Status, attention: .pj-app-missing goes (a unification: Jouni's decision "Status").
 *   v3.117.0 -- 2026-09-26 -- A workspace row's "who works here" counter is the Tab's fold tone (.poster-tab--fold, pressed .is-on): .pj-stat-btn and its hover and .active go; the row's first count track grows to hold the pressed tab (minmax(2.4rem, auto)) and the date keeps the last track (grid-column: -2), layout values, so the pressed tab no longer runs under a workspace's date (a unification: Jouni's decision "Tabs and filters").
 *   v3.116.0 -- 2026-09-26 -- A removable tag in the tag editor and its x (.pf .tag-removable, .tag-x) are the tag editor's (css/components/tags.css), moved unchanged (UI consolidation phase 5, a move).
 *   v3.115.0 -- 2026-09-26 -- A series' arrow in the document tree (.pj-ov-chevron) is the Document tree's (css/components/doc-tree.css), moved unchanged (UI consolidation phase 5, a move).
 *   v3.114.0 -- 2026-09-26 -- An organism's development timeline (.pj-timeline, its diagram, grid, list, entries, event, counts and map) is the library's Organism timeline (css/components/org-timeline.css), moved unchanged with its class names; its framed box stays (UI consolidation phase 5, a move).
 *   v3.113.0 -- 2026-09-26 -- The scope dialog's permission groups stand under the section rule (.poster-row--thing) instead of their own 3px ink border (a unification: the look most tabs use).
 *   v3.112.0 -- 2026-09-26 -- The password's requirements (.pf-pw-rules) are the library's Requirement list (css/components/requirement-list.css), moved unchanged (UI consolidation phase 5, a move).
 *   v3.111.0 -- 2026-09-26 -- The account dialog's e-mail, which is changed in the Email tab, is the Text field, disabled; .pf-edit-readonly goes (a unification: the look most tabs use).
 *   v3.110.0 -- 2026-09-26 -- The figures that open their tab (.pf-usage-chip*) are the library's Figure door (css/components/figure-door.css), moved unchanged (UI consolidation phase 5, a move).
 *   v3.109.0 -- 2026-09-26 -- A key's sharing rules are the Listing (who, the pattern, the scope); .pf-rule-row and .pf-ml-auto go (a unification: the look most tabs use).
 *   v3.108.0 -- 2026-09-26 -- The classic AI settings' links to OpenRouter are the action link's quiet tone, and the ecosystem advisory's Approve and Reject keep the action link's own look (the skin's restyle of them goes); a unification: Jouni's decision Action link.
 *   v3.107.0 -- 2026-09-26 -- The shield that opens a key's sharing rules is the small icon button (.poster-icon--small); .shield-icon's rules go (a unification: Jouni's decision Icon button).
 *   v3.106.0 -- 2026-09-26 -- A scope group's all switch is the Tab's filter tone (.poster-tab--filter, is-on while every permission of the group is ticked); .domain-toggle's rules go (a unification: Jouni's decision Tabs and filters).
 *   v3.105.0 -- 2026-09-26 -- The agent's GAII and a permission's technical name are the inline code (.code-inline); their own typewriter looks go (a unification: the look most tabs use).
 *   v3.104.0 -- 2026-09-26 -- A permission's always-on and not-in-full-access marks are the Tag (.poster-chip, coral for the one to act on); their own rules go (a unification: Jouni's decision Tag).
 *   v3.103.0 -- 2026-09-26 -- The overview's rows that open a recent thing, an agent or the next job are the folded row's event tone (og-fold og-fold--event): the name in bold, the time or the next run at the right; .pf-home-row and its label go (a unification: the look most tabs use).
 *   v3.102.0 -- 2026-09-26 -- What trying a Decide rule gave, and a load of the rules that failed, are the Form message (its error tone for the failure); .pf-dr-tried and .pf-aitr-muted go (a unification: the look most tabs use).
 *   v3.101.0 -- 2026-09-26 -- The last labels over a field, a meter or a chart are the row label (.poster-label): the Decide editors' field labels, the overview's quota names, the AI budget chart's title; their own looks go (a unification: Jouni's decision Row label).
 *   v3.100.0 -- 2026-09-26 -- The classic AI settings' model picker is the library's Model picker (css/components/model-picker.css): its frame, rows, group, empty line and show-all line; its own picker, row and meta rules go (a unification: the look most tabs use).
 *   v3.99.0 -- 2026-09-26 -- A control that opens a panel below it is the Tab's fold tone (.poster-tab--fold, is-on while open), and the parameters section that is one row until opened is the FoldSection; their own toggles, carets and arrows go (a unification: Jouni's decision Tabs and filters, and the look most tabs use).
 *   v3.98.0 -- 2026-09-26 -- The classic AI settings' why-lines are the lead and the Hint, and the scope dialog's reconnect note is the Hint under the section rule; their own looks go (a unification: the look most tabs use).
 *   v3.97.0 -- 2026-09-26 -- A sentence that says what the part below is for is the lead (.og-lead): the ecosystem app's value line, the AI transparency's unlabelled line, the compliance card's undocumented note; their own rules go (a unification: the look most tabs use).
 *   v3.96.0 -- 2026-09-26 -- The connected apps and the waiting requests are the Listing (css/components/listing.css): an app's name, who it acts for, its state, last seen and the open mark in a row, an opened app the Listing's open panel; the card, its head, caret, name and body rules go (a unification: the look most tabs use).
 *   v3.95.0 -- 2026-09-26 -- Rules no drawn markup writes go (a move, nothing on screen changes): .pf .avatar, the classic file cards (.file-grid, .file-card, .file-icon, .file-thumb, .file-info, .file-name, .file-meta, .file-actions, .file-tags, .file-tag), .pf-view-item and its parts, the connected-app spending limit (.ag-spend*) and scope count (.ag-scope-toggle), .pf-cmp-muted.
 *   v3.94.0 -- 2026-09-26 -- Every line that says a part is loading is the loading line: the quiet sentence with the blinking Loading mark, LoadingLine in views/profile/shared.js (a unification: the look most tabs use).
 *   v3.93.0 -- 2026-09-25 -- The signed-out door (.pf-door-*), its sheet moved unchanged from views/profile-door.css to css/components/signed-out-door.css (UI consolidation phase 5, a move).
 *   v3.92.0 -- 2026-09-25 -- The classic AI settings' daily budget bar is the quota meter (.poster-box--meter.poster-box--quota, is-full from 90 %); its ground, corners and fills go, its place, height and figure stay (a unification: the look most tabs use).
 *   v3.91.0 -- 2026-09-25 -- The ecosystem automation (its flow, status timeline and run log: .pf-eco-auto-*, .pf-eco-recipe-head), moved unchanged out of views/profile.css into css/components/eco-automation.css (UI consolidation phase 5, a move).
 *   v3.90.0 -- 2026-09-25 -- The ecosystem card's help lines are the Hint (.poster-hint); their own sizes go, a place keeps its margin (a unification: the look most tabs use).
 *   v3.89.0 -- 2026-09-25 -- A section that is one row until it is opened is the FoldSection (the folded row with its lead): the AI tab's decide, transparency and compliance cards and the classic AI settings; their own heads, chevrons and body rules go (a unification: the look most tabs use).
 *   v3.88.0 -- 2026-09-25 -- More dead rules go (a move, nothing on screen changes): the classic agent card's gaii, caps, expanded, clickable head and expand icon, sec-revoke-btn, scroll-x, w-full, the work rules, pf-badge-gap, the tx- members, sch-internal-note and sch-badge; no markup writes them.
 *   v3.87.0 -- 2026-09-25 -- A node's agents, the CORS chain, the ecosystem's identifiers and its pairing code are inline code (.code-inline); their own mono looks go (a unification: the look most tabs use).
 *   v3.86.0 -- 2026-09-25 -- The overview's rows under the AI spend (where it went, by model) are the Listing; their row, name, cost, share and meta rules go, the colour mark keeps its size (a unification: the look most tabs use).
 *   v3.85.0 -- 2026-09-25 -- The P&L result and the overview's commerce, AI spend and agent ledger figures are the figure strip (.og-strip); a profit keeps its green as the fine tone and a loss its red as the danger tone (a unification: the look most tabs use).
 *   v3.84.0 -- 2026-09-25 -- The account dialogs' fields are the Text field, the Text area and the Select field, their labels the row label and their help lines the Hint; the dialogs' own field looks go, a field keeps its width and its room for Show (a unification: the look most tabs use).
 *   v3.83.0 -- 2026-09-25 -- The last labels over a field or a group wear .poster-label: the classic AI settings, the presence dialog, the scope groups, the ecosystem's trigger and sample, the scheduler's edit form, P&L's fields, the task runner's name; a place keeps its layout (Jouni's decision "Row label", a unification).
 *   v3.82.0 -- 2026-09-25 -- The last lines that say nothing is there are the quiet sentence (.poster-quiet); the ecosystem's empty frame goes, its second line is the Hint (Jouni's decision "Empty line", a unification).
 *   v3.81.0 -- 2026-09-25 -- The older tabs' remaining help lines are the Hint (.poster-hint); their own sizes and greys go, a place keeps its margin (a unification: the look most tabs use).
 *   v3.80.0 -- 2026-09-25 -- The request counts by method and by status are the Facts (css/components/facts.css); the stat-row rules go (a unification: the look most tabs use).
 *   v3.79.0 -- 2026-09-25 -- An HTTP status in the node statistics and a model not in the list are the Status (.poster-status fine, attention or danger); the coloured words' rules go (Jouni's decision "Status", a unification).
 *   v3.78.0 -- 2026-09-25 -- A line that says a load or a save failed is the Form message in its error tone (.form-message--error); the error lines' own rules go (a unification: the look most tabs use).
 *   v3.77.0 -- 2026-09-25 -- The calendar's month, week and day and the spend chart's cost, tokens and seconds are the Tab (.poster-tab, the chosen one .is-on); their rows take the tabs' row gap (Jouni's decisions "Tabs and filters" and "Choice", a unification).
 *   v3.76.0 -- 2026-09-25 -- The model's page link (↗) and the agent's mail link are the small icon button (.poster-icon--small); their look goes, the mail icon keeps its drawing size (Jouni's decision "Icon button", a unification).
 *   v3.75.0 -- 2026-09-25 -- The last quiet ways on with a look of their own are the action link (.poster-action; the danger tone for detach, the small link for a link inside a part, the quiet cut in the account dialogs): pn-detach-btn, pn-setup-link, pf-aitr-row-link, pf-edit-link, pf-pw-eye and the door's underlined words; a place keeps only its layout (Jouni's decision "Action link", a unification).
 *   v3.74.0 -- 2026-09-25 -- A table of rows is the Listing (css/components/listing.css): the P&L lines, the accountants, the usage report, the AI spend per app, the security overrides and an agent's internal jobs; figures stand at the right of their column (a unification: the look most tabs use).
 *   v3.73.0 -- 2026-09-25 -- A list drawn as classic cards is the Listing (css/components/listing.css), a row that opens shows the Listing's open panel; the card, its header, arrow and detail rules go (a unification: the look most tabs use).
 *   v3.72.0 -- 2026-09-25 -- Declarations that a later rule with the same selector always overrides go (a move, nothing on screen changes): 77 in 63 rules, among them the classic looks of tab, section-desc, card, card-glass, card-title, the badges, pn-card, pn-setup, agent-cta, agent-prompt-box, platform-content, empty, create-form, card-detail, the gaps of the sub-tabs and form rows, pf-or-loading and the first pf-or-actions.
 *   v3.71.0 -- 2026-09-25 -- The dead rules go (a move, nothing on screen changes): stats-bar, the classic detail tiles, consent-table, ext-card and ext-detail-section, kpkg-tag, the access token rules, pf-italic, pf-clickable, the inline preview panels and their panel parts, pf-agent-dot, the pf-panel-in animation. No module the Settings view loads writes them (only access-tokens.js, connected-apps.js and inline-panels.js, which nothing imports).
 *   v3.70.0 -- 2026-09-25 -- An organism search hit (.pj-search-hit, its title and snippet) is the library's Search hits (css/components/search-hits.css), moved unchanged with its class names (UI consolidation phase 5, a move).
 *   v3.69.0 -- 2026-09-25 -- The People panel's agent chip (.pj-part-agent, own, ghost) is the library's Agent chip (css/components/agent-chip.css), moved unchanged with its class names (UI consolidation phase 5, a move).
 *   v3.68.0 -- 2026-09-25 -- Memory's collection button (.mem-cart-btn, its hover and its --on) goes: it is the Icon button's small cut with its pressed tone (.poster-icon.poster-icon--small.is-on), a unification.
 *   v3.67.0 -- 2026-09-25 -- Every quiet way on is the action link (.poster-action, its quiet tone where it sits among controls), and the one loud action is the dark block (.poster-slab, its control cut), a unification: Jouni's decisions Action link and Loud action.
 *   v3.66.0 -- 2026-09-25 -- The tag input (.pj-taginput, .pj-tag, .pj-tag-x, .pj-taginput-field) moves unchanged to css/components/tag-input.css, linked just before this sheet (UI consolidation phase 5, a move).
 *   v3.65.0 -- 2026-09-25 -- An ecosystem app's setup guide renders its Markdown in the library Markdown reader: the guide's own cut of it (.pf-eco-setup-guide-md .md-body and its headings, lists, links, code, quote and rule) goes (a unification: the look most tabs use).
 *   v3.64.0 -- 2026-09-25 -- The notice of a space whose items live elsewhere is the Hint (.poster-hint): .pj-space-notice keeps only its padding (a unification: the look most tabs use).
 *   v3.63.0 -- 2026-09-25 -- Whether a share password is set is the Status: .pj-share-pw-state goes (a unification: Jouni's decision "Status").
 *   v3.62.0 -- 2026-09-25 -- The memory tools label and the invitation's field and workspace labels are the row label (.poster-label): .mem-tools-label and .pj-eminvite-field label go, .pj-eminvite-wslabel keeps its margin (Jouni's decision "Row label", a unification).
 *   v3.61.0 -- 2026-09-25 -- A shared document's "open ↗" and the Map and Manage toggles are the action link: .pj-share-link and .pj-org-btn-active go (a unification: Jouni's decision "Action link").
 *   v3.60.0 -- 2026-09-25 -- A workspace's "archived" and "N to review" and an approved request are the Status: .pj-tab-pill and .pj-ws-req-ok go; the state keeps its place beside the name (.pj-ws-state) (a unification: Jouni's decision "Status").
 *   v3.59.0 -- 2026-09-25 -- The workspace breadcrumb is the crumb trail (.og-crumb): .pj-org-breadcrumb and .pj-org-crumb-link go (a unification: the look most tabs use).
 *   v3.58.0 -- 2026-09-25 -- A failed generation's heading is the row label and each reason the Form message: .pj-errors-title and .pj-error-line go, the heading keeps its margin (a unification: the look most tabs use).
 *   v3.57.0 -- 2026-09-25 -- Dead rules removed, their classes written by no file: .pf .post-card, -content, -meta, -reactions, the board member rules (.brd-members, .brd-member-*), .pf .mem-vis, .pf .file-tag-clear, .pj-item-draft .badge-warn (UI consolidation phase 5, a move).
 *   v3.56.0 -- 2026-09-25 -- The memory storage bar is the quota meter (.poster-box--meter.poster-box--quota): the bar and fill rules go, the bar keeps a height, the overview's 18px (a unification: the look most tabs use).
 *   v3.55.0 -- 2026-09-25 -- A group of memory keys opens as the folded row (og-fold): .mem-group-header keeps only its pointer, the name, count and id rules go; the group's doors sit after the detail (a unification: the look most tabs use).
 *   v3.54.0 -- 2026-09-25 -- The visibility menu's options are the Tab (.poster-tab): .mem-vis-opt and its current and dim cuts go (a unification: Jouni's decision "Tabs and filters").
 *   v3.53.0 -- 2026-09-25 -- The visibility pill and the agent beside an activity line are the Tag (.poster-chip): .vis-pill keeps only its pointer, the .vis-* colours and .pj-act-agent go (a unification: Jouni's decision "Tag").
 *   v3.52.0 -- 2026-09-25 -- Rendered Markdown in the organism pages is the library Markdown reader (css/components/markdown.css): the document view's copy of it goes (its width of 78ch stays), and the smaller cuts of the README, a record field and the structure map go (a unification: the look most tabs use).
 *   v3.51.0 -- 2026-09-25 -- Choosing files to upload (.file-dropzone*, .file-upload-list, .file-upload-item, .pf-upload-icon, .pf-file-icon) moves unchanged to css/components/file-drop.css, linked just before this sheet (UI consolidation phase 5, a move).
 *   v3.50.0 -- 2026-09-25 -- The file preview (.pf-file-preview-*) moves unchanged to css/components/file-preview.css, linked just before this sheet (UI consolidation phase 5, a move).
 *   v3.49.0 -- 2026-09-25 -- The document tree of a document space (.pj-docspace, .pj-doc-index, .pj-sec*, .pj-grip, .pj-doc-item, .pj-doc-series-*, .pj-doc-link) moves unchanged to css/components/doc-tree.css (UI consolidation phase 5, a move).
 *   v3.48.0 -- 2026-09-25 -- The colour tag of a section, document or record (.pj-tag-*, .pj-colored, .pj-cp-*) moves unchanged to css/components/colour-tag.css, linked just after this sheet (the rules sat late here, after the draft rail they win over) (UI consolidation phase 5, a move).
 *   v3.47.0 -- 2026-09-25 -- The heatmap (the activity calendar, .pj-hm-*, .q.lvl*) moves unchanged to css/components/heatmap.css, linked just before this sheet (UI consolidation phase 5, a move).
 *   v3.46.0 -- 2026-09-25 -- The source search is the Search line; its place in the picker's row stays (margin 0) (a unification: the look most tabs use).
 *   v3.45.0 -- 2026-09-25 -- The AI transparency and compliance figures are the figure strip; the tiles' rules go (pf-aitr-stat*, pf-cmp-stat*), a figure that warns keeps the warn tone (a unification: the look most tabs use).
 *   v3.44.0 -- 2026-09-25 -- The node, service and ecosystem-binding details are the Facts (css/components/facts.css), a unification: the look most tabs use. The rules of pn-detail-row, pn-padding-half, svc-detail-row, svc-detail-tags and pf-eco-binding's lines go, with their labels and values; the agent-details rules go too: no markup writes them.
 *   v3.43.0 -- 2026-09-25 -- A workspace record’s fields and an objective’s measures are the Facts (css/components/facts.css), a unification: the look most tabs use. Their rules go.
 *   v3.42.0 -- 2026-09-25 -- The data entry's row look goes (it is the folded row); its layout stays. A grouped memory key keeps its indent and its pointer, a unification: the look most tabs use.
 *   v3.41.0 -- 2026-09-25 -- The overview's "Waiting for you" rows are the Listing (css/components/listing.css), a unification: the look most tabs use. The rules of pf-waiting-row go; the row's words keep their face.
 *   v3.40.0 -- 2026-09-25 -- The memory browse rows, the collection items, the workspace approvals, spaces and sources, and the access rows are the Listing (css/components/listing.css), a unification: the look most tabs use. Their rules go; the collection keeps its scroll height.
 *   v3.39.0 -- 2026-09-25 -- A search field over a list is the Search line (.search-line with the Text field); a place keeps only its layout (a unification: the look most tabs use).
 *   v3.39.0 -- 2026-09-25 -- Every drop-down is the Select field (.select-field, css/components/select-field.css); a place keeps only its width and margin (a unification: the look most tabs use).
 *   v3.39.0 -- 2026-09-25 -- Every many-line field is the Text area (.og-textarea); a place keeps only its size and margin (a unification: the look most tabs use).
 *   v3.39.0 -- 2026-09-25 -- Every one-line field is the Text field (.og-input); a place keeps only its layout (a unification: the look most tabs use).
 *   v3.38.0 -- 2026-09-25 -- Every drop-down is the Select field (.select-field, css/components/select-field.css); a place keeps only its width and margin (a unification: the look most tabs use).
 *   v3.38.0 -- 2026-09-25 -- Every many-line field is the Text area (.og-textarea); a place keeps only its size and margin (a unification: the look most tabs use).
 *   v3.38.0 -- 2026-09-25 -- Every one-line field is the Text field (.og-input); a place keeps only its layout (a unification: the look most tabs use).
 *   v3.37.0 -- 2026-09-25 -- Every many-line field is the Text area (.og-textarea); a place keeps only its size and margin (a unification: the look most tabs use).
 *   v3.37.0 -- 2026-09-25 -- Every one-line field is the Text field (.og-input); a place keeps only its layout (a unification: the look most tabs use).
 *   v3.36.0 -- 2026-09-25 -- Every one-line field is the Text field (.og-input); a place keeps only its layout (a unification: the look most tabs use).
 *   v3.35.0 -- 2026-09-25 -- The avatar's own frame, corners and ground go: it is the Object box's avatar cut (.poster-box--avatar, css/poster.css); its size stays here (UI consolidation phase 5, a unification).
 *   v3.34.0 -- 2026-09-25 -- The stat card and stat grid rules go: a row of figures is the figure strip (css/components/figure-strip.css); a place's gap stays here (UI consolidation phase 5, a unification).
 *   v3.33.0 -- 2026-09-25 -- A note's own frame, ground and corners go: it is the Attention note (.poster-aside, css/poster.css); its place (margin) stays here (Jouni's decision "Attention note", a unification).
 *   v3.32.0 -- 2026-09-25 -- The classic section slabs are the kit's section (PageSection), so .pf .cs-section-sub and .pj-ws-topbar go (a unification: the look most tabs use).
 *   v3.31.0 -- 2026-09-25 -- The Ecosystem apps head is the kit's page head, so .pf-eco-head and its count's margin go (a unification: the look most tabs use).
 *   v3.30.0 -- 2026-09-25 -- Every small number is the Count (.poster-count waiting or tally), a unification: Jouni's decision Count.
 *   v3.29.0 -- 2026-09-25 -- Every word that says a state is the Status (.poster-status fine, attention, danger, off), a unification: Jouni's decision Status.
 *   v3.28.0 -- 2026-09-25 -- Every tag is the Tag (.poster-chip and its tones, .poster-chips for a row), a unification: Jouni's decision Tag.
 *   v3.27.0 -- 2026-09-25 -- The note rules go: the grey help notes are the Hint (css/components/hint.css); the layout declarations of their places stay, on .poster-hint (UI consolidation phase 5, a unification).
 *   v3.26.0 -- 2026-09-25 -- The form message rules go: the line a form says after it acted is the Form message (css/components/form-message.css) (UI consolidation phase 5, a unification).
 *   v3.25.0 -- 2026-09-25 -- The inline code rules go: code is the Code block's inline cut (css/components/code-block.css); the layout declarations of their places stay, on .code-inline (UI consolidation phase 5, a unification).
 *   v3.24.0 -- 2026-09-25 -- The lead and paragraph rules go: they are the og-lead (css/components/page-section.css); the layout declarations of their places stay, on .og-lead (UI consolidation phase 5, a unification).
 *   v3.23.0 -- 2026-09-25 -- The hint rules go: the hints are the Hint (css/components/hint.css); the layout declarations of their places stay, on .poster-hint (UI consolidation phase 5, a unification).
 *   v3.22.0 -- 2026-09-25 -- The times' look is .poster-time; their rules here keep only their place (Jouni's decision "Timestamp", a unification).
 *   v3.21.0 -- 2026-09-25 -- The headings over lists wear .poster-day-title; their rules here keep only their place (Jouni's decision "Group heading", a unification).
 *   v3.20.0 -- 2026-09-25 -- The row labels (card-h3, detail and form labels, the workspace form's field and group labels, the section titles) wear .poster-label; their rules here keep only their place (Jouni's decision "Row label", a unification).
 *   v3.19.0 -- 2026-09-25 -- A button that is a mark, not a word, is the library's small icon button,
 *     .poster-icon--small (Jouni's decision "Icon button"): the rules that drew the old marks here go;
 *     a place's layout value stays on its own class.
 *   v3.18.0 -- 2026-09-25 -- The quiet ways on are the library's action link (Jouni's decision "Action
 *     link"): the rules that restyled og-door, the classic buttons and the text buttons here go; a
 *     place's layout value moves to the new class.
 *   2026-09-25 -- The kebab menu's rows are the menu row (.poster-menu-row, a unification: Jouni's decision "Menu row"); .pj-menu-item's rules go, the one-line row stays; a danger row reads like the others.
 *   2026-09-25 -- The empty lines (.pf-or-mempty, .pn-no-agents, .pj-empty, .pj-rec-empty, .pj-ws-inbox-empty, .pj-apps-empty, .pf-eco-auto-log-empty, .pf-pnl-empty, .pf-ureport-empty) are the quiet sentence (.poster-quiet, Jouni's decision "Empty line"): their look goes, their place stays.
 *   2026-09-25 -- The node visibility switch, the platform tabs, the sub-tabs, the scope templates, the presence mode, the start page switch and the usage report buttons lose their rules: the tab (.poster-tab) now draws them (a unification: Jouni's decision "Tabs and filters"). Their rows keep only their layout.
 *   2026-09-14 -- .pj-doc-solo-toast leaves; the document window uses the shared .toast in theme.css.
 *   2026-09-13 -- Compose shared numeral cuts; normalize extra sizes under brief 10.7.
 *   2026-09-13 — Compose overview B1 headings and row rules from shared poster classes.
 *   2026-09-13 -- V2w: compose remaining profile section top rules from poster.css.
 *   2026-09-13 -- V2v: compose section top rules from poster.css.
 *   2026-09-13 -- V2t: compose card and section top rules from poster.css.
 *   v3.17.0 -- 2026-09-25 -- The Settings & Controls frame and its side menu are library components (SettingsFrame, SideMenu; settings-frame.css, side-menu.css); the old .pf-shell, .pf-side- and .pf-content names are gone (UI consolidation phase 5, a move).
 *   v3.16.0 -- 2026-09-25 -- Dead rules removed: selectors whose classes no file writes (UI consolidation phase 5, a move; the browser's reading proves only those went).
 *   v3.15.0 -- 2026-09-13 -- Remove the document index frame superseded by the shared poster rule.
 *   v3.14.0 -- 2026-09-13 -- Compose list and guide rules from poster.css; retire unused list rules.
 *   v3.13.0 — 2026-09-13 — The account and presence dialogs' own overlay, frame, header, X and footer
 *     rules leave: they open in the site's one dialog (/css/dialog.css). Their fields stay.
 *   v3.12.0 -- 2026-09-13 -- V2: shared poster classes own the crumb and avatar frame.
 *   v3.11.0 — 2026-09-13 — V1: retire underlying section-title values; shared poster classes own headings.
 *   v3.10.0 — 2026-09-06 — The signed-out wall's rules (.login-prompt, .bg-aurora, .aurora-wave, pfAurora)
 *     removed: the door that replaced it has its own sheet, profile-door.css.
 *   v3.9.0 — 2026-09-06 — The organism row's counts, date and door get fixed tracks (.pj-org-stats
 *     as a grid, .pj-org-door): 12 workspaces instead of 1, a longer date or a longer word on the
 *     button no longer moves the marks column beside them, and each icon stands under its own.
 *   v3.8.0 — 2026-09-06 — The organism row's marks get a column of their own (.pj-org-marks, -type,
 *     -arch): the type badge carries a min-width, so the badge and the lock stand in one line down
 *     the list instead of trailing each name at a different place.
 *   v3.7.0 — 2026-09-04 — Security tab: the registered-device rows (pf-2fa-devices/-device).
 *   v3.6.0 — 2026-09-04 — Security tab: the two-step sign-in rules (pf-2fa-qr, -codes, -code-input).
 *     The QR keeps a white ground in both themes, because a scanner reads dark on light.
 *   v3.5.0 — 2026-09-04 — The old Data Wallet tab rules (dw- prefix) removed; the page has data-wallet-poster.css.
 *   v3.4.0 — 2026-09-04 — The old Wallet tab rules (.pf .wallet-*, .pf-psp-chip, .tx-*) removed; the page
 *     has wallet-poster.css.
 *   v3.3.0 — 2026-09-03 — The old Libraries tab rules (.pf .lib-*) removed; the page has libraries-poster.css.
 *   v3.2.3 — 2026-09-03 — The AppDev tab's pf-adk rules leave: the tab wears the poster face now
 *     (appdev-poster.css, ad- prefix).
 *   v3.2.2 — 2026-08-31 — The Companies tab's pf-co rules leave for companies-poster.css (co-
 *     prefix): the tab wears the poster face now.
 *   v3.2.1 — 2026-08-29 — The sidebar nameplate rules (.pf-side-identity, -avatar, -id-name) go with the
 *     nameplate: the pill and the masthead already carry the name.
 *   v3.2.0 — 2026-08-29 — The agent permission dialog in the poster face: presets as one segmented row with
 *     the chosen one on the sun, the advanced editor behind an underlined word, domains as sections under a
 *     3px ink rule with rows over hairlines, mono chips for the machine names and notes. Poster headlines
 *     read --font-poster-tracking / --font-poster-leading.
 *   v3.1.0 — 2026-08-29 — Every monospace rule reads var(--font-mono): 53 hand-typed stacks (bare `monospace`,
 *     ui-monospace lists, the --mono alias) are gone, so the mono face changes in theme.css alone.
 *   v3.0.2 — 2026-08-29 — The name in the index wears the section face (Archivo regular), as the canvas shows it.
 *   v3.0.1 — 2026-08-29 — Poster headlines read --font-poster-weight (theme.css) instead of a literal 400;
 *     the index's item weights read --font-poster-text-weight / --font-poster-strong-weight; the content
 *     column takes the canvas's gutter (3rem left, 2.75rem right) so a page has the room the design has.
 *   v3.0.0 — 2026-08-28 — The overview and the sidebar wear the poster face (design canvas "AIMEAT
 *     Home, Settings and Chat", direction C): the sidebar is an index with coral group words and
 *     the open item on the sun; the profile card is a masthead in --font-poster with its four
 *     numbers on a diagonal coral band; next steps are a numbered index; the dashboard cards are
 *     sections under headlines with ink rules, thick quota bars and numerals for the counts. Tabs
 *     opened from the index are untouched.
 *   v2.25.0 — 2026-08-27 — .pf-start-page replaces .pf-ui-switch at the foot of the overview, and
 *     .pf-side-home is the "← Home" link at the top of the sidebar.
 *   v2.24.0 — 2026-08-22 — .pf-setting-heading / .pf-setting-text: the same settings-row rule the
 *     notifications tab already had, under a name that does not claim the row is a notification.
 *     The pf-notif-* names stay as they are; nothing about that tab changes.
 *   v2.23.0 — 2026-08-17 — .agc-preset-desc / .agc-boundary: the AgentConsent panel's preset
 *     summary line and the shared boundary sentences. Unscoped on purpose — the panel mounts both
 *     inside .pf (Agents tab) and on the home's koti-step, and the .pf prefix would style one door
 *     and not the other.
 *   v2.22.0 — 2026-08-08 — Copy-button cleanup: deleted five dead rules (.agent-copy-btn, .ext-copy-btn, .tx-copy-btn,
 *       .wallet-balance-copy, .pf-gen-debug-copy-file — no markup used any of them) and the
 *       .copy-prompt-btn / .pn-copy-btn button styles, whose call sites are now shared .btn-*
 *       classes. .ext-btn-copy-spaced became a container rule on .ext-endpoint-box. Kept
 *       .access-copy-val — it wraps the VALUE, not the button.
 *   v2.21.0 — 2026-08-08 — .pf-co-portfolio/.pf-co-html/.pf-co-file: the company page editor.
 *   v2.20.0 — 2026-08-07 — .pf-co-*: the SMTP section, and every --space-N in the pf-pnl/pf-co
 *     blocks now carries a fallback — the variables are not defined on this theme, so the two
 *     tabs were laying out with zero gaps and margins.
 *   v2.19.0 — 2026-08-06 — .wallet-rail-help*: expandable per-rail setup help (details/summary +
 *     numbered steps + external links) under the Card and Stablecoin payout rails in the wallet tab.
 *   v2.18.0 — 2026-07-28 — .ag-spend*: the spending limit on a connected app's card.
 *   v2.17.0 — 2026-07-25 — .ag-scope-toggle: the Connected Apps scope count is now the disclosure
 *     button for its badge list (button reset so it still renders as a plain .badge).
 *   v2.16.2 — 2026-07-21 — App-shell scroll model (theme.css v1.24.0): .pf-sidebar sticks to top:0 of
 *     the new .page-content scroll region (was top:var(--nav-height) against the window) and caps at
 *     calc(100dvh − nav-height) so its nav list scrolls without a header-height gap.
 *   v2.16.1 — 2026-07-20 — Mobile home-dashboard overflow fix: .pf-home-card (and the spend/quota
 *     tiles, chips, and long app-name row) get min-width:0 so unbreakable inner content no longer
 *     forces a card — and the whole home grid — wider than a narrow phone (content ran off the right
 *     edge, clipped by body{overflow-x:hidden}). .pf-usage-head wraps a very long quota value.
 *   v2.16.0 — 2026-07-19 — AppDev tab (pf-adk-*): prompt cards, learned-pitfall rows,
 *     chips (model/shared/tier/proof), severity badges (AppDev KB UI phase).
 *   v2.15.0 — 2026-07-16 — Drop the dead .pf-side-ico rule (sidebar nav is label-only now).
 *   v2.14.0 — 2026-07-11 — .pf-ai-app-meta: muted compact tokens·calls column for the Home
 *     AgentLedgerCard by-model breakdown rows (reuses the AiSpendCard .pf-ai-* card chrome).
 *   v2.13.0 — 2026-07-06 — Toast fixes: drop the dead .pf.toast-container rule (profile.js no longer
 *     wraps its toast — the fixed+transform wrapper was the containing block of the fixed .toast inside,
 *     collapsing it to a one-character-per-line sliver) and give .pj-doc-solo-toast the shared
 *     max-width: min(92vw, 40rem) + wrapping so long messages stay readable on mobile.
 *   v2.12.0 — 2026-07-03 — Collection cart: .mem-cart-btn(-—on) per-row toggles + the .mem-cart tray
 *     (.mem-cart-head/-title/-count/-body/-list/-item/-actions/-send) for URL-list/ZIP/workspace export.
 *   v2.11.0 — 2026-07-03 — Files preview + search: .mem-file-search (name/type filter box),
 *     .pf-clickable (click-to-preview thumbnails/icons), and the in-browser preview lightbox
 *     (.pf-file-preview-modal/-body/-img/-frame/-media/-text/-status/-actions).
 *   v2.19.0 — 2026-08-15 — Usage reports tab uses the canonical .stat-grid/.stat-card and
 *     .seg/.seg-btn; its own classes are pf-ureport-* because pf-usage-* is the Home quota
 *     card, and reusing it rendered the selected report white on white.
 *   v2.10.0 — 2026-07-03 — Contract-engagement chips: .pj-eng + .pj-retire-btn for the People panel.
 *   v2.9.0 — 2026-07-02 — Workspace Apps strip: .pj-apps-strip/-head/-title/-hint/-grid, launch
 *     cards .pj-app-card/-name/-desc/-meta/-missing, and the pin/unpin picker .pj-apps-picker(-row/
 *     -name/-owner) + .pj-apps-empty.
 *   v2.8.0 — 2026-06-24 — Secretary P5 (S-C): .ext-instance-cfg-field/-label/-secret/-desc for the
 *     extension instance-create config form (masked secret fields).
 *   v2.7.0 — 2026-06-22 — Home "Usage & quotas" card: .pf-usage-card/.pf-usage-row/.pf-usage-bar/
 *     .pf-usage-fill (quota bars) + .pf-usage-chips/.pf-usage-chip (count chips).
 *   v2.6.0 — 2026-06-22 — Scalable Memory tab: .pf-mem-quota* (storage-usage bar), .pf-mem-size
 *     (value-size column), .mem-tools-bar/.mem-import-group (server search + export/import row),
 *     .mem-group-actions (hover search/delete on group headers), .mem-search-summary.
 *   v2.5.0 — 2026-06-16 — Grouped workspace nav: .pj-org-groups/.pj-org-group/.pj-org-group-cap
 *     (clickable group caption, -static variant)/.pj-org-group-tabs cluster the tab row, with a
 *     vertical divider (border-left) between groups; stacked-group content .pj-group-view/
 *     .pj-group-head/.pj-group-sec (scroll-margin anchor); space/tab description lines
 *     .pj-ov-desc/.pj-tab-desc. .pj-section now uses var(--card) (white, like the group sections
 *     and People panel) instead of var(--surface), so Share/Sources/Review/space panels match; the
 *     .pj-struct-body (Workspace structure overview) gets the same white card bg + border so it no
 *     longer shows the page background through a transparent box.
 *   v1.15.0 — 2026-06-15 — Ecosystem apps "Data this app wrote" section: .pf-eco-data,
 *     .pf-eco-data-row/-key/-val/-vis/-time, .pf-eco-data-loading.
 *   v1.16.0 — 2026-06-15 — Ecosystem "Data this app wrote" rows expandable: .pf-eco-data-entry,
 *     .pf-eco-data-body/-pre/-md (readable JSON/markdown value blocks); row is now a button.
 *     Removed .pf-eco-data-val (one-line preview). Added .pf-eco-sub-direction caption.
 *   v1.16.1 — 2026-06-15 — Compact font on .pf-eco-data-body so the shared <JsonValue> tree matches
 *     the agent-style sizing (the pf-agd-json-* tree inherits this size).
 *   v1.17.0 — 2026-06-15 — Ecosystem "Automation" section: .pf-eco-auto-intro/-caps/-cap/-cap-id,
 *     .pf-eco-auto-cadence(-chip), .pf-eco-auto-list/-job(-off/-main/-cap/-meta/-actions),
 *     .pf-eco-auto-on/-paused, .pf-eco-auto-result-*, .pf-eco-auto-del.
 *   v1.18.0 — 2026-06-15 — Ecosystem automation RECIPE block (B4): .pf-eco-recipe(-head/-intro/-trigger/
 *     -row/-label/-agents/-agent/-toggle/-radios/-radio/-radio-title/-radio-hint/-foot/-note).
 *   v1.19.0 — 2026-06-15 — Ecosystem "Pending advisories" approval surface (B7/B8): .pf-eco-adv(-list/
 *     -item/-head/-title/-kind/-sev/-sev-* /-meta/-body/-rationale/-actions/-reject).
 *   v1.20.0 — 2026-06-15 — Ecosystem automation schedule-row UX: .pf-eco-auto-result-skipped,
 *     .pf-eco-auto-cadence-sel (editable cadence on a row), .pf-eco-auto-lastattempt (Run-now skip note),
 *     run-history log expander (.pf-eco-auto-log/-row/-time/-trigger/-dur/-reason, -log-loading/-log-empty).
 *   v1.21.0 — 2026-06-15 — Editable recipe trigger keyGlob: .pf-eco-recipe-trigger-input (text input)
 *     + .pf-eco-recipe-trigger-help (help line).
 *   v2.0.0 — 2026-06-15 — Ecosystem Automation REWORK into one turnkey flow + status timeline:
 *     .pf-eco-auto-flow(-intro/-card/-step/-step-disabled/-num/-controls/-email/-advanced/-advanced-body/
 *     -save), .pf-eco-auto-how(-toggle/-lead/-steps/-doc), .pf-eco-auto-produces(-cap),
 *     .pf-eco-auto-status(-timeline/-step/-head/-dot/-dot-* /-label/-body/-agents/-note/-chip/-pending-count),
 *     .pf-eco-auto-status-{ok,wait,off,error}.
 *   v2.1.0 — 2026-06-15 — Ecosystem Setup playbook + MCP promo (top of expanded card):
 *     .pf-eco-setup(-lead/-progress/-progress-chip/-steps/-step/-step-done/-dot/-dot-done/-dot-wait/
 *     -step-body/-step-title/-step-why/-step-note/-cta), .pf-eco-mcp(-head/-icon/-title/-sub/-connect/
 *     -sample/-sample-label/-sample-row/-sample-prompt/-sample-note).
 *   v2.2.0 — 2026-06-15 — Ecosystem NON-TECHNICAL card redesign (value-first + hidden plumbing):
 *     .pf-eco-head-title/-head-owner (friendly header subtitle), .pf-eco-value-line (one-line value
 *     statement), .pf-eco-disconnect/-disconnect-hint (accessible plain disconnect), and the collapsed
 *     Technical-details disclosure .pf-eco-tech(-toggle/-toggle-label/-icon/-body/-hint/-section/
 *     -section-title/-principal/-access) with a subtly distinct faint var(--bg-dim) background.
 *   v2.3.0 — 2026-06-16 — Ecosystem MCP promo sample prompt now targets the organism (not a raw key):
 *     added .pf-eco-mcp-no-organism (the "pick an organism first" hint shown when no organism is set).
 *   v2.4.0 — 2026-06-16 — Ecosystem card redesign: the app's OWN rendered-Markdown setup guide
 *     .pf-eco-setup-guide(-md/-missing); the "Ask in Claude" promo moved into its own
 *     .pf-eco-ask section (reuses .pf-eco-mcp-*). The hardcoded-playbook .pf-eco-setup-* classes
 *     are now unused but kept for back-compat.
 *   v1.14.0 — 2026-06-10 — SchemaForm usability: .pj-field-hint (per-field hint),
 *     .pj-field-invalid (missing-required outline) + .pj-form-error message.
 *   v1.13.0 — 2026-06-10 — Workspace renew, phase 2: .pj-ws-head-actions, review
 *     .pj-ws-banner, .pj-ws-tab-add (+ reuses .pj-org-tabs underline tabs).
 *   v1.12.0 — 2026-06-10 — Organisms list renew, phase 1: compact .pj-org-row list
 *     (avatar, one-line meta, kebab menu, drag-over state), .pj-menu dropdown,
 *     organism home page (.pj-org-home-head, underline .pj-org-tabs, breadcrumb).
 *   v1.11.0 — 2026-06-08 — Full-bleed dashboard shell: drop the 1000px cap on the
 *     .pf wrapper so the sidebar+content fill the viewport like the admin dashboard
 *     (tab content was squeezed to ~760px). Sidebar stays left-anchored; .pf-content
 *     caps at 1360px (~1600px total) for readability on ultra-wide; login prompt
 *     stays a centered 1000px column.
 *   v1.1.0 — 2026-06-02 — Phase 3a: tokenize hero/cta/callout gradients, card/tab/
 *     stat/input surfaces, feedback banners, and undefined-var drift (via theme.css
 *     alias layer) for dark mode. pf-gen-* badge contrast deferred to 3b.
 *   v1.2.0 — 2026-06-02 — Component unification (#3): remove .pf .modal* override
 *     (drift) so profile modals use canonical theme.css .modal styling.
 *   v1.3.0 — 2026-06-02 — Component unification (#4 buttons): remove .pf .btn-primary
 *     override (profile buttons now use canonical theme.css .btn-primary) and delete
 *     dead .kpkg-btn* family (0 call sites).
 *   v1.4.0 — 2026-06-02 — Component unification (#4 pkg-card + #5 inputs): pkg-card
 *     actions use canonical btn-* (per-button rules removed); remove .pf .input-field
 *     base+focus override so profile inputs use canonical .input-field (kept
 *     select/textarea behavior + sentence-case .form-row label).
 *   v1.5.0 — 2026-06-02 — Component unification (#6 stat cards): remove .pf .stat-card
 *     box override + dead .pf-hero .num/.label + .wl-stat/.wl-val/.wl-label +
 *     .wl-val-success/-danger; profile node-stats + wallet tiles use canonical
 *     .stat-card / .stat-card-value(.mono/.success/.danger) / .stat-card-label.
 *   v1.6.0 — 2026-06-02 — Component unification (#11 status dots): remove
 *     .peer-dot, .pn-status-dot, and .ext-status-dot (the last had hardcoded
 *     #4ade80/#9ca3af, a dark-mode bug); these dots now use canonical <StatusDot>.
 *   v1.7.0 — 2026-06-02 — Component unification (#13 tables): tokenize the
 *     hardcoded accent rgbas in .pf .consent-table / .audit-table — cell border
 *     rgba(232,86,74,.06) and row-hover rgba(232,86,74,.04) → var(--accent-subtle)
 *     (a dark-mode bug: frozen light accent), and .dw-expiring-icon #f59e0b →
 *     var(--warn). consent/audit tables left as bespoke .pf tables (checkbox
 *     column, per-cell badges/recipient cells) — not migrated to <DataTable>.
 *   v1.8.0 — 2026-06-02 — Component unification (#23 collapsible): tokenize the
 *     hardcoded hex fallbacks in the chevron/expand toggle CSS — .pf .expand-btn
 *     and .pf .scope-advanced-toggle border/color var(--border,#E5E7EB) /
 *     var(--accent,#E8564A) → bare tokens (a dark-mode bug: frozen light hex). The
 *     toggles themselves are left in place (expanded markup wired into view state);
 *     canonical /components/Collapsible.js added for new collapsible sections.
 *   v1.9.0 — 2026-06-02 — Component unification (#25 pill base): tokenize the
 *     .pf .vis-pill radius (raw 9999px → var(--radius-full)) so it tracks the new
 *     canonical .pill shape primitive in theme.css. Shape kept declared on
 *     .pf .vis-pill (not delegated to bare .pill) to avoid the (0,2,0)-beats-(0,1,0)
 *     specificity trap; its colors were already token-based (success/info/purple
 *     -bg/-fg) and unchanged.
 *   v1.10.0 — 2026-06-02 — Component unification (#26 recipient badge): tokenize the
 *     .badge-label / .badge-{wildcard,ghii,organism,domain,node,gaii} colors onto
 *     the new theme-invariant --badge-*-bg / --badge-fg tokens (theme.css). Removes
 *     hardcoded #8b5cf6/#f97316/#6b7280/#3b82f6 and the dead light-only fallbacks
 *     var(--success,#22c55e)/var(--danger,#ef4444). Appearance unchanged (values
 *     resolve identically; swatches deliberately do not flip in dark). Shared shape
 *     was already factored onto .badge-label — kept as-is.
 *   v1.12.0 — 2026-06-09 — Workspace header restyle (pj-): breadcrumb (.pj-ws-crumbs)
 *     keeps the parent organism visible; inline title+badge (.pj-ws-titlerow); the
 *     action row became a tinted .pj-toolbar with consistent buttons (card fill +
 *     shadow so they stop blending into the page), .pj-toolbar-sep separators, and the
 *     review gate pushed apart (margin-left:auto). .pj-section-head no longer
 *     space-betweens — add-actions cluster next to their title and lift off the panel;
 *     the .pj-doc-tag kind chip got an accent-tinted fill so it stops blending in.
 *   v1.13.0 — 2026-06-09 — Record-item readability: draft rows get a --warn rail +
 *     bordered/bolder DRAFT chip and the inline Edit button gets the card-fill
 *     treatment (both were nearly invisible). Expanded fields (.pj-rec-fields .kv-row)
 *     gain a dotted leader between label and value so each value maps to its key.
 *   v1.14.0 — 2026-06-23 — Multi-part document series niputus: .pj-doc-series-head/-name/-parts
 *     (collapsed series row in the doc index).
 *   v1.14.1 — 2026-06-23 — Optional color tags: .pj-tag-{red…gray} (→ --pj-tag theme tokens),
*     .pj-colored left-rail accent {background:var(--pf-hero-gradient);border-bottom:1px solid var(--border,#E5E7EB)}
/* Full-bleed dashboard shell (like the admin dashboard): the sidebar+content
   flex fills the viewport instead of being capped to a narrow centered column.
   The old 1000px cap squeezed tab content (organisms, etc.) into ~760px. The
   home dashboard / tab content get breathing room via .pf-content padding. The
   signed-out door has its own sheet (css/components/signed-out-door.css). */
.pf{max-width:none;margin:0;padding:0;position:relative;z-index:1}
/* .pf .stat-card box override + dead .pf-hero-inner .stat-card .num/.label (0 sites)
   removed — profile stat cards (node-stats, wallet) use canonical theme.css
   .stat-card / .stat-card-value / .stat-card-label. Unified 2026-06-02 (#6). */
.pf .tabs {display:flex;gap:6px 8px;margin-bottom:0;flex-wrap:wrap;padding:0 0 1.5rem}
.pf .tab {cursor:pointer;transition:all .15s;white-space:nowrap}
.pf .tab.active {border-color:var(--accent,#E8564A);}
.pf .section-desc{margin-bottom:1.25rem;line-height:1.5;max-width:700px}
.pf .card{transition:border-color .2s}
/* Card variant="glass" (GlassCard, #22) must beat the aggressive .pf .card defaults
   so it keeps the former .pf-glass-card look (surface bg, 8px radius, 16px pad, no hover). */
.pf .card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}
.pf .card-subtitle{color:var(--text-dim,#6B7280);font-size:.8rem}
.pf .badge{display:inline-block;}
.pf .badge-success{background:rgba(34,197,94,.15);}
.pf .badge-info{background:rgba(232,86,74,.15);color:var(--accent,#E8564A)}
.pf .badge-danger{background:rgba(239,68,68,.15);}
.pf .badge-muted{background:rgba(196,166,208,.1);}
/* .wl-stat/.wl-val/.wl-label removed — wallet lifetime tiles use canonical
   .stat-card / .stat-card-value.mono(.success/.danger) / .stat-card-label.
   Unified 2026-06-02 (#6). */
.pf .mem-item{display:flex;justify-content:space-between;align-items:center;padding:.5rem 0;border-bottom:1px solid var(--border-subtle,var(--border));font-size:.85rem;cursor:pointer;gap:.5rem}
.pf .mem-item:hover{background:var(--bg-surface,var(--bg-dim))}
/* Keys in the NEUTRAL text color — monospace already separates them; a list of all-red
   keys read like an error log and burned out red's alarm meaning. */
/* A key's face is the Key (.key-name, css/components/key-name.css); these keep only their place. */
.pf .mem-key{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pf .tag-pill.tag-more{border-style:dashed;color:var(--text-dim)}
/* A removable tag and its x (.tag-removable, .tag-x) are the tag editor's: css/components/tags.css. */
/* A list whose rows open (nodes) is the List's Row with onToggle: it gives its cells the pointer. */
/* The Agents page's commands are Code blocks and its platform steps the HowTo (css/components/how-to.css). */
.pf .empty{text-align:center;padding:2rem;font-size:.9rem}
.pf .spinner{display:inline-block;width:18px;height:18px;border:2px solid var(--border,#E5E7EB);border-top-color:var(--accent,#E8564A);border-radius:50%;animation:pfSpin .6s linear infinite;margin-right:.5rem;vertical-align:middle}
@keyframes pfSpin{to{transform:rotate(360deg)}}
.pf .loading-text{color:var(--text-dim,#6B7280);font-size:.9rem}
.pf .search-bar{display:flex;gap:.5rem;flex:1;max-width:500px}
/* .pf .input-field base+focus override removed — profile inputs use canonical
   theme.css .input-field (tokenized focus ring, theme-flips). Unified 2026-06-02 (#5).
   Keep only the select/textarea behavior extensions canonical lacks. */
.pf .create-form{margin-bottom:1rem}
.pf .form-row{margin-bottom:.75rem}
.pf .form-row label{display:block;}
.pf .form-actions{display:flex;margin-top:1rem}
/* Choosing files to upload (.file-dropzone*, .file-upload-*, .pf-upload-icon, .pf-file-icon) is a library part: css/components/file-drop.css. */
/* Button overrides removed — profile uses canonical theme.css btn-primary / btn-outline /
   btn-ghost / btn-danger-solid classes directly (incl. btn-primary, unified 2026-06-02).
   See docs/frontend-development-guide.md "Banned Patterns" for the rationale. */
.pf .card-detail{margin-top:.75rem;padding-top:.75rem;}
/* The file preview is a library part: components/FilePreview.js, css/components/file-preview.css. */
/* The dialog itself (frame, header, X, body, footer) is /css/dialog.css, for every dialog on the
   site. Width modifiers (.pf .scope-modal, .pf .ext-modal-narrow) still layer on top of it. */
@media(max-width:600px){
  .pf .search-bar{max-width:100%}
}
/* === Scope Management UI: the permission dialog draws only components now (agents/scopes-modal.js:
   Tabs, a fold Tab, parts under the heavy rule, the List's pick rows, Note). === */
/* === Extensions === */
/* .ext-status-dot removed — extension status uses canonical <StatusDot> (was hardcoded #4ade80/#9ca3af). Unified 2026-06-02 (#11). */
/* Extensions hero */
/* Bundled extension cards */
/* Visibility badge */
/* AI-acceleration maturity tier badge on library cards (tools/aeb/acceleration-tiers.md). */
/* Libraries tab — cards reuse the ext-card family; only the lib-specific bits live here. */
/* Session management — revoke all sessions */

/* ── Knowledge Tab (kpkg-*) ── */
/* .kpkg-btn* removed — dead CSS (0 call sites); knowledge tab uses canonical
   btn-outline / btn-danger-solid. Unified 2026-06-02. */
/* .kpkg-btn-sm / .kpkg-btn-danger removed — dead CSS (0 call sites). Unified 2026-06-02. */
/* Per-entry references */
/* Per-entry relationships */
/* Entry highlight animation on scroll-to */
/* Import preview: per-entry ref/rel chips */

/* A service's schema in its opened row */
.pf .badge-outline{background:transparent;border:1px solid var(--border,rgba(232,86,74,.3));color:var(--accent,#E8564A);font-size:.7rem;padding:2px 8px;border-radius:4px}

/* ── Service Generator (pf-gen-*) ─────────────────────── */

/* Dashboard layout */

/* Sidebar */

/* Editable project name */

/* Remove toggle button */

/* Detail panel */

/* ── Two-pane workspace: prompt (copy) | response (paste) ──────────────
   On wide screens the copy-prompt and the paste-response sit side-by-side so
   the generator uses the full width; below 1024px they stack. The generator
   dashboard escapes the profile's 1360px cap (via :has) to give the panes room. */

/* Pagination */

/* Archive toggle */

/* Agent Listener Bar */

/* Activity Log */

/* Lifecycle Toolbar (Phase 5) */

/* Remove Panel (Phase 5) */

/* Edit Service Panel (Phase 6) */

/* Step Arrow — inline pointer next to the current action */
@keyframes pf-gen-nudge-right {
  0%, 100% { transform: translateX(0); }
  50% { transform: translateX(3px); }
}
@keyframes pf-gen-nudge-down {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(3px); }
}

/* Diagnostics Panel (Phase 7) */

/* ══ Shared Profile Utilities (2026-03-17) ══════════════ */

/* ── Layout Utilities ── */
.pf .flex-row-wrap    { display: flex; gap: .5rem; align-items: center; flex-wrap: wrap; }
.pf .flex-between     { display: flex; justify-content: space-between; align-items: center; }
.pf .flex-col         { display: flex; flex-direction: column; gap: .5rem; }
.pf .flex-actions     { display: flex; gap: 8px; margin-top: 12px; }

/* ── Text Utilities ── */
.pf .text-meta        { font-size: .8rem; color: var(--text-dim, #6B7280); }
.pf .text-meta-sm     { font-size: .75rem; color: var(--text-dim, #6B7280); }

/* ── Spacing Utilities ── */
.pf .mt-section       { margin-top: 1.5rem; }
.pf .mt-xs            { margin-top: 4px; }

/* The input size modifier (.input-field.input-sm) went with its last user, the invitation page. */

/* The visibility pill is the Tag with onClick (components/Mark.js; its pointer: css/components/mark.css). */

/* Toggle Switch moved to theme.css .toggle* (canonical /components/ToggleSwitch.js, #14). */

/* Glass Card removed (#22): GlassCard now delegates to the canonical
   /components/Card.js (variant="glass" → .card-glass in theme.css). */

/* ── Generator: live status on type badge (replaces dots) ── */

/* ── Generator: package changes diff colors ── */

/* ── Generator: remove panel helpers ── */

/* ── Agent-driven generator UI ──────────────────────── */
@keyframes pf-gen-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }

/* ── Input for verification codes (email-tab) ── */

/* ══ Refactored inline styles (2026-03-17) ══════════════ */

/* The Node stats and Nodes tabs are kit components (FigureStrip lead, CardGrid of section Cards,
   List, Facts, Fields, Check): their rules went with their classes. */

/* The Email tab lives in css/views/email-poster.css (the poster face, 2026-08-30). */

/* ── Access tab ── */
/* Scope count doubles as the disclosure control for the badge list it summarises: button reset so a
   <button> carrying .badge looks exactly like the static badges elsewhere in the card. */
/* Spending limit on a connected app's card. Only an app that asked to spend shows one, so this
   never appears on the majority of cards and must not push the rest of the layout around. */

/* ── Wallet tab ── */
/* .wl-val-success/-danger removed — wallet uses canonical .stat-card-value.success/.danger. (#6) */

/* ── Federation tab ── */

/* ── Portfolio tab ── */

/* ── Shared: text color accent on expand icon ── */

/* ── Work tab ── */

/* ── Utility classes added during inline-style refactor (2026-03-17) ── */
.pf .mb-0             { margin-bottom: 0; }
.pf .pf-bold          { font-weight: 600; }
.pf .pf-flex-fill     { flex: 1; min-width: 0; }
.pf .pf-no-underline  { text-decoration: none; }



/* Memory tab: sharing rules row */

/* A settings row: a label and its explanation on the left, the control on the right. (The
   notifications tab moved to css/views/notifications-poster.css on 2026-08-30; pf-setting-* stays
   for the other tabs that use the row.) */

/* Apps tab: inline edit panel */


/* ========================================================================
   LANDING PAGE — Adaptive profile dashboard (new / active / experienced)
   Mobile-first: base styles for phones, scale up via min-width queries.
   ======================================================================== */

/* Back navigation (shown when in a specific tab) */

/* Inline view — full tab content opened within the landing page */
/* Give tab content inside inline views more breathing room */

/* Container */

/* The Settings overview is kit components (page group G8): the head is the Masthead, its numbers
   the NumberBand (css/components/number-band.css, the .pf-lp-stat* rules moved there unchanged),
   its tags Mark with the live square, the presence door PresenceButton (presence-dot.css), the next
   steps a panel Card, the promo a Box with framed Cards; the account and presence dialogs are the
   field kit in a Stack. */

/* --- Inline Preview Panels --- */
/* Panel content items */

/* Agent status dots in panels */

/* Panel footer / empty / loading */

/* ── Test scope selector ─────────────── */

/* ── Test results ─────────────────────── */

/* --- Federation toggle (knowledge-tab) --- */

/* --- Memory federation badge --- */
.pf .pf-fed-badge { margin-left: 4px; }

/* ─── Component Detail: Test Section ─── */


/* ── Generator Debug Panel ──────────────────────────── */

/* The frame and its side menu are library components now: components/settings-frame.css and
   components/side-menu.css. */

@media (max-width: 900px) {
  /* Screen space is valuable on mobile — minimal side margins. */
  .pf { padding: 0.6rem 0.35rem 1.5rem; }
}

/* ── Projects tab (pj-) ── */
/* The workspace's own pages are library components now (page migration G2b): the page frame is the
   SettingsPage, its lists the List, its boxes the Box, its fields the Field family, the document
   tree DocTree, the document DocView, the map MindMap, the tree beside the page ContentsTree, the
   colour tag ColorPicker (components/*.js with their own sheets). A record is the List's row. */
/* The comment thread on a workspace object is a library part: css/components/comments.css. */

/* ── In-context content search (Kerros 1): filter tabs to matches + grouped result list ── */
.pj-search-results { margin-top: 0.4rem; }
.pj-search-group { margin: 0 0 0.9rem; }
.pj-search-group-head { display: flex; align-items: center; gap: 0.4rem; margin: 0 0 0.35rem; padding-bottom: 0.25rem; }
/* One hit (.pj-search-hit, its title and snippet) is a library part: css/components/search-hits.css. */

/* The global command palette's list is the QuickFind component: css/components/quick-find.css. */
/* The popped-out document window is the SoloWindow component: css/components/solo-window.css. */

/* Deterministic Mermaid charts are the Mermaid component's: css/components/mermaid.css. */
/* Participants panel — node → owner → agents listing */
/* The People list (.pj-parts, -list, .pj-part-human, -node, -agents) is a library part:
   css/components/people-list.css. A person's framed card stays here (the box is a question in the lab). */
.pj-part-owner { padding: 0.5rem 0.7rem; margin: 0; }
/* One agent under its person (.pj-part-agent) is a library part: css/components/agent-chip.css.
   The People panel itself draws the People component (components/People.js, css/components/people.css),
   its access manager the List, and the activity panel the ActivityCalendar (css/components/activity-calendar.css). */
/* The document tree is components/DocTree.js (css/components/doc-tree.css), the colour tag
   components/ColorPicker.js (css/components/colour-tag.css). */
.pj-mini { font-size: 0.6rem; padding: 0 0.25rem; vertical-align: middle; }
.md-wikilink { color: var(--accent); cursor: pointer; text-decoration: none; border-bottom: 1px dashed var(--accent); }
.md-wikilink:hover { border-bottom-style: solid; }
.md-img { max-width: 100%; height: auto; border-radius: 6px; }

/* ───────────────── Workspace Overview tab ─────────────────
 * The landing view: a "what happened here" strip + every space stacked on one vertical scroll.
 * Sections collapse as accordions on mobile; documents expand inline there (no popups). */

/* ── Measurability objectives: the Object box with Facts under a Group heading (workspace/overview.js) ── */
/* A series' arrow in the document tree (.pj-ov-chevron) is the Document tree's: css/components/doc-tree.css. */
/* Unseen-changes badge on workspace tabs — neutral gray pill (red is reserved for errors). */

/* ───────────────── Organisms list renew (phase 1) ─────────────────
 * Compact list rows + kebab menu + organism home page. All colors via theme tokens. */

/* The organism row (.pj-org-list, .pj-org-row and its parts, the panels it opens) is a library
   part: css/components/org-row.css. The line under the name stays here (a question in the lab). */
.pj-org-desc { font-size: 0.78rem; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 48ch; }

/* The kebab ("…") menu is the ⋯ CardMenu (components/CardMenu.js, css/components/card-menu.css). */

/* Organism home page */
.pj-search-group-head .poster-count, .pj-doc-series-head .poster-count { margin-left: 0.3rem; }

/* ── Grouped workspace nav: clusters (Workspace related / Records / Document spaces / one per
   contract), each a small caption above its member tabs, separated by a wider column gap. ── */
/* vertical divider between groups so the clusters read as separated at a glance */

/* ── README panel (free-form description, Osa A) ── */
/* The panel itself is the Box now (views/profile/organisms/readme-panel.js); this rule is kept for
   the design lab's conflict sample, which still writes .pj-readme. */
.pj-readme { margin: 0.75rem 0 0.9rem; padding: 0.75rem 1rem 0.85rem; }

/* ── Interactive mindmap (Osa C): components/MindMap.js (css/components/mind-map.css) ── */

/* ── Structure timeline / development (Osa D) ── */
/* The timeline is the SnapshotTimeline component (css/components/snapshot-timeline.css) in the Box. */

/* ── Workspace renew (phase 2): header actions, review banner, add-space tab ── */

/* ── Organism home tab contents (feedback round): tab headers, pills, agent picker, board preview ── */
.pj-linklike { background: none; border: none; padding: 0.2rem 0; font-size: 0.78rem; color: var(--accent); cursor: pointer; text-align: left; }
.pj-linklike:hover { text-decoration: underline; }

/* The Contacts tab lives in css/views/contacts-poster.css (the poster face, 2026-08-30). */
/* A message in the board preview is the Board notices' row (css/components/board-notices.css). */
/* The tag input (.pj-taginput, .pj-tag, .pj-tag-x, .pj-taginput-field) is a library part: css/components/tag-input.css. */

/* ── Workspace row: clickable participants counter + inline people list ── */
/* The counter is the Tab's fold tone (.poster-tab--fold, pressed .is-on); the people list is the
   organism row's (css/components/org-row.css). */


/* The overview's waiting box, panels, band, usage lines, figures and dialogs are kit components now
   (page group G8): Note aside with a Group, CardGrid of panel Cards, NumberBand, List with Meter,
   Card figure doors, FigureStrip; the picture's preview is MastheadPreview (masthead.css). */

/* ── Ecosystem apps tab: its parts are components now (page group G5). What stays is drawn only by
      the design lab's conflict samples (decision-samples-conflicts.js): the how-it-runs steps and the
      setup guide's width. ── */
.pf-eco-auto-how { margin: .3rem 0 .6rem; }
.pf .pf-eco-auto-how-steps { margin: .5rem 0 0; }
.pf .pf-eco-auto-how-doc { margin: .5rem 0 0; }
.pf-eco-setup-guide-md { max-width: 74ch; }

/* The presence settings dialog is the field kit (Choice, Select) in a Stack (page group G8). */

/* ── Discover tab (master directory) ───────────────────────────────────── */

/* ── Workspace Apps strip (pinned apps on the workspace Overview): the Box, the Card grid and the List
   (views/profile/organisms/workspace-apps.js draws only components). ── */

/* ── App-bound skills (2d) on My Apps cards ── */

/* ── AI transparency card (pf-aitr-*) — TARGET-058 Phase 8 ──
   The owner's own view of what they published with a model in it. The one visual decision here is
   that the "public and unlabelled" tile changes colour only when the number is ABOVE zero: a
   compliance surface that is always red teaches people to stop looking at it. */
/* The cards themselves are kit components now (FoldSection, FigureStrip, BoxList and BoxLine in
   components/Box.js, Touch in components/Layout.js); their list and row rules went with their
   last user (page group G8). */
/* Every control of the decision-model card and its rules and providers screens is a real tap
   target, 44 px at every width: that is the Touch part now (components/Layout.js, layout.css). */

/* ── One agent's AI settings: components now (agents/agent-ai-section.js); its 44px thumb targets
   are the Touch part with its tabs (css/components/layout.css). ── */

/* The account's own compliance slice (BR-02) and the P&L tab are kit components now (FigureStrip,
   BoxList and BoxLine; List, Card, TextField): their rules went with their classes. */

/* The Companies tab's pf-co rules left for css/views/companies-poster.css (co- prefix) when the
   tab moved to the poster face. */

/* The start-page setting at the foot of the overview is StartPageSetting's footer (start-page.css). */

/* The prompt card owns its corner, like every other card. */
/* The card owns its corner, and the head stops short of it. Measured before this: the dots
   overlapped the primary button by 18x18px and hung 12px outside the head, where the card edge
   clipped them into a smudge. */

/* AgentConsent (both mounts) is css/components/agent-consent.css. */
