/* ============================================================
   utilities.css - F-030

   Every declaration here was an inline style= attribute in a Razor
   view. Inline style attributes cannot be admitted by a CSP nonce -
   only style-src 'unsafe-inline' allows them, and that permits ANY
   injected inline style, which is the hole this file closes.

   Matched on a data-u attribute rather than a class. Views already carry
   class attributes, and merging into them mechanically risks mangling
   markup; a separate attribute cannot collide with anything.

   Names are deliberately opaque (u-NN). This is not a design system and
   should not grow into one: new work belongs in site.css or admin.css
   with a meaningful name. This file should only ever shrink, as its
   declarations are folded into real component styles.
   ============================================================ */

[data-u="u-01"] { background:#e5e7eb; border-radius:4px; height:8px; overflow:hidden; }
[data-u="u-02"] { background:#eff6ff; border-radius:8px; }
[data-u="u-03"] { background:#f0fdf4; border-radius:8px; }
[data-u="u-04"] { background:#f8fafc; border-bottom:1px solid var(--border-color); }
[data-u="u-05"] { background:#fef2f2; border-radius:8px; }
[data-u="u-06"] { border-top:1px solid var(--border-color); }
[data-u="u-07"] { color:#2f855a; }
[data-u="u-08"] { display: block; background: rgba(0,0,0,0.5); }
[data-u="u-09"] { display: none; }
[data-u="u-10"] { display:flex;justify-content:space-between;align-items:center; }
[data-u="u-11"] { display:flex;justify-content:space-between;align-items:center;gap:8px; }
[data-u="u-12"] { display:inline; }
[data-u="u-13"] { display:none; }
[data-u="u-14"] { display:none; background:#fafafa; }
[data-u="u-15"] { font-family:monospace; font-size:0.85rem; }
[data-u="u-16"] { font-size: 0.65rem; }
[data-u="u-17"] { font-size: 1.2rem; }
[data-u="u-18"] { font-size:0.55rem; padding:2px 6px; }
[data-u="u-19"] { font-size:0.65rem; }
[data-u="u-20"] { font-size:0.75rem; }
[data-u="u-21"] { font-size:0.7rem; }
[data-u="u-22"] { font-size:2rem; font-weight:700; color:#16a34a; }
[data-u="u-23"] { font-size:2rem; font-weight:700; color:#2563eb; }
[data-u="u-24"] { font-size:2rem; font-weight:700; color:#dc2626; }
[data-u="u-25"] { font-size:2rem; opacity:0.3; }
[data-u="u-26"] { font-weight:700;color:#48bb78; }
[data-u="u-27"] { grid-template-columns: repeat(5, 1fr); }
[data-u="u-28"] { height:300px; background:#fff; }
[data-u="u-29"] { margin-bottom:4pt; font-size:9.5pt; }
[data-u="u-30"] { margin-top:4px; }
[data-u="u-31"] { margin-top:8px; }
[data-u="u-32"] { max-height:400px; overflow-y:auto; }
[data-u="u-33"] { max-height:400px; overflow:auto; font-size:0.75rem; }
[data-u="u-34"] { opacity:.7; }
[data-u="u-35"] { padding:0; }
[data-u="u-36"] { text-transform: capitalize; }
[data-u="u-37"] { text-transform:capitalize; }
[data-u="u-38"] { text-transform:capitalize; }
[data-u="u-39"] { vertical-align: -2px; }
[data-u="u-40"] { vertical-align: -2px; margin-right: 4px; }
[data-u="u-41"] { width:100px; }
[data-u="u-42"] { width:40px; }
[data-u="u-43"] { width:auto; }


/* ---- Batch progress bar (F-030) -------------------------------------------
   The two segments' widths are the only genuinely dynamic styles in the app and
   are applied from script via CSSOM, which CSP's style-src does not restrict.
   Everything static about them lives here. */
.batch-progress-sent   { background: #16a34a; height: 100%; float: left; }
.batch-progress-failed { background: #dc2626; height: 100%; float: left; }
