/* ==========================================================================
   DARK ROAST: SOMACURA SEMANTIC ROLE LAYER (--sn-*)
   Version: 1.0.0
   Created: 2026-05-09
   Canonical inventory: docs/architecture/DARK_ROAST_ROLE_INVENTORY.md

   ── PURPOSE ─────────────────────────────────────────────────────────────
   Maps product meaning (workflow status, clinical severity, AI provenance,
   density) onto Dark Roast color primitives (--dr-*). The primitive layer
   is paint-chip names; this layer is jobs.

   ── GOVERNANCE BOUNDARY ─────────────────────────────────────────────────
   Layer                Prefix       File                          Rule
   Primitives           --dr-*       dark-roast-tokens.css         Raw color vocab.
   Legacy bridge        --term-*     dr-compat.css                 Grandfathered.
   Semantic roles       --sn-*       dark-roast-semantics.css      Maps to --dr-* only.
   Feature CSS          (selectors)  static/css/**                 Consumes --sn-* first.
   JS                   (no colors)  static/js/**                  Reads classes/tokens.

   ── HARD RULE — DO NOT VIOLATE ──────────────────────────────────────────
   This file MUST NOT contain raw hex / rgb / hsl values. Every --sn-*
   token resolves via var(--dr-*). If a needed primitive does not exist,
   add it to dark-roast-tokens.css Section 18 (somaNotes-local additions).

   This file MUST NOT acquire its own semantic aliases. If you find
   yourself writing `--sn-thing-2: var(--sn-thing)`, the inventory needs
   updating, not this file.

   ── DO NOT ADD TOKENS WITHOUT UPDATING THE INVENTORY ────────────────────
   New --sn-* tokens require a row in DARK_ROAST_ROLE_INVENTORY.md with
   axis, mapping, use-for, do-not-use-for, and supersedes columns.
   Drift in this layer is the failure mode it exists to prevent.
   ========================================================================== */


/* ==========================================================================
   SECTION 1: FOUNDATION TOKENS
   Surfaces, text, border, focus. The substrate the rest of the layer
   composes against.
   ========================================================================== */

[data-theme="dark-roast"] {

    /* — Surfaces — */
    --sn-surface-canvas:    var(--dr-void);
    --sn-surface-panel:     var(--dr-obsidian);
    --sn-surface-raised:    var(--dr-espresso);
    --sn-surface-overlay:   var(--dr-roasted-bean);
    --sn-surface-muted:     var(--dr-dark-cacao);
    --sn-surface-hover:     var(--dr-espresso-hover);

    /* — Text — */
    --sn-text-primary:      var(--dr-crema);
    --sn-text-secondary:    var(--dr-bone);
    --sn-text-muted:        var(--dr-mocha);
    --sn-text-disabled:     var(--dr-asparagus);
    --sn-text-inverse:      var(--dr-espresso);   /* dark text on saturated CTA bg */

    /* — Border — */
    --sn-border-default:    var(--dr-crater-deep);
    --sn-border-strong:     var(--dr-crater);
    --sn-border-subtle:     var(--dr-divider);

    /* — Focus — */
    --sn-focus-ring:        var(--dr-teal);
    --sn-focus-ring-width:  2px;
    --sn-focus-ring-offset: 2px;


    /* ======================================================================
       SECTION 2: WORKFLOW STATUS — 5 families × 8 roles
       For product/process state. NOT clinical/patient state.
       'critical' is reserved for clinical severity; workflow uses 'error'.
       ====================================================================== */

    /* — info — */
    --sn-status-info-bg:             var(--dr-teal-ghost);
    --sn-status-info-fg:             var(--dr-bone);
    --sn-status-info-border:         var(--dr-teal-dim);
    --sn-status-info-icon:           var(--dr-teal);
    --sn-status-info-bg-strong:      var(--dr-teal);
    --sn-status-info-fg-on-strong:   var(--dr-espresso);
    --sn-status-info-border-strong:  var(--dr-teal);
    --sn-status-info-bg-hover:       var(--dr-teal);   /* teal has no -hot; pair with glow/animation */

    /* — success — */
    --sn-status-success-bg:             var(--dr-teal-subtle);
    --sn-status-success-fg:             var(--dr-crema);
    --sn-status-success-border:         var(--dr-teal-dim);
    --sn-status-success-icon:           var(--dr-teal);
    --sn-status-success-bg-strong:      var(--dr-teal);
    --sn-status-success-fg-on-strong:   var(--dr-espresso);
    --sn-status-success-border-strong:  var(--dr-teal);
    --sn-status-success-bg-hover:       var(--dr-teal);   /* teal has no -hot; pair with glow/animation */

    /* — warning — */
    --sn-status-warning-bg:             var(--dr-amber-subtle);
    --sn-status-warning-fg:             var(--dr-crema);
    --sn-status-warning-border:         var(--dr-amber-muted);
    --sn-status-warning-icon:           var(--dr-amber);
    --sn-status-warning-bg-strong:      var(--dr-amber);
    --sn-status-warning-fg-on-strong:   var(--dr-espresso);
    --sn-status-warning-border-strong:  var(--dr-amber);
    --sn-status-warning-bg-hover:       var(--dr-amber-hot);

    /* — error — */
    --sn-status-error-bg:             var(--dr-burnt-sienna-subtle);
    --sn-status-error-fg:             var(--dr-crema);
    --sn-status-error-border:         var(--dr-burnt-sienna-dim);
    --sn-status-error-icon:           var(--dr-burnt-sienna);
    --sn-status-error-bg-strong:      var(--dr-burnt-sienna);
    --sn-status-error-fg-on-strong:   var(--dr-espresso);
    --sn-status-error-border-strong:  var(--dr-burnt-sienna);
    --sn-status-error-bg-hover:       var(--dr-burnt-sienna-dim);   /* no -hot; pair with animation */

    /* — neutral — */
    --sn-status-neutral-bg:             var(--dr-espresso);
    --sn-status-neutral-fg:             var(--dr-bone);
    --sn-status-neutral-border:         var(--dr-crater-deep);
    --sn-status-neutral-icon:           var(--dr-mocha);
    --sn-status-neutral-bg-strong:      var(--dr-roasted-bean);
    --sn-status-neutral-fg-on-strong:   var(--dr-crema);
    --sn-status-neutral-border-strong:  var(--dr-crater);
    --sn-status-neutral-bg-hover:       var(--dr-espresso-hover);


    /* ======================================================================
       SECTION 3: CLINICAL SEVERITY — 4 families × 3 roles
       Patient-condition severity. NOT trajectory, NOT confidence,
       NOT workflow. 'critical' uses --dr-rose to stay distinct from
       workflow 'error' (--dr-burnt-sienna).
       ====================================================================== */

    --sn-clinical-severity-normal-bg:        var(--dr-teal-ghost);
    --sn-clinical-severity-normal-fg:        var(--dr-crema);
    --sn-clinical-severity-normal-border:    var(--dr-teal-dim);

    --sn-clinical-severity-abnormal-bg:      var(--dr-amber-hot-subtle);
    --sn-clinical-severity-abnormal-fg:      var(--dr-crema);
    --sn-clinical-severity-abnormal-border:  var(--dr-amber-hot-dim);

    --sn-clinical-severity-critical-bg:      var(--dr-rose-subtle);     /* requires Section 18 primitive */
    --sn-clinical-severity-critical-fg:      var(--dr-crema);
    --sn-clinical-severity-critical-border:  var(--dr-rose);

    --sn-clinical-severity-unknown-bg:       var(--dr-espresso);
    --sn-clinical-severity-unknown-fg:       var(--dr-mocha);
    --sn-clinical-severity-unknown-border:   var(--dr-amber-muted);


    /* ======================================================================
       SECTION 4: CLINICAL TRAJECTORY — 6 families × 3 roles
       Longitudinal change. Aligns with CCE backend labels:
       NEW → new, ONGOING → ongoing, RESOLVED → resolved.
       ====================================================================== */

    --sn-clinical-trend-new-bg:           var(--dr-roasted-bean);
    --sn-clinical-trend-new-fg:           var(--dr-asparagus);
    --sn-clinical-trend-new-border:       var(--dr-asparagus);

    --sn-clinical-trend-ongoing-bg:       var(--dr-espresso);
    --sn-clinical-trend-ongoing-fg:       var(--dr-bone);
    --sn-clinical-trend-ongoing-border:   var(--dr-crater-deep);

    --sn-clinical-trend-resolved-bg:      var(--dr-teal-subtle);
    --sn-clinical-trend-resolved-fg:      var(--dr-crema);
    --sn-clinical-trend-resolved-border:  var(--dr-teal-dim);

    --sn-clinical-trend-improving-bg:     var(--dr-harvest-subtle);   /* Option C */
    --sn-clinical-trend-improving-fg:     var(--dr-crema);
    --sn-clinical-trend-improving-border: var(--dr-harvest-dim);

    --sn-clinical-trend-worsening-bg:     var(--dr-magenta-subtle);   /* Option C */
    --sn-clinical-trend-worsening-fg:     var(--dr-crema);
    --sn-clinical-trend-worsening-border: var(--dr-magenta-dim);

    --sn-clinical-trend-stable-bg:        var(--dr-olive-subtle);     /* Option C */
    --sn-clinical-trend-stable-fg:        var(--dr-crema);
    --sn-clinical-trend-stable-border:    var(--dr-olive-dim);


    /* ======================================================================
       SECTION 5: EVIDENCE CLASSIFICATION — 4 families × 3 roles
       Epistemic state. Aligns with CONFIRMED / observation / Unclassified
       backend labels.
       ====================================================================== */

    --sn-evidence-confirmed-bg:        var(--dr-teal-ghost);
    --sn-evidence-confirmed-fg:        var(--dr-bone);
    --sn-evidence-confirmed-border:    var(--dr-teal-dim);

    --sn-evidence-observation-bg:      var(--dr-espresso);
    --sn-evidence-observation-fg:      var(--dr-bone);
    --sn-evidence-observation-border:  var(--dr-crater-deep);

    --sn-evidence-unclassified-bg:     var(--dr-roasted-bean);
    --sn-evidence-unclassified-fg:     var(--dr-asparagus);
    --sn-evidence-unclassified-border: var(--dr-asparagus);

    --sn-evidence-conflicting-bg:      var(--dr-amber-hot-subtle);
    --sn-evidence-conflicting-fg:      var(--dr-crema);
    --sn-evidence-conflicting-border:  var(--dr-amber-hot-dim);


    /* ======================================================================
       SECTION 6: REVIEW WORKFLOW — 4 families × 3 roles
       Human review state. NOT clinical state. 'pending' here is workflow
       (a human has not looked yet), not patient condition.
       ====================================================================== */

    --sn-review-pending-bg:          var(--dr-amber-subtle);
    --sn-review-pending-fg:          var(--dr-crema);
    --sn-review-pending-border:      var(--dr-amber-muted);

    --sn-review-reviewed-bg:         var(--dr-teal-ghost);
    --sn-review-reviewed-fg:         var(--dr-bone);
    --sn-review-reviewed-border:     var(--dr-teal-dim);

    --sn-review-needs-action-bg:     var(--dr-amber-hot-subtle);
    --sn-review-needs-action-fg:     var(--dr-crema);
    --sn-review-needs-action-border: var(--dr-amber-hot);

    --sn-review-dismissed-bg:        var(--dr-espresso);
    --sn-review-dismissed-fg:        var(--dr-mocha);
    --sn-review-dismissed-border:    var(--dr-crater-deep);


    /* ======================================================================
       SECTION 7: AI PRESENCE — 3 families × 4 roles
       ONLY for actual AI/model authorship. Parser/calculator/extraction
       output uses --sn-provenance-*, NEVER --sn-ai-*.

       Per Carbon AI guidance: badge opens explainability, never triggers
       AI actions. See ai_badge() Jinja macro (tier-1 item #2).
       ====================================================================== */

    --sn-ai-generated-bg:      var(--dr-amber-ghost);
    --sn-ai-generated-fg:      var(--dr-crema);
    --sn-ai-generated-border:  var(--dr-amber-muted);
    --sn-ai-generated-aura:    var(--dr-glow-amber);

    --sn-ai-suggested-bg:      var(--dr-teal-ghost);
    --sn-ai-suggested-fg:      var(--dr-bone);
    --sn-ai-suggested-border:  var(--dr-asparagus);
    --sn-ai-suggested-aura:    var(--dr-glow-teal-ghost);

    --sn-ai-inferred-bg:       var(--dr-gold-ghost);
    --sn-ai-inferred-fg:       var(--dr-bone);
    --sn-ai-inferred-border:   var(--dr-gold-dim);
    --sn-ai-inferred-aura:     var(--dr-glow-gold);


    /* ======================================================================
       SECTION 8: PROVENANCE — 7 families × 3 roles
       Non-AI source attribution. Parser/calculator/RAG/extraction output
       lives here, NOT in --sn-ai-*. AI styling is reserved for genuine
       model/LLM authorship.
       ====================================================================== */

    --sn-provenance-manual-bg:               var(--dr-espresso);
    --sn-provenance-manual-fg:               var(--dr-bone);
    --sn-provenance-manual-border:           var(--dr-crater-deep);

    --sn-provenance-retrieved-bg:            var(--dr-teal-ghost);
    --sn-provenance-retrieved-fg:            var(--dr-bone);
    --sn-provenance-retrieved-border:        var(--dr-teal-dim);

    --sn-provenance-parser-extracted-bg:     var(--dr-espresso);
    --sn-provenance-parser-extracted-fg:     var(--dr-asparagus);
    --sn-provenance-parser-extracted-border: var(--dr-asparagus);

    --sn-provenance-calculator-derived-bg:     var(--dr-gold-ghost);
    --sn-provenance-calculator-derived-fg:     var(--dr-bone);
    --sn-provenance-calculator-derived-border: var(--dr-gold-dim);

    --sn-provenance-system-derived-bg:       var(--dr-dark-cacao);
    --sn-provenance-system-derived-fg:       var(--dr-mocha);
    --sn-provenance-system-derived-border:   var(--dr-crater-deep);

    --sn-provenance-human-edited-ai-bg:      var(--dr-amber-ghost);
    --sn-provenance-human-edited-ai-fg:      var(--dr-crema);
    --sn-provenance-human-edited-ai-border:  var(--dr-amber-muted);

    --sn-provenance-unknown-bg:              var(--dr-espresso);
    --sn-provenance-unknown-fg:              var(--dr-mocha);
    --sn-provenance-unknown-border:          var(--dr-amber-muted);


    /* ======================================================================
       SECTION 9: DENSITY — two-mode rule
       review = scan/retrieve surfaces (dense)
       entry  = compose/input surfaces (roomier)
       Surface assignment table lives in DARK_ROAST_ROLE_INVENTORY.md §I.

       Note: 36px and 44px do not map to existing --dr-space-*
       (which uses 4/8/12/16/20/24/32/40/48). Declared as raw px until
       canonical adds --dr-space-9 (36) and --dr-space-11 (44).
       ====================================================================== */

    --sn-density-review-row:      var(--dr-space-8);    /* 32px */
    --sn-density-entry-row:       var(--dr-space-10);   /* 40px */
    --sn-density-review-control:  var(--dr-space-8);    /* 32px */
    --sn-density-entry-control:   var(--dr-space-10);   /* 40px */
    --sn-density-review-toolbar:  36px;                 /* gap in --dr-space-* */
    --sn-density-entry-toolbar:   44px;                 /* gap in --dr-space-* */
}


/* ==========================================================================
   SECTION 10: HIGH-CONTRAST OVERRIDES
   Two activation paths: OS-level (prefers-contrast: more) and explicit
   opt-in ([data-contrast="high"]). Both apply identical intent — see
   DARK_ROAST_ROLE_INVENTORY.md §J.

   Strategy: shift bg from -ghost (5%) to -subtle (10%); shift borders
   from -dim (40%) to saturated primitive; raise foundation borders.

   Existing dark-roast-tokens.css:604 prefers-contrast block (raises
   bone/mocha/asparagus/divider) continues to apply; this layers on top.
   ========================================================================== */

@media (prefers-contrast: more) {
    [data-theme="dark-roast"] {
        /* Foundation borders raise saturation */
        --sn-border-default:  var(--dr-crater);
        --sn-border-strong:   var(--dr-amber-muted);

        /* Status borders go saturated */
        --sn-status-info-border:     var(--dr-teal);
        --sn-status-success-border:  var(--dr-teal);
        --sn-status-warning-border:  var(--dr-amber);
        --sn-status-error-border:    var(--dr-burnt-sienna);
        --sn-status-neutral-border:  var(--dr-crater);

        /* Clinical severity borders go saturated */
        --sn-clinical-severity-normal-border:    var(--dr-teal);
        --sn-clinical-severity-abnormal-border:  var(--dr-amber-hot);
        --sn-clinical-severity-critical-border:  var(--dr-rose);
        --sn-clinical-severity-unknown-border:   var(--dr-amber);

        /* Clinical trend borders go saturated */
        --sn-clinical-trend-new-border:        var(--dr-asparagus);
        --sn-clinical-trend-ongoing-border:    var(--dr-crater);
        --sn-clinical-trend-resolved-border:   var(--dr-teal);
        --sn-clinical-trend-improving-border:  var(--dr-harvest);   /* Option C */
        --sn-clinical-trend-worsening-border:  var(--dr-magenta);   /* Option C */
        --sn-clinical-trend-stable-border:     var(--dr-olive);     /* Option C */

        /* Evidence borders go saturated */
        --sn-evidence-confirmed-border:    var(--dr-teal);
        --sn-evidence-observation-border:  var(--dr-crater);
        --sn-evidence-unclassified-border: var(--dr-asparagus);
        --sn-evidence-conflicting-border:  var(--dr-amber-hot);

        /* Review borders go saturated */
        --sn-review-pending-border:      var(--dr-amber);
        --sn-review-reviewed-border:     var(--dr-teal);
        --sn-review-needs-action-border: var(--dr-amber-hot);
        --sn-review-dismissed-border:    var(--dr-crater);

        /* AI / provenance: shift ghost (5%) backgrounds to subtle (10%) */
        --sn-ai-generated-bg:                  var(--dr-amber-subtle);
        --sn-ai-suggested-bg:                  var(--dr-teal-subtle);
        --sn-ai-inferred-bg:                   var(--dr-gold-subtle);
        --sn-provenance-retrieved-bg:          var(--dr-teal-subtle);
        --sn-provenance-calculator-derived-bg: var(--dr-gold-subtle);
        --sn-provenance-human-edited-ai-bg:    var(--dr-amber-subtle);
    }
}

/* Opt-in mirror — same intent, controlled via <html data-contrast="high"> */
[data-theme="dark-roast"][data-contrast="high"] {
    --sn-border-default:  var(--dr-crater);
    --sn-border-strong:   var(--dr-amber-muted);

    --sn-status-info-border:     var(--dr-teal);
    --sn-status-success-border:  var(--dr-teal);
    --sn-status-warning-border:  var(--dr-amber);
    --sn-status-error-border:    var(--dr-burnt-sienna);
    --sn-status-neutral-border:  var(--dr-crater);

    --sn-clinical-severity-normal-border:    var(--dr-teal);
    --sn-clinical-severity-abnormal-border:  var(--dr-amber-hot);
    --sn-clinical-severity-critical-border:  var(--dr-rose);
    --sn-clinical-severity-unknown-border:   var(--dr-amber);

    --sn-clinical-trend-new-border:        var(--dr-asparagus);
    --sn-clinical-trend-ongoing-border:    var(--dr-crater);
    --sn-clinical-trend-resolved-border:   var(--dr-teal);
    --sn-clinical-trend-improving-border:  var(--dr-harvest);   /* Option C */
    --sn-clinical-trend-worsening-border:  var(--dr-magenta);   /* Option C */
    --sn-clinical-trend-stable-border:     var(--dr-olive);     /* Option C */

    --sn-evidence-confirmed-border:    var(--dr-teal);
    --sn-evidence-observation-border:  var(--dr-crater);
    --sn-evidence-unclassified-border: var(--dr-asparagus);
    --sn-evidence-conflicting-border:  var(--dr-amber-hot);

    --sn-review-pending-border:      var(--dr-amber);
    --sn-review-reviewed-border:     var(--dr-teal);
    --sn-review-needs-action-border: var(--dr-amber-hot);
    --sn-review-dismissed-border:    var(--dr-crater);

    --sn-ai-generated-bg:                  var(--dr-amber-subtle);
    --sn-ai-suggested-bg:                  var(--dr-teal-subtle);
    --sn-ai-inferred-bg:                   var(--dr-gold-subtle);
    --sn-provenance-retrieved-bg:          var(--dr-teal-subtle);
    --sn-provenance-calculator-derived-bg: var(--dr-gold-subtle);
    --sn-provenance-human-edited-ai-bg:    var(--dr-amber-subtle);
}


/* ==========================================================================
   SECTION 11: FORCED-COLORS (Windows High Contrast Mode)
   Surrender color decisions to system tokens; preserve only borders for
   structural legibility. Existing sol-layout.css forced-colors block for
   problem-signal-badge continues to apply.
   ========================================================================== */

@media (forced-colors: active) {
    [data-theme="dark-roast"] {
        --sn-focus-ring: CanvasText;
    }

    [data-theme="dark-roast"] .sn-status,
    [data-theme="dark-roast"] .sn-clinical-severity,
    [data-theme="dark-roast"] .sn-clinical-trend,
    [data-theme="dark-roast"] .sn-evidence,
    [data-theme="dark-roast"] .sn-review,
    [data-theme="dark-roast"] .sn-ai-label,
    [data-theme="dark-roast"] .sn-provenance-badge {
        forced-color-adjust: none;
        border-color: CanvasText;
    }
}
