/* ===========================================================================
   Odin's Eye - dashboard component styles on top of the native dark
   foundation (analysis-shell.css :root). This is NOT a theme override layer:
   the dashboard is dark by construction. This file only holds components added
   after the base sheets - the reputation result banner, the external-provider
   scan list, the security auth-summary chips - plus a couple of Tailwind
   utility stragglers used in raw markup.
   =========================================================================== */

/* --- Tailwind utility stragglers in dashboard markup (no-data, legacy) ----- */
body.analysis-app-body .bg-white { background: rgba(10, 15, 26, 0.92); }
body.analysis-app-body .text-gray-800 { color: var(--w-text); }
body.analysis-app-body .text-gray-600 { color: var(--w-text-soft); }
body.analysis-app-body .bg-gray-50 { background: rgba(6, 9, 17, 0.55); }

/* --- Reputation result summary banner ------------------------------------- */
.rep-summary {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    flex-wrap: wrap;
    padding: 0.7rem 0.9rem;
    border-radius: var(--odin-radius);
    border: 1px solid var(--w-hair);
    background: rgba(20, 29, 46, 0.5);
    margin-bottom: 0.6rem;
}
.rep-summary-dot { width: 0.7rem; height: 0.7rem; border-radius: 50%; flex: none; box-shadow: 0 0 12px currentColor; }
.rep-summary-copy { display: flex; flex-direction: column; gap: 0.1rem; min-width: 0; margin-right: auto; }
.rep-summary-copy strong { font-size: 0.98rem; font-weight: 800; color: var(--w-text); }
.rep-summary-copy span { font-size: 0.76rem; color: var(--w-text-mute); }
.rep-summary-counts { display: flex; flex-wrap: wrap; gap: 0.35rem; }
.rep-count-pill { font-size: 0.7rem; font-weight: 700; padding: 0.2rem 0.55rem; border-radius: 999px; border: 1px solid transparent; }
.rep-summary.rep-malicious  { border-color: var(--v-mal-bd); background: var(--v-mal-bg); }
.rep-summary.rep-malicious  .rep-summary-dot { color: var(--v-mal-fg); background: var(--v-mal-fg); }
.rep-summary.rep-suspicious { border-color: var(--v-sus-bd); background: var(--v-sus-bg); }
.rep-summary.rep-suspicious .rep-summary-dot { color: var(--v-sus-fg); background: var(--v-sus-fg); }
.rep-summary.rep-benign     .rep-summary-dot { color: var(--v-good-fg); background: var(--v-good-fg); }
.rep-summary.rep-unknown    .rep-summary-dot { color: var(--w-text-mute); background: var(--w-text-mute); }
.rep-count-pill.rep-malicious  { background: var(--v-mal-bg); border-color: var(--v-mal-bd); color: var(--v-mal-fg); }
.rep-count-pill.rep-suspicious { background: var(--v-sus-bg); border-color: var(--v-sus-bd); color: var(--v-sus-fg); }
.rep-count-pill.rep-benign     { background: var(--v-ctx-bg); border-color: var(--v-ctx-bd); color: var(--v-ctx-fg); }
.rep-count-pill.rep-unknown    { background: var(--v-unk-bg); border-color: var(--v-unk-bd); color: var(--v-unk-fg); }

/* Scan-with-providers reads as the primary external action. */
.ioc-rep-btn.scan { background: linear-gradient(135deg, var(--w-eye), var(--w-eye-deep)); color: var(--on-accent); border-color: transparent; }
.ioc-rep-btn.scan:hover:not(:disabled) { filter: brightness(1.08); }

/* --- Security auth-summary chips (verdict card) --------------------------- */
.security-verdict-summary { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-top: 0.7rem; }
.sec-auth-chip {
    display: inline-flex; align-items: center; gap: 0.4rem;
    font-size: 0.74rem; font-weight: 600;
    padding: 0.26rem 0.6rem; border-radius: 999px;
    border: 1px solid var(--w-hair); background: rgba(20, 29, 46, 0.6); color: var(--w-text-soft);
}
.sec-auth-chip strong { font-size: 0.62rem; letter-spacing: 0.06em; text-transform: uppercase; color: var(--w-text-mute); }
.sec-auth-pass { border-color: var(--v-good-bd); background: var(--v-good-bg); color: var(--v-good-fg); }
.sec-auth-pass strong { color: var(--v-good-fg); }
.sec-auth-fail { border-color: var(--v-mal-bd); background: var(--v-mal-bg); color: var(--v-mal-fg); }
.sec-auth-fail strong { color: var(--v-mal-fg); }
.sec-auth-softfail, .sec-auth-neutral, .sec-auth-none, .sec-auth-bestguesspass { border-color: var(--v-sus-bd); background: var(--v-sus-bg); color: var(--v-sus-fg); }

/* --- External-provider scan dialog: provider list ------------------------- */
.odin-decision-providers {
    list-style: none; margin: 0.2rem 0; padding: 0.4rem 1.4rem 0.2rem;
    display: flex; flex-direction: column; gap: 0.5rem;
    /* Long provider rosters scroll inside the dialog instead of pushing the
       DNS consent row and actions off-screen. */
    max-height: 42vh; overflow: auto;
}
.odin-decision-provider { display: flex; align-items: center; gap: 0.7rem; }
.odin-provider-avatar {
    --provider-accent: var(--w-eye);
    flex: none; width: 2.1rem; height: 2.1rem;
    display: grid; place-items: center; border-radius: 0.6rem;
    font-size: 0.72rem; font-weight: 800; letter-spacing: 0.02em;
    color: var(--provider-accent);
    background: color-mix(in srgb, var(--provider-accent) 14%, transparent);
    border: 1px solid color-mix(in srgb, var(--provider-accent) 40%, transparent);
}
.odin-decision-provider > div,
.odin-provider-pick > div { display: flex; flex-direction: column; min-width: 0; }
.odin-provider-name { display: inline-flex; align-items: center; gap: 0.45rem; min-width: 0; }
/* Marks providers that receive DNS-derived IPs; same cyan family as the DNS
   consent row so the two read as one disclosure. */
.odin-provider-tag {
    flex: none; padding: 0.05rem 0.4rem; border-radius: 999px;
    font-size: 0.6rem; font-weight: 800; letter-spacing: 0.06em; line-height: 1.4;
    color: var(--v-ctx-fg); background: var(--v-ctx-bg);
    border: 1px solid var(--v-ctx-bd); cursor: help;
}
.odin-decision-provider strong { font-size: 0.86rem; color: var(--w-text); font-weight: 700; }
.odin-decision-provider span { font-size: 0.76rem; color: var(--w-text-mute); }

/* Rendered email stays on light "paper" (emails expect light) but floats in a
   dark gutter framed as an intentional card within the dark preview pane. */
.email-content-frame iframe { background: #ffffff; border-radius: 12px; box-shadow: 0 10px 30px rgba(2, 6, 14, 0.5); min-height: 26rem; }

/* Input placeholders on dark. */
body.analysis-app-body input::placeholder,
body.analysis-app-body textarea::placeholder { color: var(--w-text-faint); }

/* Disabled scan button matches the muted disabled state (not a live-looking fill). */
.ioc-rep-btn.scan:disabled { background: rgba(140, 170, 220, 0.06); color: var(--w-text-mute); filter: none; }

/* Provider checklist rows in the scan dialog. */
.odin-decision-provider { padding: 0; }
.odin-provider-pick {
    display: flex; align-items: center; gap: 0.7rem;
    width: 100%; padding: 0.35rem 0.4rem; border-radius: 0.6rem;
    cursor: pointer; transition: background 0.12s ease;
}
.odin-provider-pick:hover { background: rgba(53, 224, 255, 0.06); }
.odin-provider-pick input[type="checkbox"] {
    flex: none; width: 1.05rem; height: 1.05rem; margin: 0;
    accent-color: var(--w-eye); cursor: pointer;
}
.odin-provider-pick:has(input:not(:checked)) { opacity: 0.5; }

/* --- Prism syntax theme (dark) for the email HTML/Source/Plaintext preview ---
   Prism ships a light theme: a white text-shadow emboss + black base text, which
   renders as a fuzzy halo (and near-invisible text) on our dark preview. Reset it
   and give the tokens a dark-legible palette. */
.email-content-frame pre[class*="language-"],
.email-content-frame code[class*="language-"] {
    text-shadow: none;
    color: var(--w-text-soft);
    background: transparent;
}
.email-content-frame :not(pre) > code[class*="language-"] { background: rgba(6, 9, 17, 0.6); }
.email-content-frame .token.comment,
.email-content-frame .token.prolog,
.email-content-frame .token.doctype,
.email-content-frame .token.cdata { color: var(--w-text-mute); }
.email-content-frame .token.punctuation { color: #8fb3d9; }
.email-content-frame .token.tag,
.email-content-frame .token.selector,
.email-content-frame .token.keyword,
.email-content-frame .token.atrule { color: #7fb0ff; }
.email-content-frame .token.attr-name,
.email-content-frame .token.property,
.email-content-frame .token.class-name { color: #ffc477; }
.email-content-frame .token.string,
.email-content-frame .token.attr-value,
.email-content-frame .token.char,
.email-content-frame .token.inserted { color: #5fe9be; }
.email-content-frame .token.number,
.email-content-frame .token.boolean,
.email-content-frame .token.constant,
.email-content-frame .token.deleted { color: #ff8592; }
.email-content-frame .token.operator,
.email-content-frame .token.entity,
.email-content-frame .token.url { background: transparent; color: #7fe6ff; }
.email-content-frame .token.important,
.email-content-frame .token.bold { color: #ffb347; font-weight: 700; }

/* --- Consent-gated DNS expansion ------------------------------------------ */
/* Distinct opt-in row in the scan dialog: separated from the provider list so
   the DNS disclosure reads as its own decision, not another provider. */
.odin-decision-dns { padding: 0.15rem 1.4rem 0.3rem; }
.odin-dns-pick {
    display: flex; align-items: flex-start; gap: 0.7rem;
    padding: 0.55rem 0.6rem; border-radius: 0.7rem;
    border: 1px dashed var(--v-ctx-bd);
    background: var(--v-ctx-bg);
    cursor: pointer; transition: background 0.12s ease, border-color 0.12s ease;
}
.odin-dns-pick:hover { background: rgba(53, 224, 255, 0.14); }
.odin-dns-pick input[type="checkbox"] {
    flex: none; width: 1.05rem; height: 1.05rem; margin: 0.12rem 0 0;
    accent-color: var(--w-eye); cursor: pointer;
}
.odin-dns-icon { flex: none; color: var(--v-ctx-fg); display: inline-flex; margin-top: 0.05rem; }
.odin-dns-icon svg { width: 1.1rem; height: 1.1rem; }
.odin-dns-pick > div { display: flex; flex-direction: column; gap: 0.15rem; min-width: 0; }
.odin-dns-pick strong { font-size: 0.84rem; color: var(--w-text); font-weight: 700; }
.odin-dns-pick span { font-size: 0.74rem; color: var(--w-text-mute); line-height: 1.45; }
.odin-dns-pick:has(input:not(:checked)) { border-color: var(--w-hair); background: transparent; }
.odin-dns-pick:has(input:not(:checked)) .odin-dns-icon { color: var(--w-text-faint); }
.odin-dns-pick:has(input:not(:checked)) strong { color: var(--w-text-mute); }

/* Workbench provenance for IPs that exist because of a consented DNS expansion. */
.ioc-pill.dns {
    border: 1px solid var(--v-ctx-bd);
    background: var(--v-ctx-bg);
    color: var(--v-ctx-fg);
    cursor: help;
}
.ioc-value-chip.is-derived { border-color: var(--v-ctx-bd); }

/* --- Local intelligence line (transparency for "Check local feeds") ------- */
.ioc-local-intel { margin-top: 0.55rem; }
.ioc-intel {
    border: 1px solid var(--w-hair);
    border-radius: 0.7rem;
    background: rgba(6, 9, 17, 0.35);
}
.ioc-intel summary {
    display: flex; align-items: center; gap: 0.5rem;
    padding: 0.45rem 0.75rem;
    cursor: pointer; list-style: none;
    font-size: 0.78rem; color: var(--w-text-soft);
}
.ioc-intel summary::-webkit-details-marker { display: none; }
.ioc-intel summary::after {
    content: "▾"; margin-left: auto; color: var(--w-text-faint);
    transition: transform 0.15s ease;
}
.ioc-intel[open] summary::after { transform: rotate(180deg); }
.ioc-intel summary strong { color: var(--w-text); font-weight: 700; }
.ioc-intel-dot {
    width: 7px; height: 7px; border-radius: 999px; flex: none;
    background: var(--w-good); box-shadow: 0 0 6px rgba(55, 224, 168, 0.5);
}
.ioc-intel-dot.warn { background: var(--w-warn); box-shadow: 0 0 6px rgba(255, 179, 71, 0.5); }
.ioc-intel-meta { color: var(--w-text-mute); }
.ioc-intel-body { max-height: 16rem; overflow: auto; border-top: 1px solid var(--w-hair); }
.ioc-intel-body table { width: 100%; border-collapse: collapse; font-size: 0.74rem; }
.ioc-intel-body th {
    position: sticky; top: 0; text-align: left;
    padding: 0.35rem 0.75rem; background: var(--w-ink-2);
    color: var(--w-text-mute); font-size: 0.64rem; font-weight: 700;
    letter-spacing: 0.06em; text-transform: uppercase;
}
.ioc-intel-body td {
    padding: 0.3rem 0.75rem;
    border-top: 1px solid rgba(140, 170, 220, 0.06);
    color: var(--w-text-soft);
}
.ioc-intel-name { color: var(--w-text); }
.ioc-intel-cat { color: var(--w-text-mute); }
.ioc-intel-count, .ioc-intel-age {
    font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
    white-space: nowrap;
}
.ioc-intel-body tr.is-err td { color: var(--v-mal-fg); }
.ioc-intel-tag {
    display: inline-block; margin-left: 0.45rem; padding: 0 0.4rem;
    border-radius: 999px; font-size: 0.62rem; font-weight: 700;
}
.ioc-intel-tag.allow { background: var(--v-good-bg); color: var(--v-good-fg); border: 1px solid var(--v-good-bd); }
.ioc-intel-tag.err { background: var(--v-mal-bg); color: var(--v-mal-fg); border: 1px solid var(--v-mal-bd); }
.ioc-intel-tag.pending { background: var(--v-unk-bg); color: var(--v-unk-fg); border: 1px solid var(--v-unk-bd); }
