/* CSS specific bulk-signer.html — item rows, status pills, progress bar, stats.
   Token-urile locale pe body (--card translucid, --sub cu opacitate custom,
   --stroke, --purple) sunt intenționat diferite de tokens globale — folosite
   de JS în inline styles generate dinamic. NU le modifica.
   Depinde de: tokens.css, shell.css, components.css (încărcate înainte). */

    *{box-sizing:border-box;margin:0;padding:0}
    body {
      --card:   rgba(255,255,255,.04);
      --sub:    rgba(234,240,255,.55);
      --r:      14px;
      --shadow: 0 8px 32px rgba(0,0,0,.4);
      /* Legacy aliases — used in JS-generated inline styles, do not remove */
      --stroke: var(--df-border-2);
      --purple: var(--df-brand);
      background: var(--df-bg);
      color: var(--df-text);
      min-height: 100vh;
    }
main.df-page-body{margin-top:0;}
    h2{font-size:1.1rem;font-weight:700;margin-bottom:6px}
    .sub{color:var(--sub);font-size:.85rem;margin-bottom:28px}
    .card{background:var(--card);border:1px solid var(--df-border-2);border-radius:var(--r);
      padding:20px 24px;margin-bottom:16px}
    .item{display:flex;align-items:center;gap:14px;padding:13px 0;
      border-bottom:1px solid rgba(255,255,255,.05)}
    .item:last-child{border-bottom:none}
    .item-icon{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;
      font-size:1rem;flex-shrink:0;background:rgba(124,92,255,.12);border:1px solid rgba(124,92,255,.25)}
    .item-name{font-weight:600;font-size:.92rem;flex:1;min-width:0;
      overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    .item-sub{color:var(--sub);font-size:.78rem;margin-top:2px}
    .item-status{font-size:.8rem;font-weight:700;padding:3px 10px;border-radius:20px;
      white-space:nowrap;flex-shrink:0}
    .status-pending{background:rgba(255,176,32,.12);color:#ffd580;border:1px solid rgba(255,176,32,.3)}
    .status-signed {background:rgba(38,208,124,.12);color:#7cf0e0;border:1px solid rgba(38,208,124,.3)}
    .status-error  {background:rgba(255,77,90,.12); color:#ffaaaa;border:1px solid rgba(255,77,90,.3)}
    .status-waiting{background:rgba(124,92,255,.12);color:#b39dff;border:1px solid rgba(124,92,255,.3)}
    .btn{display:inline-flex;align-items:center;gap:8px;padding:11px 22px;border-radius:10px;
      font-size:.9rem;font-weight:700;cursor:pointer;border:none;transition:all .15s}
    .btn-primary{background:linear-gradient(135deg,var(--df-brand),var(--df-teal));color:#fff}
    .btn-primary:disabled{opacity:.45;cursor:not-allowed}
    .btn-sec{background:rgba(255,255,255,.06);border:1px solid var(--df-border-2);color:var(--sub)}
    .progress-wrap{background:rgba(255,255,255,.06);border-radius:999px;height:6px;
      overflow:hidden;margin:12px 0}
    .progress-bar{height:100%;background:linear-gradient(90deg,var(--df-brand),var(--df-teal));
      border-radius:999px;transition:width .4s ease;width:0%}
    #phase-init{display:block}
    #phase-wait{display:none}
    #phase-done{display:none}
    .phase-icon{font-size:2.5rem;margin-bottom:12px;display:block}
    .spin{display:inline-block;width:18px;height:18px;border:2px solid rgba(255,255,255,.2);
      border-top-color:#fff;border-radius:50%;animation:spin .7s linear infinite}
    @keyframes spin{to{transform:rotate(360deg)}}
    .alert{padding:12px 16px;border-radius:10px;font-size:.86rem;margin-bottom:16px}
    .alert-err{background:rgba(255,77,90,.1);border:1px solid rgba(255,77,90,.3);color:#ffaaaa}
    .alert-ok {background:rgba(38,208,124,.1);border:1px solid rgba(38,208,124,.3);color:#7cf0e0}
    .stat-row{display:flex;gap:16px;margin-top:16px;flex-wrap:wrap}
    .stat{flex:1;min-width:100px;background:rgba(255,255,255,.04);border:1px solid var(--df-border-2);
      border-radius:10px;padding:12px 16px;text-align:center}
    .stat-n{font-size:1.8rem;font-weight:800;line-height:1}
    .stat-l{font-size:.76rem;color:var(--sub);margin-top:4px}
    .stat-n.ok  {color:var(--df-success)}
    .stat-n.warn{color:var(--df-warning)}
    .stat-n.bad {color:var(--df-danger)}
