/* Palette-neutral vocabulary shared by the browser admin and the Obsidian panel: kind and outcome hues resolve to whatever the host theme sets, the utilities are the ledger grammar, the two animations are the only motion the panel owns. */ @theme inline { --font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace; --color-kind-master: var(--signal); --color-kind-branch: var(--status-reply); --color-kind-deep: var(--status-meeting); --color-kind-job: var(--status-work); --color-kind-fork: var(--status-skip); --color-ok: var(--status-done); --color-warn: var(--warn); --color-link: var(--link); --animate-pulse-dot: pulse-dot 1.6s cubic-bezier(0.4, 0, 0.6, 1) infinite; --animate-rise: rise 220ms cubic-bezier(0.16, 1, 0.3, 1) both; } @keyframes pulse-dot { 0%, 100% { box-shadow: 0 0 0 0 color-mix(in oklab, var(--signal) 55%, transparent); } 50% { box-shadow: 0 0 0 5px color-mix(in oklab, var(--signal) 0%, transparent); } } @keyframes rise { from { opacity: 0; transform: translateY(3px); } to { opacity: 1; transform: none; } } @utility tabular { font-variant-numeric: tabular-nums; } @utility touch-shown { @media (hover: none) { opacity: 1; } } @utility scrollbar-none { -ms-overflow-style: none; scrollbar-width: none; &::-webkit-scrollbar { display: none; } } @utility row-hover { transition: background-color 150ms ease-out; &:hover { background: color-mix(in oklab, var(--foreground) 4%, transparent); } } @utility ledger-grid { display: grid; column-gap: 0.75rem; align-items: center; } /* Strips: the one row vocabulary of the console. A strip is a physical object in a bay: fixed columns, a state edge, lifts on hover, cocked (pushed out) while it waits for the operator. */ @layer components { .strip { position: relative; display: grid; grid-template-columns: 1.5rem minmax(0, 1fr) auto; column-gap: 0.75rem; align-items: center; min-height: 2.75rem; padding: 0.375rem 0.875rem 0.375rem 0.625rem; color: var(--foreground); text-decoration: none; background: var(--strip); border-bottom: 1px solid var(--border); transition: transform 200ms cubic-bezier(0.2, 0.8, 0.2, 1), box-shadow 200ms cubic-bezier(0.2, 0.8, 0.2, 1), background-color 150ms ease-out; } .strip::before { position: absolute; top: 0.375rem; bottom: 0.375rem; left: 0; width: 3px; content: ""; background: transparent; border-radius: 0 2px 2px 0; transition: background-color 200ms ease-out; } .strip:first-child { border-top-left-radius: var(--radius-md); border-top-right-radius: var(--radius-md); } .strip:last-child { border-bottom: 0; border-bottom-right-radius: var(--radius-md); border-bottom-left-radius: var(--radius-md); } .strip:hover, .strip:focus-visible { z-index: 1; box-shadow: var(--shadow-lift); transform: translateY(-1px); } .strip[data-state="running"]::before { background: var(--signal); animation: pulse-edge 1.6s cubic-bezier(0.4, 0, 0.6, 1) infinite; } .strip[data-state="waiting"] { z-index: 1; box-shadow: var(--shadow-lift); transform: translateX(0.5rem); } .strip[data-state="waiting"]::before { background: var(--attention); } .strip[data-state="waiting"]:hover { transform: translateX(0.5rem) translateY(-1px); } .strip[aria-current="true"] { background: color-mix(in oklab, var(--strip) 85%, var(--primary) 15%); } .strip[data-state="closed"] { color: var(--muted-foreground); } .strip-open { display: block; padding: 0.25rem 0.875rem 0.875rem 3rem; background: var(--strip); border-bottom: 1px solid var(--border); } .strip-open:last-child { border-bottom: 0; border-bottom-right-radius: var(--radius-md); border-bottom-left-radius: var(--radius-md); } .bay { display: flex; flex-direction: column; gap: 0.5rem; } .bay-rack { background: color-mix(in oklab, var(--rack) 70%, var(--strip) 30%); border: 1px solid var(--border); border-radius: calc(var(--radius-md) + 1px); box-shadow: inset 0 1px 0 color-mix(in oklab, var(--foreground) 4%, transparent); } .island { display: inline-flex; gap: 0.625rem; align-items: center; height: 2.125rem; padding: 0 0.875rem 0 0.75rem; font-size: var(--text-sm); color: var(--foreground); white-space: nowrap; background: var(--strip); border: 1px solid var(--border); border-radius: 999px; box-shadow: 0 1px 2px oklch(0.2 0.06 340 / 0.06); transition: transform 220ms cubic-bezier(0.2, 0.9, 0.25, 1.1), box-shadow 220ms ease-out, background-color 150ms ease-out; } .island:hover, .island[aria-expanded="true"] { box-shadow: var(--shadow-lift); transform: scale(1.02); } .island-sep { width: 1px; height: 1rem; background: var(--border); } .doc { max-width: 78ch; } } @keyframes pulse-edge { 0%, 100% { opacity: 1; } 50% { opacity: 0.35; } } @layer components { .strip-child { padding-left: 1.75rem; } .strip-child::before { left: 1.125rem; } }