/* ===========================================================================
 * Open King — unified module (chat + bridges + automations)
 * ===========================================================================
 * Designed for execs: dense info, big tap targets, no jargon. Mobile reflow
 * at the standard --bp-mobile (768px) breakpoint.
 *
 * Layout layers:
 *   #openking-view                — page root
 *     .openking-header            — title + tagline
 *     .openking-tabs              — tab strip (Chat / Automations / Bridges)
 *     .openking-tab-body          — flex column container
 *       .openking-pane[data-pane] — one per tab; only active is visible
 *
 * The Bridges/Automations panes inherit styling from their existing CSS files
 * — we just give them a host pane with the right padding-reset.
 */

#openking-view {
    /* Give the view some breathing room from the global sidebar —
       without this, the header / tabs / panes all glue to the very
       left edge of the viewport and the rail edges run into the
       sidebar border. Match the right side too so the header doesn't
       look optically off-center. */
    padding: 0 20px 0 24px;
    background: var(--bg-body);
    overflow-y: auto;
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    min-height: 0;
}

/* Header already had its own horizontal padding (28/32) — reset it so
   the new container padding doesn't double up. The vertical padding
   still applies. */
#openking-view .openking-header {
    padding-left: 0;
    padding-right: 0;
}

.openking-header {
    padding: 28px 32px 16px 32px;
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 16px;
    /* Subtle accent-tinted gradient — gives the view a branded feel
     * matching the Kinguin orange accent without a hard banner. */
    background: linear-gradient(180deg, rgba(243, 123, 32, 0.04), transparent);
}

.openking-header h1 {
    margin: 0;
    font-size: 1.6rem;
    font-weight: 600;
    display: flex;
    align-items: center;
    gap: 10px;
    letter-spacing: -0.01em;
}

.openking-subtitle {
    color: var(--text-secondary);
    margin-top: 6px;
    font-size: 0.9rem;
    max-width: none;
    line-height: 1.5;
}

/* ============== Tab strip ========================================= */

.openking-tabs {
    display: flex;
    gap: 4px;
    padding: 0 32px;
    border-bottom: 1px solid var(--border-color);
    overflow-x: auto;
    scrollbar-width: none;
}

.openking-tabs::-webkit-scrollbar { display: none; }

.openking-tab {
    position: relative;
    background: transparent;
    border: none;
    padding: 14px 18px 12px 18px;
    color: var(--text-muted);
    font-size: 0.9rem;
    font-weight: 500;
    cursor: pointer;
    display: flex;
    align-items: center;
    gap: 8px;
    transition: color 0.18s ease, background 0.18s ease;
    white-space: nowrap;
    border-radius: 8px 8px 0 0;
}

/* Animated underline — slides in from center when hovering or active,
 * matches modern tabbed surfaces (Linear / Notion / Slack). */
.openking-tab::after {
    content: '';
    position: absolute;
    left: 50%;
    bottom: -1px;
    width: 0;
    height: 2px;
    background: var(--accent-color, #f37b20);
    transition: width 0.22s ease, left 0.22s ease;
    border-radius: 2px;
}

.openking-tab:hover {
    color: var(--text-primary);
    background: var(--bg-surface-hover);
}

.openking-tab.active {
    color: var(--accent-color, #f37b20);
    font-weight: 600;
}

.openking-tab.active::after {
    width: calc(100% - 28px);
    left: 14px;
}

.openking-tab-icon {
    font-size: 1rem;
    line-height: 1;
}

.openking-tab-badge {
    background: var(--accent-color, #f37b20);
    color: #fff;
    font-size: 0.7rem;
    font-weight: 600;
    padding: 1px 7px;
    border-radius: 100px;
    margin-left: 6px;
    line-height: 1.4;
    min-width: 18px;
    text-align: center;
}

/* ============== Tab body ========================================== */

.openking-tab-body {
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.openking-pane {
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.openking-pane[hidden] {
    display: none;
}

/* The Bridges/Automations/Skills sub-views are mounted directly into the
 * pane (no inner #bridges-view / #automations-view / #skills-manager-view
 * wrapper). Their stylesheets have been extended to also match
 * `.openking-pane[data-pane="..."]` so layout/padding apply identically
 * whether the view is opened standalone or as an Open King tab. */

.openking-pane[data-pane="skills"] {
    padding: 16px 32px 24px 32px;
}

/* CredentialsView already paints its own padding via inline styles in
 * the view-header / view-content blocks — keep the pane as a plain
 * scroll container so the standalone view's layout stays untouched. */
.openking-pane[data-pane="credentials"] {
    overflow-y: auto;
}

/* ============== Chat pane ========================================= */

.openking-chat {
    flex: 1;
    display: flex;
    flex-direction: column;
    min-height: 0;
    padding: 16px 32px 24px 32px;
}

.openking-chat-toolbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-bottom: 12px;
    flex-wrap: wrap;
}

.openking-chat-status {
    font-size: 0.85rem;
    color: var(--text-secondary);
    flex: 1;
    min-width: 80px;
}

.openking-chat-model-hint {
    font-size: 0.72rem;
    opacity: 0.55;
    margin-left: 4px;
}

.openking-chat-model-wrap {
    position: relative;
    display: inline-block;
}

.openking-chat-model-trigger {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    padding: 6px 12px;
    border-radius: 10px;
    background: var(--bg-surface);
    border: 1px solid var(--border-color);
    color: var(--text-primary);
    cursor: pointer;
    transition: border-color 0.15s, background 0.15s;
    min-width: 180px;
    text-align: left;
}

.openking-chat-model-trigger:hover {
    border-color: var(--accent-color, #F37B20);
    background: var(--bg-elevated, var(--bg-surface));
}

.openking-chat-model-trigger-label {
    display: flex;
    flex-direction: column;
    gap: 1px;
    flex: 1;
    min-width: 0;
}

.openking-chat-model-trigger-main {
    font-size: 0.85rem;
    font-weight: 600;
    color: var(--text-primary);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.openking-chat-model-trigger-sub {
    font-size: 0.7rem;
    color: var(--text-secondary);
    opacity: 0.8;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.openking-chat-model-chevron {
    font-size: 0.65rem;
    opacity: 0.55;
    transition: transform 0.15s;
}

.openking-chat-model-trigger[aria-expanded="true"] .openking-chat-model-chevron {
    transform: rotate(180deg);
}

.openking-chat-model-dropdown {
    position: absolute;
    top: calc(100% + 6px);
    right: 0;
    min-width: 280px;
    max-height: 360px;
    overflow-y: auto;
    background: var(--bg-elevated, var(--bg-surface));
    border: 1px solid var(--border-color);
    border-radius: 12px;
    padding: 6px;
    z-index: 20;
    display: flex;
    flex-direction: column;
    gap: 2px;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.35);
    animation: openking-dropdown-fade 0.12s ease-out;
}

.openking-chat-model-dropdown.hidden {
    display: none;
}

.openking-chat-model-dropdown .model-option {
    display: block;
    width: 100%;
    text-align: left;
    background: transparent;
    border: 0;
    border-radius: 8px;
    padding: 8px 10px;
    color: var(--text-primary);
    cursor: pointer;
    transition: background 0.12s;
}

.openking-chat-model-dropdown .model-option:hover {
    background: var(--bg-surface);
}

.openking-chat-model-dropdown .model-option.active {
    background: rgba(243, 123, 32, 0.12);
}

.openking-chat-model-dropdown .model-name {
    font-size: 0.86rem;
    font-weight: 600;
    margin-bottom: 2px;
    display: flex;
    align-items: center;
    gap: 6px;
}

.openking-chat-model-dropdown .model-desc {
    font-size: 0.72rem;
    color: var(--text-secondary);
    opacity: 0.8;
    line-height: 1.3;
}

.openking-model-default-badge {
    font-size: 0.6rem;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    padding: 1px 6px;
    border-radius: 999px;
    background: rgba(243, 123, 32, 0.15);
    color: var(--accent-color, #F37B20);
    font-weight: 700;
}

@keyframes openking-dropdown-fade {
    from { opacity: 0; transform: translateY(-4px); }
    to { opacity: 1; transform: translateY(0); }
}

.openking-new-session {
    font-size: 0.85rem;
    padding: 6px 12px;
    border-radius: 8px;
}

.openking-chat-stream {
    flex: 1;
    min-height: 320px;
    max-height: calc(100vh - 360px);
    overflow-y: auto;
    background: var(--bg-surface);
    border: 1px solid var(--border-color);
    border-radius: 14px;
    padding: 16px;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.openking-chat-empty {
    text-align: center;
    color: var(--text-secondary);
    padding: 56px 16px 32px 16px;
    max-width: 640px;
    margin: 0 auto;
    display: flex;
    flex-direction: column;
    align-items: center;
}

.openking-chat-empty > div:nth-child(2) {
    font-size: 1.05rem;
    color: var(--text-primary);
    font-weight: 500;
    margin-bottom: 6px;
}

.openking-chat-empty-icon {
    font-size: 3.6rem;
    margin-bottom: 18px;
    filter: drop-shadow(0 4px 12px rgba(243, 123, 32, 0.25));
    /* Gentle floating animation — adds polish without being distracting. */
    animation: openking-crown-float 4s ease-in-out infinite;
}

@keyframes openking-crown-float {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-4px); }
}

.openking-chat-suggestions {
    display: grid;
    grid-template-columns: 1fr;
    gap: 8px;
    margin-top: 24px;
    align-items: stretch;
    width: 100%;
}

.openking-suggestion {
    position: relative;
    background: var(--bg-surface-hover);
    border: 1px solid var(--border-color);
    border-radius: 12px;
    padding: 14px 18px 14px 44px;
    color: var(--text-primary);
    cursor: pointer;
    font-size: 0.88rem;
    text-align: left;
    transition: all 0.18s ease;
    line-height: 1.5;
}

/* Sparkle icon stamp — implies "AI-suggested" without using an actual image */
.openking-suggestion::before {
    content: '✨';
    position: absolute;
    left: 14px;
    top: 50%;
    transform: translateY(-50%);
    font-size: 1rem;
    opacity: 0.7;
    transition: opacity 0.18s;
}

.openking-suggestion:hover {
    border-color: var(--accent-color, #f37b20);
    background: var(--bg-surface);
    transform: translateX(2px);
    box-shadow: 0 4px 16px -6px rgba(243, 123, 32, 0.25);
}

.openking-suggestion:hover::before {
    opacity: 1;
}

.openking-quick-link {
    display: inline-block;
    background: rgba(243, 123, 32, 0.10);
    border: 1px solid rgba(243, 123, 32, 0.35);
    color: var(--accent-color, #f37b20);
    padding: 8px 14px;
    border-radius: 100px;
    cursor: pointer;
    font-size: 0.85rem;
    margin: 12px auto 0;
    transition: all 0.15s;
}

.openking-quick-link:hover {
    background: rgba(243, 123, 32, 0.18);
}

.openking-chat-msg {
    max-width: 78%;
    padding: 12px 16px;
    border-radius: 16px;
    font-size: 0.92rem;
    line-height: 1.55;
    word-wrap: break-word;
    /* Subtle entrance — slides up on first render. Skipped on
     * repeat re-renders (CSS animation only plays once per element). */
    animation: openking-msg-in 0.22s ease-out;
}

@keyframes openking-msg-in {
    from { opacity: 0; transform: translateY(4px); }
    to { opacity: 1; transform: translateY(0); }
}

.openking-chat-msg.user {
    align-self: flex-end;
    background: linear-gradient(135deg, var(--accent-color, #f37b20), #e8691a);
    color: #fff;
    border-bottom-right-radius: 6px;
    box-shadow: 0 2px 12px -4px rgba(243, 123, 32, 0.35);
}

.openking-chat-msg.assistant {
    align-self: flex-start;
    background: var(--bg-surface);
    color: var(--text-primary);
    border: 1px solid var(--border-color);
    border-bottom-left-radius: 6px;
}

.openking-chat-msg.tool {
    align-self: center;
    background: rgba(80, 220, 130, 0.08);
    border: 1px solid rgba(80, 220, 130, 0.25);
    color: var(--text-secondary);
    font-size: 0.8rem;
    max-width: 95%;
    padding: 6px 14px;
    border-radius: 100px;
    animation: openking-tool-pop 0.25s ease-out;
}

@keyframes openking-tool-pop {
    from { opacity: 0; transform: scale(0.92); }
    to { opacity: 1; transform: scale(1); }
}

.openking-chat-tool {
    display: flex;
    align-items: center;
    gap: 6px;
}

.openking-chat-tool-icon {
    flex-shrink: 0;
}

.openking-chat-tool .ok { color: #80e7a3; font-weight: 600; }
.openking-chat-tool .fail { color: #ff8d9d; font-weight: 600; }

.openking-chat-text {
    white-space: pre-wrap;
}

/* Typing indicator — three pulsing dots while the assistant bubble is
 * still empty. Mirrors the "agent is thinking" affordance from chat
 * platforms; mainly to fill the dead time when a tool call is mid-flight. */
.openking-chat-typing {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 4px 0;
}

.openking-chat-typing span {
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--text-secondary);
    opacity: 0.5;
    animation: openking-typing-bounce 1.2s ease-in-out infinite;
}

.openking-chat-typing span:nth-child(2) { animation-delay: 0.15s; }
.openking-chat-typing span:nth-child(3) { animation-delay: 0.30s; }

@keyframes openking-typing-bounce {
    0%, 80%, 100% { transform: translateY(0); opacity: 0.4; }
    40% { transform: translateY(-4px); opacity: 1; }
}

/* ============== Input ============================================= */

.openking-chat-input {
    display: flex;
    gap: 8px;
    margin-top: 12px;
    /* Stretch — send button takes the textarea's full height so they
     * stay visually aligned even when the user resizes the textarea
     * or its content grows. */
    align-items: stretch;
}

.openking-chat-textarea {
    flex: 1;
    min-height: 48px;
    max-height: 200px;
    background: var(--bg-surface);
    border: 1px solid var(--border-color);
    border-radius: 12px;
    padding: 12px 14px;
    color: var(--text-primary);
    font-family: inherit;
    font-size: 0.92rem;
    resize: vertical;
    line-height: 1.4;
    box-sizing: border-box;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

.openking-chat-textarea:focus {
    outline: none;
    border-color: var(--accent-color, #f37b20);
    box-shadow: 0 0 0 3px rgba(243, 123, 32, 0.12);
}

.openking-chat-send {
    /* Match textarea: same padding rhythm, no fixed height — stretch
     * from the flex container picks up the textarea's height. */
    padding: 0 24px;
    border-radius: 12px;
    font-weight: 600;
    flex-shrink: 0;
    box-sizing: border-box;
    min-height: 48px;
    align-self: stretch;
}

.openking-chat-send:disabled {
    opacity: 0.5;
    cursor: not-allowed;
}

/* ============== Status pane ======================================= */

.openking-status {
    padding: 16px 32px 24px 32px;
    flex: 1;
    overflow-y: auto;
}

.openking-status-loading,
.openking-status-error {
    padding: 40px 32px;
    text-align: center;
    color: var(--text-secondary);
}

.openking-status-error {
    color: #ff8d9d;
}

.openking-status-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 12px;
    margin-bottom: 24px;
}

.openking-stat-card {
    position: relative;
    background: var(--bg-surface);
    border: 1px solid var(--border-color);
    border-radius: 14px;
    padding: 18px 20px;
    display: flex;
    flex-direction: column;
    gap: 8px;
    overflow: hidden;
    transition: transform 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease;
}

/* Subtle accent stripe on the left edge — modern dashboard feel.
 * Tinted per status; default = accent orange. */
.openking-stat-card::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 3px;
    background: var(--accent-color, #f37b20);
    opacity: 0.7;
}

.openking-stat-card:hover {
    transform: translateY(-1px);
    border-color: var(--border-light);
    box-shadow: 0 8px 24px -12px rgba(0, 0, 0, 0.4);
}

.openking-stat-card.status-ok { border-color: rgba(80, 220, 130, 0.35); }
.openking-stat-card.status-ok::before { background: #80e7a3; }
.openking-stat-card.status-warn { border-color: rgba(255, 180, 84, 0.4); }
.openking-stat-card.status-warn::before { background: #ffc97a; }
.openking-stat-card.status-bad { border-color: rgba(255, 92, 122, 0.5); }
.openking-stat-card.status-bad::before { background: #ff8d9d; }

.openking-stat-label {
    font-size: 0.72rem;
    color: var(--text-muted);
    text-transform: uppercase;
    letter-spacing: 0.06em;
    font-weight: 600;
}

.openking-stat-value {
    font-size: 2rem;
    font-weight: 700;
    color: var(--text-primary);
    line-height: 1.05;
    display: flex;
    align-items: baseline;
    gap: 6px;
    font-variant-numeric: tabular-nums;
    letter-spacing: -0.02em;
}

.openking-stat-value.openking-stat-text {
    font-size: 1rem;
    font-weight: 600;
    line-height: 1.4;
    letter-spacing: 0;
}

.openking-stat-sub {
    font-size: 1rem;
    color: var(--text-muted);
    font-weight: 400;
}

.openking-stat-foot {
    font-size: 0.76rem;
    color: var(--text-muted);
    margin-top: auto;
}

.openking-status-section h3 {
    margin: 0;
    font-size: 0.95rem;
    color: var(--text-primary);
}

.openking-status-section-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 12px;
}

.openking-status-refresh-tag {
    font-size: 0.72rem;
    color: var(--text-secondary);
    background: var(--bg-surface-hover);
    padding: 3px 10px;
    border-radius: 100px;
    border: 1px solid var(--border-color);
}

.openking-feed {
    background: var(--bg-surface);
    border: 1px solid var(--border-color);
    border-radius: 14px;
    overflow: hidden;
}

.openking-feed-row {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 14px;
    border-bottom: 1px solid var(--border-color);
    font-size: 0.86rem;
}

.openking-feed-row:last-child { border-bottom: none; }

.openking-feed-emoji { flex-shrink: 0; }
.openking-feed-src { font-size: 0.78rem; color: var(--text-secondary); flex-shrink: 0; }
.openking-feed-name {
    flex: 1;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: var(--text-primary);
}
.openking-feed-time, .openking-feed-dur {
    font-size: 0.78rem;
    color: var(--text-secondary);
    flex-shrink: 0;
}

.openking-feed-empty {
    padding: 28px;
    text-align: center;
    color: var(--text-secondary);
    background: var(--bg-surface);
    border: 1px solid var(--border-color);
    border-radius: 14px;
}

/* ============== Inbox pane ======================================== */

.openking-inbox {
    padding: 16px 32px 24px 32px;
    flex: 1;
    overflow-y: auto;
}

.openking-inbox-header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 12px;
}

.openking-inbox-header h3 {
    margin: 0;
    font-size: 1.1rem;
    color: var(--text-primary);
}

.openking-inbox-sub {
    color: var(--text-secondary);
    margin: 4px 0 0 0;
    font-size: 0.85rem;
    max-width: 720px;
}

.openking-inbox-actions {
    display: flex;
    gap: 8px;
    align-items: center;
    flex-wrap: wrap;
}

.openking-inbox-actions select.category-filter,
.openking-inbox-actions .openking-inbox-search-input,
.openking-inbox-actions > button {
    /* Uniform pill height across the entire toolbar — without this,
     * different elements take different heights (select arrow zone +
     * native button quirks) and the row looks ragged. */
    height: 36px;
    box-sizing: border-box;
    background: var(--bg-surface);
    border: 1px solid var(--border-color);
    border-radius: 10px;
    padding: 0 12px;
    color: var(--text-primary);
    font-size: 0.85rem;
    white-space: nowrap;
    line-height: 1;
    display: inline-flex;
    align-items: center;
}

.openking-inbox-actions > button {
    cursor: pointer;
    transition: all 0.15s;
}

.openking-inbox-actions > button:hover {
    background: var(--bg-surface-hover);
    border-color: var(--accent-color, #f37b20);
    color: var(--text-primary);
}

.openking-inbox-search-input {
    min-width: 220px;
    flex: 1;
    max-width: 360px;
}

.openking-inbox-list {
    background: var(--bg-surface);
    border: 1px solid var(--border-color);
    border-radius: 14px;
    overflow: hidden;
}

.openking-inbox-row {
    padding: 14px 18px;
    border-bottom: 1px solid var(--border-color);
    cursor: pointer;
    transition: background 0.15s ease, padding-left 0.15s ease;
    position: relative;
}

.openking-inbox-row:last-child { border-bottom: none; }
.openking-inbox-row:hover {
    background: var(--bg-surface-hover);
    padding-left: 22px;
}
.openking-inbox-row.expanded {
    background: var(--bg-surface-hover);
    padding-left: 22px;
}

/* Status-coloured left edge — at-a-glance scan of success vs failure
 * down the feed, matching the stat-card stripe pattern. */
.openking-inbox-row::before {
    content: '';
    position: absolute;
    left: 0;
    top: 50%;
    bottom: 50%;
    width: 3px;
    background: var(--accent-color, #f37b20);
    opacity: 0;
    transition: all 0.15s ease;
}

.openking-inbox-row:hover::before,
.openking-inbox-row.expanded::before {
    opacity: 0.6;
    top: 12px;
    bottom: 12px;
}

.openking-inbox-row.status-failed:hover::before,
.openking-inbox-row.status-failed.expanded::before,
.openking-inbox-row.status-timeout:hover::before,
.openking-inbox-row.status-timeout.expanded::before {
    background: #ff8d9d;
}

.openking-inbox-row.status-ok:hover::before,
.openking-inbox-row.status-ok.expanded::before {
    background: #80e7a3;
}

.openking-inbox-row.highlight-flash {
    animation: openking-row-flash 2.2s ease-out;
}

@keyframes openking-row-flash {
    0%   { background: rgba(243, 123, 32, 0.35); }
    40%  { background: rgba(243, 123, 32, 0.15); }
    100% { background: var(--bg-surface-hover); }
}

.openking-inbox-row-head {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 4px;
}

.openking-inbox-emoji {
    flex-shrink: 0;
}

.openking-inbox-name {
    flex: 1;
    min-width: 0;
    font-weight: 600;
    color: var(--text-primary);
    font-size: 0.92rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.openking-inbox-meta {
    flex-shrink: 0;
    font-size: 0.78rem;
    color: var(--text-secondary);
}

.openking-inbox-preview {
    color: var(--text-secondary);
    font-size: 0.85rem;
    line-height: 1.45;
    margin-left: 24px;
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
}

.openking-inbox-row.status-failed .openking-inbox-preview,
.openking-inbox-row.status-timeout .openking-inbox-preview {
    color: #ff8d9d;
}

.openking-inbox-err {
    color: #ff8d9d;
}

.openking-inbox-detail {
    display: none;
    margin-top: 12px;
    padding-top: 12px;
    border-top: 1px solid var(--border-color);
}

.openking-inbox-row.expanded .openking-inbox-detail {
    display: block;
}

.openking-inbox-detail-meta {
    display: flex;
    gap: 16px;
    flex-wrap: wrap;
    align-items: center;
    margin-bottom: 12px;
    font-size: 0.78rem;
    color: var(--text-secondary);
}

.openking-inbox-jump {
    background: transparent;
    border: 1px solid var(--border-color);
    color: var(--accent-color, #f37b20);
    padding: 4px 10px;
    border-radius: 6px;
    cursor: pointer;
    font-size: 0.78rem;
    margin-left: auto;
}

.openking-inbox-jump:hover {
    background: rgba(243, 123, 32, 0.08);
}

.openking-inbox-section {
    margin-bottom: 10px;
}

.openking-inbox-section-label {
    font-size: 0.75rem;
    color: var(--text-tertiary, #8d92a8);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    margin-bottom: 4px;
}

.openking-inbox-section pre {
    background: var(--bg-body);
    padding: 10px 12px;
    border-radius: 6px;
    border: 1px solid var(--border-color);
    white-space: pre-wrap;
    word-wrap: break-word;
    font-size: 0.85rem;
    line-height: 1.55;
    margin: 0;
    max-height: 400px;
    overflow-y: auto;
}

.openking-inbox-response {
    color: var(--text-primary);
}

.openking-inbox-empty {
    padding: 60px 20px;
    text-align: center;
    color: var(--text-secondary);
    font-size: 0.9rem;
}

.openking-inbox-empty-icon {
    font-size: 2.4rem;
    margin-bottom: 12px;
}

.openking-inbox-pagination {
    margin-top: 12px;
    display: flex;
    justify-content: center;
}

.openking-inbox-pagination button {
    padding: 8px 24px;
    border-radius: 100px;
}

/* ============== Memory pane ======================================= */

.openking-memory {
    padding: 16px 32px 24px 32px;
    flex: 1;
    overflow-y: auto;
}

.openking-memory-header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 12px;
}

.openking-memory-header h3 {
    margin: 0;
    font-size: 1.1rem;
    color: var(--text-primary);
}

.openking-memory-sub {
    color: var(--text-secondary);
    margin: 4px 0 0 0;
    font-size: 0.85rem;
    max-width: 640px;
}

.openking-memory-toolbar {
    display: flex;
    gap: 12px;
    margin-bottom: 16px;
}

.openking-memory-toolbar input.search-input {
    flex: 1;
    background: var(--bg-surface);
    border: 1px solid var(--border-color);
    border-radius: 10px;
    padding: 10px 14px;
    color: var(--text-primary);
    font-size: 0.9rem;
}

.openking-memory-toolbar select.category-filter {
    min-width: 180px;
    background: var(--bg-surface);
    border: 1px solid var(--border-color);
    border-radius: 10px;
    padding: 10px 14px;
    color: var(--text-primary);
    font-size: 0.9rem;
    cursor: pointer;
}

.openking-memory-list {
    background: var(--bg-surface);
    border: 1px solid var(--border-color);
    border-radius: 14px;
    overflow: hidden;
}

.openking-memory-row {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding: 14px 16px;
    border-bottom: 1px solid var(--border-color);
    transition: background 0.15s ease;
    position: relative;
}

.openking-memory-row:last-child { border-bottom: none; }
.openking-memory-row:hover { background: var(--bg-surface-hover); }

.openking-memory-row.pinned {
    background: linear-gradient(90deg, rgba(243, 123, 32, 0.05), transparent 60%);
}

.openking-memory-row.pinned::before {
    content: '';
    position: absolute;
    left: 0;
    top: 14px;
    bottom: 14px;
    width: 3px;
    background: var(--accent-color, #f37b20);
    border-radius: 0 2px 2px 0;
    opacity: 0.7;
}

.openking-memory-pin {
    background: transparent;
    border: 1px solid transparent;
    border-radius: 8px;
    width: 32px;
    height: 32px;
    cursor: pointer;
    color: var(--text-muted);
    font-size: 1rem;
    flex-shrink: 0;
    transition: all 0.15s ease;
}

.openking-memory-pin:hover {
    background: var(--bg-surface-hover);
    border-color: var(--border-color);
    transform: scale(1.08);
}

.openking-memory-row.pinned .openking-memory-pin {
    color: var(--accent-color, #f37b20);
    transform: rotate(-12deg);
}

.openking-memory-text {
    flex: 1;
    min-width: 0;
}

.openking-memory-fact {
    color: var(--text-primary);
    font-size: 0.9rem;
    line-height: 1.45;
    word-wrap: break-word;
}

.openking-memory-meta {
    color: var(--text-secondary);
    font-size: 0.75rem;
    margin-top: 4px;
}

.openking-memory-actions {
    display: flex;
    gap: 4px;
    flex-shrink: 0;
}

.openking-memory-actions button {
    background: transparent;
    border: 1px solid transparent;
    color: var(--text-secondary);
    padding: 4px 8px;
    border-radius: 6px;
    cursor: pointer;
    font-size: 0.85rem;
    transition: all 0.12s;
}

.openking-memory-actions button:hover {
    background: var(--bg-surface-hover);
    border-color: var(--border-color);
    color: var(--text-primary);
}

.openking-memory-empty {
    padding: 40px 20px;
    text-align: center;
    color: var(--text-secondary);
    font-size: 0.9rem;
}

.openking-memory-empty-icon {
    font-size: 2.4rem;
    margin-bottom: 12px;
}

/* ============== Mobile (≤768px) =================================== */

@media (max-width: 768px) {
    .openking-header {
        padding: 16px 12px 8px 12px;
    }

    .openking-header h1 {
        font-size: 1.25rem;
    }

    .openking-subtitle {
        font-size: 0.85rem;
    }

    .openking-tabs {
        padding: 0 12px;
    }

    .openking-tab {
        padding: 10px 14px;
        font-size: 0.88rem;
        min-height: 44px;
    }

    /* Mobile padding for bridges/automations panes — bridges.css and
     * automations.css cover their root selectors; this is just defensive. */

    .openking-chat {
        padding: 12px 12px 16px 12px;
    }

    .openking-chat-stream {
        max-height: calc(100vh - 320px);
        padding: 12px;
    }

    .openking-chat-msg {
        max-width: 92%;
        font-size: 0.88rem;
    }

    .openking-chat-input {
        gap: 6px;
    }

    .openking-chat-send {
        padding: 10px 14px;
        min-width: 64px;
    }

    .openking-status {
        padding: 12px 12px 16px 12px;
    }

    .openking-status-grid {
        grid-template-columns: 1fr 1fr;
        gap: 8px;
    }

    .openking-stat-card {
        padding: 12px;
    }

    .openking-stat-value {
        font-size: 1.4rem;
    }

    .openking-feed-row {
        flex-wrap: wrap;
        font-size: 0.82rem;
    }

    .openking-feed-time, .openking-feed-dur {
        font-size: 0.72rem;
    }

    .openking-memory {
        padding: 12px 12px 16px 12px;
    }

    .openking-memory-header {
        flex-direction: column;
        align-items: stretch;
    }

    .openking-memory-toolbar {
        flex-direction: column;
        gap: 8px;
    }

    .openking-memory-toolbar select {
        min-width: 0;
    }

    .openking-memory-row {
        padding: 10px 12px;
    }

    .openking-memory-pin,
    .openking-memory-actions button {
        min-width: 36px;
        min-height: 36px;
    }

    .openking-inbox {
        padding: 12px 12px 16px 12px;
    }

    .openking-inbox-header {
        flex-direction: column;
        align-items: stretch;
    }

    .openking-inbox-actions {
        flex-wrap: wrap;
    }

    .openking-inbox-row-head {
        flex-wrap: wrap;
    }

    .openking-inbox-meta {
        font-size: 0.72rem;
    }

    .openking-inbox-preview {
        margin-left: 0;
        margin-top: 4px;
    }

    .openking-inbox-detail-meta {
        gap: 8px;
    }

    .openking-inbox-jump {
        margin-left: 0;
        margin-top: 6px;
    }
}

/* ------------------------------------------------------------------ */
/* History — past Open King chat sessions                              */
/* ------------------------------------------------------------------ */

.openking-history {
    max-width: 1080px;
    margin: 0 auto;
    width: 100%;
    display: flex;
    flex-direction: column;
    gap: 18px;
    padding-top: 8px;
}

.openking-history-toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    justify-content: space-between;
    gap: 16px;
    padding-bottom: 14px;
    border-bottom: 1px solid var(--border-color);
}

.openking-history-titlebar {
    flex: 1;
    min-width: 260px;
}

.openking-history-titlebar h2 {
    margin: 0;
    font-size: 1.2rem;
    font-weight: 700;
    display: flex;
    align-items: center;
    gap: 8px;
}

.openking-history-sub {
    margin: 6px 0 0;
    font-size: 0.82rem;
    color: var(--text-secondary);
    opacity: 0.78;
    max-width: 600px;
    line-height: 1.45;
}

.openking-history-toolbar-actions {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-shrink: 0;
}

.openking-history-search {
    background: var(--bg-surface);
    border: 1px solid var(--border-color);
    border-radius: 10px;
    padding: 8px 12px;
    font-size: 0.85rem;
    color: var(--text-primary);
    width: 220px;
    transition: border-color 0.12s, box-shadow 0.12s;
}

.openking-history-search:focus {
    outline: none;
    border-color: var(--accent-color, #F37B20);
    box-shadow: 0 0 0 3px rgba(243, 123, 32, 0.15);
}

.openking-history-search::placeholder {
    color: var(--text-secondary);
    opacity: 0.55;
}

.openking-history-refresh {
    background: var(--bg-surface);
    border: 1px solid var(--border-color);
    border-radius: 10px;
    color: var(--text-primary);
    cursor: pointer;
    font-size: 1.05rem;
    padding: 7px 12px;
    transition: border-color 0.12s, background 0.12s;
}

.openking-history-refresh:hover {
    border-color: var(--accent-color, #F37B20);
    background: var(--bg-elevated, var(--bg-surface));
}

.openking-history-list {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.openking-history-row {
    background: var(--bg-surface);
    border: 1px solid var(--border-color);
    border-radius: 14px;
    padding: 14px 16px;
    display: grid;
    grid-template-columns: 44px 1fr auto;
    gap: 14px;
    align-items: center;
    transition: border-color 0.15s, background 0.15s, transform 0.15s;
}

.openking-history-row:hover {
    border-color: rgba(243, 123, 32, 0.55);
    background: var(--bg-elevated, var(--bg-surface));
    transform: translateY(-1px);
}

.openking-history-avatar {
    width: 44px;
    height: 44px;
    border-radius: 12px;
    background: linear-gradient(135deg, rgba(243, 123, 32, 0.18), rgba(157, 127, 255, 0.18));
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.3rem;
    flex-shrink: 0;
    border: 1px solid var(--border-color);
}

.openking-history-body {
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.openking-history-row-title {
    font-size: 0.95rem;
    font-weight: 600;
    color: var(--text-primary);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.openking-history-row-preview {
    font-size: 0.8rem;
    color: var(--text-secondary);
    opacity: 0.78;
    line-height: 1.4;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.openking-history-row-empty {
    font-style: italic;
    opacity: 0.6;
}

.openking-history-row-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    align-items: center;
    margin-top: 4px;
}

.openking-history-pill {
    font-size: 0.68rem;
    background: rgba(255, 255, 255, 0.05);
    border: 1px solid var(--border-color);
    padding: 2px 8px;
    border-radius: 999px;
    color: var(--text-secondary);
    white-space: nowrap;
    text-transform: lowercase;
    letter-spacing: 0.02em;
}

.openking-history-pill-model {
    background: rgba(243, 123, 32, 0.10);
    border-color: rgba(243, 123, 32, 0.30);
    color: var(--accent-color, #F37B20);
}

.openking-history-row-time {
    font-size: 0.7rem;
    color: var(--text-secondary);
    opacity: 0.6;
    margin-left: auto;
}

.openking-history-row-actions {
    display: flex;
    gap: 6px;
    flex-shrink: 0;
}

.openking-history-row-actions button {
    border: 1px solid var(--border-color);
    background: transparent;
    color: var(--text-primary);
    font-size: 0.78rem;
    font-weight: 500;
    padding: 7px 14px;
    border-radius: 9px;
    cursor: pointer;
    transition: background 0.12s, border-color 0.12s, color 0.12s;
    white-space: nowrap;
}

.openking-history-row-actions button:hover {
    background: var(--bg-elevated, rgba(255,255,255,0.04));
    border-color: var(--text-secondary);
}

.openking-history-row-actions .openking-history-resume {
    background: var(--accent-color, #F37B20);
    color: #fff;
    border-color: transparent;
    font-weight: 600;
}

.openking-history-row-actions .openking-history-resume:hover {
    filter: brightness(1.1);
}

.openking-history-empty,
.openking-history-loading,
.openking-history-error,
.openking-history-noresults {
    padding: 56px 32px;
    text-align: center;
    color: var(--text-secondary);
    background: var(--bg-surface);
    border: 1px dashed var(--border-color);
    border-radius: 14px;
}

.openking-history-error {
    color: #ff8b8b;
    border-style: solid;
}

.openking-history-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
}

.openking-history-empty-icon {
    font-size: 3rem;
    margin-bottom: 8px;
    opacity: 0.85;
}

.openking-history-empty-title {
    font-size: 1.1rem;
    font-weight: 700;
    color: var(--text-primary);
    margin: 0;
}

.openking-history-empty-body {
    font-size: 0.88rem;
    line-height: 1.5;
    max-width: 420px;
    opacity: 0.85;
    margin: 0;
}

.openking-history-empty-cta {
    margin-top: 10px;
    background: var(--accent-color, #F37B20);
    color: #fff;
    border: none;
    border-radius: 10px;
    font-size: 0.9rem;
    font-weight: 600;
    padding: 10px 22px;
    cursor: pointer;
    transition: filter 0.12s;
}

.openking-history-empty-cta:hover { filter: brightness(1.1); }

@media (max-width: 700px) {
    .openking-history-row {
        grid-template-columns: 36px 1fr;
        grid-template-rows: auto auto;
    }
    .openking-history-row-actions {
        grid-column: 1 / span 2;
        justify-content: flex-end;
        margin-top: 6px;
    }
    .openking-history-search {
        width: 100%;
    }
}

/* ------------------------------------------------------------------ */
/* Agents — user-owned sub-agents spawned by Open King                 */
/* ------------------------------------------------------------------ */

.openking-agents {
    max-width: 1080px;
    margin: 0 auto;
    width: 100%;
    display: flex;
    flex-direction: column;
    gap: 18px;
    padding-top: 8px;
}

.openking-agents-toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    justify-content: space-between;
    gap: 16px;
    padding-bottom: 14px;
    border-bottom: 1px solid var(--border-color);
}

.openking-agents-titlebar h2 {
    margin: 0;
    font-size: 1.2rem;
    font-weight: 700;
    display: flex;
    align-items: center;
    gap: 8px;
}

.openking-agents-sub {
    margin: 6px 0 0;
    font-size: 0.82rem;
    color: var(--text-secondary);
    opacity: 0.78;
    max-width: 660px;
    line-height: 1.45;
}

.openking-agents-refresh {
    background: var(--bg-surface);
    border: 1px solid var(--border-color);
    border-radius: 10px;
    color: var(--text-primary);
    cursor: pointer;
    font-size: 1.05rem;
    padding: 7px 12px;
    transition: border-color 0.12s, background 0.12s;
}

.openking-agents-refresh:hover {
    border-color: var(--accent-color, #F37B20);
}

.openking-agents-list {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.openking-agent-row {
    background: var(--bg-surface);
    border: 1px solid var(--border-color);
    border-radius: 14px;
    padding: 16px;
    display: grid;
    grid-template-columns: 52px 1fr auto;
    gap: 14px;
    align-items: start;
    transition: border-color 0.15s, background 0.15s, transform 0.15s;
}

.openking-agent-row:hover {
    border-color: rgba(243, 123, 32, 0.55);
    transform: translateY(-1px);
}

.openking-agent-avatar {
    width: 52px;
    height: 52px;
    border-radius: 14px;
    background: linear-gradient(135deg, rgba(157, 127, 255, 0.22), rgba(91, 168, 255, 0.22));
    border: 1px solid var(--border-color);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.6rem;
    flex-shrink: 0;
}

.openking-agent-body {
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.openking-agent-row-header {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
}

.openking-agent-name {
    font-size: 1rem;
    font-weight: 700;
    color: var(--text-primary);
}

.openking-agent-badge {
    font-size: 0.68rem;
    padding: 2px 8px;
    border-radius: 999px;
    font-weight: 600;
    letter-spacing: 0.02em;
}

.openking-agent-badge.wired {
    background: rgba(52, 211, 153, 0.15);
    color: #34d399;
    border: 1px solid rgba(52, 211, 153, 0.4);
}

.openking-agent-badge.unwired {
    background: rgba(148, 163, 184, 0.12);
    color: var(--text-secondary);
    border: 1px solid var(--border-color);
}

.openking-agent-pill {
    font-size: 0.68rem;
    background: rgba(243, 123, 32, 0.10);
    border: 1px solid rgba(243, 123, 32, 0.30);
    color: var(--accent-color, #F37B20);
    padding: 2px 8px;
    border-radius: 999px;
    text-transform: lowercase;
}

.openking-agent-time {
    margin-left: auto;
    font-size: 0.72rem;
    color: var(--text-secondary);
    opacity: 0.7;
}

.openking-agent-desc {
    font-size: 0.85rem;
    color: var(--text-primary);
    opacity: 0.95;
    line-height: 1.4;
}

.openking-agent-instructions {
    font-size: 0.76rem;
    color: var(--text-secondary);
    opacity: 0.75;
    line-height: 1.45;
    padding: 8px 10px;
    background: rgba(255,255,255,0.025);
    border-left: 3px solid var(--border-color);
    border-radius: 4px;
    font-style: italic;
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.openking-agent-meta {
    font-size: 0.72rem;
    color: var(--text-secondary);
    opacity: 0.6;
    display: flex;
    gap: 6px;
}

.openking-agent-actions {
    display: flex;
    flex-direction: column;
    gap: 6px;
    flex-shrink: 0;
}

.openking-agent-actions button {
    border: 1px solid var(--border-color);
    background: transparent;
    color: var(--text-primary);
    font-size: 0.78rem;
    font-weight: 500;
    padding: 6px 14px;
    border-radius: 8px;
    cursor: pointer;
    white-space: nowrap;
    transition: background 0.12s, border-color 0.12s, color 0.12s;
}

.openking-agent-actions .openking-agent-try {
    background: var(--accent-color, #F37B20);
    color: #fff;
    border-color: transparent;
    font-weight: 600;
}

.openking-agent-actions .openking-agent-try:hover { filter: brightness(1.1); }

.openking-agent-actions .openking-agent-delete:hover {
    border-color: #ef5a5a;
    color: #ef5a5a;
}

.openking-agents-empty,
.openking-agents-loading,
.openking-agents-error {
    padding: 56px 32px;
    text-align: center;
    color: var(--text-secondary);
    background: var(--bg-surface);
    border: 1px dashed var(--border-color);
    border-radius: 14px;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
}

.openking-agents-error { color: #ff8b8b; border-style: solid; }

.openking-agents-empty-icon { font-size: 3rem; opacity: 0.85; }
.openking-agents-empty-title { font-size: 1.1rem; font-weight: 700; color: var(--text-primary); }
.openking-agents-empty-body { font-size: 0.88rem; line-height: 1.5; max-width: 480px; opacity: 0.85; }
.openking-agents-empty-cta {
    margin-top: 10px;
    background: var(--accent-color, #F37B20);
    color: #fff;
    border: none;
    border-radius: 10px;
    font-size: 0.9rem;
    font-weight: 600;
    padding: 10px 22px;
    cursor: pointer;
}
.openking-agents-empty-cta:hover { filter: brightness(1.1); }

@media (max-width: 700px) {
    .openking-agent-row {
        grid-template-columns: 44px 1fr;
        grid-template-rows: auto auto;
    }
    .openking-agent-actions {
        grid-column: 1 / span 2;
        flex-direction: row;
        justify-content: flex-end;
    }
}

/* ------------------------------------------------------------------ */
/* Observability — 3D agent constellation                              */
/* ------------------------------------------------------------------ */

.openking-obs {
    display: grid;
    grid-template-columns: 280px 1fr;
    gap: 16px;
    height: calc(100vh - 280px);
    min-height: 460px;
}

.openking-obs-rail {
    display: flex;
    flex-direction: column;
    background: var(--bg-surface);
    border: 1px solid var(--border-color);
    border-radius: 14px;
    overflow: hidden;
}

.openking-obs-rail-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 12px 14px;
    border-bottom: 1px solid var(--border-color);
    font-size: 0.82rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--text-secondary);
}

.openking-obs-refresh {
    font-size: 0.95rem;
    padding: 2px 8px;
    border-radius: 6px;
}

.openking-obs-conv-list {
    flex: 1;
    overflow-y: auto;
    padding: 8px;
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.openking-obs-conv {
    background: transparent;
    border: 1px solid transparent;
    border-radius: 10px;
    padding: 10px 12px;
    text-align: left;
    cursor: pointer;
    color: var(--text-primary);
    display: flex;
    flex-direction: column;
    gap: 6px;
    transition: background 0.12s, border-color 0.12s;
}

.openking-obs-conv:hover {
    background: var(--bg-elevated, rgba(255,255,255,0.04));
    border-color: var(--border-color);
}

.openking-obs-conv.active {
    background: rgba(243, 123, 32, 0.10);
    border-color: rgba(243, 123, 32, 0.5);
}

.openking-obs-conv-top {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 0.86rem;
    font-weight: 600;
    overflow: hidden;
}

.openking-obs-conv-icon {
    font-size: 0.9rem;
    flex-shrink: 0;
}

.openking-obs-conv-label {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.openking-obs-conv-bottom {
    display: flex;
    justify-content: space-between;
    font-size: 0.7rem;
    color: var(--text-secondary);
    opacity: 0.85;
}

.openking-obs-kindchips {
    display: flex;
    gap: 3px;
    flex-wrap: wrap;
}

.openking-obs-kindchip {
    width: 10px;
    height: 10px;
    border-radius: 50%;
    display: inline-block;
}

.openking-obs-legend {
    border-top: 1px solid var(--border-color);
    padding: 12px 14px;
    font-size: 0.74rem;
    color: var(--text-secondary);
}

.openking-obs-legend-title {
    font-size: 0.7rem;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    font-weight: 600;
    margin-bottom: 6px;
    opacity: 0.7;
}

.openking-obs-legend-row {
    display: flex;
    align-items: center;
    gap: 7px;
    padding: 2px 0;
}

.openking-obs-swatch {
    width: 10px;
    height: 10px;
    border-radius: 50%;
}

.openking-obs-hint {
    margin-top: 8px;
    font-size: 0.68rem;
    opacity: 0.6;
    font-style: italic;
}

.openking-obs-canvas-wrap {
    display: flex;
    flex-direction: column;
    background: var(--bg-surface);
    border: 1px solid var(--border-color);
    border-radius: 14px;
    overflow: hidden;
    position: relative;
}

.openking-obs-canvas-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 10px 14px;
    border-bottom: 1px solid var(--border-color);
}

.openking-obs-canvas-title {
    font-size: 0.9rem;
    font-weight: 600;
}

.openking-obs-canvas-meta {
    font-size: 0.75rem;
    color: var(--text-secondary);
    opacity: 0.8;
}

.openking-obs-canvas {
    flex: 1;
    position: relative;
    background: #0d1117;
    overflow: hidden;
}

.openking-obs-canvas #ok-obs-3d,
.openking-obs-canvas #ok-obs-3d > div {
    width: 100% !important;
    height: 100% !important;
}

.openking-obs-empty,
.openking-obs-loading,
.openking-obs-error,
.openking-obs-empty-rail {
    padding: 20px;
    color: var(--text-secondary);
    font-size: 0.86rem;
    text-align: center;
}

.openking-obs-error {
    color: #ff8b8b;
}

.openking-obs-empty-rail {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
    padding: 24px 14px;
    color: var(--text-primary);
}

.openking-obs-empty-icon {
    font-size: 2.4rem;
    opacity: 0.85;
}

.openking-obs-empty-title {
    font-size: 1rem;
    font-weight: 700;
    margin-top: 4px;
}

.openking-obs-empty-body {
    font-size: 0.8rem;
    color: var(--text-secondary);
    line-height: 1.4;
    margin: 4px 0 8px;
}

.openking-obs-empty-ctas {
    display: flex;
    flex-direction: column;
    gap: 8px;
    width: 100%;
}

.openking-obs-empty-ctas button {
    width: 100%;
    font-size: 0.82rem;
    padding: 8px 10px;
    border-radius: 8px;
}

.openking-obs-empty-foot {
    margin-top: 6px;
    font-size: 0.7rem;
    opacity: 0.55;
    font-style: italic;
    line-height: 1.3;
}

.openking-obs-replay {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 14px;
    border-top: 1px solid var(--border-color);
    background: var(--bg-elevated, var(--bg-surface));
}

.openking-obs-play {
    background: var(--accent-color, #F37B20);
    border: none;
    color: #fff;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    cursor: pointer;
    font-size: 0.9rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}

.openking-obs-play:hover {
    filter: brightness(1.1);
}

.openking-obs-slider {
    flex: 1;
    accent-color: var(--accent-color, #F37B20);
}

.openking-obs-cursor {
    font-size: 0.78rem;
    color: var(--text-secondary);
    min-width: 60px;
    text-align: right;
    font-variant-numeric: tabular-nums;
}

@media (max-width: 900px) {
    .openking-obs {
        grid-template-columns: 1fr;
        grid-template-rows: 240px 1fr;
        height: auto;
    }
}
