/* ============================================================================
   Air Chat — chat surface styling, token-driven (Sprint E).
   Extracted from Chat.razor's inline <style>. All colors derive from Air design
   tokens (semantic + --air-chat-* component layer). No bespoke palette, no
   prefers-color-scheme dark mode — the Air Theme Engine is the single source of
   truth for light/dark. Loaded globally after air-design-tokens.css.
   ============================================================================ */

    .air-attachment-item {
        position: relative;
        display: inline-block;
    }

    .air-attachment-download {
        position: absolute;
        top: 8px;
        right: 8px;
        width: 30px;
        height: 30px;
        border-radius: 999px;
        border: none;
        /* Scrim is a fixed-dark overlay (rgba black) in every theme, so the icon must always be light.
           --air-chat-surface flips to a dark colour under the dark theme (dark icon on dark scrim);
           white is the only correct foreground here. */
        background: var(--air-chat-scrim);
        color: var(--air-color-white);
        cursor: pointer;
        display: grid;
        place-items: center;
    }


    .air-upload-preview-item {
        position: relative;
        width: 96px;
        height: 96px;
    }

    .air-upload-remove {
        position: absolute;
        top: -8px;
        right: -8px;
        width: 24px;
        height: 24px;
        border-radius: 999px;
        border: none;
        background: var(--air-chat-text);
        color: var(--air-chat-surface);
        font-size: 17px;
        line-height: 22px;
        cursor: pointer;
        box-shadow: 0 2px 8px var(--air-chat-overlay-heavy);
    }


    .air-preview-failed {
        font-size: 12px;
        color: var(--air-chat-text-subtle);
        margin-top: 4px;
    }

    .air-attachment-images {
        display: flex;
        flex-wrap: wrap;
        gap: 8px;
        margin-bottom: 10px;
    }

    .air-attachment-image {
        max-width: 220px;
        max-height: 180px;
        border-radius: 14px;
        border: 1px solid var(--air-chat-border-strong);
        object-fit: cover;
    }

    .air-upload-preview {
        display: flex;
        flex-wrap: wrap;
        gap: 10px;
        margin-top: 10px;
    }

    .air-upload-preview-item {
        position: relative;
    }

        .air-upload-preview-item img {
            width: 96px;
            height: 96px;
            border-radius: 14px;
            object-fit: cover;
            border: 1px solid var(--air-chat-border-strong);
        }

        /* Instant local-thumbnail upload badge (Sprint 9A.1) — small spinner over the live preview. */
        .air-upload-preview-badge {
            position: absolute;
            bottom: 4px;
            left: 4px;
            width: 22px;
            height: 22px;
            border-radius: 50%;
            display: flex;
            align-items: center;
            justify-content: center;
            background: var(--air-chat-overlay-soft, var(--air-surface-subtle));
        }

        /* Pasted-image upload / error placeholder (Sprint 9A) — same footprint as the thumbnail. */
        .air-upload-preview-pending {
            width: 96px;
            height: 96px;
            border-radius: 14px;
            display: flex;
            align-items: center;
            justify-content: center;
            border: 1px dashed var(--air-chat-border-strong);
            background: var(--air-chat-surface-subtle, var(--air-surface-subtle));
            color: var(--air-chat-text-subtle, var(--air-text-subtle));
        }

    .air-chat-shell {
        /* ── Design tokens — chat UI only ───────────────────────────────── */
        --chat-col:          740px;
        --chat-bg:           var(--air-chat-surface);
        --chat-border:       var(--air-chat-overlay-soft);
        --chat-border-focus: var(--air-chat-overlay-strong);
        --chat-user-bg:      var(--air-chat-bg-muted);
        --chat-user-text:    var(--air-chat-text);
        --chat-muted:        var(--air-chat-text-muted);
        --chat-hover-bg:     var(--air-chat-overlay-weak);
        /* ─────────────────────────────────────────────────────────────── */
        height: 100dvh;
        min-height: 100dvh;
        display: flex;
        flex-direction: column;
        background: var(--chat-bg);
        overflow: hidden;
        position: relative;
    }

    .air-messages {
        flex: 1;
        overflow-y: auto;
        /* Bottom padding keeps the last message scrollable above the fixed composer.
           DYNAMIC: --composer-h is the live composer height, measured by a ResizeObserver
           (infinityAiChat.observeComposer) and updated whenever the composer grows — adding
           attachments, tools, voice controls, a model selector, etc. needs no padding edits.
           The fallback covers the first paint before JS runs. */
        padding: 72px 24px calc(var(--composer-h, 180px) + 24px) 24px;
    }

    .air-project-home {
        max-width: 900px;
        margin: 0 auto;
        padding-top: 40px;
    }

    .air-project-title {
        display: flex;
        align-items: center;
        gap: 14px;
        font-size: 34px;
        font-weight: 600;
        margin-bottom: 34px;
        color: var(--air-chat-text);
    }

    .air-project-tabs {
        display: flex;
        gap: 10px;
        margin-bottom: 24px;
    }

    .air-project-tab-active {
        border-radius: 999px;
        background: var(--air-chat-bg-muted);
        padding: 10px 20px;
        font-weight: 600;
    }

    .air-project-tab {
        border-radius: 999px;
        padding: 10px 20px;
        color: var(--air-chat-text-subtle);
        font-weight: 500;
    }

    .air-project-chat-list {
        max-width: 900px;
    }

    .air-project-chat-item {
        display: grid;
        grid-template-columns: 1fr auto;
        align-items: center;
        gap: 8px;
        padding: 8px 10px;
        border-bottom: 1px solid var(--air-chat-border);
        border-radius: 10px;
    }

    .air-project-chat-main {
        display: grid;
        grid-template-columns: 1fr auto;
        gap: 20px;
        padding: 8px 4px;
        cursor: pointer;
        min-width: 0;
    }

    .air-project-chat-menu {
        opacity: 0;
    }

    .air-project-chat-item:hover .air-project-chat-menu {
        opacity: 1;
    }

    .air-project-chat-item:hover {
        background: var(--air-chat-bg);
    }

    .air-project-chat-title {
        font-weight: 700;
        color: var(--air-chat-text);
        margin-bottom: 4px;
    }

    .air-project-chat-preview {
        margin-top: 2px;
        overflow: hidden;
    }

    .air-project-chat-date {
        color: var(--air-chat-text-subtle);
        white-space: nowrap;
    }

    /* ── Empty state ──────────────────────────────────────────────────────────
       Scoped under .air-messages so the chat welcome state does not pick up the
       generic .air-empty card styling (background/border/radius) from
       air-components.css — the two components share the .air-empty class name.
       The chat welcome blends into the conversation surface (no framed box). */
    .air-messages .air-empty {
        flex: 1;
        display: flex;
        align-items: center;
        justify-content: center;
        padding: 0 24px;
        background: transparent;
        border: 0;
        border-radius: 0;
    }

    .air-empty-inner {
        text-align: center;
        max-width: 500px;
        padding-bottom: 60px;
    }

    .air-empty-logo {
        font-size: 2.1rem;
        color: var(--air-chat-accent);
        font-weight: 700;
        letter-spacing: -0.02em;
        margin-bottom: 14px;
        opacity: 0.6;
        user-select: none;
        display: block;
    }

    .air-empty-headline {
        font-size: 1.3rem;
        font-weight: 600;
        color: var(--air-chat-text);
        margin: 0 0 5px;
        line-height: 1.3;
    }

    .air-empty-subtext {
        font-size: 0.875rem;
        color: var(--air-chat-text-subtle);
        margin: 0 0 22px;
    }

    .air-empty-suggestions {
        display: flex;
        flex-wrap: wrap;
        gap: 7px;
        justify-content: center;
    }

    .air-suggestion-chip {
        padding: 6px 14px;
        border-radius: 20px;
        border: 1px solid var(--air-chat-overlay);
        background: transparent;
        color: var(--air-chat-text);
        font-size: 0.84rem;
        font-family: inherit;
        cursor: pointer;
        transition: background .12s, border-color .12s, color .12s;
        line-height: 1.4;
        white-space: nowrap;
    }

    .air-suggestion-chip:hover {
        background: var(--air-chat-overlay-weak);
        border-color: var(--air-chat-overlay-strong);
        color: var(--air-chat-text);
    }

    .air-suggestion-chip:focus-visible {
        outline: none;
        box-shadow: 0 0 0 2px var(--chat-border-focus);
    }

    .air-message-row {
        display: flex;
        width: 100%;
        max-width: var(--chat-col);
        min-width: 0;
        margin: 0 auto 20px auto;
    }

        .air-message-row.user {
            justify-content: flex-end;
        }

        .air-message-row.assistant {
            justify-content: flex-start;
            align-items: flex-start; /* keeps avatar anchored to top of long messages */
        }

    /* ── Message avatars ──────────────────────────────────────────────────── */
    .air-avatar {
        flex-shrink: 0;
        align-self: flex-start;
        display: flex;
        align-items: center;
        justify-content: center;
        border-radius: 50%;
        user-select: none;
    }

    .air-avatar--assistant {
        width:          26px;
        height:         26px;
        min-width:      26px;
        background:     var(--air-chat-accent-soft);
        color:          var(--air-chat-accent);
        font-size:      13px;
        font-weight:    600;
        letter-spacing: -0.01em;
        margin-right:   10px;
        margin-top:     2px;
        border:         1px solid var(--air-chat-accent-a20);
    }

    /* Avatar-width spacer for grouped (non-first) assistant messages */
    .air-avatar-spacer {
        width:      26px;
        min-width:  26px;
        margin-right: 10px;
        flex-shrink: 0;
    }

    /* Pull consecutive same-role messages closer together */
    .air-message-row.group-continuation {
        margin-top: -12px;
    }

    .air-message-bubble {
        line-height: 1.65;
        font-size: 16px;
        overflow-wrap: anywhere;
    }

        .air-message-bubble.user {
            max-width: 70%;
            background: var(--chat-user-bg);
            border-radius: 18px;
            padding: 10px 16px;
            white-space: pre-wrap;
            color: var(--chat-user-text);
        }

        .air-message-bubble.assistant {
            flex: 1;
            min-width: 0;
            padding: 2px 0;
            color: var(--air-chat-text);
        }

    /* ── Assistant prose typography layer ────────────────────────────────────── */
    /* Conversational AI style — calmer and lighter than documentation defaults. */
    .assistant-prose {
        font-size:     0.97rem;
        line-height:   1.72;
        color:         var(--air-chat-text);
        max-width:     100%;
        overflow-wrap: anywhere;
        word-break:    break-word;
    }

    /* Paragraphs */
    .assistant-prose p              { margin: 0 0 0.65em 0; }
    .assistant-prose p:last-child   { margin-bottom: 0; }
    .assistant-prose p:empty        { display: none; }

    /* Headings — conversational, not documentation.                         */
    /* No border-bottom on h1 (removes GitHub README feel).                  */
    /* Reduced sizes and tighter margins keep headings from dominating.      */
    .assistant-prose h1,
    .assistant-prose h2,
    .assistant-prose h3,
    .assistant-prose h4,
    .assistant-prose h5,
    .assistant-prose h6 {
        margin:      0.9em 0 0.28em 0;
        line-height: 1.3;
        font-weight: 600;
        color:       var(--air-chat-text);
    }
    .assistant-prose h1:first-child,
    .assistant-prose h2:first-child,
    .assistant-prose h3:first-child,
    .assistant-prose h4:first-child { margin-top: 0; }

    .assistant-prose h1 { font-size: 1.2em; }
    .assistant-prose h2 { font-size: 1.08em; }
    .assistant-prose h3 { font-size: 1.01em; }
    .assistant-prose h4 { font-size: 0.97em; }
    .assistant-prose h5 { font-size: 0.93em; }
    .assistant-prose h6 { font-size: 0.90em; color: var(--air-chat-text-muted); }

    /* Lists */
    .assistant-prose ul,
    .assistant-prose ol {
        margin:       0.2em 0 0.65em 0;
        padding-left: 1.4em;
    }
    .assistant-prose li              { margin-bottom: 0.22em; }
    .assistant-prose li > p          { margin-bottom: 0.12em; }
    .assistant-prose li > ul,
    .assistant-prose li > ol         { margin: 0.1em 0 0.2em 0; }

    /* Horizontal rule — very subtle */
    .assistant-prose hr {
        border:     none;
        border-top: 1px solid var(--air-chat-border);
        margin:     0.9em 0;
    }

    /* Blockquote — modern accent strip, not a heavy document box */
    .assistant-prose blockquote {
        border-left:   2px solid var(--air-chat-muted-soft);
        background:    var(--air-chat-overlay-weak);
        border-radius: 0 6px 6px 0;
        margin:        0.5em 0;
        padding:       0.45em 0.9em;
        color:         var(--air-chat-text-muted);
    }
    .assistant-prose blockquote p            { margin-bottom: 0.2em; }
    .assistant-prose blockquote p:last-child { margin-bottom: 0; }

    /* Inline code — subtle tinted pill, not screaming red */
    .assistant-prose :not(pre) > code {
        background:    var(--air-chat-overlay-weak);
        border-radius: 4px;
        padding:       0.12em 0.36em;
        font-family:   ui-monospace, Menlo, Monaco, Consolas, "Courier New", monospace;
        font-size:     0.86em;
        color:         var(--air-chat-danger-strong);
    }

    /* Tables — minimal row-separator style, no heavy grid */
    .assistant-prose table {
        border-collapse: collapse;
        width:           100%;
        margin:          0.65em 0;
        font-size:       0.91em;
        display:         block;
        overflow-x:      auto;
        -webkit-overflow-scrolling: touch;
    }
    .assistant-prose thead tr              { border-bottom: 2px solid var(--air-chat-border); }
    .assistant-prose tbody tr              { border-bottom: 1px solid var(--air-chat-bg-muted); }
    .assistant-prose tbody tr:last-child   { border-bottom: none; }
    .assistant-prose th,
    .assistant-prose td                    { padding: 7px 14px; text-align: left; vertical-align: top; }
    .assistant-prose th                    { font-weight: 600; color: var(--air-chat-text); }

    /* Links */
    .assistant-prose a             { color: var(--air-chat-link); text-decoration: none; transition: color .12s ease; }
    .assistant-prose a:hover       { color: var(--air-chat-link-strong); text-decoration: underline; }

    /* Emphasis */
    .assistant-prose strong { font-weight: 600; }
    .assistant-prose em     { font-style: italic; }

    /* Code blocks */
    .assistant-prose .air-code-block             { margin: 0.75em 0; }
    .assistant-prose .air-code-block:last-child  { margin-bottom: 0; }


    .air-thinking {
        display: flex;
        align-items: center;
        gap: 10px;
        color: var(--air-chat-text-muted);
    }

    .air-composer-wrap {
        position:   fixed;
        left:       300px;
        right:      0;
        bottom:     0;
        padding:    16px 24px 20px;
        z-index:    20;
        /* Gradient fade so messages don't abruptly end at the composer edge */
        background: linear-gradient(to top, var(--chat-bg) 55%, transparent);
    }

    .air-composer {
        max-width:     var(--chat-col);
        margin:        0 auto;
        background:    var(--chat-bg);
        border:        1px solid var(--chat-border);
        border-radius: 16px;
        box-shadow:    0 1px 4px var(--air-chat-overlay-weak), 0 4px 20px var(--air-chat-overlay-soft);
        padding:       8px 12px;
        transition:    border-color .15s ease, box-shadow .15s ease;
    }

    .air-composer:focus-within {
        border-color: var(--chat-border-focus);
        box-shadow:   0 1px 4px var(--air-chat-overlay-weak), 0 6px 26px var(--air-chat-overlay-soft);
    }

    /* Two explicit rows. Desktop: side-by-side → one visual row [ + input | tools send ].
       Phone (≤640): the action row stacks beneath a full-width input (see the breakpoint). */
    .air-composer-top {
        display: flex;
        align-items: center;
        gap: 10px;
    }

    .air-composer-input-row {
        display: flex;
        align-items: center;
        gap: 10px;
        flex: 1;
        min-width: 0;   /* let the textarea shrink instead of overflowing */
    }

    .air-composer-action-row {
        display: flex;
        align-items: center;
        gap: 10px;
        flex-shrink: 0;
    }

    .air-plus-button {
        width: 40px;
        height: 40px;
        min-width: 40px;
        border-radius: 50%;
        color: var(--air-chat-text) !important;
        flex-shrink: 0;
    }

    .air-input-wrap {
        flex: 1;
        min-width: 0;
    }

    .air-prompt-textarea {
        width: 100%;
        min-height: 24px;
        max-height: 220px;
        resize: none;
        overflow-y: hidden;
        border: none;
        outline: none;
        box-shadow: none;
        background: transparent;
        font-size: 17px;
        line-height: 1.45;
        color: var(--air-chat-text);
        padding: 8px 0;
        white-space: pre-wrap;
        overflow-wrap: break-word;
        word-break: break-word;
        font-family: inherit;
        display: block;
    }

    .air-prompt-textarea::placeholder {
        color: var(--air-chat-text-subtle);
    }

    .air-prompt-textarea:disabled {
        opacity: .7;
        cursor: not-allowed;
    }

    .air-skill-compact {
        flex-shrink: 0;
        height: 40px;
        display: flex;
        align-items: center;
    }

    .air-skill-compact select {
        appearance: none;
        -webkit-appearance: none;
        border: none;
        background-color: transparent;
        font-family: inherit;
        font-size: 13px;
        font-weight: 500;
        color: var(--air-chat-text-muted);
        cursor: pointer;
        padding: 5px 20px 5px 8px;
        border-radius: 8px;
        outline: none;
        min-width: 88px;
        max-width: 150px;
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 24 24' fill='none' stroke='%23999' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
        background-repeat: no-repeat;
        background-position: right 5px center;
        transition: background-color .15s;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }

    .air-skill-compact select:hover,
    .air-skill-compact select:focus {
        background-color: var(--air-chat-overlay-weak);
    }

    .air-bottom-row {
        display: flex;
        justify-content: space-between;
        align-items: center;
        margin-top: 8px;
    }

    .air-file-list {
        display: flex;
        flex-wrap: wrap;
        gap: 8px;
    }

    /* ── Pasted-text attachment card (richer than a plain chip) ─────────────── */
    .air-paste-list {
        display: flex;
        flex-wrap: wrap;
        gap: 8px;
        margin-top: 8px;
    }

    .air-paste-card {
        display: flex;
        align-items: flex-start;
        gap: 10px;
        max-width: 360px;
        padding: 8px 10px;
        border-radius: 10px;
        border: 1px solid var(--air-chat-border);
        background: var(--air-chat-bg-muted);
    }

        .air-paste-card.is-preparing { border-style: dashed; }
        .air-paste-card.is-failed { border-color: var(--air-chat-danger); }

    .air-paste-icon {
        flex-shrink: 0;
        width: 22px;
        height: 22px;
        color: var(--air-chat-text-muted);
        margin-top: 1px;
    }

    .air-paste-info {
        min-width: 0;
        flex: 1;
    }

    .air-paste-name-row {
        display: flex;
        align-items: center;
        gap: 6px;
        min-width: 0;
    }

    .air-paste-name {
        font-size: 0.85rem;
        font-weight: 600;
        color: var(--air-chat-text);
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }

    /* Subtle live-updating "N sektioner" badge on merged pasted cards. */
    .air-paste-badge {
        flex-shrink: 0;
        font-size: 0.66rem;
        font-weight: 600;
        line-height: 1;
        padding: 2px 6px;
        border-radius: 999px;
        color: var(--air-chat-text-muted);
        background: var(--air-chat-overlay-soft);
        border: 1px solid var(--air-chat-border);
    }

    .air-paste-subtitle {
        font-size: 0.74rem;
        color: var(--air-chat-text-subtle);
        margin-top: 2px;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }

    .air-paste-meta {
        font-size: 0.72rem;
        color: var(--air-chat-text-muted);
        margin-top: 2px;
    }

    /* Quiet AI enrichment block — only rendered once Completed intelligence arrives. */
    .air-paste-ai {
        margin-top: 6px;
        padding-top: 6px;
        border-top: 1px solid var(--air-chat-border);
    }

    .air-paste-ai-summary {
        font-size: 0.74rem;
        color: var(--air-chat-text);
        line-height: 1.35;
    }

    .air-paste-ai-label {
        font-size: 0.64rem;
        text-transform: uppercase;
        letter-spacing: 0.04em;
        color: var(--air-chat-text-subtle);
        margin-top: 4px;
    }

    .air-paste-ai-bullets {
        margin: 2px 0 0;
        padding-left: 16px;
        font-size: 0.72rem;
        color: var(--air-chat-text-muted);
        line-height: 1.35;
    }

        .air-paste-ai-bullets li { margin: 0; }

    .air-paste-trailing {
        display: flex;
        align-items: center;
        gap: 2px;
        flex-shrink: 0;
    }

    /* Quiet corner spinner — the only signal while a paste saves/indexes. */
    .air-paste-spinner.mud-progress-circular {
        color: var(--air-chat-text-subtle);
        width: 18px;
        height: 18px;
    }

    .air-paste-error-icon { color: var(--air-chat-danger); }

    .air-paste-action {
        width: 26px;
        height: 26px;
        border: none;
        background: transparent;
        color: var(--air-chat-text-muted);
        cursor: pointer;
        border-radius: 6px;
        display: grid;
        place-items: center;
    }

        .air-paste-action:hover {
            background: var(--air-chat-overlay-soft);
            color: var(--air-chat-text);
        }

    .air-send-button {
        width: 40px;
        height: 40px;
        min-width: 40px;
        border-radius: 50% !important;
        background: var(--air-chat-text) !important;
        color: var(--air-chat-surface) !important;
        flex-shrink: 0;
    }

        .air-send-button:disabled {
            background: var(--air-chat-border-strong) !important;
            color: var(--air-chat-surface) !important;
            opacity: .9;
        }

    .air-mic-button {
        width: 36px;
        height: 36px;
        min-width: 36px;
        border-radius: 50%;
        border: 1px solid var(--air-chat-overlay);
        background: transparent;
        color: var(--chat-muted, var(--air-chat-text-muted));
        cursor: pointer;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        flex-shrink: 0;
        transition: background .15s, border-color .15s, color .15s;
    }

    .air-mic-button:hover:not(:disabled) {
        background: var(--chat-hover-bg, var(--air-chat-overlay-weak));
        border-color: var(--air-chat-overlay-strong);
    }

    .air-mic-button:disabled {
        opacity: .4;
        cursor: default;
    }

    .air-mic-button--listening {
        border-color: var(--air-chat-danger);
        color: var(--air-chat-danger);
        animation: air-mic-pulse 1.4s ease-in-out infinite;
    }

    .air-mic-dot {
        width: 10px;
        height: 10px;
        border-radius: 50%;
        background: var(--air-chat-danger);
        display: block;
        animation: air-mic-dot-pulse 1.4s ease-in-out infinite;
    }

    @keyframes air-mic-pulse {
        0%, 100% { box-shadow: 0 0 0 0 var(--air-chat-danger-soft); }
        50%       { box-shadow: 0 0 0 6px var(--air-chat-danger-clear); }
    }

    @keyframes air-mic-dot-pulse {
        0%, 100% { transform: scale(1); opacity: 1; }
        50%       { transform: scale(1.3); opacity: 0.7; }
    }

    /* ── Speaker (TTS) button — per-message read-aloud ──────────────────────── */
    .air-speaker-btn {
        display:       inline-flex;
        align-items:   center;
        gap:           5px;
        background:    transparent;
        border:        1px solid transparent;
        border-radius: 6px;
        cursor:        pointer;
        color:         var(--chat-muted, var(--air-chat-text-muted));
        font-size:     12px;
        font-family:   inherit;
        padding:       3px 8px;
        line-height:   1.4;
        transition:    background .12s ease, color .12s ease, border-color .12s ease;
        white-space:   nowrap;
    }

    .air-speaker-btn:hover,
    .air-speaker-btn:focus-visible {
        background:   var(--chat-hover-bg, var(--air-chat-overlay-weak));
        color:        var(--air-chat-text);
        border-color: var(--chat-border, var(--air-chat-overlay-soft));
        outline:      none;
    }

    .air-speaker-btn:focus-visible {
        box-shadow: 0 0 0 2px var(--chat-border-focus, var(--air-chat-overlay-strong));
    }

    .air-speaker-btn--speaking {
        color:        var(--air-chat-link);
        border-color: var(--air-chat-link-soft);
        background:   var(--air-chat-link-faint);
        animation:    air-speaker-pulse 1.8s ease-in-out infinite;
    }

    @keyframes air-speaker-pulse {
        0%, 100% { opacity: 1; }
        50%       { opacity: 0.65; }
    }


    /* Screen-reader-only — visually hidden but readable by assistive technology */
    .air-sr-only {
        position: absolute;
        width: 1px;
        height: 1px;
        padding: 0;
        margin: -1px;
        overflow: hidden;
        clip: rect(0, 0, 0, 0);
        white-space: nowrap;
        border: 0;
    }

    .air-hidden-file {
        display: none;
    }

    .air-warning {
        max-width: 900px;
        margin: 0 auto 12px auto;
        border-radius: 16px;
    }

    /* ── Clarification Card ────────────────────────────────────────────────── */

    .air-clarification-card {
        max-width: 900px;
        margin: 0 auto 12px auto;
        background: var(--air-chat-bg);
        border: 1px solid var(--air-chat-accent-border);
        border-radius: 16px;
        padding: 16px 20px;
    }

    .air-clarification-header {
        display: flex;
        align-items: center;
        justify-content: space-between;
        margin-bottom: 10px;
    }

    .air-clarification-header-left {
        display: flex;
        align-items: center;
        font-size: 0.88rem;
        font-weight: 600;
        color: var(--air-chat-accent-strong);
    }

    .air-clarification-step {
        font-size: 0.75rem;
        font-weight: 500;
        color: var(--air-chat-accent-muted);
    }

    .air-clarification-question-text {
        font-size: 0.93rem;
        font-weight: 600;
        color: var(--air-chat-accent-deep);
        margin-bottom: 10px;
        line-height: 1.4;
    }

    .air-clarification-options {
        display: flex;
        flex-wrap: wrap;
        gap: 8px;
    }

    .air-clarification-chip {
        padding: 7px 16px;
        border-radius: 22px;
        border: 1.5px solid var(--air-chat-accent-border);
        background: var(--air-chat-surface);
        color: var(--air-chat-accent-strong);
        font-size: 0.84rem;
        cursor: pointer;
        transition: background .12s, border-color .12s, color .12s, transform .08s;
        line-height: 1.3;
    }

    .air-clarification-chip:hover {
        background: var(--air-chat-accent-soft);
        border-color: var(--air-chat-accent-muted);
        transform: translateY(-1px);
    }

    .air-clarification-chip.is-selected {
        background: var(--air-chat-accent-strong);
        border-color: var(--air-chat-accent-strong);
        color: var(--air-chat-surface);
    }

    /* YesNo: two equal-width buttons side by side */
    .air-clarification-yesno {
        display: grid;
        grid-template-columns: 1fr 1fr;
        gap: 8px;
        max-width: 320px;
    }

    .air-clarification-yesno .air-clarification-chip {
        text-align: center;
        padding: 9px 0;
        font-weight: 600;
    }

    /* FreeText: textarea */
    .air-clarification-textarea {
        width: 100%;
        min-height: 72px;
        padding: 8px 12px;
        border: 1.5px solid var(--air-chat-accent-border);
        border-radius: 10px;
        background: var(--air-chat-surface);
        color: var(--air-chat-accent-deep);
        font-size: 0.84rem;
        resize: vertical;
        outline: none;
        font-family: inherit;
        transition: border-color .12s;
        box-sizing: border-box;
    }

    .air-clarification-textarea:focus {
        border-color: var(--air-chat-accent-strong);
    }


    @media (max-width: 600px) {
        .air-clarification-yesno {
            max-width: 100%;
        }
    }

    .air-attachment-docs {
        display: flex;
        flex-wrap: wrap;
        gap: 8px;
        margin-bottom: 10px;
    }

    .air-file-card {
        display: flex;
        align-items: center;
        gap: 10px;
        background: var(--air-chat-bg-muted);
        border-radius: 12px;
        padding: 8px 14px;
        text-decoration: none;
        color: inherit;
        min-width: 0;
        max-width: 260px;
        border: 1px solid var(--air-chat-border);
    }

    .air-file-card {
        transition: background .13s ease;
    }

    .air-file-card:hover {
        background: var(--air-chat-border);
    }

    .air-file-card-icon {
        font-size: 28px;
        flex-shrink: 0;
        line-height: 1;
    }

    .air-file-card-info {
        display: flex;
        flex-direction: column;
        min-width: 0;
    }

    .air-file-name {
        font-weight: 600;
        font-size: 14px;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        color: var(--air-chat-text);
    }

    .air-file-type-label {
        font-size: 12px;
        color: var(--air-chat-text-subtle);
        margin-top: 2px;
    }

    /* ── Context tray: unified, compact, no verbose labels ─────────────── */

    .air-context-tray {
        padding: 6px 0 6px;
        border-bottom: 1px solid var(--air-chat-overlay-weak);
        margin-bottom: 2px;
    }

    .air-context-group {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        gap: 4px;
    }

    .air-context-group + .air-context-group {
        margin-top: 4px;
    }

    .air-context-chip {
        display: inline-flex;
        align-items: center;
        gap: 4px;
        background: var(--air-chat-bg-muted);
        border: 1px solid var(--air-chat-border);
        border-radius: 6px;
        padding: 2px 3px 2px 7px;
        max-width: 200px;
        min-width: 0;
    }

    .air-context-chip--active {
        background: var(--air-chat-accent-a05);
        border-color: var(--air-chat-accent-a20);
        cursor: pointer;
    }

    .air-context-chip--primary {
        background: var(--air-chat-accent-a10);
        border-color: var(--air-chat-accent-a50);
    }

    .air-context-chip-icon {
        font-size: 12px;
        flex-shrink: 0;
        line-height: 1;
    }

    .air-context-chip-name {
        font-size: 11.5px;
        font-weight: 500;
        color: var(--air-chat-text);
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        flex: 1;
        min-width: 0;
    }

    .air-context-chip-badge {
        font-size: 10px;
        font-weight: 700;
        color: var(--air-chat-accent);
        flex-shrink: 0;
    }

    .air-context-chip-remove {
        flex-shrink: 0;
        background: none;
        border: none;
        cursor: pointer;
        color: var(--air-chat-border-strong);
        font-size: 14px;
        line-height: 1;
        padding: 0 2px;
        border-radius: 3px;
        transition: color .12s;
    }

    .air-context-chip-remove:hover { color: var(--air-chat-danger); }

    /* "+N more" overflow button */
    .air-context-overflow-btn {
        display: inline-flex;
        align-items: center;
        font-size: 11px;
        color: var(--air-chat-text-subtle);
        background: var(--air-chat-overlay-weak);
        border: 1px solid var(--air-chat-overlay-soft);
        border-radius: 6px;
        padding: 2px 8px;
        cursor: pointer;
        font-family: inherit;
        transition: background .12s, color .12s;
        white-space: nowrap;
    }

    .air-context-overflow-btn:hover {
        background: var(--air-chat-overlay-soft);
        color: var(--air-chat-text);
    }

    /* Dark mode — chat shell, bubbles, composer, context chips */

    .air-at-picker {
        position: absolute;
        bottom: calc(100% + 6px);
        left: 0;
        width: min(360px, calc(100vw - 48px));
        background: var(--air-chat-surface);
        border: 1px solid var(--air-chat-border);
        border-radius: 12px;
        box-shadow: 0 4px 16px var(--air-chat-overlay-soft);
        z-index: 50;
        overflow: hidden;
        max-height: 240px;
        overflow-y: auto;
        padding: 4px;
    }

    .air-at-picker-item {
        display: flex;
        align-items: center;
        gap: 8px;
        padding: 7px 10px;
        border-radius: 8px;
        cursor: pointer;
        font-size: 14px;
        color: var(--air-chat-text);
        transition: background .1s;
    }

    .air-at-picker-item:hover,
    .air-at-picker-item.is-selected {
        background: var(--air-chat-accent-a10);
    }

    .air-at-picker-item-icon {
        font-size: 16px;
        flex-shrink: 0;
        line-height: 1;
    }

    .air-at-picker-item-label {
        flex: 1;
        min-width: 0;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }

    .air-at-tab-hint {
        font-size: 11px;
        color: var(--air-chat-text-subtle);
        background: var(--air-chat-bg-muted);
        border-radius: 4px;
        padding: 1px 5px;
        flex-shrink: 0;
        font-family: monospace;
    }

    .air-at-picker-primary-dot {
        width: 5px;
        height: 5px;
        border-radius: 50%;
        background: var(--air-chat-accent);
        flex-shrink: 0;
    }

    .air-at-picker-item.is-unsupported {
        opacity: .5;
        cursor: default;
        pointer-events: none;
    }

    .air-at-picker-unsupported-badge {
        font-size: 10px;
        font-weight: 600;
        color: var(--air-chat-text-subtle);
        background: var(--air-chat-bg-muted);
        border-radius: 4px;
        padding: 1px 5px;
        flex-shrink: 0;
        white-space: nowrap;
    }

    .air-at-picker-empty {
        padding: 8px 10px;
        font-size: 13px;
        color: var(--air-chat-text-subtle);
    }


    @media (max-width: 959.98px) {
        .air-chat-shell {
            height: calc(100dvh - 56px);
            min-height: calc(100dvh - 56px);
        }

        .air-messages {
            /* Dynamic composer-height clearance (see desktop rule); tighter side padding on mobile. */
            padding: 20px 12px calc(var(--composer-h, 150px) + 16px) 12px;
        }

        .air-composer-wrap {
            left: 0;
            right: 0;
            padding: 10px 12px max(12px, env(safe-area-inset-bottom));
        }

        .air-message-bubble.user {
            max-width: 88%;
        }

        .air-project-title {
            font-size: 26px;
        }

        /* Voice — WCAG 2.5.5: touch targets ≥ 44×44 px on mobile */
        .air-speaker-btn,
        .air-msg-action-btn {
            min-height:   44px;
            min-width:    44px;
            padding:      10px 10px;
            touch-action: manipulation;
        }

        .air-msg-actions {
            flex-wrap: wrap;
            gap:       4px;
        }
    }




    /* ── Phone composer (≤640px): stack action buttons below a full-width input ──
       Desktop/tablet keep the horizontal layout [ + | input | mic | send ].
       On phones the input takes its own first row (maximum typing width) and the
       action buttons wrap to a tidy row below — like ChatGPT/Claude mobile. Pure
       CSS via flex-wrap + order; no markup changes, so desktop is untouched. */
    @media (max-width: 640px) {
        /* Stack the two explicit rows: full-width input on top, action row beneath.
           No CSS `order` — this just flips the flex direction; DOM order is preserved.
           Message clearance is handled dynamically by --composer-h (no hardcoded value). */
        .air-composer-top {
            flex-direction: column;
            align-items:    stretch;
            gap:            8px;
        }

        /* Input row spans the full width → maximum typing space. */
        .air-composer-input-row {
            width: 100%;
        }

        /* Action row beneath: tools/voice on the left, Send pinned right. margin-left:auto
           is alignment, not reordering — and only on mobile (desktop keeps them grouped). */
        .air-composer-action-row {
            width: 100%;
        }
        .air-composer-action-row .air-send-button {
            margin-left: auto;
        }

        /* ≥16px stops iOS Safari from zooming the page when the field is focused. */
        .air-prompt-textarea {
            font-size: 16px;
            padding:   6px 2px;
        }

        /* Uniform, comfortably tappable touch targets; overrides the inline 44px on the
           conversation-mode button so the action row is visually balanced. */
        .air-plus-button,
        .air-mic-button,
        .air-send-button {
            width:        40px !important;
            height:       40px !important;
            min-width:    40px !important;
            min-height:   40px !important;
            touch-action: manipulation;
        }

        /* Trim the glyphs slightly so the icons stay centred in the buttons. */
        .air-plus-button .mud-icon-root,
        .air-send-button .mud-icon-root,
        .air-mic-button  .mud-icon-root,
        .air-mic-button  svg {
            font-size: 20px;
            width:     20px;
            height:    20px;
        }

        /* Attachment chips never overflow a narrow screen (already truncate + wrap). */
        .air-context-chip {
            max-width: 78vw;
        }
    }

    /* ── Code blocks — dark theme in all modes (ChatGPT/Claude pattern) ───── */
    .air-code-block {
        margin:        18px 0;
        border-radius: 8px;
        overflow:      hidden;
        background:    var(--air-chat-text);
        border:        1px solid var(--air-chat-onaccent-weak);
    }

    .air-code-header {
        display:         flex;
        justify-content: space-between;
        align-items:     center;
        padding:         8px 14px;
        background:      var(--air-chat-onaccent-weak);
        border-bottom:   1px solid var(--air-chat-onaccent-weak);
        color:           var(--air-chat-text-subtle);
        font-size:       11.5px;
        font-weight:     500;
        letter-spacing:  0.03em;
        font-family:     ui-monospace, Menlo, Monaco, Consolas, "Courier New", monospace;
    }

    .air-code-copy {
        border:        1px solid var(--air-chat-onaccent-soft);
        border-radius: 5px;
        background:    var(--air-chat-onaccent-weak);
        cursor:        pointer;
        color:         var(--air-chat-text-subtle);
        font-size:     11.5px;
        padding:       2px 9px;
        line-height:   1.5;
        font-family:   inherit;
        transition:    background .13s ease, color .13s ease, border-color .13s ease;
    }

    .air-code-copy:hover {
        background:   var(--air-chat-onaccent-soft);
        color:        var(--air-chat-border-strong);
        border-color: var(--air-chat-onaccent);
    }

    .air-code-block pre {
        margin:    0;
        padding:   14px 16px;
        overflow-x: auto;
        background: transparent;
        tab-size:   4;
    }

    .air-code-block code {
        font-family: ui-monospace, Menlo, Monaco, Consolas, "Courier New", monospace;
        font-size:   13.5px;
        line-height: 1.6;
        color:       var(--air-chat-border-strong);
    }

    @media (prefers-reduced-motion: reduce) {
        .air-code-copy,
        .air-file-card,
        .assistant-prose a,
        .air-msg-actions,
        .air-msg-action-btn,
        .air-speaker-btn,
        .air-composer,
        .air-clarification-chip,
        .air-suggestion-chip,
        .air-context-chip-remove,
        .air-context-overflow-btn { transition: none; }

        .air-speaker-btn--speaking { animation: none; }
    }

    /* ── Assistant message hover actions ─────────────────────────────────── */
    .air-msg-actions {
        display:        flex;
        align-items:    center;
        gap:            2px;
        margin-top:     4px;
        min-height:     26px;    /* always reserve space — no layout shift on appear */
        opacity:        0;
        pointer-events: none;
        transition:     opacity .15s ease;
    }

    .air-message-row.assistant:hover      .air-msg-actions,
    .air-message-row.assistant:focus-within .air-msg-actions {
        opacity:        1;
        pointer-events: auto;
    }

    .air-msg-action-btn {
        display:       inline-flex;
        align-items:   center;
        gap:           5px;
        background:    transparent;
        border:        1px solid transparent;
        border-radius: 6px;
        cursor:        pointer;
        color:         var(--chat-muted, var(--air-chat-text-muted));
        font-size:     12px;
        font-family:   inherit;
        padding:       3px 8px;
        line-height:   1.4;
        transition:    background .12s ease, color .12s ease, border-color .12s ease;
        white-space:   nowrap;
    }

    .air-msg-action-btn:hover,
    .air-msg-action-btn:focus-visible {
        background:   var(--chat-hover-bg, var(--air-chat-overlay-weak));
        color:        var(--air-chat-text);
        border-color: var(--chat-border, var(--air-chat-overlay-soft));
        outline:      none;
    }

    .air-msg-action-btn:focus-visible {
        box-shadow: 0 0 0 2px var(--chat-border-focus, var(--air-chat-overlay-strong));
    }


    .air-thinking-inline {
        display: inline-flex;
        align-items: center;
        gap: 10px;
        color: var(--air-chat-text-muted);
        font-size: 0.9rem;
    }

    .ai-code-spinner {
        color: var(--air-chat-warning);
        font-size: 1rem;
        line-height: 1;
        flex-shrink: 0;
        animation: ai-code-spinner-pulse 1.2s ease-in-out infinite;
    }

    @keyframes ai-code-spinner-pulse {
        0%, 100% { opacity: 0.72; transform: scale(0.96); }
        50% { opacity: 1; transform: scale(1.04); }
    }

    .air-stream-dots {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        gap: 4px;
    }

    .air-stream-dot {
        width: 5px;
        height: 5px;
        border-radius: 50%;
        background: currentColor;
        opacity: .45;
        animation: air-dot-wave 1.1s ease-in-out infinite;
    }

    .air-stream-dot:nth-child(2) { animation-delay: .15s; }
    .air-stream-dot:nth-child(3) { animation-delay: .30s; }

    @keyframes air-dot-wave {
        0%, 80%, 100% { transform: translateY(0); opacity: .35; }
        40%           { transform: translateY(-3px); opacity: .9; }
    }

    .air-scroll-to-bottom--streaming {
        /* kept for backward compat; button is always clickable when visible */
    }

    .air-message-status {
        display: flex;
        align-items: center;
        gap: 4px;
        font-size: 0.75rem;
        margin-top: 6px;
        opacity: 0.65;
    }

    .air-message-status--cancelled { color: var(--air-chat-text-subtle); }
    .air-message-status--failed { color: var(--air-chat-danger); }
    .air-message-status--interrupted { color: var(--air-chat-warning-strong); }

    .ai-work-text {
        color: var(--air-chat-text-muted);
        transition: opacity 180ms ease, transform 180ms ease;
    }

    .ai-work-text.changing {
        opacity: 0;
        transform: translateY(2px);
    }

    .air-scroll-to-bottom {
        /*
         * Anchored INSIDE .air-composer-wrap (position: fixed).
         * bottom: calc(100% + 8px) places the button's bottom edge exactly 8px
         * above the composer-wrap's top edge — adapts automatically whenever the
         * composer grows (context chips, file list, clarification card, safe-area).
         * No hardcoded pixel offsets needed.
         */
        position: absolute;
        bottom: calc(100% + 8px);
        left: 50%;
        transform: translateX(-50%);
        min-width: 36px;
        min-height: 36px;
        border-radius: 20px;
        background: var(--air-chat-surface);
        border: 1px solid var(--air-chat-border);
        box-shadow: 0 2px 10px var(--air-chat-overlay);
        cursor: pointer;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        gap: 3px;
        padding: 5px 10px;
        z-index: 1;            /* sits above .air-composer-wrap siblings; fixed ctx handles rest */
        color: var(--air-chat-text-muted);
        opacity: 0;
        pointer-events: none;
        transition: opacity .2s ease, box-shadow .15s, color .15s;
        white-space: nowrap;   /* prevents label wrapping when streaming dots are shown */
    }

    .air-scroll-to-bottom.is-visible {
        opacity: 1;
        pointer-events: auto;
    }

    .air-scroll-to-bottom:hover {
        box-shadow: 0 4px 18px var(--air-chat-overlay-strong);
        color: var(--air-chat-text);
    }

/* ── Artifact placeholder (Sprint 10A — AI Artifacts Platform) ──────────────────
   A lightweight "an artifact is being prepared" card. Token-driven, no bespoke colours. */
.air-artifact-placeholder {
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    padding: 0.75rem 0.9rem;
    margin-bottom: 0.6rem;
    border: 1px solid var(--air-chat-accent-border);
    border-radius: 12px;
    background: var(--air-chat-accent-a05);
}

/* Artifact Rendering Engine — inline "generating artifact" hint while a streamed block is being finalized. */
.air-artifact-generating {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.5rem 0.8rem;
    margin: 0.4rem 0;
    border: 1px solid var(--air-chat-accent-border);
    border-radius: 12px;
    background: var(--air-chat-accent-a05);
    color: var(--air-chat-text-subtle, var(--air-text-subtle));
    font-size: 0.85rem;
}

.air-artifact-generating__dot {
    width: 0.5rem;
    height: 0.5rem;
    border-radius: 50%;
    background: var(--air-chat-accent);
    animation: air-dot-wave 1.1s ease-in-out infinite;
}

/* Sprint 12A — placeholder for an artifact type whose interactive renderer has not shipped yet. */
.air-artifact-unsupported {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    padding: 0.75rem 0.9rem;
    margin: 0.4rem 0;
    border: 1px dashed var(--air-chat-border, var(--air-border));
    border-radius: 12px;
    background: var(--air-chat-surface-2, var(--air-surface));
    color: var(--air-chat-text-subtle, var(--air-text-subtle));
}

.air-artifact-unsupported__title {
    font-weight: 600;
    color: var(--air-chat-text, var(--air-text));
}

.air-artifact-unsupported__note {
    font-size: 0.85rem;
}

/* Sprint 12E — Artifact Canvas (visual workspace). */
.air-canvas { display: flex; flex-direction: column; height: 100%; min-height: 24rem; position: relative; }
.air-canvas__controls {
    display: flex; flex-wrap: wrap; gap: 0.4rem; align-items: center;
    padding: 0.4rem 0.5rem; border-bottom: 1px solid var(--air-chat-border, var(--air-border));
}
.air-canvas__layout, .air-canvas__search {
    padding: 0.25rem 0.5rem; border: 1px solid var(--air-chat-border, var(--air-border)); border-radius: 8px;
    background: var(--air-chat-surface-2, var(--air-surface)); color: var(--air-chat-text, var(--air-text)); font-size: 0.8rem;
}
.air-canvas__overlay { font-size: 0.78rem; color: var(--air-chat-text-subtle, var(--air-text-subtle)); }
.air-canvas__zoom {
    padding: 0.2rem 0.55rem; border: 1px solid var(--air-chat-border, var(--air-border)); border-radius: 8px;
    background: var(--air-chat-surface-2, var(--air-surface)); color: var(--air-chat-text, var(--air-text)); cursor: pointer; font-size: 0.8rem;
}
.air-canvas__surface { position: relative; flex: 1; overflow: hidden; background: var(--air-chat-surface, var(--air-surface)); touch-action: none; }
.air-canvas__world { position: absolute; transform-origin: 0 0; will-change: transform; }
.air-canvas__edges { position: absolute; overflow: visible; width: 1px; height: 1px; }
.air-canvas__edge { stroke: var(--air-chart-grid, var(--air-border)); stroke-width: 1.5; }
.air-canvas__edge--dashed { stroke-dasharray: 6 4; }
.air-canvas__edge--dotted { stroke-dasharray: 2 4; }
.air-canvas__edge.is-highlighted { stroke: var(--air-chat-accent); stroke-width: 2.5; }
.air-canvas__nodes { position: absolute; margin: 0; padding: 0; list-style: none; }
.air-canvas__node {
    position: absolute; box-sizing: border-box; padding: 0.5rem 0.6rem;
    border: 1px solid var(--air-chat-border, var(--air-border)); border-radius: 12px;
    background: var(--air-chat-surface-2, var(--air-surface)); color: var(--air-chat-text, var(--air-text)); cursor: pointer;
}
.air-canvas__node.is-selected { border-color: var(--air-chat-accent); box-shadow: var(--air-chat-shadow-lg, var(--air-shadow-lg)); }
.air-canvas__node.is-highlighted { border-color: var(--air-chat-accent); }
.air-canvas__node.is-dimmed { opacity: 0.35; }
.air-canvas__node-head { display: flex; justify-content: space-between; gap: 0.4rem; }
.air-canvas__node-type { font-size: 0.7rem; text-transform: uppercase; color: var(--air-chat-text-subtle, var(--air-text-subtle)); }
.air-canvas__node-badge { font-size: 0.7rem; color: var(--air-chat-accent); }
.air-canvas__node-title { font-weight: 600; font-size: 0.85rem; margin-top: 0.15rem; }
.air-canvas__node-metric, .air-canvas__node-warn { font-size: 0.72rem; color: var(--air-chat-text-subtle, var(--air-text-subtle)); }
.air-canvas__minimap {
    position: absolute; right: 0.6rem; bottom: 0.6rem; width: 8rem; height: 6rem;
    border: 1px solid var(--air-chat-border, var(--air-border)); border-radius: 8px;
    background: var(--air-chat-surface, var(--air-surface)); overflow: hidden;
}
.air-canvas__mini-node { position: absolute; width: 4px; height: 4px; border-radius: 50%; background: var(--air-chat-text-subtle, var(--air-text-subtle)); }
.air-canvas__mini-node.is-selected { background: var(--air-chat-accent); }
.air-canvas__inspector {
    position: absolute; right: 0; top: 0; bottom: 0; width: 22rem; overflow-y: auto;
    padding: 0.6rem; border-left: 1px solid var(--air-chat-border, var(--air-border)); background: var(--air-chat-surface, var(--air-surface));
}
@media (prefers-reduced-motion: reduce) { .air-canvas__world { will-change: auto; } }
@media (max-width: 640px) { .air-canvas__inspector { width: 100%; } }

/* Sprint 12F — live workspace: presence bar, live status, remote focus (token-driven only). */
.air-canvas__presence { display: flex; gap: 0.2rem; align-items: center; margin-left: auto; }
.air-canvas__avatar {
    display: inline-flex; align-items: center; justify-content: center;
    width: 1.6rem; height: 1.6rem; border-radius: 50%; font-size: 0.66rem; font-weight: 700;
    color: var(--air-chat-on-accent, var(--air-on-accent)); background: var(--air-avatar-color, var(--air-chat-accent));
    border: 2px solid var(--air-chat-surface, var(--air-surface));
}
.air-canvas__avatar.is-agent { border-style: dashed; }
.air-canvas__live-status {
    margin: 0; padding: 0 0.5rem; min-height: 1rem; font-size: 0.72rem;
    color: var(--air-chat-text-subtle, var(--air-text-subtle));
}
.air-canvas__node-focus { font-size: 0.72rem; margin-left: 0.25rem; color: var(--air-chat-accent); }

/* Sprint 12D — Artifact Inspector (provider-driven operational view). */
.air-inspector {
    display: flex;
    flex-direction: column;
    gap: 0.6rem;
    max-width: 26rem;
}
.air-inspector__head {
    position: sticky;
    top: 0;
    z-index: 5;
    display: flex;
    gap: 0.4rem;
    align-items: center;
    padding-bottom: 0.4rem;
    background: var(--air-chat-surface, var(--air-surface));
    border-bottom: 1px solid var(--air-chat-border, var(--air-border));
}
.air-inspector__search {
    flex: 1;
    padding: 0.35rem 0.6rem;
    border: 1px solid var(--air-chat-border, var(--air-border));
    border-radius: 8px;
    background: var(--air-chat-surface-2, var(--air-surface));
    color: var(--air-chat-text, var(--air-text));
    font-size: 0.82rem;
}
.air-inspector__recommendations { display: flex; flex-direction: column; gap: 0.35rem; }
.air-inspector__rec {
    display: flex;
    flex-direction: column;
    padding: 0.45rem 0.6rem;
    border-radius: 8px;
    border: 1px solid var(--air-chat-accent-border);
    background: var(--air-chat-accent-a05);
}
.air-inspector__rec--warning, .air-inspector__rec--critical { border-color: var(--air-chart-error, var(--air-chat-accent-border)); }
.air-inspector__rec-title { font-weight: 600; color: var(--air-chat-text, var(--air-text)); font-size: 0.82rem; }
.air-inspector__rec-desc { color: var(--air-chat-text-subtle, var(--air-text-subtle)); font-size: 0.78rem; }
.air-inspector__rec-action { align-self: flex-start; margin-top: 0.25rem; background: none; border: none; color: var(--air-chat-accent); cursor: pointer; font-size: 0.78rem; }
.air-inspector__section { border: 1px solid var(--air-chat-border, var(--air-border)); border-radius: 8px; }
.air-inspector__section-head {
    position: sticky;
    top: 2.4rem;
    padding: 0.4rem 0.6rem;
    font-weight: 600;
    font-size: 0.82rem;
    color: var(--air-chat-text, var(--air-text));
    cursor: pointer;
    list-style: none;
}
.air-inspector__section-body { padding: 0.3rem 0.6rem 0.5rem; display: flex; flex-direction: column; gap: 0.2rem; }
.air-inspector__row { display: flex; justify-content: space-between; gap: 0.6rem; font-size: 0.8rem; }
.air-inspector__label { color: var(--air-chat-text-subtle, var(--air-text-subtle)); }
.air-inspector__value { color: var(--air-chat-text, var(--air-text)); text-align: right; }
.air-inspector__value--badge { font-family: var(--air-font-mono, monospace); }
.air-inspector__warning { color: var(--air-chart-error, var(--air-chat-text)); font-size: 0.78rem; }
.air-inspector__empty { color: var(--air-chat-text-subtle, var(--air-text-subtle)); font-size: 0.8rem; padding: 0.5rem; }
@media (max-width: 640px) { .air-inspector { max-width: 100%; } }

/* Sprint 12C — registry-driven artifact toolbar. */
.air-artifact-toolbar {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    align-items: center;
}
.air-artifact-toolbar__group {
    display: inline-flex;
    gap: 0.25rem;
    align-items: center;
}
.air-artifact-toolbar__group + .air-artifact-toolbar__group {
    padding-left: 0.5rem;
    border-left: 1px solid var(--air-chat-border, var(--air-border));
}
.air-artifact-toolbar__btn {
    padding: 0.25rem 0.55rem;
    border: 1px solid var(--air-chat-border, var(--air-border));
    border-radius: 8px;
    background: var(--air-chat-surface-2, var(--air-surface));
    color: var(--air-chat-text, var(--air-text));
    font-size: 0.8rem;
    cursor: pointer;
}
.air-artifact-toolbar__btn:hover:not(.is-disabled) {
    border-color: var(--air-chat-accent-border);
    background: var(--air-chat-accent-a05);
}
.air-artifact-toolbar__btn.is-disabled {
    opacity: 0.45;
    cursor: not-allowed;
}
/* AI actions are visually distinct (Part 10) — accent-tinted, using existing tokens only. */
.air-artifact-toolbar__btn.is-ai {
    border-color: var(--air-chat-accent-border);
    color: var(--air-chat-accent);
}
/* Compact / touch responsive variants (Part 7). */
.air-artifact-toolbar.is-compact { gap: 0.35rem; }
.air-artifact-toolbar.is-compact .air-artifact-toolbar__btn { padding: 0.2rem 0.45rem; font-size: 0.75rem; }
.air-artifact-toolbar.is-touch .air-artifact-toolbar__btn { padding: 0.45rem 0.7rem; min-height: 2.25rem; }
@media (prefers-reduced-motion: reduce) {
    .air-artifact-toolbar__menu { animation: none; }
}
/* Overflow menu (Part 6). */
.air-artifact-toolbar__overflow { position: relative; display: inline-flex; }
.air-artifact-toolbar__more { font-weight: 700; }
.air-artifact-toolbar__menu {
    position: absolute;
    top: calc(100% + 0.25rem);
    right: 0;
    z-index: 20;
    display: flex;
    flex-direction: column;
    min-width: 12rem;
    padding: 0.3rem;
    border: 1px solid var(--air-chat-border, var(--air-border));
    border-radius: 10px;
    background: var(--air-chat-surface, var(--air-surface));
    box-shadow: var(--air-chat-shadow-lg, var(--air-shadow-lg));
}
.air-artifact-toolbar__menu-item {
    text-align: left;
    padding: 0.4rem 0.6rem;
    border: none;
    border-radius: 6px;
    background: transparent;
    color: var(--air-chat-text, var(--air-text));
    font-size: 0.82rem;
    cursor: pointer;
}
.air-artifact-toolbar__menu-item:hover:not(:disabled) { background: var(--air-chat-accent-a05); }
.air-artifact-toolbar__menu-item.is-ai { color: var(--air-chat-accent); }

/* Sprint 12A.1 — render-pipeline diagnostics (dev mode only). */
.air-render-diagnostics {
    margin-top: 0.3rem;
    font-family: var(--air-font-mono, monospace);
    font-size: 0.7rem;
    color: var(--air-chat-text-subtle, var(--air-text-subtle));
    opacity: 0.7;
}

.air-artifact-placeholder__head {
    display: flex;
    align-items: center;
    gap: 0.6rem;
}

.air-artifact-placeholder__icon {
    color: var(--air-chat-accent);
}

.air-artifact-placeholder__text {
    display: flex;
    flex-direction: column;
    line-height: 1.25;
}

.air-artifact-placeholder__title {
    font-weight: 600;
    color: var(--air-chat-text);
}

.air-artifact-placeholder__subtitle {
    font-size: 0.82rem;
    color: var(--air-chat-text-muted);
}

/* Sprint 10B — planned-spec detail list inside the artifact placeholder. */
.air-artifact-placeholder__spec {
    display: grid;
    grid-template-columns: auto 1fr;
    gap: 0.15rem 0.75rem;
    margin: 0.2rem 0 0.1rem;
    font-size: 0.82rem;
}
.air-artifact-placeholder__spec dt {
    color: var(--air-chat-text-muted);
    font-weight: 500;
}
.air-artifact-placeholder__spec dd {
    margin: 0;
    color: var(--air-chat-text);
    font-weight: 600;
}

/* ── Interactive chart artifact (Sprint 10C) — token-driven, responsive, no fixed pixels ────────── */
.air-chart-artifact {
    border: 1px solid var(--air-chat-border);
    border-radius: 14px;
    background: var(--air-chat-surface);
    padding: 0.85rem 1rem 1rem;
    margin: 0.4rem 0 0.7rem;
    width: 100%;
}
.air-chart-artifact.is-fullscreen {
    position: fixed;
    inset: 3vh 4vw;
    z-index: 1300;
    overflow: auto;
    box-shadow: 0 20px 60px var(--air-chat-overlay-strong);
}
.air-chart-artifact__head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 0.75rem;
    margin-bottom: 0.5rem;
}
.air-chart-artifact__titles { display: flex; flex-direction: column; min-width: 0; }
.air-chart-artifact__title { font-weight: 600; color: var(--air-chat-text); }
.air-chart-artifact__subtitle { font-size: 0.82rem; color: var(--air-chat-text-muted); }
.air-chart-artifact__actions { display: flex; gap: 0.15rem; flex-shrink: 0; }
.air-chart-artifact__act {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: transparent;
    border: none;
    border-radius: 8px;
    padding: 0.25rem;
    color: var(--air-chat-text-muted);
    cursor: pointer;
    transition: background 0.15s ease, color 0.15s ease;
}
.air-chart-artifact__act:hover:not([disabled]) { background: var(--air-chat-bg-muted); color: var(--air-chat-text); }
.air-chart-artifact__act[disabled] { opacity: 0.4; cursor: default; }
.air-chart-artifact__canvas { width: 100%; }
.air-chart-artifact__svg { width: 100%; height: auto; display: block; }
.air-chart-artifact.is-expanded .air-chart-artifact__svg { min-height: 360px; }

.air-chart-axis { stroke: var(--air-chat-border-strong); stroke-width: 1; }
.air-chart-xlabel { fill: var(--air-chat-text-muted); font-size: 11px; }
.air-chart-bar { transition: opacity 0.2s ease; }
.air-chart-bar:hover, .air-chart-slice:hover, .air-chart-point:hover { opacity: 0.82; }
.air-chart-line { stroke-width: 2; fill: none; }
.air-chart-area { opacity: 0.18; }
.air-chart-slice { stroke: var(--air-chat-surface); stroke-width: 1; }

.air-chart-artifact__legend {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem 0.9rem;
    margin-top: 0.5rem;
    font-size: 0.8rem;
    color: var(--air-chat-text-muted);
}
.air-chart-artifact__legend-item { display: inline-flex; align-items: center; gap: 0.35rem; }
.air-chart-artifact__swatch { width: 0.7rem; height: 0.7rem; border-radius: 3px; display: inline-block; }

.air-chart-artifact__warnings { display: flex; flex-direction: column; gap: 0.2rem; margin-top: 0.5rem; }
.air-chart-artifact__warn { display: inline-flex; align-items: center; gap: 0.35rem; font-size: 0.8rem; color: var(--air-chat-warning-strong); }

.air-chart-artifact__panel {
    display: grid;
    grid-template-columns: auto 1fr;
    gap: 0.15rem 0.75rem;
    margin-top: 0.5rem;
    font-size: 0.82rem;
    border-top: 1px solid var(--air-chat-border);
    padding-top: 0.5rem;
}
.air-chart-artifact__panel dt { color: var(--air-chat-text-muted); }
.air-chart-artifact__panel dd { margin: 0; color: var(--air-chat-text); font-weight: 600; }

.air-chart-artifact__source { margin-top: 0.5rem; overflow-x: auto; }
.air-chart-artifact__table { width: 100%; border-collapse: collapse; font-size: 0.8rem; }
.air-chart-artifact__table th, .air-chart-artifact__table td {
    text-align: left;
    padding: 0.25rem 0.5rem;
    border-bottom: 1px solid var(--air-chat-border);
    color: var(--air-chat-text);
}
.air-chart-artifact__table th { color: var(--air-chat-text-muted); font-weight: 600; }

.air-chart-artifact__empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.4rem;
    padding: 1.5rem;
    color: var(--air-chat-text-muted);
}
.air-chart-artifact__retry {
    border: 1px solid var(--air-chat-border-strong);
    background: transparent;
    color: var(--air-chat-text);
    border-radius: 8px;
    padding: 0.3rem 0.8rem;
    cursor: pointer;
}

/* Sprint 10E — capability-driven artifact action bar (in ArtifactHost). */
.air-artifact-host { width: 100%; }
.air-artifact-host__actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.3rem;
    justify-content: flex-end;
    margin-bottom: 0.3rem;
}
.air-artifact-host__act {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    background: transparent;
    border: 1px solid var(--air-chat-border);
    border-radius: 8px;
    padding: 0.15rem 0.55rem;
    font-size: 0.75rem;
    font-weight: 600;
    color: var(--air-chat-text-muted);
    cursor: pointer;
    transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}
.air-artifact-host__act:hover:not([disabled]) {
    background: var(--air-chat-bg-muted);
    color: var(--air-chat-text);
    border-color: var(--air-chat-border-strong);
}
.air-artifact-host__act[disabled] { opacity: 0.5; cursor: default; }

/* Sprint 10F — artifact first-class operations (details / timeline / relationships / tags). */
.air-artifact-host__rename { display: flex; gap: 0.3rem; margin: 0.3rem 0; }
.air-artifact-host__rename-input {
    flex: 1; border: 1px solid var(--air-chat-border); border-radius: 8px;
    padding: 0.25rem 0.5rem; background: var(--air-chat-bg); color: var(--air-chat-text);
}
.air-artifact-host__details {
    margin-top: 0.5rem; border-top: 1px solid var(--air-chat-border);
    padding-top: 0.5rem; display: flex; flex-direction: column; gap: 0.6rem;
}
.air-artifact-host__section-title { font-weight: 600; font-size: 0.8rem; color: var(--air-chat-text-muted); margin-bottom: 0.25rem; }
.air-artifact-host__meta { display: grid; grid-template-columns: auto 1fr; gap: 0.1rem 0.75rem; font-size: 0.8rem; }
.air-artifact-host__meta dt { color: var(--air-chat-text-muted); }
.air-artifact-host__meta dd { margin: 0; color: var(--air-chat-text); }
.air-artifact-host__tags { display: flex; flex-wrap: wrap; gap: 0.3rem; }
.air-artifact-host__tag {
    font-size: 0.75rem; padding: 0.1rem 0.5rem; border-radius: 999px;
    background: var(--air-chat-accent-a10); color: var(--air-chat-accent);
}
.air-artifact-host__tag.is-suggested { background: var(--air-chat-bg-muted); color: var(--air-chat-text-muted); }
.air-artifact-host__timeline, .air-artifact-host__rels { margin: 0; padding-left: 1rem; font-size: 0.8rem; color: var(--air-chat-text); }
.air-artifact-host__op { font-weight: 600; }
.air-artifact-host__time { color: var(--air-chat-text-subtle); font-size: 0.72rem; }

/* Sprint 10G — identity & graph summaries (compact text only). */
.air-artifact-host__mono { font-family: var(--air-font-mono, monospace); font-size: 0.75rem; }
.air-artifact-host__graph-actions { display: flex; flex-wrap: wrap; gap: 0.3rem; margin-top: 0.4rem; }
.air-artifact-host__graph-summary {
    margin-top: 0.35rem; font-size: 0.78rem; color: var(--air-chat-text-muted);
    padding: 0.35rem 0.5rem; border-radius: 0.4rem; background: var(--air-chat-bg-muted);
}

/* ─────────────────────────────────────────────────────────────────────────
   Sprint 10H — Artifact Explorer (intelligent, human-first; no graph engine).
   Token-driven only; responsive; accessible focus states.
   ───────────────────────────────────────────────────────────────────────── */
.air-artifact-host__explore-actions { display: flex; flex-wrap: wrap; gap: 0.3rem; margin-top: 0.5rem; }
.air-artifact-host__explore-link {
    background: none; border: 1px solid var(--air-chat-border); border-radius: 999px;
    padding: 0.15rem 0.6rem; font-size: 0.75rem; color: var(--air-chat-text-muted); cursor: pointer;
}
.air-artifact-host__explore-link:hover { background: var(--air-chat-accent-a10); color: var(--air-chat-accent); border-color: var(--air-chat-accent-border); }
.air-artifact-host__explore-link:focus-visible,
.air-explorer button:focus-visible { outline: 2px solid var(--air-chat-accent); outline-offset: 2px; }
.air-artifact-host__explorer { margin-top: 0.6rem; }

.air-explorer { display: flex; flex-direction: column; gap: 0.35rem; }
.air-explorer__explain {
    display: flex; gap: 0.5rem; align-items: flex-start;
    padding: 0.55rem 0.7rem; border-radius: 0.5rem;
    background: var(--air-chat-accent-a05); border: 1px solid var(--air-chat-accent-border);
    color: var(--air-chat-text);
}
.air-explorer__explain-list { margin: 0; padding-left: 1rem; font-size: 0.82rem; display: flex; flex-direction: column; gap: 0.2rem; }

.air-explorer__section { border: 1px solid var(--air-chat-border); border-radius: 0.5rem; overflow: hidden; background: var(--air-chat-surface); }
.air-explorer__header {
    width: 100%; display: flex; align-items: center; gap: 0.4rem; padding: 0.5rem 0.65rem;
    background: none; border: none; cursor: pointer; text-align: left; color: var(--air-chat-text); font-size: 0.85rem;
}
.air-explorer__header:hover { background: var(--air-chat-bg-muted); }
.air-explorer__header-title { font-weight: 600; flex: 1; }
.air-explorer__badge { font-size: 0.7rem; padding: 0.05rem 0.4rem; border-radius: 999px; background: var(--air-chat-bg-muted); color: var(--air-chat-text-muted); }
.air-explorer__body { padding: 0.55rem 0.7rem; border-top: 1px solid var(--air-chat-border); font-size: 0.82rem; color: var(--air-chat-text); }
.air-explorer__loading, .air-explorer__empty { color: var(--air-chat-text-subtle); font-size: 0.8rem; font-style: italic; }
.air-explorer__kv { display: grid; grid-template-columns: max-content 1fr; gap: 0.2rem 0.8rem; margin: 0; }
.air-explorer__kv dt { color: var(--air-chat-text-muted); }
.air-explorer__kv dd { margin: 0; display: flex; align-items: center; gap: 0.3rem; }
.air-explorer__mono { font-family: var(--air-font-mono, monospace); font-size: 0.78rem; }
.air-explorer__copy { background: none; border: none; cursor: pointer; color: var(--air-chat-text-subtle); padding: 0; display: inline-flex; }
.air-explorer__copy:hover { color: var(--air-chat-accent); }
.air-explorer__chips { display: flex; flex-wrap: wrap; gap: 0.3rem; }
.air-explorer__chip { font-size: 0.72rem; padding: 0.1rem 0.5rem; border-radius: 999px; background: var(--air-chat-bg-muted); color: var(--air-chat-text-muted); }
.air-explorer__list { margin: 0; padding-left: 1rem; }

/* Timeline (Part 7) */
.air-timeline { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.air-timeline__item { display: flex; gap: 0.55rem; padding-bottom: 0.5rem; position: relative; }
.air-timeline__item:not(:last-child) .air-timeline__dot::after {
    content: ""; position: absolute; left: 0.66rem; top: 1.4rem; bottom: 0; width: 1px; background: var(--air-chat-border);
}
.air-timeline__dot { color: var(--air-chat-accent); flex-shrink: 0; }
.air-timeline__item.is-failed .air-timeline__dot { color: var(--air-chat-danger); }
.air-timeline__content { flex: 1; }
.air-timeline__row { display: flex; justify-content: space-between; gap: 0.5rem; flex-wrap: wrap; }
.air-timeline__op { font-weight: 600; }
.air-timeline__time { color: var(--air-chat-text-subtle); font-size: 0.72rem; }
.air-timeline__meta { display: flex; gap: 0.6rem; font-size: 0.72rem; color: var(--air-chat-text-muted); }
.air-timeline__warn { color: var(--air-chat-warning-strong); }
.air-timeline__details { margin-top: 0.2rem; font-size: 0.72rem; }
.air-timeline__json { margin: 0.2rem 0 0; padding: 0.35rem; background: var(--air-chat-bg-muted); border-radius: 0.3rem; overflow-x: auto; white-space: pre-wrap; }

/* Lineage / mini-map (Part 2/9) & Family (Part 3) — shared vertical flow */
.air-flow, .air-family { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; align-items: stretch; }
.air-flow__step, .air-family__step { display: flex; flex-direction: column; align-items: center; }
.air-flow__node, .air-family__node {
    width: 100%; display: flex; align-items: center; gap: 0.5rem; padding: 0.4rem 0.6rem;
    border: 1px solid var(--air-chat-border); border-radius: 0.5rem; background: var(--air-chat-bg);
    color: var(--air-chat-text); font-size: 0.8rem; text-align: left; cursor: default;
}
.air-flow__node.is-clickable, .air-family__node:not(:disabled) { cursor: pointer; }
.air-flow__node.is-clickable:hover, .air-family__node:not(:disabled):hover { border-color: var(--air-chat-accent-border); background: var(--air-chat-accent-a05); }
.air-flow__node.is-current, .air-family__node.is-current { border-color: var(--air-chat-accent); background: var(--air-chat-accent-a10); font-weight: 600; }
.air-family__node.is-superseded { opacity: 0.55; }
.air-flow__label, .air-family__label { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.air-flow__kind { font-size: 0.68rem; color: var(--air-chat-text-subtle); }
.air-flow__arrow, .air-family__arrow { color: var(--air-chat-text-subtle); font-size: 0.9rem; line-height: 1.2; }
.air-flow--compact .air-flow__node { padding: 0.25rem 0.5rem; font-size: 0.74rem; }
.air-family__ver { font-weight: 700; color: var(--air-chat-accent); }
.air-family__badge { font-size: 0.68rem; padding: 0.05rem 0.4rem; border-radius: 999px; background: var(--air-chat-accent-a10); color: var(--air-chat-accent); }
.air-family__badge.is-muted { background: var(--air-chat-bg-muted); color: var(--air-chat-text-muted); }

/* Relationships (Part 4) */
.air-rels__group { margin-bottom: 0.5rem; }
.air-rels__group-title { font-weight: 600; font-size: 0.76rem; color: var(--air-chat-text-muted); margin-bottom: 0.25rem; }
.air-rels__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.2rem; }
.air-rels__item { display: flex; align-items: center; gap: 0.4rem; font-size: 0.78rem; flex-wrap: wrap; }
.air-rels__dir { color: var(--air-chat-accent); font-weight: 700; }
.air-rels__type { font-weight: 500; }
.air-rels__target { color: var(--air-chat-text-muted); }
.air-rels__conf { font-size: 0.68rem; color: var(--air-chat-text-subtle); }
.air-rels__time { margin-left: auto; font-size: 0.68rem; color: var(--air-chat-text-subtle); }

/* Impact (Part 5) */
.air-impact { display: flex; flex-direction: column; gap: 0.5rem; }
.air-impact__severity { display: inline-flex; align-items: center; gap: 0.35rem; align-self: flex-start; padding: 0.2rem 0.6rem; border-radius: 999px; font-size: 0.78rem; font-weight: 600; }
.air-impact__severity--low { background: var(--air-chat-accent-a10); color: var(--air-chat-accent); }
.air-impact__severity--medium { background: var(--air-chat-bg-muted); color: var(--air-chat-text); }
.air-impact__severity--high { background: var(--air-chat-warning); color: var(--air-chat-warning-strong); }
.air-impact__severity--critical { background: var(--air-chat-danger-soft); color: var(--air-chat-danger-strong); }
.air-impact__explanation { margin: 0; font-size: 0.82rem; }
.air-impact__counts { display: flex; flex-wrap: wrap; gap: 0.6rem; }
.air-impact__count { display: flex; flex-direction: column; align-items: center; min-width: 4rem; padding: 0.35rem; border-radius: 0.4rem; background: var(--air-chat-bg-muted); font-size: 0.68rem; color: var(--air-chat-text-muted); }
.air-impact__num { font-size: 1.05rem; font-weight: 700; color: var(--air-chat-text); }

/* Tags (Part 8) */
.air-tags { display: flex; flex-direction: column; gap: 0.5rem; }
.air-tags__search { display: flex; align-items: center; gap: 0.3rem; border: 1px solid var(--air-chat-border); border-radius: 0.4rem; padding: 0.2rem 0.4rem; }
.air-tags__search-input, .air-tags__add-input { border: none; background: none; outline: none; color: var(--air-chat-text); font-size: 0.78rem; width: 100%; }
.air-tags__group-title { font-weight: 600; font-size: 0.74rem; color: var(--air-chat-text-muted); margin-bottom: 0.2rem; }
.air-tags__list { display: flex; flex-wrap: wrap; gap: 0.3rem; align-items: center; }
.air-tags__tag { display: inline-flex; align-items: center; gap: 0.25rem; font-size: 0.74rem; padding: 0.1rem 0.5rem; border-radius: 999px; background: var(--air-chat-accent-a10); color: var(--air-chat-accent); }
.air-tags__tag.is-suggested { background: var(--air-chat-bg-muted); color: var(--air-chat-text-muted); }
.air-tags__tag.is-system { background: var(--air-chat-bg-muted); color: var(--air-chat-text-subtle); }
.air-tags__conf { font-size: 0.64rem; opacity: 0.8; }
.air-tags__act { background: none; border: none; cursor: pointer; color: inherit; padding: 0; display: inline-flex; }
.air-tags__act:hover { color: var(--air-chat-accent); }
.air-tags__add { display: inline-flex; align-items: center; gap: 0.2rem; border: 1px dashed var(--air-chat-border); border-radius: 999px; padding: 0.1rem 0.5rem; }
.air-tags__add-input { width: 6rem; }

/* Intelligence panel (Sprint 11A — Part 12): health indicator + recommendations. */
.air-intel { display: flex; flex-direction: column; gap: 0.5rem; }
.air-intel__health { display: flex; align-items: center; gap: 0.6rem; padding: 0.5rem 0.65rem; border-radius: 0.5rem; }
.air-intel__health--excellent { background: var(--air-chat-accent-a10); }
.air-intel__health--good { background: var(--air-chat-accent-a05); }
.air-intel__health--warning { background: var(--air-chat-warning); }
.air-intel__health--poor { background: var(--air-chat-danger-soft); }
.air-intel__health--critical { background: var(--air-chat-danger-soft); }
.air-intel__score { font-size: 1.6rem; font-weight: 800; min-width: 2.6rem; text-align: center; color: var(--air-chat-text); }
.air-intel__health--excellent .air-intel__score, .air-intel__health--good .air-intel__score { color: var(--air-chat-accent); }
.air-intel__health--warning .air-intel__score { color: var(--air-chat-warning-strong); }
.air-intel__health--poor .air-intel__score, .air-intel__health--critical .air-intel__score { color: var(--air-chat-danger-strong); }
.air-intel__health-cat { font-weight: 700; font-size: 0.9rem; }
.air-intel__health-sub { font-size: 0.72rem; color: var(--air-chat-text-muted); }
.air-intel__factors { font-size: 0.76rem; color: var(--air-chat-text-muted); }
.air-intel__factors ul { margin: 0.2rem 0 0; padding-left: 1rem; }
.air-intel__delta { font-weight: 700; color: var(--air-chat-danger-strong); margin-right: 0.3rem; }
.air-intel__row { display: flex; align-items: center; gap: 0.5rem; font-size: 0.8rem; }
.air-intel__k { color: var(--air-chat-text-muted); min-width: 6.5rem; }
.air-intel__chip { font-size: 0.72rem; padding: 0.1rem 0.5rem; border-radius: 999px; background: var(--air-chat-accent-a10); color: var(--air-chat-accent); }
.air-intel__advice { display: flex; gap: 0.4rem; align-items: flex-start; padding: 0.4rem 0.55rem; border-radius: 0.45rem; background: var(--air-chat-bg-muted); }
.air-intel__advice--recommended { background: var(--air-chat-warning); }
.air-intel__advice-title { font-weight: 600; font-size: 0.8rem; }
.air-intel__advice-reasons { font-size: 0.72rem; color: var(--air-chat-text-muted); }
.air-intel__recs { display: flex; flex-direction: column; gap: 0.3rem; }
.air-intel__recs-title { font-weight: 600; font-size: 0.78rem; color: var(--air-chat-text-muted); }
.air-intel__rec { display: flex; align-items: baseline; gap: 0.5rem; padding: 0.35rem 0.5rem; border-radius: 0.4rem; background: var(--air-chat-bg-muted); border-left: 3px solid var(--air-chat-border); }
.air-intel__rec--high, .air-intel__rec--critical { border-left-color: var(--air-chat-danger); }
.air-intel__rec--medium { border-left-color: var(--air-chat-warning-strong); }
.air-intel__rec--low, .air-intel__rec--info { border-left-color: var(--air-chat-accent); }
.air-intel__rec-action { font-weight: 600; font-size: 0.79rem; }
.air-intel__rec-reason { font-size: 0.72rem; color: var(--air-chat-text-muted); flex: 1; }
.air-intel__rec-conf { font-size: 0.68rem; color: var(--air-chat-text-subtle); }
.air-intel__rec-run {
    border: 1px solid var(--air-chat-accent-border); background: var(--air-chat-accent-a10); color: var(--air-chat-accent);
    border-radius: 999px; padding: 0.1rem 0.6rem; font-size: 0.72rem; font-weight: 600; cursor: pointer;
}
.air-intel__rec-run:hover:not(:disabled) { background: var(--air-chat-accent); color: var(--air-chat-onaccent); }
.air-intel__rec-run:disabled { opacity: 0.5; cursor: default; }
.air-intel__rec-run:focus-visible { outline: 2px solid var(--air-chat-accent); outline-offset: 2px; }

/* Execution plan panel (Sprint 11C — Part 14). */
.air-plan { margin-top: 0.6rem; border-top: 1px solid var(--air-chat-border); padding-top: 0.5rem; display: flex; flex-direction: column; gap: 0.4rem; }
.air-plan__build, .air-plan__run {
    display: inline-flex; align-items: center; gap: 0.3rem; align-self: flex-start;
    border: 1px solid var(--air-chat-accent-border); background: var(--air-chat-accent-a10); color: var(--air-chat-accent);
    border-radius: 999px; padding: 0.2rem 0.7rem; font-size: 0.76rem; font-weight: 600; cursor: pointer;
}
.air-plan__run:hover:not(:disabled) { background: var(--air-chat-accent); color: var(--air-chat-onaccent); }
.air-plan__build:disabled, .air-plan__run:disabled { opacity: 0.5; cursor: default; }
.air-plan__head { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; }
.air-plan__title { font-weight: 700; font-size: 0.82rem; }
.air-plan__badge { font-size: 0.7rem; color: var(--air-chat-text-muted); }
.air-plan__status { font-size: 0.68rem; padding: 0.05rem 0.45rem; border-radius: 999px; background: var(--air-chat-bg-muted); color: var(--air-chat-text-muted); }
.air-plan__status--completed { background: var(--air-chat-accent-a10); color: var(--air-chat-accent); }
.air-plan__status--failed { background: var(--air-chat-danger-soft); color: var(--air-chat-danger-strong); }
.air-plan__status--partialsuccess { background: var(--air-chat-warning); color: var(--air-chat-warning-strong); }
.air-plan__steps { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.35rem; }
.air-plan__group { border-left: 2px solid var(--air-chat-border); padding-left: 0.5rem; }
.air-plan__group-label { font-size: 0.68rem; color: var(--air-chat-text-subtle); text-transform: uppercase; }
.air-plan__group ul { list-style: none; margin: 0.1rem 0 0; padding: 0; }
.air-plan__step { display: flex; align-items: center; gap: 0.4rem; font-size: 0.78rem; padding: 0.1rem 0; }
.air-plan__step--completed .air-plan__step-title { text-decoration: line-through; color: var(--air-chat-text-muted); }
.air-plan__step--failed .air-plan__step-status { color: var(--air-chat-danger-strong); }
.air-plan__step-title { flex: 1; }
.air-plan__step-delta { font-size: 0.68rem; color: var(--air-chat-accent); }
.air-plan__step-status { font-size: 0.66rem; color: var(--air-chat-text-subtle); }
.air-plan__warnings, .air-plan__sim, .air-plan__result { font-size: 0.73rem; color: var(--air-chat-text-muted); }
.air-plan__actions { display: flex; gap: 0.4rem; }

/* Mission dashboard + explorer (Sprint 11D — Part 10/11). */
.air-missions { max-width: 1100px; margin: 0 auto; padding: 1rem; display: flex; flex-direction: column; gap: 0.8rem; color: var(--air-chat-text); }
.air-missions__head { display: flex; align-items: center; justify-content: space-between; }
.air-missions__title { font-size: 1.3rem; font-weight: 700; margin: 0; }
.air-missions__refresh { display: inline-flex; align-items: center; gap: 0.3rem; border: 1px solid var(--air-chat-border); background: none; border-radius: 999px; padding: 0.25rem 0.7rem; font-size: 0.8rem; color: var(--air-chat-text-muted); cursor: pointer; }
.air-missions__stats { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.air-missions__stat { flex: 1 1 6rem; min-width: 5rem; display: flex; flex-direction: column; align-items: center; padding: 0.5rem; border-radius: 0.5rem; background: var(--air-chat-surface); border: 1px solid var(--air-chat-border); font-size: 0.72rem; color: var(--air-chat-text-muted); }
.air-missions__num { font-size: 1.4rem; font-weight: 800; color: var(--air-chat-text); }
.air-missions__num--warn { color: var(--air-chat-warning-strong); }
.air-missions__num--fail { color: var(--air-chat-danger-strong); }
.air-missions__create { border: 1px solid var(--air-chat-border); border-radius: 0.5rem; padding: 0.5rem 0.7rem; background: var(--air-chat-surface); }
.air-missions__create summary { cursor: pointer; font-weight: 600; font-size: 0.85rem; }
.air-missions__form { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-top: 0.5rem; }
.air-missions__input { border: 1px solid var(--air-chat-border); border-radius: 0.4rem; padding: 0.3rem 0.5rem; font-size: 0.8rem; background: var(--air-chat-bg); color: var(--air-chat-text); }
.air-missions__input--num { width: 5rem; }
.air-missions__create-btn, .air-missions__run { border: 1px solid var(--air-chat-accent-border); background: var(--air-chat-accent-a10); color: var(--air-chat-accent); border-radius: 999px; padding: 0.25rem 0.8rem; font-size: 0.78rem; font-weight: 600; cursor: pointer; }
.air-missions__run:hover:not(:disabled), .air-missions__create-btn:hover:not(:disabled) { background: var(--air-chat-accent); color: var(--air-chat-onaccent); }
.air-missions__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.4rem; }
.air-missions__item { border: 1px solid var(--air-chat-border); border-radius: 0.5rem; background: var(--air-chat-surface); overflow: hidden; }
.air-missions__row { display: flex; align-items: center; gap: 0.6rem; padding: 0.5rem 0.6rem; flex-wrap: wrap; }
.air-missions__expand { background: none; border: none; cursor: pointer; color: var(--air-chat-text-muted); display: inline-flex; }
.air-missions__name { display: flex; flex-direction: column; flex: 1; min-width: 8rem; }
.air-missions__sub { font-size: 0.68rem; color: var(--air-chat-text-subtle); }
.air-missions__status { font-size: 0.7rem; padding: 0.1rem 0.5rem; border-radius: 999px; background: var(--air-chat-bg-muted); color: var(--air-chat-text-muted); }
.air-missions__status--waiting { background: var(--air-chat-bg-muted); }
.air-missions__status--running { background: var(--air-chat-accent-a10); color: var(--air-chat-accent); }
.air-missions__status--satisfied, .air-missions__status--completed { background: var(--air-chat-accent-a10); color: var(--air-chat-accent); }
.air-missions__status--blocked { background: var(--air-chat-warning); color: var(--air-chat-warning-strong); }
.air-missions__status--failed { background: var(--air-chat-danger-soft); color: var(--air-chat-danger-strong); }
.air-missions__status--paused { background: var(--air-chat-bg-muted); color: var(--air-chat-text-subtle); }
.air-missions__metric { font-size: 0.75rem; color: var(--air-chat-text-muted); font-variant-numeric: tabular-nums; }
.air-missions__actions { display: flex; gap: 0.3rem; }
.air-missions__detail { padding: 0.5rem 0.7rem; border-top: 1px solid var(--air-chat-border); font-size: 0.78rem; }
.air-missions__detail-meta { display: flex; flex-wrap: wrap; gap: 0.8rem; color: var(--air-chat-text-muted); }
.air-missions__timeline { list-style: none; margin: 0.4rem 0 0; padding: 0; display: flex; flex-direction: column; gap: 0.15rem; }
.air-missions__tl-event { font-weight: 500; }
.air-missions__tl-time { color: var(--air-chat-text-subtle); font-size: 0.7rem; margin-left: 0.4rem; }
/* Sprint 11E — recommendations + reasoning. */
.air-missions__recs { display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem; padding: 0.5rem 0.6rem; border: 1px dashed var(--air-chat-accent-border); border-radius: 0.5rem; background: var(--air-chat-accent-a05); }
.air-missions__recs-title { font-weight: 600; font-size: 0.78rem; color: var(--air-chat-accent); }
.air-missions__rec { display: inline-flex; align-items: center; gap: 0.3rem; font-size: 0.75rem; padding: 0.15rem 0.5rem; border-radius: 999px; background: var(--air-chat-surface); border: 1px solid var(--air-chat-border); }
.air-missions__rec-add { border: none; background: var(--air-chat-accent-a10); color: var(--air-chat-accent); border-radius: 999px; padding: 0.05rem 0.5rem; font-size: 0.7rem; font-weight: 600; cursor: pointer; }
.air-missions__reasoning { margin: 0.3rem 0; font-size: 0.78rem; color: var(--air-chat-text-muted); }
.air-missions__blocked { color: var(--air-chat-danger-strong); font-weight: 600; }
.air-missions__reason { margin-left: 0.3rem; }

/* Platform events timeline + explorer (Sprint 11F — Part 8/9). */
.air-events__chains { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.4rem; }
.air-events__chain { border: 1px solid var(--air-chat-border); border-radius: 0.5rem; background: var(--air-chat-surface); overflow: hidden; }
.air-events__chain-head { width: 100%; display: flex; align-items: center; gap: 0.5rem; padding: 0.5rem 0.6rem; background: none; border: none; cursor: pointer; text-align: left; color: var(--air-chat-text); }
.air-events__chain-head:hover { background: var(--air-chat-bg-muted); }
.air-events__chain-title { font-weight: 600; font-size: 0.83rem; flex: 1; }
.air-events__chain-count { font-size: 0.7rem; color: var(--air-chat-text-muted); }
.air-events__chain-time { font-size: 0.7rem; color: var(--air-chat-text-subtle); }
.air-events__chain-body { padding: 0.5rem 0.7rem; border-top: 1px solid var(--air-chat-border); }
.air-events__actions { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.4rem; }
.air-events__replay { font-size: 0.72rem; color: var(--air-chat-text-muted); }
.air-events__flow { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.25rem; }
.air-events__event { display: flex; align-items: center; gap: 0.5rem; font-size: 0.78rem; padding: 0.2rem 0.4rem; border-left: 2px solid var(--air-chat-border); }
.air-events__badge { font-size: 0.64rem; text-transform: uppercase; padding: 0.05rem 0.4rem; border-radius: 999px; background: var(--air-chat-bg-muted); color: var(--air-chat-text-muted); }
.air-events__event--documents { border-left-color: var(--air-chat-link); }
.air-events__event--artifacts { border-left-color: var(--air-chat-accent); }
.air-events__event--mission { border-left-color: var(--air-chat-warning-strong); }
.air-events__event--execution { border-left-color: var(--air-chat-accent-strong); }
.air-events__type { flex: 1; font-weight: 500; }
.air-events__status { font-size: 0.66rem; color: var(--air-chat-text-subtle); }
.air-events__status--failed { color: var(--air-chat-danger-strong); }
.air-events__status--processed { color: var(--air-chat-accent); }
.air-events__time { font-size: 0.68rem; color: var(--air-chat-text-subtle); }

/* Platform state dashboard + projection explorer (Sprint 11G — Part 11/12). */
.air-state__overall { display: flex; align-items: center; gap: 0.8rem; padding: 0.7rem 0.9rem; border-radius: 0.6rem; }
.air-state__overall--excellent { background: var(--air-chat-accent-a10); }
.air-state__overall--good { background: var(--air-chat-accent-a05); }
.air-state__overall--warning { background: var(--air-chat-warning); }
.air-state__overall--poor { background: var(--air-chat-danger-soft); }
.air-state__score { font-size: 2.2rem; font-weight: 800; min-width: 3rem; text-align: center; color: var(--air-chat-text); }
.air-state__overall--excellent .air-state__score, .air-state__overall--good .air-state__score { color: var(--air-chat-accent); }
.air-state__overall--poor .air-state__score { color: var(--air-chat-danger-strong); }
.air-state__overall-title { font-weight: 700; font-size: 0.95rem; }
.air-state__overall-sub { font-size: 0.75rem; color: var(--air-chat-text-muted); }
.air-state__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr)); gap: 0.5rem; }
.air-state__card { border: 1px solid var(--air-chat-border); border-radius: 0.5rem; background: var(--air-chat-surface); padding: 0.6rem 0.7rem; display: flex; flex-direction: column; gap: 0.35rem; }
.air-state__card-head { display: flex; align-items: center; justify-content: space-between; }
.air-state__card-type { font-weight: 600; font-size: 0.85rem; }
.air-state__card-health { font-size: 0.85rem; font-weight: 800; padding: 0.05rem 0.5rem; border-radius: 999px; }
.air-state__card-health--excellent, .air-state__card-health--good { background: var(--air-chat-accent-a10); color: var(--air-chat-accent); }
.air-state__card-health--warning { background: var(--air-chat-warning); color: var(--air-chat-warning-strong); }
.air-state__card-health--poor { background: var(--air-chat-danger-soft); color: var(--air-chat-danger-strong); }
.air-state__card-metrics { font-size: 0.76rem; color: var(--air-chat-text-muted); }
.air-state__card-foot { display: flex; justify-content: space-between; font-size: 0.66rem; color: var(--air-chat-text-subtle); }
.air-state__checksum { font-family: var(--air-font-mono, monospace); }
.air-state__explorer { list-style: none; margin: 0.4rem 0 0; padding: 0; display: flex; flex-direction: column; gap: 0.2rem; }
.air-state__ex-row { display: flex; flex-wrap: wrap; gap: 0.6rem; align-items: center; font-size: 0.74rem; padding: 0.2rem 0; border-bottom: 1px solid var(--air-chat-border); }
.air-state__ex-type { font-weight: 600; min-width: 7rem; }
.air-state__ex-snap { color: var(--air-chat-text-muted); }
.air-state__ex-status { margin-left: auto; color: var(--air-chat-accent); }

/* Platform intelligence dashboard (Sprint 11H — Part 7/9). */
.air-intel2__risk { font-weight: 700; }
.air-intel2__risk--low { color: var(--air-chat-accent); }
.air-intel2__risk--medium { color: var(--air-chat-warning-strong); }
.air-intel2__risk--high { color: var(--air-chat-danger-strong); }
.air-intel2__cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(18rem, 1fr)); gap: 0.6rem; }
.air-intel2__section { border: 1px solid var(--air-chat-border); border-radius: 0.5rem; background: var(--air-chat-surface); padding: 0.6rem 0.7rem; display: flex; flex-direction: column; gap: 0.3rem; }
.air-intel2__title { font-size: 0.9rem; font-weight: 700; margin: 0 0 0.2rem; }
.air-intel2__row { display: flex; align-items: center; gap: 0.5rem; font-size: 0.78rem; flex-wrap: wrap; }
.air-intel2__metric { flex: 1; color: var(--air-chat-text); font-family: var(--air-font-mono, monospace); font-size: 0.72rem; }
.air-intel2__trend--improving { color: var(--air-chat-accent); font-weight: 600; }
.air-intel2__trend--declining { color: var(--air-chat-danger-strong); font-weight: 600; }
.air-intel2__trend--volatile { color: var(--air-chat-warning-strong); }
.air-intel2__pct, .air-intel2__conf, .air-intel2__change, .air-intel2__forecast { font-size: 0.72rem; color: var(--air-chat-text-muted); }
.air-intel2__dir--improved { color: var(--air-chat-accent); }
.air-intel2__dir--regressed { color: var(--air-chat-danger-strong); }
.air-intel2__insight { padding: 0.4rem 0.55rem; border-radius: 0.4rem; border-left: 3px solid var(--air-chat-border); background: var(--air-chat-bg-muted); margin-bottom: 0.3rem; }
.air-intel2__insight--high, .air-intel2__insight--critical { border-left-color: var(--air-chat-danger); }
.air-intel2__insight--medium { border-left-color: var(--air-chat-warning-strong); }
.air-intel2__insight--low, .air-intel2__insight--info { border-left-color: var(--air-chat-accent); }
.air-intel2__insight-title { font-weight: 600; font-size: 0.82rem; }
.air-intel2__insight-text { font-size: 0.76rem; color: var(--air-chat-text-muted); }
.air-intel2__evidence { font-size: 0.68rem; color: var(--air-chat-text-subtle); margin-top: 0.15rem; }
.air-intel2__rec { display: flex; align-items: baseline; gap: 0.5rem; padding: 0.35rem 0.5rem; border-radius: 0.4rem; background: var(--air-chat-bg-muted); border-left: 3px solid var(--air-chat-accent); margin-bottom: 0.25rem; }
.air-intel2__rec--high { border-left-color: var(--air-chat-danger); }
.air-intel2__rec-action { font-weight: 600; font-size: 0.79rem; }
.air-intel2__rec-reason { font-size: 0.72rem; color: var(--air-chat-text-muted); flex: 1; }

/* Scenario / what-if dashboard (Sprint 11I — Part 10/11). */
.air-scenario__delta { font-size: 0.75rem; color: var(--air-chat-text-muted); }
.air-scenario__risk { font-size: 0.7rem; padding: 0.05rem 0.45rem; border-radius: 999px; }
.air-scenario__risk--low { background: var(--air-chat-accent-a10); color: var(--air-chat-accent); }
.air-scenario__risk--medium { background: var(--air-chat-warning); color: var(--air-chat-warning-strong); }
.air-scenario__risk--high { background: var(--air-chat-danger-soft); color: var(--air-chat-danger-strong); }
.air-scenario__health { font-size: 0.82rem; margin-bottom: 0.3rem; }
.air-scenario__insight { font-size: 0.77rem; padding: 0.2rem 0.4rem; border-left: 2px solid var(--air-chat-border); margin-bottom: 0.15rem; }
.air-scenario__insight--benefit { border-left-color: var(--air-chat-accent); }
.air-scenario__insight--risk, .air-scenario__insight--warning { border-left-color: var(--air-chat-danger); }
.air-scenario__insight--tradeoff { border-left-color: var(--air-chat-warning-strong); }
.air-scenario__cat { font-weight: 600; }
.air-scenario__evidence { color: var(--air-chat-text-subtle); font-size: 0.68rem; }
.air-scenario__diff { display: flex; flex-wrap: wrap; gap: 0.3rem; margin: 0.3rem 0; }
.air-scenario__change { font-size: 0.68rem; padding: 0.05rem 0.4rem; border-radius: 999px; background: var(--air-chat-bg-muted); color: var(--air-chat-text-muted); font-family: var(--air-font-mono, monospace); }
.air-scenario__change--improved { background: var(--air-chat-accent-a10); color: var(--air-chat-accent); }
.air-scenario__change--regressed { background: var(--air-chat-danger-soft); color: var(--air-chat-danger-strong); }
.air-scenario__rec { font-size: 0.76rem; color: var(--air-chat-text-muted); margin-top: 0.15rem; }

/* Planning / decision dashboard (Sprint 11J — Part 9/10). */
.air-plan2__opt { display: inline-flex; align-items: center; gap: 0.25rem; font-size: 0.78rem; }
.air-plan2__selected { display: flex; align-items: center; gap: 0.6rem; padding: 0.6rem 0.7rem; border-radius: 0.5rem; background: var(--air-chat-accent-a10); border: 1px solid var(--air-chat-accent-border); }
.air-plan2__selected-name { font-weight: 700; font-size: 0.9rem; }
.air-plan2__explain { font-size: 0.78rem; color: var(--air-chat-text-muted); }
.air-plan2__tradeoffs { font-size: 0.72rem; color: var(--air-chat-text-subtle); margin-top: 0.15rem; }
.air-plan2__candidates { display: grid; grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr)); gap: 0.5rem; }
.air-plan2__cand { border: 1px solid var(--air-chat-border); border-radius: 0.5rem; background: var(--air-chat-surface); padding: 0.5rem 0.6rem; display: flex; flex-direction: column; gap: 0.25rem; }
.air-plan2__cand.is-selected { border-color: var(--air-chat-accent); background: var(--air-chat-accent-a05); }
.air-plan2__cand.is-rejected { opacity: 0.6; }
.air-plan2__cand-head { display: flex; align-items: center; gap: 0.4rem; }
.air-plan2__cand-rank { font-size: 0.72rem; color: var(--air-chat-text-subtle); min-width: 1.6rem; }
.air-plan2__cand-name { font-weight: 600; font-size: 0.82rem; flex: 1; }
.air-plan2__cand-score { font-size: 1rem; font-weight: 800; color: var(--air-chat-accent); }
.air-plan2__cand-metrics { font-size: 0.72rem; color: var(--air-chat-text-muted); }
.air-plan2__cand-reject { font-size: 0.72rem; color: var(--air-chat-danger-strong); }
.air-plan2__cand-goals { display: flex; flex-wrap: wrap; gap: 0.25rem; }
.air-plan2__goal { font-size: 0.66rem; padding: 0.05rem 0.4rem; border-radius: 999px; background: var(--air-chat-bg-muted); color: var(--air-chat-text-muted); }

@media (max-width: 640px) {
    .air-explorer__kv { grid-template-columns: 1fr; }
    .air-impact__counts { justify-content: space-between; }
    .air-artifact-host__explore-actions { gap: 0.25rem; }
    .air-intel__rec { flex-wrap: wrap; }
    .air-plan__step { flex-wrap: wrap; }
    .air-missions__row { gap: 0.4rem; }
    .air-missions__actions { width: 100%; }
}
