.ipo-body { padding-top: 120px; }

    .pg-spinner-icon { animation: pg-spin 1s linear infinite; }
    @keyframes pg-spin { to { transform: rotate(360deg); } }

    /* ── API KEY BANNER ── */
    .api-banner {
      background: rgba(78,222,163,0.05);
      border: 1px solid rgba(78,222,163,0.2);
      border-radius: var(--radius-md);
      padding: 14px 20px;
      display: flex; align-items: center; gap: 12px;
      margin-bottom: 28px;
      font-size: 13px;
    }
    .api-banner.warn { background:rgba(251,191,36,0.05); border-color:rgba(251,191,36,0.25); }
    .api-banner-icon { font-size:20px; flex-shrink:0; }
    .api-key-input {
      background: var(--bg-card-high);
      border: 1px solid var(--border);
      border-radius: var(--radius-sm);
      padding: 7px 12px;
      color: var(--text-primary);
      font-family: var(--font-mono);
      font-size: 12px;
      outline: none;
      width: 220px;
      transition: var(--transition);
    }
    .api-key-input:focus { border-color:var(--emerald); }
    .api-save-btn {
      background: var(--emerald); color:#001f12;
      border:none; border-radius:var(--radius-sm);
      padding:7px 16px; font-size:12px; font-weight:700;
      cursor:pointer; transition:var(--transition);
      font-family:var(--font-body); white-space:nowrap;
    }
    .api-save-btn:hover { background:#5beab0; }

    /* ── TABS ── */
    .ipo-tabs { display:flex; gap:0; background:var(--bg-surface); border:1px solid var(--border); border-radius:var(--radius-lg); overflow:hidden; }
    .ipo-tab { flex:1; padding:14px 20px; border:none; background:transparent; color:var(--text-muted); font-size:13px; font-weight:700; font-family:var(--font-body); cursor:pointer; transition:var(--transition); display:flex; align-items:center; justify-content:center; gap:8px; border-right:1px solid var(--border); }
    .ipo-tab:last-child { border-right:none; }
    .ipo-tab:hover { color:var(--text-primary); background:var(--bg-card); }
    .ipo-tab.active { background:var(--bg-card); color:var(--text-primary); box-shadow:inset 0 -2px 0 var(--emerald); }
    .ipo-tab .tab-badge { display:inline-flex; align-items:center; justify-content:center; width:20px; height:20px; border-radius:50%; background:var(--emerald); color:#001f12; font-size:10px; font-weight:800; }
    .ipo-tab.active .tab-badge { animation: pulse-badge 2s infinite; }
    @keyframes pulse-badge { 0%,100%{box-shadow:0 0 0 0 rgba(78,222,163,0.4)} 50%{box-shadow:0 0 0 6px rgba(78,222,163,0)} }

    /* ── IPO CARD ── */
    .ipo-card {
      background:var(--bg-card); border:1px solid var(--border); border-radius:var(--radius-xl);
      overflow:hidden; transition:var(--transition); cursor:pointer; position:relative;
    }
    .ipo-card:hover { border-color:var(--border-hover); transform:translateY(-4px); box-shadow:0 20px 56px rgba(0,0,0,0.4); }
    .ipo-card-top { padding:24px 24px 18px; border-bottom:1px solid var(--border); }
    .ipo-card-bottom { padding:18px 24px; }

    /* Status badge */
    .status-badge { display:inline-flex; align-items:center; gap:5px; padding:4px 12px; border-radius:99px; font-size:11px; font-weight:700; letter-spacing:.05em; }
    .status-open    { background:rgba(78,222,163,0.1); color:var(--emerald); border:1px solid rgba(78,222,163,0.25); }
    .status-upcoming{ background:rgba(96,165,250,0.1); color:#60a5fa;        border:1px solid rgba(96,165,250,0.25); }
    .status-closed  { background:rgba(255,255,255,0.04); color:var(--text-faint); border:1px solid var(--border); }
    .status-listed  { background:rgba(167,139,250,0.1); color:#a78bfa;       border:1px solid rgba(167,139,250,0.25); }

    /* Type badge */
    .type-badge { display:inline-flex; align-items:center; padding:3px 10px; border-radius:4px; font-size:10px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; }
    .type-main { background:rgba(78,222,163,0.07); color:var(--emerald-dim); }
    .type-sme  { background:rgba(251,191,36,0.08); color:#fbbf24; }

    .ipo-name  { font-family:var(--font-display); font-size:1rem; font-weight:800; color:var(--text-primary); margin:10px 0 4px; line-height:1.3; }
    .ipo-price { font-family:var(--font-mono); font-size:1.4rem; font-weight:600; color:var(--text-primary); }
    .ipo-price-label { font-size:10px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:var(--text-faint); margin-bottom:4px; }

    /* GMP pill */
    .gmp-pill {
      display:inline-flex; align-items:center; gap:5px;
      padding:6px 14px; border-radius:99px;
      font-family:var(--font-mono); font-size:13px; font-weight:600;
    }
    .gmp-pos { background:rgba(78,222,163,0.1); color:var(--emerald); border:1px solid rgba(78,222,163,0.2); }
    .gmp-neg { background:rgba(248,113,113,0.1); color:#f87171;       border:1px solid rgba(248,113,113,0.2); }
    .gmp-neu { background:rgba(255,255,255,0.04); color:var(--text-faint); border:1px solid var(--border); }

    /* Subscription bars */
    .sub-bar-wrap { margin-bottom:8px; }
    .sub-bar-label { display:flex; justify-content:space-between; margin-bottom:4px; font-size:11px; }
    .sub-bar-key   { color:var(--text-muted); font-weight:600; }
    .sub-bar-val   { font-family:var(--font-mono); font-weight:700; }
    .sub-bar-val.hot  { color:var(--emerald); }
    .sub-bar-val.warm { color:#fbbf24; }
    .sub-bar-val.cold { color:var(--text-faint); }
    .sub-track { height:5px; background:rgba(255,255,255,0.06); border-radius:99px; overflow:hidden; }
    .sub-fill  { height:100%; border-radius:99px; transition:width 1.2s cubic-bezier(0.4,0,0.2,1); }
    .sub-fill.qib    { background:linear-gradient(90deg,#60a5fa,#818cf8); }
    .sub-fill.nii    { background:linear-gradient(90deg,#a78bfa,#c084fc); }
    .sub-fill.retail { background:linear-gradient(90deg,var(--emerald-dim),var(--emerald)); }

    /* Date row */
    .date-row { display:flex; justify-content:space-between; align-items:center; padding:8px 0; border-bottom:1px solid var(--border); font-size:12px; }
    .date-row:last-child { border-bottom:none; }
    .date-key { color:var(--text-faint); }
    .date-val { font-family:var(--font-mono); color:var(--text-primary); }

    /* ── SKELETON ── */
    .skeleton { background:linear-gradient(90deg,var(--bg-card) 25%,var(--bg-card-high) 50%,var(--bg-card) 75%); background-size:200% 100%; animation:shimmer 1.4s infinite; border-radius:6px; }
    @keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}
    .skel-card { background:var(--bg-card); border:1px solid var(--border); border-radius:var(--radius-xl); padding:24px; }

    /* ── STATE BOX ── */
    .state-box { text-align:center; padding:80px 24px; }
    .state-box .material-symbols-outlined { font-size:52px; display:block; margin-bottom:16px; }
    .state-box h4 { font-size:1.1rem; color:var(--text-muted); margin-bottom:8px; }
    .state-box p  { font-size:0.875rem; color:var(--text-faint); }

    /* ── SPINNER ── */
    .pg-spinner { width:32px;height:32px;margin:0 auto;border:2.5px solid rgba(78,222,163,0.15);border-top-color:var(--emerald);border-radius:50%;animation:spin .7s linear infinite; }
    @keyframes spin{to{transform:rotate(360deg)}}

    /* ── GMP CHART BAR (mini) ── */
    .gmp-meter { height:6px; background:rgba(255,255,255,0.06); border-radius:99px; overflow:hidden; margin-top:4px; }
    .gmp-meter-fill { height:100%; border-radius:99px; transition:width 1s cubic-bezier(0.4,0,0.2,1); }

    /* ════════════════════
       MODAL
    ════════════════════ */
    .modal-overlay { position:fixed;inset:0;z-index:9999;background:rgba(0,0,0,0.75);backdrop-filter:blur(8px);display:flex;align-items:flex-end;opacity:0;pointer-events:none;transition:opacity .3s; }
    .modal-overlay.open { opacity:1;pointer-events:all; }
    @media(min-width:768px){ .modal-overlay{align-items:center;justify-content:center;} }
    .modal-sheet { background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-xl) var(--radius-xl) 0 0;width:100%;max-width:820px;max-height:92vh;overflow-y:auto;transform:translateY(60px);transition:transform .35s cubic-bezier(0.4,0,0.2,1);position:relative; }
    @media(min-width:768px){ .modal-sheet{border-radius:var(--radius-xl);max-height:90vh;} }
    .modal-overlay.open .modal-sheet { transform:translateY(0); }
    .modal-hdr { padding:28px 32px 22px;border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--bg);z-index:2;display:flex;justify-content:space-between;align-items:flex-start;gap:16px; }
    .modal-close { width:36px;height:36px;border-radius:50%;border:1px solid var(--border);background:none;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text-muted);transition:all .2s;flex-shrink:0; }
    .modal-close:hover { border-color:var(--border-hover);color:var(--text-primary); }
    .modal-bdy { padding:28px 32px 40px; }

    /* Info grid in modal */
    .info-grid { display:grid;grid-template-columns:1fr 1fr;gap:0; }
    .info-cell { padding:14px 0;border-bottom:1px solid var(--border); }
    .info-cell:nth-child(odd)  { padding-right:24px;border-right:1px solid var(--border); }
    .info-cell:nth-child(even) { padding-left:24px; }
    .info-cell:nth-last-child(-n+2) { border-bottom:none; }
    .info-key { font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--text-faint);margin-bottom:5px; }
    .info-val { font-family:var(--font-mono);font-size:14px;color:var(--text-primary);font-weight:600; }
    @media(max-width:540px){ .info-grid{grid-template-columns:1fr;} .info-cell:nth-child(odd){border-right:none;padding-right:0;} .info-cell:nth-child(even){padding-left:0;} .info-cell:nth-last-child(-n+2){border-bottom:1px solid var(--border);} .info-cell:last-child{border-bottom:none;} }

    /* Big sub display in modal */
    .sub-total-big { font-family:var(--font-mono);font-size:3rem;font-weight:700;line-height:1; }

    /* Listing gain badge */
    .listing-gain { display:inline-flex;align-items:center;gap:6px;padding:8px 18px;border-radius:99px;font-family:var(--font-mono);font-size:1.1rem;font-weight:700; }
    .listing-gain.pos { background:rgba(78,222,163,0.1);color:var(--emerald);border:1px solid rgba(78,222,163,0.2); }
    .listing-gain.neg { background:rgba(248,113,113,0.1);color:#f87171;border:1px solid rgba(248,113,113,0.2); }

    @media(max-width:576px){ .modal-hdr{padding:20px 18px 16px;} .modal-bdy{padding:20px 18px 32px;} }