/* ONYX self-hosted fonts + icon system (Phase 2).
   Brand fonts: Playfair Display, DM Sans, Roboto (self-hosted, no CDN -> CSP-safe,
   no third-party IP leak). Icons: a curated 252-icon subset of Google Material
   Symbols (Apache-2.0). Licenses in /assets/fonts/. Call an icon by its documented
   Material Symbols name: <span class="icon icon-gavel" aria-hidden="true"></span>.
   Need an icon not listed? Request it (docs/theme.md 7); do not hotlink a CDN. */

/* ===== Brand fonts (variable where available) ===== */
@font-face { font-family: "Playfair Display"; font-style: normal; font-weight: 400 900;
  font-display: swap; src: url("/assets/fonts/playfair-display-var.woff2") format("woff2"); }
@font-face { font-family: "Playfair Display"; font-style: italic; font-weight: 400 900;
  font-display: swap; src: url("/assets/fonts/playfair-display-var-italic.woff2") format("woff2"); }
@font-face { font-family: "DM Sans"; font-style: normal; font-weight: 100 1000;
  font-display: swap; src: url("/assets/fonts/dm-sans-var.woff2") format("woff2"); }
@font-face { font-family: "Roboto"; font-style: normal; font-weight: 400;
  font-display: swap; src: url("/assets/fonts/roboto-400.woff2") format("woff2"); }

/* ===== Icon system =====
   The ?v= on the icon font is a manual cache-buster: the woff2 is cached permanently, and fonts.css
   is itself cache-busted (View::asset ?v=<mtime>) — but the @font-face src is a static path, so a
   changed subset would NOT re-download without this. Bump ?v= whenever onyx-icons.woff2 changes.
   v2 = CR-051 (added tab_new_right / select_to_speak / chat_paste_go). */
@font-face { font-family: "ONYX Icons"; font-style: normal; font-weight: 400;
  font-display: block; src: url("/assets/fonts/onyx-icons.woff2?v=2") format("woff2"); }
.icon { font-family: "ONYX Icons"; font-weight: normal; font-style: normal;
  font-size: 1.25rem; line-height: 1; letter-spacing: normal; text-transform: none;
  display: inline-flex; align-items: center; justify-content: center; white-space: nowrap;
  direction: ltr; vertical-align: middle; -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale; }
.icon::before { content: attr(data-fallback); }
.icon-sm { font-size: 1rem; }
.icon-lg { font-size: 1.6rem; }
.icon-xl { font-size: 2.2rem; }


/* ===== Icon glyphs (call by documented Material Symbols name) ===== */
.icon-home::before { content: "\e9b2"; }
.icon-dashboard::before { content: "\e871"; }
.icon-dashboard-customize::before { content: "\e99b"; }
.icon-menu::before { content: "\e5d2"; }
.icon-menu-open::before { content: "\e9bd"; }
.icon-close::before { content: "\e5cd"; }
.icon-arrow-back::before { content: "\e5c4"; }
.icon-arrow-forward::before { content: "\e5c8"; }
.icon-arrow-upward::before { content: "\e5d8"; }
.icon-arrow-downward::before { content: "\e5db"; }
.icon-expand-more::before { content: "\e5cf"; }
.icon-expand-less::before { content: "\e5ce"; }
.icon-chevron-right::before { content: "\e5cc"; }
.icon-chevron-left::before { content: "\e5cb"; }
.icon-more-vert::before { content: "\e5d4"; }
.icon-more-horiz::before { content: "\e5d3"; }
.icon-apps::before { content: "\e5c3"; }
.icon-grid-view::before { content: "\e9b0"; }
.icon-list::before { content: "\e896"; }
.icon-view-list::before { content: "\e8ef"; }
.icon-check-indeterminate-small::before { content: "\f88a"; }
.icon-add::before { content: "\e145"; }
.icon-remove::before { content: "\e15b"; }
.icon-edit::before { content: "\f097"; }
.icon-edit-note::before { content: "\e745"; }
.icon-delete::before { content: "\e92e"; }
.icon-delete-forever::before { content: "\e92b"; }
.icon-save::before { content: "\e161"; }
.icon-search::before { content: "\ef7a"; }
.icon-manage-search::before { content: "\f02f"; }
.icon-filter-list::before { content: "\e152"; }
.icon-filter-alt::before { content: "\ef4f"; }
.icon-sort::before { content: "\e164"; }
.icon-swap-vert::before { content: "\e8d5"; }
.icon-refresh::before { content: "\e5d5"; }
.icon-sync::before { content: "\e627"; }
.icon-cached::before { content: "\e86a"; }
.icon-autorenew::before { content: "\e863"; }
.icon-download::before { content: "\f090"; }
.icon-upload::before { content: "\f09b"; }
.icon-file-download::before { content: "\f090"; }
.icon-file-upload::before { content: "\f09b"; }
.icon-print::before { content: "\e8ad"; }
.icon-share::before { content: "\e80d"; }
.icon-content-copy::before { content: "\e14d"; }
.icon-content-paste::before { content: "\e14f"; }
.icon-open-in-new::before { content: "\e89e"; }
.icon-open-in-full::before { content: "\f1ce"; }
.icon-close-fullscreen::before { content: "\f1cf"; }
.icon-link::before { content: "\e250"; }
.icon-link-off::before { content: "\e16f"; }
.icon-check::before { content: "\e668"; }
.icon-done::before { content: "\e876"; }
.icon-done-all::before { content: "\e877"; }
.icon-clear::before { content: "\e5cd"; }
.icon-undo::before { content: "\e166"; }
.icon-redo::before { content: "\e15a"; }
.icon-drag-indicator::before { content: "\e945"; }
.icon-drag-handle::before { content: "\e25d"; }
.icon-check-circle::before { content: "\f0be"; }
.icon-cancel::before { content: "\e888"; }
.icon-folder::before { content: "\e2c7"; }
.icon-folder-open::before { content: "\e2c8"; }
.icon-folder-shared::before { content: "\e2c9"; }
.icon-create-new-folder::before { content: "\e2cc"; }
.icon-description::before { content: "\e873"; }
.icon-article::before { content: "\ef87"; }
.icon-picture-as-pdf::before { content: "\e415"; }
.icon-attach-file::before { content: "\e226"; }
.icon-insert-drive-file::before { content: "\e674"; }
.icon-upload-file::before { content: "\e9fc"; }
.icon-note::before { content: "\e674"; }
.icon-sticky-note-2::before { content: "\f1fc"; }
.icon-book::before { content: "\e86e"; }
.icon-menu-book::before { content: "\ea19"; }
.icon-auto-stories::before { content: "\e666"; }
.icon-history-edu::before { content: "\ea3e"; }
.icon-topic::before { content: "\f1c8"; }
.icon-snippet-folder::before { content: "\f1c7"; }
.icon-gavel::before { content: "\e90e"; }
.icon-balance::before { content: "\eaf6"; }
.icon-account-balance::before { content: "\e84f"; }
.icon-policy::before { content: "\ea17"; }
.icon-verified::before { content: "\ef76"; }
.icon-verified-user::before { content: "\f013"; }
.icon-shield::before { content: "\e9e0"; }
.icon-security::before { content: "\e32a"; }
.icon-lock::before { content: "\e899"; }
.icon-lock-open::before { content: "\e898"; }
.icon-lock-person::before { content: "\f8f3"; }
.icon-key::before { content: "\e73c"; }
.icon-vpn-key::before { content: "\e0da"; }
.icon-fingerprint::before { content: "\e90d"; }
.icon-badge::before { content: "\ea67"; }
.icon-assignment::before { content: "\e85d"; }
.icon-assignment-ind::before { content: "\e85e"; }
.icon-assignment-turned-in::before { content: "\e862"; }
.icon-fact-check::before { content: "\f0c5"; }
.icon-task::before { content: "\f075"; }
.icon-task-alt::before { content: "\e2e6"; }
.icon-rule::before { content: "\f1c2"; }
.icon-approval::before { content: "\e982"; }
.icon-handshake::before { content: "\ebcb"; }
.icon-work::before { content: "\e943"; }
.icon-cases::before { content: "\e992"; }
.icon-workspace-premium::before { content: "\e7af"; }
.icon-stars::before { content: "\e8d0"; }
.icon-person::before { content: "\f0d3"; }
.icon-person-add::before { content: "\ea4d"; }
.icon-person-off::before { content: "\e510"; }
.icon-group::before { content: "\ea21"; }
.icon-groups::before { content: "\f233"; }
.icon-manage-accounts::before { content: "\f02e"; }
.icon-admin-panel-settings::before { content: "\ef3d"; }
.icon-supervisor-account::before { content: "\e8d3"; }
.icon-contacts::before { content: "\e0ba"; }
.icon-business::before { content: "\e7ee"; }
.icon-corporate-fare::before { content: "\f1d0"; }
.icon-account-circle::before { content: "\f20b"; }
.icon-mail::before { content: "\e159"; }
.icon-email::before { content: "\e159"; }
.icon-outgoing-mail::before { content: "\f0d2"; }
.icon-chat::before { content: "\e0c9"; }
.icon-chat-bubble::before { content: "\e0cb"; }
.icon-forum::before { content: "\e8af"; }
.icon-sms::before { content: "\e625"; }
.icon-notifications::before { content: "\e7f5"; }
.icon-notifications-active::before { content: "\e7f7"; }
.icon-notifications-off::before { content: "\e7f6"; }
.icon-call::before { content: "\f0d4"; }
.icon-phone::before { content: "\f0d4"; }
.icon-videocam::before { content: "\e04b"; }
.icon-send::before { content: "\e163"; }
.icon-inbox::before { content: "\e156"; }
.icon-drafts::before { content: "\e151"; }
.icon-reply::before { content: "\e15e"; }
.icon-reply-all::before { content: "\e15f"; }
.icon-forward::before { content: "\f57a"; }
.icon-mark-email-read::before { content: "\f18c"; }
.icon-mark-email-unread::before { content: "\f18a"; }
.icon-markunread::before { content: "\e159"; }
.icon-image::before { content: "\e3f4"; }
.icon-photo::before { content: "\e693"; }
.icon-play-arrow::before { content: "\e037"; }
.icon-pause::before { content: "\e034"; }
.icon-stop::before { content: "\e047"; }
.icon-volume-up::before { content: "\e050"; }
.icon-volume-off::before { content: "\e04f"; }
.icon-volume-down::before { content: "\e04d"; }
.icon-mic::before { content: "\e31d"; }
.icon-mic-off::before { content: "\e02b"; }
.icon-headphones::before { content: "\f01f"; }
.icon-movie::before { content: "\e684"; }
.icon-audiotrack::before { content: "\e405"; }
.icon-play-circle::before { content: "\e1c4"; }
.icon-pause-circle::before { content: "\e1a2"; }
.icon-graphic-eq::before { content: "\e1b8"; }
.icon-slideshow::before { content: "\e41b"; }
.icon-info::before { content: "\e88e"; }
.icon-warning::before { content: "\f083"; }
.icon-error::before { content: "\f8b6"; }
.icon-report::before { content: "\f052"; }
.icon-help::before { content: "\e8fd"; }
.icon-help-outline::before { content: "\e8fd"; }
.icon-priority-high::before { content: "\e645"; }
.icon-do-not-disturb::before { content: "\f08d"; }
.icon-schedule::before { content: "\efd6"; }
.icon-pending::before { content: "\ef64"; }
.icon-pending-actions::before { content: "\f1bb"; }
.icon-hourglass-empty::before { content: "\e88b"; }
.icon-hourglass-top::before { content: "\ea5b"; }
.icon-event-available::before { content: "\e614"; }
.icon-error-outline::before { content: "\f8b6"; }
.icon-check-small::before { content: "\f88b"; }
.icon-new-releases::before { content: "\ef76"; }
.icon-tips-and-updates::before { content: "\e79a"; }
.icon-table-chart::before { content: "\e265"; }
.icon-table-rows::before { content: "\f101"; }
.icon-bar-chart::before { content: "\e26b"; }
.icon-pie-chart::before { content: "\f0da"; }
.icon-insights::before { content: "\f092"; }
.icon-analytics::before { content: "\ef3e"; }
.icon-calendar-today::before { content: "\e935"; }
.icon-calendar-month::before { content: "\ebcc"; }
.icon-event::before { content: "\e878"; }
.icon-today::before { content: "\e8df"; }
.icon-timeline::before { content: "\e922"; }
.icon-trending-up::before { content: "\e8e5"; }
.icon-trending-down::before { content: "\e8e3"; }
.icon-storage::before { content: "\e1db"; }
.icon-database::before { content: "\f20e"; }
.icon-api::before { content: "\f1b7"; }
.icon-code::before { content: "\e86f"; }
.icon-terminal::before { content: "\eb8e"; }
.icon-settings::before { content: "\e8b8"; }
.icon-settings-suggest::before { content: "\f05e"; }
.icon-tune::before { content: "\e429"; }
.icon-build::before { content: "\f8cd"; }
.icon-extension::before { content: "\e87b"; }
.icon-widgets::before { content: "\e1bd"; }
.icon-palette::before { content: "\e40a"; }
.icon-format-paint::before { content: "\e243"; }
.icon-brush::before { content: "\e3ae"; }
.icon-contrast::before { content: "\eb37"; }
.icon-dark-mode::before { content: "\e51c"; }
.icon-light-mode::before { content: "\e518"; }
.icon-visibility::before { content: "\e8f4"; }
.icon-visibility-off::before { content: "\e8f5"; }
.icon-preview::before { content: "\f1c5"; }
.icon-format-list-bulleted::before { content: "\e241"; }
.icon-format-list-numbered::before { content: "\e242"; }
.icon-payments::before { content: "\ef63"; }
.icon-attach-money::before { content: "\e227"; }
.icon-receipt::before { content: "\e8b0"; }
.icon-receipt-long::before { content: "\ef6e"; }
.icon-account-balance-wallet::before { content: "\e850"; }
.icon-credit-card::before { content: "\e8a1"; }
.icon-request-quote::before { content: "\f1b6"; }
.icon-savings::before { content: "\e2eb"; }
.icon-paid::before { content: "\f041"; }
.icon-price-check::before { content: "\f04b"; }
.icon-star::before { content: "\f09a"; }
.icon-star-border::before { content: "\f09a"; }
.icon-favorite::before { content: "\e87e"; }
.icon-favorite-border::before { content: "\e87e"; }
.icon-bookmark::before { content: "\e8e7"; }
.icon-bookmark-border::before { content: "\e8e7"; }
.icon-flag::before { content: "\f0c6"; }
.icon-label::before { content: "\e893"; }
.icon-location-on::before { content: "\f1db"; }
.icon-map::before { content: "\e55b"; }
.icon-public::before { content: "\e80b"; }
.icon-language::before { content: "\ea07"; }
.icon-translate::before { content: "\e8e2"; }
.icon-qr-code::before { content: "\ef6b"; }
.icon-logout::before { content: "\e9ba"; }
.icon-login::before { content: "\ea77"; }
.icon-history::before { content: "\e8b3"; }
.icon-archive::before { content: "\e149"; }
.icon-unarchive::before { content: "\e169"; }
.icon-restore::before { content: "\e8b3"; }
.icon-checklist::before { content: "\e6b1"; }
.icon-grade::before { content: "\f09a"; }
.icon-thumb-up::before { content: "\f577"; }
.icon-thumb-down::before { content: "\f578"; }
.icon-expand-content::before { content: "\f830"; }
.icon-zoom-in::before { content: "\e8ff"; }
.icon-zoom-out::before { content: "\e900"; }
.icon-fullscreen::before { content: "\e5d0"; }
.icon-fullscreen-exit::before { content: "\e5d1"; }
.icon-push-pin::before { content: "\f10d"; }  /* push_pin — CR-015 Phase 4 pin control (Material Symbols) */
.icon-psychology::before { content: "\ea4a"; }  /* psychology — CR-017 (Remember memory/cognition) */
.icon-tab-new-right::before { content: "\f741"; }    /* tab_new_right — CR-051 (HubChat turn-bar Branch) */
.icon-select-to-speak::before { content: "\f7cf"; }  /* select_to_speak — CR-051 (turn-bar Read aloud) */
.icon-chat-paste-go::before { content: "\f6bd"; }    /* chat_paste_go — CR-051 (turn-bar Share) */
