/* ================================================================
   style.css — profile.fanmart.org
   Place at: /var/www/profile/assets/style.css
   Served with: Cache-Control: public, max-age=31536000, immutable
   Cache-bust via filemtime() query string in _head.php

   Dark mode: duplicated @media + [data-theme] blocks eliminated.
   Rules are written ONCE under .is-dark (set on <html> by app.js
   and by the flash-prevention snippet in _head.php).
   OS preference (@media) also adds .is-dark via app.js on load.
   ================================================================ */

/* ── Dark mode: CSS custom properties ───────────────────────── */
/* Written once — .is-dark is toggled by app.js and pre-set by   */
/* the flash-prevention inline script in _head.php.              */
html.is-dark {
  --bg:       #0d1117;
  --surface:  #161b22;
  --border:   #30363d;
  --navy:     #e6edf3;
  --blue:     #58a6ff;
  --blue-lt:  #1c2a3f;
  --blue-mid: #1f3358;
  --muted:    #8b949e;
  --text:     #e6edf3;
  --green:    #3fb950;
  --red:      #f85149;
  --amber:    #d29922;
  --shadow:   0 1px 4px rgba(0,0,0,.5);
  --shadow-md:0 4px 20px rgba(0,0,0,.6);
}


/* ── OS dark-mode preference: activates before JS runs ──────── */
/* Ensures no flash for users whose OS is in dark mode and who   */
/* have not set a manual override (no data-theme attribute).     */
/* app.js adds .is-dark on load, which then takes over entirely. */
@media (prefers-color-scheme: dark) {
  html:not([data-theme="light"]) {
    --bg:       #0d1117;
    --surface:  #161b22;
    --border:   #30363d;
    --navy:     #e6edf3;
    --blue:     #58a6ff;
    --blue-lt:  #1c2a3f;
    --blue-mid: #1f3358;
    --muted:    #8b949e;
    --text:     #e6edf3;
    --green:    #3fb950;
    --red:      #f85149;
    --amber:    #d29922;
    --shadow:   0 1px 4px rgba(0,0,0,.5);
    --shadow-md:0 4px 20px rgba(0,0,0,.6);
  }
}

/* ── Dark mode: component overrides ─────────────────────────── */
/* Written once — same .is-dark class on <html>.                  */
/* html/body must be top-level rules (cannot be nested in CSS     */
/* nesting without Baseline-2024 support). All others use nesting.*/
html.is-dark, html.is-dark body { background: var(--bg); color: var(--text); }
html.is-dark .page-header h1  { color: var(--navy); }
html.is-dark .page-header p   { color: var(--muted); }
html.is-dark .card            { background: var(--surface); border-color: var(--border); }
html.is-dark .card-header     { border-bottom-color: var(--border); }
html.is-dark .card-header h2  { color: var(--navy); }
html.is-dark .card-header p   { color: var(--muted); }

html.is-dark .sec-label       { color: var(--muted); }
html.is-dark .divider         { background: var(--border); }
html.is-dark .field label     { color: #c9d1d9; }
html.is-dark .field input[type=text],
html.is-dark .field input[type=password],
html.is-dark .field select    { background: #0d1117; color: var(--text); border-color: var(--border); }
html.is-dark .field input[type=text]::placeholder,
html.is-dark .field input[type=password]::placeholder { color: #484f58; }
html.is-dark .hint            { color: #8b949e; }
html.is-dark .provider-btn    { background: var(--surface); color: var(--text); border-color: var(--border); }
html.is-dark .provider-btn:hover,
html.is-dark .provider-btn.active { background: var(--blue-lt); border-color: var(--blue); color: var(--text); }
html.is-dark .proto-btn       { background: var(--surface); border-color: var(--border); }
html.is-dark .proto-btn:hover,
html.is-dark .proto-btn.active { background: var(--blue-lt); border-color: var(--blue); }
html.is-dark .proto-text strong { color: var(--navy); }
html.is-dark .proto-text span   { color: var(--muted); }
html.is-dark .scope-btn       { background: #1c2a1c; color: #8b949e; border-color: #30363d; }
html.is-dark .scope-btn:hover { background: #1a3a1a; color: #3fb950; border-color: #238636; }
html.is-dark .scope-btn.active { background: #1a3a1a; color: #3fb950; border-color: #238636;
                    box-shadow: 0 0 0 3px rgba(63,185,80,.18); }
html.is-dark .toggle .sl      { background: #30363d; }
html.is-dark .toggle input:checked + .sl { background: #238636; }
html.is-dark .banner.ok   { background:#0f2b0f; border-color:#238636; color:#3fb950; }
html.is-dark .banner.err  { background:#2b0f0f; border-color:#da3633; color:#f85149; }
html.is-dark .banner.info { background:#0d1f38; border-color:#1f6feb; color:#58a6ff; }
html.is-dark .banner code { background: rgba(255,255,255,.08); color: #c9d1d9; }
html.is-dark .v-list li   { color: #c9d1d9; }
html.is-dark .url-box     { background:#1c2a3f; border-color:#1f6feb; color:#58a6ff; }
html.is-dark .url-box a   { color:#79c0ff; }
html.is-dark .copy-btn    { background:#388bfd; color:#fff; }
html.is-dark .copy-btn:hover { background:#58a6ff; color:#fff; }
html.is-dark .cert-warn   { background:#2d1a00; border-color:#9e6a03; color:#e3b341; }
html.is-dark .cert-ok     { background:#0f2b0f; border-color:#238636; color:#3fb950; }
html.is-dark .prog-bar-bg { background:#21262d; }
html.is-dark .prog-header { color: var(--text); }
html.is-dark .prog-domain { color: #c9d1d9; }
html.is-dark .prog-results-list { border-color: var(--border); }
html.is-dark .prog-result-row   { border-bottom-color: var(--border); color: #e6edf3; }
html.is-dark .probe-toggle-btn  { color: var(--blue); }
html.is-dark .card-generating-notice { color: #8b949e; }
html.is-dark .probe-table th { background:#30363d; color:#e6edf3; }
html.is-dark .probe-table td { color:#e6edf3; }
html.is-dark .probe-ok td  { background:rgba(63,185,80,.12); }
html.is-dark .probe-fail td { background:rgba(248,81,73,.12); }
html.is-dark .probe-table code { color:#c9d1d9; }
html.is-dark .lang-btn { border-color:var(--border); color:#8b949e; }
html.is-dark .lang-btn:hover,.lang-btn.active { border-color:var(--blue); color:var(--blue); background:var(--blue-lt); }
html.is-dark .theme-btn { border-color:var(--border); color:#8b949e; }
html.is-dark .theme-btn:hover { border-color:var(--blue); color:var(--blue); background:var(--blue-lt); }
html.is-dark .expiry-badge { background:#2d1a00; border-color:#9e6a03; color:#e3b341; }
html.is-dark .share-dl { background:#388bfd; }
html.is-dark .share-dl:hover { background:#58a6ff; }
html.is-dark .qr-wrap      { background: var(--surface); border-color: var(--border); }
html.is-dark .qr-wrap p    { color: var(--muted); }
html.is-dark .btn-dl-qr    { background: var(--blue-lt); color: var(--blue); border-color:#1f6feb; }
html.is-dark #ref-table-wrap { border-color: var(--border); }
html.is-dark .ref-table th   { background:#21262d; color:#c9d1d9; }
html.is-dark .ref-table td   { border-bottom-color: var(--border); color: var(--text); }
html.is-dark .ref-table tr:nth-child(even) td { background:#0d1117; }
html.is-dark .ref-table .pname { color:#58a6ff; }
html.is-dark .ref-table code   { color:#c9d1d9; }
html.is-dark .ref-toggle       { color: var(--blue); }
html.is-dark .share-row        { background:#1c2a3f; border-color:#1f6feb; color:#c9d1d9; }
html.is-dark .share-row input  { color:#79c0ff; }
html.is-dark .share-row button { background:#1f6feb; }
html.is-dark .share-row button:hover { background:#388bfd; }
html.is-dark .profile-name    { color: var(--text); }
html.is-dark .profile-meta    { color: var(--muted); }
html.is-dark .profile-meta a  { color: var(--blue) !important; }
html.is-dark .btn-dl  { background:#1c2a3f; color:var(--blue); border-color:#1f6feb; }
html.is-dark .btn-dl:hover { background:#1f3358; }
html.is-dark .btn-del { background:#2b0f0f; color:#f85149; border-color:#da3633; }
html.is-dark .btn-del:hover { background:#da3633; color:#fff; border-color:#da3633; }
html.is-dark .btn-del-all { background:#2b0f0f; color:#f85149; border-color:#da3633; }
html.is-dark .btn-del-all:hover { background:#da3633; color:#fff; border-color:#da3633; }
html.is-dark .btn-dl-zip { background:#1f6feb; }
html.is-dark .btn-dl-zip:hover { background:#388bfd; }
html.is-dark .badge-pill { background: var(--blue-lt); color: var(--blue); }
html.is-dark .install-tabs      { border-bottom-color: var(--border); }
html.is-dark .install-tab       { color: var(--muted); }
html.is-dark .install-tab:hover { color: var(--text); }
html.is-dark .install-tab.active { color: var(--blue); border-bottom-color: var(--blue); }
html.is-dark .install-block li  { color: #c9d1d9; }
html.is-dark .install-block li span { color: #c9d1d9; }
html.is-dark .step-n            { background: #1f6feb; color: #000; }
html.is-dark .compat-tag        { background: var(--blue-lt); color: var(--blue); border-color:#1f6feb; }
html.is-dark .modal-ov { background: rgba(0,0,0,.75); }
html.is-dark .modal    { background: var(--surface); }
html.is-dark .modal h2 { color: var(--navy); }
html.is-dark .modal p  { color: #c9d1d9; }
html.is-dark .modal-notice { background:#2d1a00; border-color:#9e6a03; color:#e3b341; }
html.is-dark .btn-cancel   { background:#21262d; color:#c9d1d9; border-color: var(--border); }
html.is-dark .btn-cancel:hover { background:#30363d; }
html.is-dark .btn-del-confirm { background:#da3633; }
html.is-dark .btn-del-confirm:hover { background:#b91c1c; }
html.is-dark .footer { color: #484f58; }
html.is-dark .btn-reset { color: var(--text); border-color: var(--muted); background: transparent; }
html.is-dark .btn-reset:hover { border-color: var(--blue); color: var(--blue); background: var(--blue-lt); }
html.is-dark .btn-primary:hover { background: #1e40af; }
html.is-dark .btn-primary:disabled { background: #374151; color: #6b7280; }


/* ================================================================
   Light-mode base styles
   ================================================================ */
/* ── Dark mode toggle button ─────────────────────────────────── */
.theme-btn {
  background:none; border:1.5px solid var(--border); border-radius:5px;
  padding:3px 8px; font-size:.82rem; cursor:pointer;
  color:var(--muted); line-height:1.6;
  transition:border-color .15s,color .15s,background .15s;
}
.theme-btn:hover { border-color:var(--blue); color:var(--blue); background:var(--blue-lt); }

/* ── Cert expiry banner (#15) ───────────────────────────────── */
.cert-warn {
  background:#fef3c7; border:1px solid #d97706; border-radius:8px;
  padding:10px 16px; margin-bottom:16px; font-size:.82rem;
  line-height:1.5; color:#92400e; display:flex; align-items:center; gap:8px;
}
.cert-ok {
  background:#f0fdf4; border:1px solid #16a34a; border-radius:8px;
  padding:8px 16px; margin-bottom:16px; font-size:.78rem;
  line-height:1.5; color:#166534; display:flex; align-items:center; gap:8px;
}

/* ── Scope selector (#3) ────────────────────────────────────── */
.scope-row { display:flex; gap:8px; }
.scope-btn {
  flex:1; display:flex; flex-direction:column; align-items:center; gap:4px;
  padding:10px 8px; border:1.5px solid #d1d5db; border-radius:8px;
  background:#f9fafb; cursor:pointer;
  font-size:.78rem; font-weight:600; color:#6b7280;
  transition:border-color .15s, background .15s, color .15s, box-shadow .15s;
}
.scope-btn:hover {
  border-color:#16a34a; color:#15803d; background:#f0fdf4;
}
.scope-btn.active {
  border-color:#16a34a; background:#f0fdf4; color:#15803d;
  box-shadow:0 0 0 3px rgba(22,163,74,.15);
}
.scope-btn .scope-ico { font-size:1.2rem; }
.scope-btn input { display:none; }

/* iOS-style toggle — green when on, grey when off */
.toggle-row{display:flex;align-items:center;gap:10px;padding:6px 0}
.toggle-row span{font-size:.84rem;color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none}
.toggle{position:relative;width:40px;height:22px;flex-shrink:0}
.toggle input{opacity:0;width:0;height:0}
.toggle .sl{
  position:absolute;inset:0;background:#d1d5db;
  border-radius:22px;cursor:pointer;transition:background .2s;
}
.toggle .sl::before{
  content:'';position:absolute;width:16px;height:16px;left:3px;top:3px;
  background:#fff;border-radius:50%;transition:transform .2s;
  box-shadow:0 1px 2px rgba(0,0,0,.2);
}
.toggle input:checked+.sl { background:#16a34a; }
.toggle input:checked+.sl::before { transform:translateX(18px); }

/* ── Probe progress bar (#11) ───────────────────────────────── */
.prog-wrap { margin-top:12px; }
.prog-header {
  display:flex; justify-content:space-between; align-items:center;
  font-size:.78rem; font-weight:600; color:var(--text); margin-bottom:6px;
}
.prog-bar-bg {
  height:6px; background:#e2e8f0; border-radius:4px; overflow:hidden;
}
.prog-bar-fill {
  height:6px; background:var(--blue); border-radius:4px;
  width:0%; transition:width .2s ease;
}
.prog-domain {
  font-size:.72rem; color:var(--muted); margin-top:4px;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.prog-result-row {
  display:flex; align-items:center; gap:6px;
  font-size:.74rem; padding:2px 0;
  border-bottom:1px solid var(--border);
  animation:rowIn .15s ease;
}
.prog-result-row:last-child { border-bottom:none; }
.prog-results-list {
  max-height:160px; overflow-y:auto; margin-top:6px;
  border:1px solid var(--border); border-radius:6px; padding:4px 8px;
}

/* ── Probe card ─────────────────────────────────────────────── */
.probe-card-progress {
  padding: 0 0 10px 0;
}
.probe-card-body {
  overflow:hidden; max-height:0; transition:max-height .3s ease;
}
/* NOTE: actual open-state max-height is set inline by JS
   (expandProbeBody() in app.js), sized to the panel's real content
   height via scrollHeight. A fixed value here (previously 600px)
   clipped the panel once all 45 probe result rows render — their
   combined height comfortably exceeds any one hardcoded number.
   This class only marks the open/closed state for other selectors
   (e.g. .probe-toggle-btn) that key off it; it intentionally sets
   no max-height of its own. */
.probe-card-body.open {
}
.probe-toggle-btn {
  background:none; border:none; cursor:pointer; font-size:.76rem;
  color:var(--blue); font-weight:600; padding:6px 0 0 0;
  display:inline-flex; align-items:center; gap:4px;
  text-decoration:underline; text-underline-offset:2px;
}

/* ── Card 1 collapse state ──────────────────────────────────── */
.card-collapsible-body {
  opacity:1;
  transition:opacity .25s ease;
}
.card-collapsible-body.card-collapsed {
  opacity:0;
  height:0;
  overflow:hidden;
  pointer-events:none;
}
.card-generating-notice {
  display:none; padding:14px 22px 14px;
  font-size:.82rem; color:var(--muted); text-align:center;
}
.card-generating-notice.visible { display:block; }

/* ── QR code card (#13) ─────────────────────────────────────── */
.qr-wrap {
  background:var(--surface); border:1px solid var(--border); border-radius:10px;
  padding:18px; display:flex; flex-direction:column; align-items:center; gap:10px;
  text-align:center;
}
.qr-wrap p { font-size:.78rem; color:var(--muted); line-height:1.4; max-width:220px; }
#qr-canvas { border-radius:6px; }
.btn-dl-qr {
  background:var(--blue-lt); color:var(--blue); border:1px solid #bfdbfe;
  border-radius:6px; padding:6px 14px; font-size:.76rem; font-weight:600;
  cursor:pointer; text-decoration:none; display:inline-flex; align-items:center; gap:4px;
  transition:background .15s;
}
.btn-dl-qr:hover { background:#dbeafe; }

/* ── Share link (#5) ─────────────────────────────────────────── */
.share-row {
  display:flex; align-items:center; gap:8px; margin-top:8px;
  background:var(--blue-lt); border:1px solid #bfdbfe; border-radius:7px;
  padding:9px 13px; font-size:.79rem; color:var(--navy);
}
.share-row input {
  flex:1; border:none; background:transparent; font-size:.79rem;
  font-family:'SFMono-Regular',Consolas,monospace; color:inherit;
  outline:none; min-width:0;
}
.share-row button {
  background:var(--navy); color:#fff; border:none; border-radius:5px;
  padding:5px 10px; font-size:.72rem; font-weight:600;
  cursor:pointer; white-space:nowrap; flex-shrink:0;
  transition:background .15s;
}
.share-row button:hover { background:#1e3a6e; }
.share-row button.copied { background:#16a34a; }

/* ── Install tabs (#4 tvOS) ──────────────────────────────────── */
.install-tabs {
  display:flex; gap:0; border-bottom:1px solid var(--border); margin-bottom:18px;
}
.install-tab {
  padding:8px 16px; font-size:.8rem; font-weight:600; color:var(--muted);
  cursor:pointer; border-bottom:2px solid transparent; margin-bottom:-1px;
  transition:color .15s, border-color .15s; background:none; border-top:none;
  border-left:none; border-right:none;
}
.install-tab:hover { color:var(--text); }
.install-tab.active { color:var(--blue); border-bottom-color:var(--blue); }
.install-pane { display:none; }
.install-pane.active { display:block; }

/* ── CSS variables ───────────────────────────────────────────── */
:root {
  --bg:       #f8fafc;
  --surface:  #ffffff;
  --border:   #e2e8f0;
  --navy:     #0f172a;
  --blue:     #2563eb;
  --blue-lt:  #eff6ff;
  --blue-mid: #dbeafe;
  --muted:    #64748b;
  --text:     #1e293b;
  --green:    #16a34a;
  --red:      #dc2626;
  --amber:    #d97706;
  --radius:   12px;
  --shadow:   0 1px 3px rgba(0,0,0,.08), 0 1px 2px rgba(0,0,0,.06);
  --shadow-md:0 4px 16px rgba(0,0,0,.10);
  --max-w:    min(80vw, 1200px);
  --gutter:   clamp(16px, 5vw, 40px);
}
html { background: var(--bg); }
body {
  font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;
  background:var(--bg); color:var(--text);
  min-height:100vh; position:relative;
  padding: 50px var(--gutter) 80px;
  display:flex; flex-direction:column; align-items:center; gap:24px;
  box-sizing:border-box; overflow-x:hidden;
}

/* ── Background wallpaper ────────────────────────────────────
   A fixed, full-viewport tiled icon pattern sitting behind every
   card. Each tile is an 80px square containing one of 4 DNS icons
   (server / globe / shield / user) at a fixed, never-distorted size,
   randomly assigned per tile with no overlap. The 1280x1280 SVG is a
   16x16 grid of those tiles; the browser repeats it edge-to-edge via
   background-repeat, so it covers any viewport size without ever
   re-scaling a tile. z-index:-1 keeps it above the body's solid
   background colour but behind every card and piece of text. */
body::before {
  content:'';
  position:fixed; inset:0; z-index:-1; pointer-events:none;
  /* Versioned via a CSS custom property set in views/_head.php's
     inline theme-init script (see its comment for why not a plain
     <style> override — CSP). Falls back to the unversioned path if
     that script ever fails to run (e.g. JS disabled). */
  background-image:var(--wallpaper-light-url, url('/assets/wallpaper-light.svg'));
  background-repeat:repeat;
}
html.is-dark body::before {
  background-image:var(--wallpaper-dark-url, url('/assets/wallpaper-dark.svg'));
}

/* ── Language switcher ──────────────────────────────────────── */
.lang-sw { position:fixed; top:12px; right:16px; z-index:99; display:flex; gap:5px; }
.lang-btn {
  background:none; border:1.5px solid var(--border); border-radius:5px;
  padding:3px 8px; font-size:.7rem; font-weight:700; cursor:pointer;
  color:var(--muted); text-decoration:none; line-height:1.6;
  transition:border-color .15s,color .15s,background .15s;
}
.lang-btn:hover,.lang-btn.active { border-color:var(--blue); color:var(--blue); background:var(--blue-lt); }

/* ── Profile-details 2-column grid (desktop) ─────────────────── */
/* Left col: Profile Name, Server URL, Fallback IP               */
/* Right col: Organization, Profile Identifier                   */
.details-grid { display:grid; grid-template-columns:1fr 1fr; gap:0 24px; align-items:start; }
.details-col  { min-width:0; }

/* ── HARDENING: Profile Details fields, hidden by default ─────── */
/* Toggled via DEBUG_SHOW_FIELDS in config/debug.php (server-side  */
/* file edit only). The wrapped fields remain in the DOM, are      */
/* still auto-filled by fillFromProvider() in app.js, and are      */
/* still submitted with the form — only their visibility changes.  */
.df-hidden { display:none; }

/* ── Expiry badge ────────────────────────────────────────────── */
.expiry-badge {
  display:inline-block; font-size:.67rem; font-weight:600;
  background:#fef3c7; color:#92400e; border:1px solid #fde68a;
  border-radius:10px; padding:1px 7px; white-space:nowrap;
}

/* ── Share download button ───────────────────────────────────── */
.share-dl {
  background:var(--navy); color:#fff; border:none; border-radius:5px;
  padding:5px 10px; font-size:.8rem; font-weight:600; cursor:pointer;
  white-space:nowrap; flex-shrink:0; text-decoration:none;
  display:inline-flex; align-items:center; transition:background .15s;
}
.share-dl:hover { background:#1e3a6e; }

/* ── Page header ─────────────────────────────────────────────── */
.page-header{
  width:100%; max-width:var(--max-w); text-align:center; margin-bottom:4px;
}
.page-header h1{
  font-size:clamp(1.25rem, 3vw, 1.75rem);
  font-weight:800; color:var(--navy); letter-spacing:-.02em;
}
.page-header p{ font-size:.9rem; color:var(--muted); margin-top:4px; }

/* ── Card ────────────────────────────────────────────────────── */
.card{
  background:var(--surface); border:1px solid var(--border);
  border-radius:var(--radius); box-shadow:var(--shadow);
  width:100%; max-width:var(--max-w); overflow:hidden;
}
.card-header{
  padding:20px 28px 16px;
  border-bottom:1px solid var(--border);
}
.card-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px}
.card-header h2{font-size:1rem;font-weight:700;color:var(--navy)}
.card-header p{font-size:.8rem;color:var(--muted);margin-top:2px}
.badge-pill{
  background:var(--blue-lt); color:var(--blue);
  font-size:.68rem; font-weight:700; border-radius:20px;
  padding:3px 10px; white-space:nowrap; letter-spacing:.02em;
}
.card-body{padding:24px 28px 28px}

/* ── Section label ───────────────────────────────────────────── */
.sec-label{
  font-size:.68rem; font-weight:700; text-transform:uppercase;
  letter-spacing:.08em; color:var(--muted); margin:20px 0 10px;
}
.sec-label:first-child{margin-top:0}
.divider{height:1px;background:var(--border);margin:20px 0}

/* ── Provider selector buttons ───────────────────────────────── */
.provider-grid{
  display:grid; grid-template-columns:repeat(4,1fr); gap:10px;
}
.provider-btn{
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:8px; padding:14px 8px 12px;
  border:2px solid var(--border); border-radius:10px;
  background:var(--surface); cursor:pointer;
  transition:border-color .15s, background .15s, box-shadow .15s;
  font-size:.76rem; font-weight:600; color:var(--text);
  text-align:center; line-height:1.2;
}
.provider-btn:hover{border-color:var(--blue);background:var(--blue-lt)}
.provider-btn.active{
  border-color:var(--blue); background:var(--blue-lt);
  box-shadow:0 0 0 3px rgba(37,99,235,.15);
}
.provider-btn .prov-icon{
  width:36px; height:36px; border-radius:8px;
  display:flex; align-items:center; justify-content:center;
  font-size:20px;
}
/* Provider brand colours */
.prov-fanmart .prov-icon{background:linear-gradient(135deg,#0f172a,#2563eb)}
.prov-mullvad .prov-icon{background:#192740}
.prov-quad9 .prov-icon{background:#2f3c7e}
.prov-adguard .prov-icon{background:#67b279}

/* ── Protocol radio buttons ──────────────────────────────────── */
.proto-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.proto-btn{
  display:flex; align-items:center; gap:12px; padding:12px 14px;
  border:2px solid var(--border); border-radius:8px;
  background:var(--surface); cursor:pointer;
  transition:border-color .15s, background .15s, box-shadow .15s;
}
.proto-btn:hover{border-color:var(--blue);background:var(--blue-lt)}
.proto-btn.active{
  border-color:var(--blue); background:var(--blue-lt);
  box-shadow:0 0 0 3px rgba(37,99,235,.12);
}
.proto-btn input[type=radio]{display:none}
.proto-icon{
  width:36px; height:36px; border-radius:8px;
  display:flex; align-items:center; justify-content:center;
  font-size:18px; flex-shrink:0;
}
.proto-doh .proto-icon{background:#0ea5e9;color:#fff}
.proto-dot .proto-icon{background:#7c3aed;color:#fff}
.proto-text strong{display:block;font-size:.82rem;font-weight:700;color:var(--navy)}
.proto-text span{font-size:.72rem;color:var(--muted)}

/* ── Form fields ─────────────────────────────────────────────── */
.field-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.field{margin-bottom:14px}
.field label{display:block;font-size:.78rem;font-weight:600;color:#475569;margin-bottom:5px}
.field label .req{color:var(--red);margin-left:2px}
.field label .hint{font-weight:400;color:#94a3b8;font-size:.72rem}
.field-label-text{display:block;font-size:.78rem;font-weight:600;color:#475569;margin-bottom:5px}
.field input[type=text],
.field input[type=password]{
  width:100%; padding:9px 12px;
  border:1.5px solid var(--border); border-radius:7px;
  font-size:.875rem; color:var(--text); background:#fff;
  outline:none; transition:border-color .15s, box-shadow .15s;
}
.field input:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.field input.input-err{border-color:var(--red)}
.field input.input-err:focus{box-shadow:0 0 0 3px rgba(220,38,38,.12)}
.field input[readonly]{background:#f8fafc;cursor:default;color:#64748b}

/* Reference table toggle */
.ref-toggle{
  background:none;border:none;cursor:pointer;font-size:.75rem;
  color:var(--blue);font-weight:600;padding:0;margin-top:6px;
  display:inline-flex;align-items:center;gap:3px;
  text-decoration:underline;text-underline-offset:2px;
}
#ref-table-wrap{display:none;margin-top:8px;border-radius:6px;overflow:hidden;border:1px solid var(--border)}
#ref-table-wrap.open{display:block}
.ref-table{width:100%;border-collapse:collapse;font-size:.76rem}
.ref-table th{background:var(--navy);color:#fff;padding:6px 10px;text-align:left;font-size:.72rem}
.ref-table td{padding:5px 10px;border-bottom:1px solid var(--border);vertical-align:top}
.ref-table tr:last-child td{border-bottom:none}
.ref-table tr:nth-child(even) td{background:#f8fafc}
.ref-table .pname{font-weight:600;color:var(--navy)}
.ref-table code{font-family:'SFMono-Regular',Consolas,monospace;font-size:.9em}

/* ── Submit / action buttons ─────────────────────────────────── */
.btn-row{display:flex;justify-content:space-between;align-items:center;margin-top:22px;gap:10px}
.btn-primary{
  background:#1d4ed8;color:#ffffff;border:none;border-radius:8px;
  padding:11px 28px;font-size:.9rem;font-weight:700;cursor:pointer;
  transition:background .15s,transform .1s;letter-spacing:-.01em;
  /* Explicit blue+white so it stays readable in both light and dark */
}
.btn-primary:hover{background:#1e40af}
.btn-primary:active{transform:scale(.98)}
.btn-primary:disabled{background:#6b7280;color:rgba(255,255,255,.7);cursor:not-allowed}
.btn-primary .spin{
  display:inline-block;width:12px;height:12px;
  border:2px solid rgba(255,255,255,.4);border-top-color:#fff;
  border-radius:50%;animation:spin .6s linear infinite;
  margin-right:6px;vertical-align:-2px;
}
@keyframes spin{to{transform:rotate(360deg)}}
.spin{
  display:inline-block; width:12px; height:12px;
  border:2px solid var(--border); border-top-color:var(--blue);
  border-radius:50%; animation:spin .6s linear infinite;
  margin-right:8px; vertical-align:-2px;
}
.btn-reset{
  background:none;border:1.5px solid var(--muted);border-radius:8px;
  padding:10px 18px;font-size:.84rem;font-weight:600;
  color:var(--text);cursor:pointer;transition:border-color .15s,color .15s,background .15s;
}
.btn-reset:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-lt)}

/* ── Banners ─────────────────────────────────────────────────── */
.banner{border-radius:8px;padding:14px 16px;margin-bottom:20px;font-size:.86rem;line-height:1.55}
.banner.ok{background:#f0fdf4;color:#15803d;border:1px solid #bbf7d0}
.banner.err{background:#fff1f2;color:#9f1239;border:1px solid #fecdd3}
.banner.info{background:#f0f9ff;color:#0c4a6e;border:1px solid #bae6fd}
.banner strong{display:block;margin-bottom:3px;font-size:.92rem}
.banner code{background:rgba(0,0,0,.06);border-radius:3px;padding:1px 5px;font-size:.82em;font-family:'SFMono-Regular',Consolas,monospace}

/* validation list */
.v-list{margin-top:8px;display:flex;flex-direction:column;gap:4px}
.v-list li{list-style:none;font-size:.8rem;display:flex;align-items:baseline;gap:6px;flex-wrap:wrap}

/* url result box */
.url-box{
  background:#eff6ff;border:1px solid #bfdbfe;border-radius:7px;
  padding:10px 13px;margin-top:10px;word-break:break-all;
  font-family:'SFMono-Regular',Consolas,monospace;font-size:.79rem;color:#1e40af;
  display:flex;align-items:center;gap:8px;
}
.url-box a{color:#1e40af;font-weight:600;flex:1}
.copy-btn{
  background:var(--navy);color:#fff;border:none;border-radius:5px;
  padding:5px 10px;font-size:.72rem;font-weight:600;cursor:pointer;
  white-space:nowrap;transition:background .15s;flex-shrink:0;
}
.copy-btn:hover{background:#1e3a6e}
.copy-btn.copied{background:#16a34a}

/* macOS note */

/* probe table */
.probe-wrap{width:100%;margin-top:6px;flex-basis:100%}
.probe-table{width:100%;border-collapse:collapse;font-size:.74rem;border-radius:6px;overflow:hidden}
.probe-table th{background:rgba(0,0,0,.1);padding:4px 9px;text-align:left;font-weight:700;letter-spacing:.02em}
.probe-table td{padding:3px 9px;border-top:1px solid rgba(0,0,0,.05)}
.probe-ok td{background:rgba(22,163,74,.06)}
.probe-fail td{background:rgba(220,38,38,.06)}
.probe-table code{font-family:'SFMono-Regular',Consolas,monospace;font-size:.9em}

/* ── Profile list (Card 2) ───────────────────────────────────── */
.profile-list{display:flex;flex-direction:column}
.profile-row{
  display:grid;grid-template-columns:1fr auto;align-items:center;gap:12px;
  padding:12px 0;border-bottom:1px solid var(--border);
  animation:rowIn .2s ease;
}
@keyframes rowIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}
.profile-row:last-child{border-bottom:none}
.profile-row.deleting{opacity:.35;pointer-events:none;transition:opacity .3s}
.profile-name{font-size:.87rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.profile-meta{font-size:.71rem;color:var(--muted);margin-top:2px;display:flex;gap:8px;flex-wrap:wrap}
.profile-meta .sep::before{content:'·';margin-right:8px}
.profile-actions{display:flex;gap:6px;align-items:center;flex-shrink:0}
.btn-dl{
  background:var(--blue-lt);color:var(--blue);border:1px solid #bfdbfe;
  border-radius:6px;padding:5px 11px;font-size:.74rem;font-weight:600;
  cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;gap:3px;
  transition:background .15s;white-space:nowrap;
}
.btn-dl:hover{background:#dbeafe}
.btn-dl-zip{
  display:inline-flex;align-items:center;gap:7px;
  background:var(--navy);color:#fff;border:none;
  border-radius:7px;padding:8px 16px;font-size:.79rem;font-weight:600;
  text-decoration:none;cursor:pointer;transition:background .15s;white-space:nowrap;
}
.btn-dl-zip:hover{background:#1e3a6e}
.btn-del{
  background:#fff1f2;color:var(--red);border:1px solid #fecdd3;
  border-radius:6px;padding:5px 11px;font-size:.74rem;font-weight:600;
  cursor:pointer;display:inline-flex;align-items:center;gap:3px;
  transition:background .15s,color .15s,border-color .15s;white-space:nowrap;
}
.btn-del:hover{background:var(--red);color:#fff;border-color:var(--red)}
.empty-state{text-align:center;padding:24px 0 8px;color:var(--muted);font-size:.85rem}
.empty-state .ico{font-size:2rem;margin-bottom:8px}

/* ── Installation card ───────────────────────────────────────── */
.install-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.install-block h3{font-size:.85rem;font-weight:700;color:var(--navy);margin-bottom:10px;display:flex;align-items:center;gap:7px}
.install-block h3 .iico{font-size:1.1rem}
.install-block ol{padding-left:0;list-style:none;display:flex;flex-direction:column;gap:6px}
.install-block li{
  display:flex;gap:8px;font-size:.79rem;color:#475569;line-height:1.4;
}
.install-block li .step-n{
  width:18px;height:18px;background:#1d4ed8;color:#fff;
  border-radius:50%;font-size:.65rem;font-weight:700;
  display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:1px;
}
.compat-row{
  display:flex;gap:8px;flex-wrap:wrap;margin-top:16px;padding-top:16px;
  border-top:1px solid var(--border);
}
.compat-tag{
  background:var(--blue-lt);color:var(--blue);border:1px solid #bfdbfe;
  border-radius:20px;padding:3px 11px;font-size:.73rem;font-weight:600;
}

/* ── Delete modal ────────────────────────────────────────────── */
.modal-ov{
  display:none;position:fixed;inset:0;background:rgba(15,23,42,.5);
  z-index:100;align-items:center;justify-content:center;padding:20px;
}
.modal-ov.open{display:flex}
.modal{
  background:#fff;border-radius:14px;box-shadow:var(--shadow-md);
  padding:28px;max-width:400px;width:100%;animation:modalIn .16s ease;
}
@keyframes modalIn{from{transform:scale(.94);opacity:0}to{transform:scale(1);opacity:1}}
.modal h2{font-size:1rem;font-weight:700;margin-bottom:8px}
.modal p{font-size:.85rem;color:#475569;line-height:1.5;margin-bottom:14px}
.modal p strong{color:var(--text);word-break:break-all}
.modal-notice{
  background:#fefce8;border:1px solid #fde68a;border-radius:6px;
  padding:9px 12px;font-size:.78rem;color:#92400e;margin-bottom:18px;line-height:1.4;
}
.modal-acts{display:flex;gap:8px;justify-content:flex-end}
.btn-cancel{
  background:#f1f5f9;color:#475569;border:1.5px solid var(--border);
  border-radius:7px;padding:8px 18px;font-size:.84rem;font-weight:600;
  cursor:pointer;transition:background .15s;
}
.btn-cancel:hover{background:#e2e8f0}
.btn-del-confirm{
  background:var(--red);color:#fff;border:none;border-radius:7px;
  padding:8px 18px;font-size:.84rem;font-weight:600;
  cursor:pointer;transition:background .15s;
}
.btn-del-confirm:hover{background:#b91c1c}

/* ── Footer ─────────────────────────────────────────────────── */
.footer{font-size:.71rem;color:#94a3b8;text-align:center}

/* ── Responsive breakpoints ──────────────────────────────────── */

/* Mobile phones < 600px — single column, full width */
@media (max-width: 599px) {
  :root { --max-w: 100%; }
  body { padding-left: 14px; padding-right: 14px; }
  .card-body, .card-header { padding-left: 14px; padding-right: 14px; }
  .provider-grid  { grid-template-columns: repeat(2, 1fr); gap: 8px; }
  .proto-grid     { grid-template-columns: 1fr; }
  .field-row      { grid-template-columns: 1fr; }
  .details-grid   { grid-template-columns: 1fr; }
  .profile-row    { grid-template-columns: 1fr; }
  .profile-actions { justify-content: flex-start; margin-top: 6px; }
  .install-tab    { padding: 7px 10px; font-size: .72rem; }
  .qr-url-grid    { grid-template-columns: 1fr !important; }
  .scope-row      { gap: 6px; }
  .field input[type=text], .field input[type=password] { max-width: 100%; box-sizing: border-box; }
}

/* Small tablet / large phone 600–767px */
@media (min-width: 600px) and (max-width: 767px) {
  :root { --max-w: 100%; }
  .provider-grid { grid-template-columns: repeat(4, 1fr); }
  .field-row     { grid-template-columns: 1fr; }
  .details-grid  { grid-template-columns: 1fr; }
  .proto-grid    { grid-template-columns: 1fr 1fr; }
  .field input[type=text], .field input[type=password] { max-width: 100%; box-sizing: border-box; }
}

/* iPad and larger 768px+ — two columns */
@media (min-width: 768px) {
  .field-row     { grid-template-columns: 1fr 1fr; }
  .proto-grid    { grid-template-columns: 1fr 1fr; }
  .provider-grid { grid-template-columns: repeat(4, 1fr); }
  .details-grid  { grid-template-columns: 1fr 1fr; }
}

/* Desktop 1024px+ */
@media (min-width: 1024px) {
  .card-body   { padding: 26px 36px 32px; }
  .card-header { padding: 20px 36px 16px; }
}

/* ── Android DoT guide ────────────────────────────────────────── */
.android-hero {
  display:flex; flex-direction:column; align-items:center;
  gap:8px; padding:28px 0 18px; text-align:center;
}
.android-hero .droid-icon {
  width:64px; height:64px; border-radius:18px;
  background:linear-gradient(135deg,#4caf50,#1b5e20);
  display:flex; align-items:center; justify-content:center;
  font-size:36px; box-shadow:0 4px 16px rgba(76,175,80,.3);
}
.android-hero h2 { font-size:1.15rem; font-weight:700; color:var(--navy); margin:0; }
.android-hero p  { font-size:.84rem; color:var(--muted); margin:0; max-width:340px; line-height:1.5; }

/* Mode notice banner */
.mode-notice {
  background:#f0fdf4; border:1px solid #bbf7d0; border-radius:8px;
  padding:10px 14px; margin-bottom:18px; font-size:.80rem;
  color:#15803d; display:flex; align-items:center; gap:8px; line-height:1.5;
}
.mode-notice a { color:#15803d; font-weight:600; }

/* DoT provider cards */
.dot-provider-grid {
  display:grid; grid-template-columns:repeat(2,1fr); gap:14px; margin-top:4px;
}
@media (min-width:600px) { .dot-provider-grid { grid-template-columns:repeat(2,1fr); } }
@media (min-width:900px) { .dot-provider-grid { grid-template-columns:repeat(4,1fr); } }
@media (max-width:599px) { .dot-provider-grid { grid-template-columns:1fr; } }

.dot-card {
  border:1.5px solid var(--border); border-radius:10px;
  background:var(--surface); padding:14px;
  display:flex; flex-direction:column; gap:8px;
  transition:border-color .15s, box-shadow .15s;
}
.dot-card:hover { border-color:var(--blue); box-shadow:0 0 0 3px rgba(37,99,235,.08); }
.dot-card-header {
  display:flex; align-items:center; gap:10px;
}
.dot-card-icon {
  width:36px; height:36px; border-radius:8px;
  display:flex; align-items:center; justify-content:center;
  font-size:20px; flex-shrink:0;
}
.dot-card-name { font-size:.84rem; font-weight:700; color:var(--navy); }
.dot-card-desc { font-size:.73rem; color:var(--muted); line-height:1.4; }
.dot-hostname-label {
  font-size:.68rem; font-weight:700; text-transform:uppercase;
  letter-spacing:.06em; color:var(--muted); margin-bottom:2px;
}
.dot-hostname {
  font-family:'SFMono-Regular',Consolas,monospace;
  font-size:.80rem; color:var(--blue); font-weight:600;
  background:var(--blue-lt); border:1px solid #bfdbfe;
  border-radius:5px; padding:6px 10px;
  display:flex; align-items:center; justify-content:space-between; gap:6px;
  word-break:break-all; flex-wrap:wrap;
}
.dot-hostname .copy-btn { flex-shrink:0; }
.dot-fanmart .dot-card-icon { background:linear-gradient(135deg,#0f172a,#2563eb); }
.dot-mullvad .dot-card-icon { background:#192740; }
.dot-quad9   .dot-card-icon { background:#2f3c7e; }
.dot-adguard .dot-card-icon { background:#67b279; }
.dot-badge {
  display:inline-flex; align-items:center; gap:4px;
  font-size:.67rem; font-weight:600; border-radius:10px;
  padding:2px 8px; white-space:nowrap;
}
.dot-badge-priv  { background:#f0fdf4; color:#15803d; border:1px solid #bbf7d0; }
.dot-badge-swiss { background:#fff1f2; color:#9f1239; border:1px solid #fecdd3; }
.dot-badge-eu    { background:#eff6ff; color:#1d4ed8; border:1px solid #bfdbfe; }
.dot-badge-own   { background:#fdf4ff; color:#7e22ce; border:1px solid #e9d5ff; }

/* Android setup steps */
.android-steps { display:flex; flex-direction:column; gap:0; }
.android-step {
  display:flex; gap:14px; padding:16px 0;
  border-bottom:1px solid var(--border);
}
.android-step:last-child { border-bottom:none; }
.android-step-num {
  width:28px; height:28px; background:var(--navy); color:#fff;
  border-radius:50%; font-size:.75rem; font-weight:700;
  display:flex; align-items:center; justify-content:center; flex-shrink:0; margin-top:1px;
}
.android-step-body { flex:1; min-width:0; }
.android-step-title { font-size:.87rem; font-weight:700; color:var(--navy); margin-bottom:3px; }
.android-step-desc  { font-size:.80rem; color:var(--muted); line-height:1.5; }
.android-step-desc code {
  background:var(--blue-lt); color:var(--blue); border-radius:4px;
  padding:1px 6px; font-family:'SFMono-Regular',Consolas,monospace; font-size:.85em;
}
.android-mode-note {
  background:#fef3c7; border:1px solid #fde68a; border-radius:7px;
  padding:10px 13px; font-size:.79rem; color:#92400e; line-height:1.5;
  margin-top:10px;
}
.android-mode-note strong { display:block; margin-bottom:2px; }

/* ── Dark mode: Android guide overrides ─────────────────────── */
/* Consolidated from the original duplicate @media + [data-theme] pair. */
html.is-dark .dot-card         { background:var(--surface); border-color:var(--border); }
html.is-dark .dot-card:hover   { border-color:var(--blue); }
html.is-dark .dot-card-name    { color:var(--navy); }
html.is-dark .dot-hostname     { background:var(--blue-lt); border-color:#1f6feb; color:#79c0ff; }
html.is-dark .mode-notice      { background:#0f2b0f; border-color:#238636; color:#3fb950; }
html.is-dark .mode-notice a    { color:#3fb950; }
html.is-dark .android-hero h2  { color:var(--navy); }
html.is-dark .android-step-title { color:var(--navy); }
html.is-dark .android-step-num   { background:#1f6feb; color:#000; }
html.is-dark .android-mode-note  { background:#2d1a00; border-color:#9e6a03; color:#e3b341; }

/* ── Dark mode: missing rules for android.php + card_install.php ── */
html.is-dark .android-step         { border-bottom-color: var(--border); }
html.is-dark .android-step-desc    { color: #8b949e; }
html.is-dark .android-step-desc code { background: rgba(255,255,255,.08); color: #c9d1d9; }

html.is-dark .dot-card-desc        { color: #8b949e; }
html.is-dark .dot-card-header      { /* inherits from card, no override needed */ }
html.is-dark .dot-card-icon        { /* icon colours are SVG/emoji, no override needed */ }
html.is-dark .dot-hostname-label   { color: #8b949e; }

html.is-dark .dot-badge-priv       { background:#0f2b0f; color:#3fb950; border-color:#238636; }
html.is-dark .dot-badge-swiss      { background:#2b0f0f; color:#f85149; border-color:#da3633; }
html.is-dark .dot-badge-eu         { background:#0d1f38; color:#58a6ff; border-color:#1f6feb; }
html.is-dark .dot-badge-own        { background:#1f0a2b; color:#c084fc; border-color:#7c3aed; }

html.is-dark .compat-row           { border-top-color: var(--border); }
html.is-dark .install-block h3     { color: var(--navy); }
html.is-dark .install-pane         { /* display toggle only — no colour override needed */ }

/* ── Utilities ──────────────────────────────────────────────────
   Small, generic, reusable rules. Added when converting inline
   style="" attributes to CSP-safe classes (style-src 'self', no
   'unsafe-inline'). Keep this list short — anything used once with
   real semantic meaning should get its own named class instead.
*/
.u-mt-10     { margin-top:10px; }
.u-hidden    { display:none; }
.u-inline    { display:inline; }
.u-nowrap    { white-space:nowrap; }

/* ── Android: fanmart unlock form ───────────────────────────── */
.android-unlock-error { margin:8px 0 0; padding:8px 10px; font-size:.76rem; }
.android-unlock-form  { margin-top:10px; display:flex; gap:8px; align-items:flex-end; flex-wrap:wrap; }
.android-unlock-field { margin:0; flex:1; min-width:120px; }

/* ── Card generator: payload scope field + pw-protect note ──── */
.pw-protect-note-text { font-size:.82rem; color:var(--muted); }
.field-scope           { margin-top:10px; }
.scope-desc            { font-size:.72rem; color:var(--muted); margin-top:5px; }

/* ── Card install: QR + share layout ─────────────────────────── */
.qr-url-grid     { display:grid; grid-template-columns:auto 1fr; gap:20px; align-items:start; }
.qr-wrap-narrow   { max-width:160px; }
.banner-no-margin { margin:0; }
.install-section-label { font-size:.8rem; font-weight:700; color:var(--text); margin-bottom:8px; }
.install-section-label-spaced { display:block; font-size:.8rem; font-weight:700; color:var(--text); margin:12px 0 8px; }
.share-desc       { font-size:.76rem; color:var(--muted); margin-bottom:6px; }

/* ── Card profiles: zip-download wrapper + plain link ────────── */
.btn-dl-zip-wrap { margin-top:10px; }
.card2-bulk-actions { display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
.btn-del-all {
  display:inline-flex; align-items:center; gap:7px;
  background:#fff1f2; color:var(--red); border:1px solid #fecdd3;
  border-radius:7px; padding:8px 16px; font-size:.79rem; font-weight:600;
  cursor:pointer; transition:background .15s, color .15s, border-color .15s;
  white-space:nowrap;
}
.btn-del-all:hover { background:var(--red); color:#fff; border-color:var(--red); }
.icon-valign     { vertical-align:-2px; }
.link-plain      { color:var(--blue); text-decoration:none; }

/* ── Card probe: progress header + results body ──────────────── */
.probe-card-progress-padded { padding-top:10px; }
.prog-count             { font-weight:400; color:var(--muted); }
.probe-results-body     { padding-top:8px; }
.probe-wrap-spaced      { margin-top:10px; }

/* ── Download gate (actions/handle_download.php) ─────────────── */
.dl-gate-note { font-size:.8rem; color:var(--muted); margin-top:6px; }
.dl-gate-back { margin-top:16px; font-size:.8rem; }

/* ── Step 4 receipt-skip transparency note (handle_generate.php) ── */
.step4-receipt-note { color:var(--muted); font-size:.85em; }

/* ── Probe result row (assets/app.js buildProbeResultRow) ────── */
.prog-domain-code { font-size:.72rem; font-family:'SFMono-Regular',Consolas,monospace; }
.prog-ip           { color:var(--muted); margin-left:auto; font-size:.71rem; }