/** * OpenStation — Posts app styles. * * The list layout (toolbar, body, pager, tabs, the phone rules) is the * framework's `.os-app-list*` family in `assets/css/app-runtime.css`; * this sheet owns what is the Posts window's alone: the term canvas — * one chrome (`.os-term-canvas*`) the Categories mind map and the Tags * cloud both wear, each with a modifier for its own background — and * its phone fold. Cell-content styles are inlined in `parts/cells/`, * since paints into its own shadow root. */ .os-posts__terms-host { display: flex; flex-direction: column; flex: 1 1 auto; min-height: 0; min-width: 0; } /* --------------------------------------------------------------- * The term canvas: a toolbar across the top, the Pixi stage on the * left, a fixed-width sidebar editor on the right. The Pixi side * paints the terms, the post satellites and the pager into the * canvas; this sheet owns the chrome around it. */ .os-term-canvas { flex: 1 1 auto; min-height: 0; min-width: 0; display: flex; flex-direction: column; background: var( --os-ui-surface, #fff ); } /* The mind map's surface: a dot grid — the "infinite thinking * surface" texture — under two theme-tinted vignettes for depth. */ .os-term-canvas.os-mindmap { background: radial-gradient( circle, var( --os-ui-border, rgba( 0, 0, 0, 0.06 ) ) 1px, transparent 1.5px ) 0 0 / 24px 24px, radial-gradient( ellipse at 28% 22%, color-mix( in srgb, var( --wp-admin-theme-color, #2271b1 ) 8%, transparent ), transparent 60% ), radial-gradient( ellipse at 78% 80%, color-mix( in srgb, var( --wp-admin-theme-color, #2271b1 ) 5%, transparent ), transparent 58% ), var( --os-ui-surface, #fff ); } /* The tag cloud's surface: faint diagonal pinstripes — a sticker wall. */ .os-term-canvas.os-tagcloud { background: repeating-linear-gradient( 135deg, transparent 0, transparent 22px, color-mix( in srgb, var( --wp-admin-theme-color, #2271b1 ) 4%, transparent ) 22px, color-mix( in srgb, var( --wp-admin-theme-color, #2271b1 ) 4%, transparent ) 23px ), radial-gradient( circle at 30% 20%, color-mix( in srgb, var( --wp-admin-theme-color, #2271b1 ) 6%, transparent ), transparent 65% ), var( --os-ui-surface, #fff ); } .os-term-canvas__toolbar { display: flex; align-items: center; gap: 10px; padding: 10px 14px; border-bottom: 1px solid var( --os-ui-border, rgba( 0, 0, 0, 0.08 ) ); background: var( --os-ui-surface, rgba( 255, 255, 255, 0.6 ) ); backdrop-filter: blur( 8px ); /* A stacking context, so the search dropdown paints above the * pixi canvas in the layout sibling below. Without it the canvas * (later in the DOM, no z-index) wins the paint order and the * dropdown renders BEHIND the chips — clicks land on the canvas. */ position: relative; z-index: 2; } .os-term-canvas__btn { appearance: none; display: inline-flex; align-items: center; gap: 4px; padding: 6px 10px; font: inherit; font-size: 12px; font-weight: 500; border: 1px solid var( --os-ui-border, #c3c4c7 ); border-radius: 6px; background: transparent; color: var( --os-ui-fg, #1d2327 ); cursor: pointer; transition: background-color 0.12s ease, border-color 0.12s ease, color 0.12s ease; } .os-term-canvas__btn:hover { background: var( --os-ui-hover, rgba( 0, 0, 0, 0.04 ) ); border-color: var( --wp-admin-theme-color, #2271b1 ); } .os-term-canvas__btn--primary { background: var( --wp-admin-theme-color, #2271b1 ); color: var( --os-ui-accent-ink, var( --os-ui-fg-on-accent, #fff ) ); border-color: transparent; } .os-term-canvas__btn--primary:hover { filter: brightness( 1.05 ); background: var( --wp-admin-theme-color, #2271b1 ); color: var( --os-ui-accent-ink, var( --os-ui-fg-on-accent, #fff ) ); } .os-term-canvas__btn--secondary { background: var( --os-ui-hover, rgba( 0, 0, 0, 0.04 ) ); } .os-term-canvas__btn--danger { color: var( --os-ui-danger, #d63638 ); border-color: transparent; } .os-term-canvas__btn--danger:hover { background: color-mix( in srgb, var( --os-ui-danger, #d63638 ) 10%, transparent ); border-color: color-mix( in srgb, var( --os-ui-danger, #d63638 ) 35%, transparent ); } .os-term-canvas__btn--danger.is-armed { background: var( --os-ui-danger, #d63638 ); color: var( --os-ui-fg-on-accent, #fff ); border-color: transparent; } .os-term-canvas__hint { flex: 1 1 auto; font-size: 12px; font-style: italic; color: var( --os-ui-fg-muted, #50575e ); text-align: end; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .os-term-canvas__search { position: relative; flex: 0 1 280px; min-width: 180px; } .os-term-canvas__search-input { width: 100%; padding: 6px 10px; border: 1px solid var( --os-ui-border, #d8dde4 ); border-radius: 6px; background: var( --os-ui-surface, #fff ); color: inherit; font: inherit; font-size: 13px; } .os-term-canvas__search-input:focus { outline: none; border-color: var( --os-ui-accent, var( --wp-admin-theme-color, #2271b1 ) ); box-shadow: 0 0 0 3px var( --os-ui-accent-soft, rgba( 34, 113, 177, 0.18 ) ); } .os-term-canvas__search-results { position: absolute; top: calc( 100% + 4px ); inset-inline-start: 0; inset-inline-end: 0; margin: 0; padding: 4px; list-style: none; background: var( --os-ui-surface-elevated, #fff ); border: 1px solid var( --os-ui-border, #d8dde4 ); border-radius: 8px; box-shadow: 0 6px 18px rgba( 17, 24, 39, 0.08 ); z-index: 100; max-height: 300px; overflow-y: auto; } .os-term-canvas__search-result { display: flex; align-items: center; justify-content: space-between; gap: 8px; width: 100%; padding: 6px 10px; background: transparent; border: 0; border-radius: 6px; color: inherit; cursor: pointer; text-align: start; font: inherit; font-size: 13px; } .os-term-canvas__search-result:hover, .os-term-canvas__search-result.is-active { background: var( --os-ui-hover, rgba( 79, 139, 243, 0.08 ) ); } .os-term-canvas__search-title { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .os-term-canvas__search-meta { font-size: 11px; color: var( --os-ui-fg-muted, #6b7280 ); white-space: nowrap; } /* Two columns: the Pixi stage on the left, the sidebar on the right. * The sidebar always renders — the empty-state copy when nothing is * focused, the editor form otherwise — so the editing surface never * covers the terms. */ .os-term-canvas__layout { display: flex; flex: 1 1 auto; min-height: 0; min-width: 0; } .os-term-canvas__stage { position: relative; flex: 1 1 auto; min-height: 0; min-width: 0; overflow: hidden; /* Fades in once the first fit-to-view has run: without it the * canvas paints its unfitted transform on the frame between mount * and the first rAF, which reads as a flash. */ transition: opacity 200ms ease; } .os-term-canvas__stage.is-loading { opacity: 0; } .os-term-canvas__sidebar { flex: 0 0 320px; display: flex; flex-direction: column; gap: 12px; padding: 16px; border-inline-start: 1px solid var( --os-ui-border, rgba( 0, 0, 0, 0.08 ) ); background: var( --os-ui-surface, #fff ); color: var( --os-ui-fg, #1d2327 ); overflow-y: auto; min-height: 0; } .os-term-canvas__sidebar-empty { flex: 1 1 auto; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; color: var( --os-ui-fg-muted, #50575e ); text-align: center; padding: 24px 8px; } .os-term-canvas__sidebar-empty .dashicons { font-size: 36px; width: 36px; height: 36px; opacity: 0.5; } .os-term-canvas__sidebar-empty-title { font-size: 13px; font-weight: 600; color: var( --os-ui-fg, #1d2327 ); margin: 0; } .os-term-canvas__sidebar-empty-hint { font-size: 12px; font-style: italic; max-width: 220px; margin: 0; } /* The cloud's hint runs a line longer. */ .os-tagcloud .os-term-canvas__sidebar-empty-hint { max-width: 240px; } .os-term-canvas__sidebar-header { display: flex; align-items: center; gap: 8px; font-size: 11px; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; color: var( --os-ui-fg-muted, #50575e ); } .os-term-canvas__sidebar-dot { width: 10px; height: 10px; border-radius: 50%; flex: 0 0 10px; } .os-term-canvas__sidebar-slug { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .os-term-canvas__sidebar-label { font-size: 11px; font-weight: 500; color: var( --os-ui-fg-muted, #50575e ); margin-block-start: 4px; } .os-term-canvas__sidebar-meta { font-size: 12px; color: var( --os-ui-fg-muted, #50575e ); padding-block: 4px; } .os-term-canvas__canvas { display: block; position: absolute; inset: 0; width: 100%; height: 100%; touch-action: none; } .os-term-canvas__editor-name { appearance: none; font: inherit; font-size: 14px; font-weight: 600; padding: 6px 8px; border: 1px solid var( --os-ui-border, #c3c4c7 ); border-radius: 6px; background: var( --os-ui-surface, #fff ); color: inherit; } .os-term-canvas__editor-name:focus, .os-term-canvas__editor-desc:focus { outline: none; border-color: var( --wp-admin-theme-color, #2271b1 ); box-shadow: 0 0 0 2px color-mix( in srgb, var( --wp-admin-theme-color, #2271b1 ) 25%, transparent ); } .os-term-canvas__editor-desc { appearance: none; font: inherit; font-size: 12px; padding: 6px 8px; border: 1px solid var( --os-ui-border, #c3c4c7 ); border-radius: 6px; background: var( --os-ui-surface, #fff ); color: inherit; resize: vertical; min-height: 46px; } .os-term-canvas__editor-actions { display: flex; gap: 6px; flex-wrap: wrap; } .os-term-canvas__editor-actions .os-term-canvas__btn { flex: 1 1 auto; justify-content: center; } .os-term-canvas__empty { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; pointer-events: none; color: var( --os-ui-fg-muted, #50575e ); font-size: 13px; font-style: italic; text-align: center; padding: 0 24px; } /* * The canvas keeps a 320px editor beside the stage on a desk. A phone * has no beside: the editor folds UNDER the stage as a sheet — at * most half the height, its own scroll, clearing the home indicator — * and only while a term is focused; while it would only say "select * a term" it is not there, and the stage has the whole screen. The * same fold under a narrow container, for a desk window pulled in. */ html[data-os-mode="mobile"] .os-term-canvas__layout { flex-direction: column; } html[data-os-mode="mobile"] .os-term-canvas__sidebar { flex: 0 0 auto; max-block-size: 50%; border-inline-start: 0; border-block-start: 1px solid var( --os-ui-border, rgba( 0, 0, 0, 0.08 ) ); padding: 12px 16px calc( 12px + env( safe-area-inset-bottom, 0px ) ); box-shadow: 0 -6px 18px rgba( 0, 0, 0, 0.06 ); } html[data-os-mode="mobile"] .os-term-canvas__sidebar:has( > .os-term-canvas__sidebar-empty ) { display: none; } @container ( max-width: 640px ) { .os-term-canvas__layout { flex-direction: column; } .os-term-canvas__sidebar { flex: 0 0 auto; max-block-size: 50%; border-inline-start: 0; border-block-start: 1px solid var( --os-ui-border, rgba( 0, 0, 0, 0.08 ) ); } .os-term-canvas__sidebar:has( > .os-term-canvas__sidebar-empty ) { display: none; } }