/* "how much Canvas": 100% = pure Canvas. System colours are UA-defined. */ :root { color-scheme: light dark; --text: CanvasText; --surface: Canvas; --surface-raised: color-mix(in srgb, CanvasText, Canvas 97%); /* #f7f7f7 */ --surface-tint: color-mix(in srgb, CanvasText, Canvas 94%); /* #f1f1f1 */ --hairline: color-mix(in srgb, CanvasText, Canvas 91%); /* #e8e8e8 */ --hairline-faint: color-mix(in srgb, CanvasText, Canvas 94%); /* #f1f1f1 */ --border: color-mix(in srgb, CanvasText, Canvas 87%); /* #ddd */ --frame-fill: color-mix(in srgb, CanvasText, Canvas 83%); /* lightgrey */ --field-border: color-mix(in srgb, CanvasText, Canvas 60%); /* #989898 */ --handle-fill: color-mix(in srgb, CanvasText, Canvas 60%); /* #989898 as fill */ --link-underline: color-mix(in srgb, CanvasText, Canvas 69%); /* #b0b0b0 */ --text-muted: color-mix(in srgb, CanvasText, Canvas 47%); --badge-scrim: rgba(255, 255, 255, 0.85); /* ---- Semantic. light-dark() resolves against the used color-scheme, so these follow the override in stage 3 without duplication. Dark halves checked against a Canvas of roughly #1e1e1e; the exact value is UA-defined. ---- */ --accent: #ff9600; /* holds 7.6:1 on dark, unchanged */ --accent-surface: light-dark(#fff8f2, #2b1f14); --danger: light-dark(#cc0000, #ff8a80); /* text, icons, the 3px rule */ --danger-solid: light-dark(#cc0000, #b3231c); /* fill behind --on-solid */ --danger-surface: light-dark(#fdecea, #3b1a17); --action: light-dark(#0d47a1, #90caf9); --action-solid: #1565c0; /* holds white at 5.7:1 in both */ --action-surface: light-dark(#e3f2fd, #12304f); --selected: light-dark(#1a4d8f, #90caf9); /* selected thumbnail border */ --compute: light-dark(#00838f, #4dd0e1); --compute-solid: light-dark(#00838f, #00697a); --compute-surface: light-dark(#e0f2f1, #10312f); --headline-mark: #f5b400; /* 9.1:1 on dark, unchanged */ --headline-border: light-dark(#fff3cd, #5c4a12); --headline-surface: light-dark(#fffdf5, #2a2313); --headline-badge-bg: rgba(255, 243, 205, 0.95); /* sits over a photo in both schemes */ --headline-badge-fg: #6b5900; --diff-ins-bg: light-dark(#ccffd8, #12261a); --diff-ins-fg: light-dark(#055d20, #7ee2a8); --diff-del-bg: light-dark(#ffd7d5, #2d1416); --diff-del-fg: light-dark(#82071e, #ffa198); --on-solid: #ffffff; --shadow-widget: 3px 3px 5px light-dark(#b1b1b1, rgba(0, 0, 0, 0.7)); --shadow-modal: 0 4px 16px light-dark(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.7)); --radius: 6px; } @media (prefers-color-scheme: light) { :root:has(#scheme_override:checked) { color-scheme: dark; } } @media (prefers-color-scheme: dark) { :root:has(#scheme_override:checked) { color-scheme: light; } } /* ============================================================ Base elements ============================================================ */ body { font-family: Helvetica, Arial, sans-serif; font-size: 1rem; margin: 0px; } /* Plain link visibility: a light, desaturated squiggly underline signals "clickable" at rest without the weight of a solid line. */ a { color: var(--text); text-decoration: underline; -webkit-text-decoration-style: wavy; text-decoration-style: wavy; text-decoration-color: var(--link-underline); text-decoration-thickness: 1px; text-underline-offset: 2px; } a:hover { color: var(--accent); } th { text-transform: lowercase; } td { padding-top: 10px; padding-bottom: 5px; padding-right: 10px; } /* table#revisions td only overrides padding-right, so its rows still depend on this rule for vertical padding. table.node_table td resets padding-top/bottom to 0 explicitly and does not depend on it. */ input[type=text], input[type=password], textarea { font-size: 1rem; font-family: Helvetica; border: 1px solid var(--field-border); border-radius: 2px; } select { font-size: 1rem; border: 1px solid var(--field-border); } summary { cursor: pointer; } summary:hover { background-color: var(--surface-raised); } input[type=password], input[type=radio] { border: 1px solid var(--field-border); } /* ============================================================ Layout ============================================================ */ #wrapper { margin: 0 5px; } @media(min-width:1016px) { #wrapper { margin: 0 125px; } .node_action_bar.node_action_bar_save { margin-left: 120px; } .standalone_action_bar { margin-left: -125px; } } #metadata, #content, #main_fields { margin-left: 5px; } #metadata_details summary { margin-bottom: 1em; } .right { text-align: right; } .clear_left { clear: left; } #login_form { max-width: 22rem; margin: 2rem auto; padding: 1.25rem; border: 1px solid var(--hairline); border-radius: var(--radius); } #login_form h1 { margin-top: 0; font-size: 1.25rem; } #login_form label { display: block; margin-bottom: 0.25rem; text-transform: lowercase; } #login_form .login_field { margin-bottom: 1rem; } #login_form input[type=text], #login_form input[type=password] { width: 100%; box-sizing: border-box; } #login_form input[type=submit] { width: 100%; padding: 0.6rem 1rem; } /* ============================================================ Navigation ============================================================ */ #navigation { position: relative; margin-top: 10px; } .admin_content_spacer { clear: both; margin-bottom: 40px; } .node_action_bar { display: flex; flex-wrap: wrap; align-items: center; gap: 0.75rem; margin: 1rem 0 1.5rem; padding-bottom: 1rem; border-bottom: 1px solid var(--hairline); } /* ============================================================ Flash / notices ============================================================ */ #flash { height: auto; line-height: 20px; padding: 6px 10px; border-left: 3px solid var(--text-muted); background-color: var(--surface-tint); margin-bottom: 20px; margin-left: 5px; } #flash span { letter-spacing: 1px; margin-right: 10px; text-transform: lowercase; } #flash img { height: 12px; width: 12px; } span#flash_error, span.warning { color: var(--on-solid); letter-spacing: 1px; background-color: var(--accent); padding-left: 5px; padding-right: 5px; padding-top: 1px; padding-bottom: 1px; } span.warning a { color: inherit; text-decoration: underline; } .error_messages { border-left: 3px solid var(--danger); background-color: var(--danger-surface); padding: 6px 10px; margin-bottom: 1rem; } .error_messages ul { margin: 0; padding-left: 1.25rem; } /* ============================================================ Pagination ============================================================ */ div.pagination { padding-top: 5px; padding-bottom: 15px; display: flex; align-items: center; gap: 0.35rem; } div.pagination a, div.pagination em.current, div.pagination span.gap { display: inline-flex; align-items: center; justify-content: center; min-width: 1.75rem; height: 1.75rem; padding: 0 0.4rem; border-radius: 4px; font-style: normal; } div.pagination a:hover { color: var(--accent); } div.pagination em.current { background-color: var(--accent); color: var(--on-solid); font-weight: bold; } div.pagination span.gap { color: var(--text-muted); } div.pagination .previous_page.disabled, div.pagination .next_page.disabled { color: var(--text-muted); cursor: not-allowed; } /* ============================================================ Buttons ============================================================ */ /* button_to forms: render submit inputs/buttons as plain links, orange on hover; .destructive variant is red. */ form.button_to { display: inline; margin: 0; padding: 0; } form.button_to input[type="submit"], form.button_to button[type="submit"] { display: inline-flex; align-items: center; gap: 0.5rem; -webkit-appearance: none; appearance: none; background: none; border: none; padding: 0; margin: 0; font: inherit; color: inherit; cursor: pointer; text-decoration: none; } form.button_to.state_changing input[type="submit"], form.button_to.state_changing button[type="submit"] { color: var(--action); background-color: var(--action-surface); } form.button_to.state_changing input[type="submit"]:hover, form.button_to.state_changing button[type="submit"]:hover { color: var(--on-solid); background-color: var(--action-solid); } form.button_to.destructive input[type="submit"], form.button_to.destructive button[type="submit"] { color: var(--danger); background-color: var(--danger-surface); } form.button_to.destructive input[type="submit"]:hover, form.button_to.destructive button[type="submit"]:hover { color: var(--on-solid); background-color: var(--danger-solid); } form.button_to.computation input[type="submit"], form.button_to.computation button[type="submit"] { color: var(--compute); background-color: var(--compute-surface); } form.button_to.computation input[type="submit"]:hover, form.button_to.computation button[type="submit"]:hover { color: var(--on-solid); background-color: var(--compute-solid); } form.button_to.computation input[type="submit"]:disabled, form.button_to.computation button[type="submit"]:disabled { opacity: 0.4; cursor: not-allowed; pointer-events: none; } /* Native (non-button_to) submit buttons -- Create/Save/Publish forms. Lower specificity than form.button_to's own rule, so button_to forms are correctly unaffected. If a button_to output ever loses its class wrapper, it will silently fall through to this bordered style instead of rendering as a plain link -- worth knowing, not necessarily fixing. */ input[type="submit"] { -webkit-appearance: none; appearance: none; background: none; border: 1px solid var(--text); border-radius: 2px; padding: 4px 12px; font: inherit; font-weight: bold; color: inherit; cursor: pointer; text-decoration: none; } input[type="submit"]:hover { color: var(--surface); background-color: var(--text); } /* ============================================================ Admin dashboard ============================================================ */ #main_navigation { display: flex; align-items: center; gap: 0.5rem; } #main_navigation a, #main_navigation label.nav_toggle, #main_navigation form.button_to button { display: inline-flex; text-decoration: none; align-items: center; background-color: var(--surface-raised); justify-content: center; width: 2.75rem; height: 2.75rem; padding: 0; border-radius: 2px; } #main_navigation a:hover, #main_navigation label.nav_toggle:hover, #main_navigation form.button_to button:hover { color: var(--surface); background-color: var(--text); } #main_navigation label.nav_toggle { cursor: pointer; } #main_navigation svg { width: 1.5rem; height: 1.5rem; } .action_button svg, form.button_to svg { width: 1.25rem; height: 1.25rem; } #main_navigation .nav_group { display: flex; align-items: center; gap: 0.5rem; margin-left: 1.25rem; } #main_navigation .nav_group:first-child { margin-left: 0; } #main_navigation form.button_to { margin-left: auto; } #main_navigation input.nav_toggle_input { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); } #main_navigation input.nav_toggle_input:focus-visible + label.nav_toggle { outline: 2px solid var(--accent); outline-offset: 2px; } #main_navigation input.nav_toggle_input:checked + label.nav_toggle { color: var(--accent); background-color: var(--accent-surface); } #main_navigation form.button_to button:hover { color: var(--on-solid); background-color: var(--danger-solid); } #main_navigation a.nav_locale { font-size: 0.875rem; font-weight: 700; letter-spacing: 0.04em; line-height: 1; } #dashboard_search { margin-bottom: 1.5rem; } #dashboard_search input[type=text] { width: 100%; box-sizing: border-box; padding: 10px 14px; font-size: 1.1rem; border-radius: 2px; } .button_row { display: flex; flex-wrap: wrap; gap: 0.75rem; align-items: center; } .button_row .action_button, .node_search_form .action_button { margin-bottom: 0; } #dashboard_signposts { margin-bottom: 2rem; } #dashboard_housekeeping h3 { margin-bottom: 0.75rem; } #dashboard_widgets { display: flex; flex-wrap: wrap; gap: 1.5rem; margin-bottom: 2rem; } .dashboard_widget { flex: 1 1 300px; min-width: 0; box-sizing: border-box; border: 1px solid var(--hairline); border-radius: var(--radius); padding: 0.5rem 0.75rem; } .dashboard_widget h3 { margin-top: 0; } .dashboard_widget ul { list-style: none; margin: 0 0 0.75rem; padding: 0; } .dashboard_widget li { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-start; gap: 1rem; padding: 0.35rem 0; border-bottom: 1px solid var(--hairline-faint); } .dashboard_widget_meta { white-space: nowrap; color: var(--text-muted); font-size: 0.85rem; } .dashboard_widget_meta svg { width: 1em; height: 1em; vertical-align: -0.125em; flex: none; } /* ============================================================ Tables ============================================================ */ /* Generic fallback header row. Shadowed by table.node_table's own tr.header (2rem) and duplicated (same values) by table#revisions's own tr.header below. Applies as-is to #menu_item_list, and table.user_table, none of which define their own tr.header. */ table tr.header { height: 20px; text-align: left; } table.node_table , table.assets_table, table.user_table, table.events_table { border-collapse: collapse; } table.node_table tr { border-bottom: 1px solid var(--text); } table.assets_table tr, table.user_table tr, table.events_table tr { border-bottom: 1px solid var(--hairline); } table.node_table th.node_id, table.node_table th.revision { min-width: 4rem; } /* th.title's min-width is set to 4rem above and 12rem here -- the later, equally-specific rule wins, so th.title ends up at 12rem and the 4rem entry for it above is dead. Likely a copy/paste leftover. */ table.node_table th.editor, table.node_table th.title { min-width: 12rem; } table.node_table tr.header, table.assets_table tr.header, table.user_table tr.header, table.events_table tr.header { height: 2rem; text-align: left; } table.node_table td { padding-top: 0px; padding-bottom: 0px; padding-right: 25px; padding-left: 0px; min-width: 2rem; } table.assets_table td, table.user_table td, table.events_table td { padding-top: 8px; padding-bottom: 8px; padding-right: 25px; padding-left: 0px; min-width: 2rem; } table.node_table .node_id { padding-left: 10px; padding-right: 15px; } table.node_table .actions { text-transform: lowercase; } table.node_table tr.header:hover, table.assets_table tr.header:hover, table.user_table tr.header:hover, table.events_table tr.header:hover { background-color: var(--surface); } table.node_table tr:hover, table.assets_table tr:hover, table.user_table tr:hover, table.events_table tr:hover { background-color: var(--surface-tint); } #admin_sitemap_table .node_id:before { content: "• "; } table.revisions_table { border-collapse: collapse; } table.revisions_table thead { position: sticky; top: 0; z-index: 1; } table.revisions_table th, table.revisions_table td { padding: 0.4rem 0.75rem; text-align: left; } table.revisions_table thead tr.header, table.revisions_table thead tr.diff_sticky_bar { background-color: var(--surface); } table.revisions_table .diff_sticky_bar td { padding-top: 0.5rem; padding-bottom: 0.5rem; border-bottom: 1px solid var(--hairline); } #diff_selection_label { margin-left: 0.75rem; color: var(--text-muted); } table.revisions_table td.title { width: 450px; } table.revisions_table td.date { width: 175px; } table.revisions_table tr:not(.header):not(.no_hover) { border-bottom: 1px solid var(--hairline); } table.revisions_table tr.header:hover { background-color: var(--surface); } table.revisions_table tr.no_hover:hover { background-color: var(--surface); } table.revisions_table tr:hover { background-color: var(--surface-tint); } .events_table .rrule_text { display: inline-block; max-width: 300px; overflow-wrap: break-word; } .events_table .truncate { display: inline-block; max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: bottom; } #diffview del { background: var(--diff-del-bg); color: var(--diff-del-fg); text-decoration: line-through; padding: 0 2px; border-radius: 2px; } #diffview ins { background: var(--diff-ins-bg); color: var(--diff-ins-fg); text-decoration: none; padding: 0 2px; border-radius: 2px; } #diffview .diff_side_by_side { display: flex; gap: 1rem; } #diffview .diff_column { flex: 1; } #diffview del.diff_structural, #diffview ins.diff_structural { cursor: help; } .diff_unchanged { color: var(--text-muted); font-style: italic; } .diff_set_list { list-style: none; padding-left: 0; margin: 0; } /* ============================================================ Translation compare view (page_translations#show) ============================================================ */ .translation_compare { display: flex; flex-direction: column; gap: 1.5rem; } @media(min-width:1016px) { .translation_compare { flex-direction: row; gap: 2rem; } .translation_compare_column { flex: 1; min-width: 0; } } table.user_table td.user_login { padding-right: 30px; } /* ============================================================ Node display (nodes#show / nodes#new) ============================================================ */ div.layout_row_label { min-height: 2rem; text-transform: lowercase; vertical-align: top; } div.layout_row_content { min-height: 2rem; margin-bottom: 1rem; } @media(min-width:1016px) { div.layout_row_label { float: left; width: 110px; text-align: right; } div.layout_row_content { margin-left: 120px; display: block; } .body_toolbar_row { margin-left: 120px; } } .layout_row_content.info_group { border: 1px solid var(--hairline); border-radius: var(--radius); padding: 0.5rem 0.75rem; } .info_group .disabled_action { display: inline-block; border: 1px solid var(--border); border-radius: 2px; padding: 4px 12px; font-weight: bold; color: var(--text-muted); cursor: not-allowed; } .info_group_items { display: flex; flex-wrap: wrap; gap: 0.5rem 2rem; } .info_item { min-width: 140px; } .info_label { display: block; font-weight: normal; color: var(--text-muted); font-size: 0.85rem; text-transform: lowercase; } .info_group ul { margin: 0; padding-left: 1.25rem; } .info_group li { margin-bottom: 0.25rem; } .layout_row_content.node_status { border: 2px solid var(--text); background-color: var(--surface-raised); } .node_status .info_group_items:first-child { margin-bottom: 0.75rem; } .node_status .info_group_items + .info_group_items { margin-top: 0.5rem; margin-bottom: 0.5rem; } .node_status .field_hint { margin-top: 0.5rem; display: block; } .layout_row_content .inline-image--full, .layout_row_content .inline-image--half { max-width: 300px; width: auto; float: none; display: block; margin: 0.5rem 0; } .action_button, form.button_to input[type="submit"], form.button_to button[type="submit"] { padding: 4px 12px; line-height: 1.2; box-sizing: border-box; } form.button_to input[type="submit"], form.button_to button[type="submit"] { border: 1px solid transparent; border-radius: 2px; } .field_hint { display: block; margin-top: 2px; font-size: 0.75rem; color: var(--text-muted); padding-bottom: 4px; } .action_button + .field_hint { display: inline; margin-left: 0.5rem; margin-top: 0; } .revisions_full_history_link { margin-bottom: 0; } .node_search_form { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.75rem; } .node_search_form input[type=text] { padding: 4px 12px; box-sizing: border-box; height: 2.25rem; width: 100%; max-width: 22rem; border-radius: 2px; } .node_search_form .action_button { height: 2.25rem; box-sizing: border-box; } /* Layout only -- the at-rest visibility (wavy underline) for these links comes from the scoped rule in Base elements above. */ .add_events, .add_attachments, .add_child_links { margin-top: 0.5rem; margin-bottom: 0; } .sitemap_node { padding-bottom: 0.5rem; margin-bottom: 0.5rem; border-bottom: 1px solid var(--hairline); } .sitemap_node h4 { margin: 0; } .sitemap_node .field_hint { display: block; margin: 2px 0 0; } .sitemap_node p { margin: 2px 0 0; } #sitemap details details { margin-left: 0.75rem; padding-left: 0.5rem; } @media(min-width:1016px) { #sitemap details details { margin-left: 1.5rem; border-left: 1px solid var(--hairline); padding-left: 0.75rem; } } #sitemap summary { padding: 4px 0; } #sitemap details:not([open]) > summary { color: var(--accent); font-weight: bold; } .aligned_action_row { display: flex; flex-wrap: wrap; align-items: start; gap: 0.5rem; } .aligned_action_row .action_button, .aligned_action_row form.button_to { margin-top: -5px; } .aligned_action_row .action_button.action_button_no_margin_top { margin-top: 0; } /* ============================================================ Page editor / metadata forms ============================================================ */ @media(min-width:1016px) { #edit_grid { display: grid; grid-template-columns: 1fr 1fr; grid-template-areas: "main meta" "body body"; column-gap: 2rem; align-items: start; margin-left: -125px; } #main_fields { grid-area: main; } #metadata_details { grid-area: meta; } #admin_layout #content { grid-area: body; } /* Details is force-opened by JS on desktop; hide the summary only once open, so a JS failure still leaves a working toggle. */ #metadata_details[open] > summary { display: none; } #new_node { margin-left: -118px; } } input[type=text]#tag_list, input[type=text]#node_staged_slug, input#move_to_search_term { padding: 5px; } div#admin_layout { margin-top: 0px; margin-left: 10px; } #admin_layout a.action_button, .action_button { display: inline-flex; align-items: center; gap: 0.5rem; -webkit-appearance: none; appearance: none; border: 1px solid var(--text); border-radius: 2px; padding: 4px 12px; font-weight: bold; text-decoration: none; color: var(--text); margin-bottom: 1rem; background: none; cursor: pointer; font: inherit; } #admin_layout a.action_button:hover, .action_button:hover { color: var(--surface); background-color: var(--text); } #admin_layout input[type=text], #admin_layout input[type=password], #admin_layout textarea { padding: 5px; } input#tag_list { text-transform: lowercase; } #admin_layout input[type=text], #admin_layout input[type=password], #admin_layout textarea { box-sizing: border-box; width: 100%; } input[type=text]#page_title { box-sizing: border-box; width: 100%; padding: 6px 5px 4px; font-weight: bold; } #admin_layout textarea#page_abstract { width: 100%; box-sizing: border-box; height: 8rem; } #admin_layout textarea#page_body { box-sizing: border-box; width: 100%; height: 60vh; } #admin_layout #content, #admin_layout #metadata, #admin_layout #main_fields { padding-right: 5px; } input#tag_list, input#node_staged_slug, input#move_to_search_term { box-sizing: border-box; width: 100%; } input#menu_search_term, input#menu_item_node_id, input#menu_item_path, input#menu_item_title { width: 100%; max-width: 44rem; } @media(min-width:1016px) { #admin_layout textarea#page_abstract { padding: 5px; height: 250px; } #admin_overview { margin-left: -125px; } } /* ============================================================ Draft list (dashboard widget) ============================================================ */ .search_results_list { list-style: none; margin: 0; padding: 0; } .search_results_list li { padding: 0.5rem 0; border-bottom: 1px solid var(--hairline-faint); } .search_tag_row { display: flex; flex-wrap: wrap; gap: 0.4rem; padding: 4px 4px 8px; border-bottom: 1px solid var(--hairline); } .search_tag_pill { display: inline-block; padding: 2px 10px; border-radius: 999px; background-color: var(--surface-tint); font-size: 0.85rem; text-decoration: none; } .tag_pill_list { display: flex; flex-wrap: wrap; gap: 0.4rem; list-style: none; padding: 0; margin: 0; } .tag_pill { background: var(--surface-tint); border-radius: 999px; padding: 0.15rem 0.75rem; font-size: 0.9em; } /* ============================================================ Search widgets ============================================================ */ #search_widget { position: absolute; top: 3.5rem; left: 0; width: min(520px, 90vw); border-radius: 2px; border: 1px solid var(--text); box-shadow: var(--shadow-widget); background-color: var(--surface); padding: 3px; z-index: 100; } #search_widget input { width: 100%; box-sizing: border-box; padding: 8px 12px; border-radius: 2px; font-size: 18px; } .search_results p { margin: 0; padding: 4px 4px 0 4px; border-bottom: 1px solid var(--hairline); } .search_results p a { text-decoration: none; display: block; font-weight: bold; font-size: 0.95rem; } .search_results p span.result_path { display: block; margin-top: 2px; font-size: 0.75rem; font-family: monospace; color: var(--text-muted); padding-bottom: 4px; } .search_results p.search_more { margin: 0; padding: 6px 4px; font-size: 0.8rem; color: var(--text-muted); font-style: italic; border-bottom: none; } .search_results p.search_group_label { margin: 8px 0 2px; padding: 0; border-bottom: none; font-size: 0.75rem; color: var(--text-muted); text-transform: lowercase; font-weight: normal; } /* ============================================================ Menu items (navigation editor) ============================================================ */ #menu_item_list { border-collapse: collapse; padding: 5px 5px 5px 5px; border: solid 5px var(--frame-fill); background-color: var(--frame-fill); border-radius: 5px; } #menu_item_list tr:hover { background-color: var(--surface-tint); } #menu_item_list td { height: 20px; } #menu_item_list td.menu_item_title { width: 200px; } #menu_item_list td.menu_sort_handle div { background-color: var(--handle-fill); height: 26px; width: 26px; } #menu_item_list td.menu_sort_handle div:before { content: "⇳"; font-size: 20px; font-weight: bold; text-align: center; vertical-align: center; } #menu_item_list td.menu_sort_handle div:hover { cursor: grab; } .ui-state-highlight td { height: 20px; } /* ============================================================ Image box / browser ============================================================ */ .thumbnail_list { display: flex; flex-wrap: wrap; gap: 0.75rem; list-style: none; margin: 0 0 0.75rem; padding: 0; } .thumbnail_list li { position: relative; display: flex; align-items: center; gap: 0.25rem; border: 1px solid var(--hairline); border-radius: 6px; padding: 4px; } .thumbnail_list img { display: block; width: 60px; height: 60px; object-fit: cover; border-radius: 4px; } .thumbnail_list li { position: relative; } .thumbnail_list li .headline_indicator { position: absolute; top: 4px; right: 4px; width: 1.4rem; height: 1.4rem; display: flex; align-items: center; justify-content: center; border-radius: 50%; background: var(--badge-scrim); color: var(--headline-mark); } .thumbnail_list li .headline_indicator svg { width: 0.9rem; height: 0.9rem; fill: currentColor; } .related_asset_handle { display: flex; color: var(--text-muted); cursor: grab; } .related_asset_handle svg { width: 1rem; height: 1rem; } .related_asset_remove { display: flex; align-items: center; justify-content: center; background: none; border: none; padding: 2px; cursor: pointer; color: var(--text-muted); } .related_asset_remove svg { width: 0.9rem; height: 0.9rem; } .related_asset_remove:hover { color: var(--danger); } .related_asset_result { display: flex; align-items: center; gap: 0.5rem; padding: 4px; border-bottom: 1px solid var(--hairline); text-decoration: none; } .related_asset_result img { width: 40px; height: 40px; object-fit: cover; border-radius: 4px; } .related_asset_set_headline { display: flex; align-items: center; justify-content: center; background: none; border: none; padding: 2px; cursor: pointer; color: var(--text-muted); } .related_asset_set_headline svg { width: 0.9rem; height: 0.9rem; } .related_asset_set_headline:hover, .related_asset_set_headline[aria-pressed="true"] { color: var(--headline-mark); } .related_asset_set_headline[aria-pressed="true"] svg { fill: currentColor; } .thumbnail_list li.is_headline { border-color: var(--headline-border); background-color: var(--headline-surface); } #asset_dropzone { border: 2px dashed var(--border); border-radius: 6px; padding: 1.5rem; } #asset_dropzone.dragging { border-color: var(--accent); background: var(--accent-surface); } /* ============================================================ Live edit preview ============================================================ */ #editor_and_preview { display: flex; flex-direction: column; gap: 1.5rem; } @media (min-width: 1016px) { #editor_and_preview { flex-direction: row; align-items: flex-start; } #editor_and_preview .preview_content { flex: 1; min-width: 0; } #preview_panel { flex: 1; min-width: 0; } } #preview_panel iframe { width: 100%; height: 612px; border: 0.5px solid var(--border); border-radius: var(--radius); } .body_toolbar_row { min-height: 2rem; margin-bottom: 1rem; display: flex; gap: 8px; } /* ============================================================ Image picker ============================================================ */ #inline_image_picker { position: fixed; top: 10%; left: 50%; transform: translateX(-50%); background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 1rem; max-width: 480px; max-height: 70vh; overflow-y: auto; z-index: 1000; box-shadow: var(--shadow-modal); } #inline_image_picker_grid { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 1rem; } .inline_image_picker_item { position: relative; } #inline_image_picker_grid img { width: 80px; height: 80px; object-fit: cover; border-radius: 4px; cursor: pointer; border: 2px solid transparent; display: block; } .inline_image_picker_headline_badge { position: absolute; bottom: 2px; left: 2px; right: 2px; background: var(--headline-badge-bg); color: var(--headline-badge-fg); font-size: 0.65em; text-align: center; border-radius: 3px; padding: 1px 0; pointer-events: none; } #inline_image_picker_grid img.selected { border-color: var(--selected); } #inline_image_picker_actions { display: flex; gap: 8px; flex-wrap: wrap; } /* ============================================================ Action log ============================================================ */ #node_action_list td.node_action_body { border-bottom: 1px solid var(--hairline-faint); } #node_action_list td.node_action_time { white-space: nowrap; vertical-align: top; font-size: 0.8em; color: var(--text-muted); padding-right: 1em; } #node_action_list .node_action_date { display: block; } #node_action_list .node_action_clock { float: right; margin-top: 0.2rem; } #node_action_list td.node_action_body { vertical-align: top; } .node_action_inferred { opacity: 0.5; font-size: smaller; margin-left: 0.5em; } .node_action_zoom { font-size: smaller; margin-left: 0.5em; } .node_action_details summary { margin-top: 0.2rem; cursor: pointer; font-size: smaller; color: var(--text-muted); } .node_action_icon { color: var(--text-muted); margin-right: 0.35em; vertical-align: text-top; } .revision_lifecycle { font-size: 0.85rem; color: var(--text-muted); } /* ============================================================ Trash section ============================================================ */ .restore_form { display: flex; align-items: center; gap: 8px; } .restore_picker { position: relative; } .restore_picker input[type=text] { width: 100%; max-width: 22rem; } .restore_picker .search_results { position: absolute; top: 100%; left: 0; right: 0; z-index: 10; background: var(--surface); border: 1px solid var(--field-border); border-top: none; max-height: 20em; overflow-y: auto; } /* ============================================================ User section ============================================================ */ form.otp_form { margin-top: 0.75rem; } form.otp_form input[type=password], form.otp_form input[type=text] { display: block; margin-bottom: 0.5rem; } .otp_qr svg { width: 220px; height: auto; display: block; margin-bottom: 0.5rem; }