diff --git a/assets/css/woocow.css b/assets/css/woocow.css index 208e0fd..98b256d 100644 --- a/assets/css/woocow.css +++ b/assets/css/woocow.css @@ -336,6 +336,93 @@ .woocow-muted { color: #aaa; font-size: 13px; } .woocow-error { color: #c0392b; } +/* ── Icon buttons (admin) ────────────────────────────────────── */ +.button.woocow-icon-btn { + width: 30px !important; + min-width: 0 !important; + padding: 0 !important; + display: inline-flex !important; + align-items: center; + justify-content: center; +} +.button.woocow-icon-btn .dashicons { + font-size: 15px; + width: 15px; + height: 28px; + line-height: 28px; +} + +/* ── DNS records table ───────────────────────────────────────── */ +.woocow-dns-table { margin-top: 8px; } +.woocow-dns-host code { font-size: 11px; word-break: break-all; } +.woocow-dns-val { max-width: 340px; } +.woocow-dns-value { + display: block; + font-size: 11px; + word-break: break-all; + white-space: pre-wrap; + background: #f6f8fa; + padding: 4px 6px; + border-radius: 3px; + max-height: 60px; + overflow-y: auto; +} + +/* ── Log viewer ──────────────────────────────────────────────── */ +.woocow-log-toolbar { + display: flex; + gap: 12px; + align-items: center; + margin-bottom: 8px; +} +.woocow-log-pre { + background: #1e1e2e; + color: #cdd6f4; + padding: 16px; + border-radius: 6px; + font-size: 12px; + line-height: 1.6; + max-height: 500px; + overflow-y: auto; + white-space: pre-wrap; + word-break: break-all; +} + +/* ── Quarantine (account) ────────────────────────────────────── */ +.woocow-quarantine-wrap { + padding: 16px 20px; + border-top: 1px solid #e0e0e0; + background: #fffbf0; +} +.woocow-quarantine-table { + width: 100%; + border-collapse: collapse; + font-size: 13px; + margin-bottom: 10px; +} +.woocow-quarantine-table th, +.woocow-quarantine-table td { + padding: 7px 10px; + border-bottom: 1px solid #eee; + text-align: left; + vertical-align: middle; +} +.woocow-quarantine-table th { font-weight: 700; background: #f5f5f5; } +.woocow-quarantine-table tr:hover td { background: #fafafa; } +.woocow-score-badge { + display: inline-block; + padding: 2px 7px; + border-radius: 10px; + font-size: 11px; + font-weight: 700; + color: #fff; +} + +/* ── Spam filter panel ───────────────────────────────────────── */ +.woocow-spam-panel { font-size: 13px; } +.woocow-spam-panel input[type=range] { vertical-align: middle; } +.wc-spam-val { font-weight: 700; min-width: 30px; display: inline-block; } + @media (max-width: 600px) { .woocow-domain-header, .woocow-mbox-main, @@ -343,4 +430,6 @@ .woocow-quota-bar-outer { width: 80px; } .woocow-alias-fields { flex-direction: column; } .woocow-input { max-width: 100%; } + .woocow-quarantine-table { font-size: 11px; } + .woocow-quarantine-table th, .woocow-quarantine-table td { padding: 5px 6px; } } diff --git a/assets/js/woocow-account.js b/assets/js/woocow-account.js index 40c2726..cce7eb9 100644 --- a/assets/js/woocow-account.js +++ b/assets/js/woocow-account.js @@ -57,9 +57,10 @@ let html = ''; boxes.forEach(m => { - const pct = parseFloat(m.percent_in_use || 0); + const unlimited = (m.quota === 0 || m.quota === '0'); + const pct = unlimited ? 0 : parseFloat(m.percent_in_use || 0); const used = formatMB(m.quota_used); - const max = formatMB(m.quota); + const max = unlimited ? '∞' : formatMB(m.quota); const col = pct > 85 ? '#e74c3c' : pct > 60 ? '#f39c12' : '#27ae60'; html += `
@@ -79,14 +80,19 @@
+ - Webmail ↗ + ↗ Webmail
+ + +