/* ========================================================================== katproxy — Square & Polished Minimalist Theme (katdrop / just-download style) ========================================================================== */ * { box-sizing: border-box; margin: 0; padding: 0; border-radius: 0 !important; /* Square everything out */ } :root { --bg-primary: #0b0b0b; --bg-surface: #111111; --bg-surface-hover: #161616; --bg-card: #111111; --bg-card-hover: #151515; --bg-input: #0e0e0e; --border-subtle: #1c1c1c; --border-main: #222222; --border-hover: #333333; --border-focus: #444444; --text-main: #e5e5e5; --text-muted: #888888; --text-dim: #555555; --text-faint: #333333; --accent-emerald: #10b981; --accent-emerald-dim: rgba(16, 185, 129, 0.12); --accent-cyan: #38bdf8; --accent-cyan-dim: rgba(56, 189, 248, 0.12); --accent-amber: #f59e0b; --accent-amber-dim: rgba(245, 158, 11, 0.12); --font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; } body { background-color: var(--bg-primary); color: var(--text-main); font-family: var(--font-mono); min-height: 100vh; position: relative; overflow-x: hidden; -webkit-font-smoothing: antialiased; letter-spacing: -0.01em; } /* App Container */ .app-container { max-width: 1200px; margin: 0 auto; padding: 36px 20px 60px; position: relative; z-index: 1; display: flex; flex-direction: column; min-height: 100vh; } /* Header */ .header { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 20px; padding-bottom: 22px; border-bottom: 1px solid var(--border-subtle); } .brand { display: flex; align-items: center; gap: 9px; } /* Static smooth glowing green dot */ .brand-dot { width: 6px; height: 6px; background-color: var(--accent-emerald); box-shadow: 0 0 8px rgba(16, 185, 129, 0.55); display: inline-block; flex-shrink: 0; } .brand-name { font-size: 1.35rem; font-weight: 600; letter-spacing: -0.03em; color: #fff; } .brand-subtitle { font-size: 0.76rem; color: var(--text-dim); margin-top: 5px; letter-spacing: 0.02em; } .header-right { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; } /* Header Stats Group */ .stats-group { display: flex; align-items: center; gap: 6px; } .stat-pill { background: var(--bg-surface); border: 1px solid var(--border-subtle); padding: 6px 12px; display: flex; flex-direction: column; min-width: 78px; } .stat-label { font-size: 9px; font-weight: 600; color: var(--text-dim); letter-spacing: 0.04em; } .stat-value { font-size: 13px; font-weight: 600; color: var(--text-main); margin-top: 2px; font-variant-numeric: tabular-nums; } .highlight-emerald { color: var(--accent-emerald) !important; } .highlight-cyan { color: var(--accent-cyan) !important; } /* Refresh Control & Countdown */ .refresh-control { display: flex; align-items: center; gap: 6px; background: var(--bg-surface); border: 1px solid var(--border-subtle); padding: 5px 8px; } .timer-widget { display: inline-flex; align-items: center; gap: 7px; padding: 0 4px 0 2px; } .progress-ring { display: block; flex-shrink: 0; } .progress-ring-circle { transform: rotate(-90deg); transform-origin: 50% 50%; transition: stroke-dashoffset 0.4s ease; } .timer-text { font-size: 11px; color: var(--text-muted); font-weight: 500; letter-spacing: 0; min-width: 36px; font-variant-numeric: tabular-nums; } /* Buttons */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; font-family: inherit; font-size: 0.78rem; font-weight: 500; padding: 7px 14px; border: 1px solid var(--border-main); background: #141414; color: var(--text-muted); cursor: pointer; user-select: none; transition: background 0.12s ease, border-color 0.12s ease, color 0.12s ease; letter-spacing: 0.02em; } .btn:hover:not(:disabled) { background: var(--bg-surface-hover); border-color: var(--border-hover); color: #fff; } .btn:active:not(:disabled) { background: #fff; color: #000; border-color: #fff; } .btn:disabled { opacity: 0.25; cursor: not-allowed; } .btn-icon { padding: 6px; background: transparent; border: 1px solid transparent; color: var(--text-muted); } .btn-icon:hover { background: #181818; border-color: var(--border-subtle); color: #fff; } .btn-icon.spinning svg { animation: spin 0.8s linear infinite; } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .btn-secondary { background: #141414; border-color: var(--border-main); color: var(--text-muted); } .btn-secondary:hover { background: #1c1c1c; color: #fff; border-color: var(--border-hover); } .btn-sm { padding: 5px 12px; font-size: 0.74rem; } /* Controls Bar */ .controls-bar { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin-top: 20px; padding: 10px 14px; background: var(--bg-surface); border: 1px solid var(--border-subtle); } /* Protocol Filter Pills */ .filter-pills { display: flex; background: #0e0e0e; border: 1px solid var(--border-subtle); padding: 2px; } .pill-btn { font-family: inherit; font-size: 11px; font-weight: 500; padding: 4px 10px; background: transparent; color: var(--text-dim); border: 1px solid transparent; cursor: pointer; transition: all 0.12s ease; letter-spacing: 0.03em; } .pill-btn:hover { color: var(--text-muted); } .pill-btn.active { background: #1c1c1c; color: #fff; border-color: #2e2e2e; } /* Square Toggle Switch */ .toggle-control { display: flex; align-items: center; gap: 8px; cursor: pointer; user-select: none; padding: 0 4px; } .toggle-control input { display: none; } .toggle-slider { width: 28px; height: 16px; background: #181818; border: 1px solid var(--border-main); position: relative; transition: background 0.15s ease, border-color 0.15s ease; } .toggle-slider::after { content: ''; position: absolute; top: 2px; left: 2px; width: 10px; height: 10px; background: #555; transition: transform 0.15s ease, background 0.15s ease; } .toggle-control input:checked + .toggle-slider { background: rgba(16, 185, 129, 0.1); border-color: var(--accent-emerald); } .toggle-control input:checked + .toggle-slider::after { background: var(--accent-emerald); transform: translateX(12px); } .toggle-label { font-size: 11px; color: var(--text-muted); font-weight: 500; } /* Search Box */ .search-box { flex: 1; min-width: 200px; position: relative; display: flex; align-items: center; } .search-icon { position: absolute; left: 10px; color: var(--text-dim); pointer-events: none; } .search-box input { width: 100%; background: var(--bg-input); border: 1px solid var(--border-subtle); padding: 7px 28px 7px 32px; color: #fff; font-family: inherit; font-size: 11px; transition: border-color 0.15s ease; } .search-box input:focus { outline: none; border-color: var(--border-hover); } .search-box input::placeholder { color: var(--text-dim); } .search-clear { position: absolute; right: 8px; background: transparent; border: none; color: var(--text-dim); font-size: 14px; cursor: pointer; padding: 2px 4px; } .search-clear:hover { color: #fff; } /* Select Dropdown */ .select-wrapper { position: relative; display: flex; align-items: center; } .select-wrapper select { appearance: none; background: var(--bg-input); border: 1px solid var(--border-subtle); padding: 7px 26px 7px 10px; color: var(--text-muted); font-family: inherit; font-size: 11px; cursor: pointer; transition: border-color 0.15s ease; } .select-wrapper select:focus { outline: none; border-color: var(--border-hover); } .select-arrow { position: absolute; right: 8px; color: var(--text-dim); pointer-events: none; } /* Action Buttons Group */ .action-buttons { display: flex; gap: 6px; } /* Main Content & Metadata */ .main-content { flex: 1; margin-top: 16px; } .list-meta { display: flex; justify-content: space-between; align-items: center; font-size: 11px; color: var(--text-dim); padding: 0 2px 10px; } .checking-indicator { display: inline-flex; align-items: center; gap: 6px; color: var(--accent-cyan); } .spin-dot { width: 5px; height: 5px; background: var(--accent-cyan); display: inline-block; } /* Proxy Grid & Square Cards */ .proxy-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 8px; } .proxy-card { background: var(--bg-card); border: 1px solid var(--border-subtle); padding: 12px 14px; display: flex; flex-direction: column; gap: 8px; transition: border-color 0.12s ease, background 0.12s ease; position: relative; cursor: pointer; } .proxy-card:hover { background: var(--bg-card-hover); border-color: var(--border-hover); } .card-top { display: flex; justify-content: space-between; align-items: center; } .endpoint-group { display: flex; align-items: baseline; gap: 4px; } .ip-text { font-size: 13px; font-weight: 600; color: #fff; letter-spacing: -0.01em; } .port-text { font-size: 12px; font-weight: 500; color: var(--text-muted); } .copy-hint-btn { background: transparent; border: none; color: var(--text-dim); cursor: pointer; padding: 2px; opacity: 0.5; transition: opacity 0.12s, color 0.12s; } .proxy-card:hover .copy-hint-btn { opacity: 1; color: var(--text-muted); } .copy-hint-btn:hover { color: #fff; } .card-middle { display: flex; align-items: center; justify-content: space-between; } .badge-row { display: flex; align-items: center; gap: 4px; } .proto-tag { font-size: 9px; font-weight: 600; text-transform: uppercase; padding: 2px 5px; background: #161616; color: var(--text-dim); border: 1px solid var(--border-subtle); letter-spacing: 0.03em; } .proto-tag.proto-http { color: #60a5fa; border-color: rgba(96, 165, 250, 0.25); background: rgba(96, 165, 250, 0.06); } .proto-tag.proto-socks4 { color: #c084fc; border-color: rgba(192, 132, 252, 0.25); background: rgba(192, 132, 252, 0.06); } .proto-tag.proto-socks5 { color: #34d399; border-color: rgba(52, 211, 153, 0.25); background: rgba(52, 211, 153, 0.06); } /* Latency Badge */ .latency-badge { display: flex; align-items: center; gap: 5px; font-size: 10px; font-weight: 500; font-variant-numeric: tabular-nums; } .latency-dot { width: 5px; height: 5px; display: inline-block; } .latency-fast { color: var(--accent-emerald); } .latency-fast .latency-dot { background: var(--accent-emerald); box-shadow: 0 0 6px rgba(16, 185, 129, 0.6); } .latency-med { color: var(--accent-amber); } .latency-med .latency-dot { background: var(--accent-amber); } .latency-slow { color: var(--text-dim); } .latency-slow .latency-dot { background: var(--text-dim); } .card-bottom { display: flex; justify-content: space-between; align-items: center; padding-top: 6px; border-top: 1px solid #181818; font-size: 10px; color: var(--text-dim); } .geo-info { display: flex; align-items: center; gap: 5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .country-flag { font-size: 11px; } .card-actions-quick { display: flex; gap: 3px; } .quick-action-link { background: #151515; border: 1px solid var(--border-subtle); font-family: inherit; font-size: 9px; color: var(--text-dim); cursor: pointer; padding: 2px 5px; transition: color 0.12s, border-color 0.12s, background 0.12s; } .quick-action-link:hover { color: #fff; border-color: var(--border-hover); background: #202020; } /* Empty State */ .empty-state { text-align: center; padding: 50px 20px; background: var(--bg-surface); border: 1px dashed var(--border-hover); margin-top: 16px; } .empty-icon { font-size: 24px; color: var(--text-dim); margin-bottom: 10px; } .empty-state h3 { font-size: 14px; color: #fff; margin-bottom: 4px; } .empty-state p { font-size: 12px; color: var(--text-dim); margin-bottom: 14px; } /* Pagination */ .pagination-bar { display: flex; justify-content: center; align-items: center; gap: 14px; margin-top: 24px; } .page-indicator { font-size: 11px; color: var(--text-dim); font-variant-numeric: tabular-nums; } /* Footer */ .footer { margin-top: auto; padding-top: 32px; display: flex; justify-content: space-between; align-items: center; font-size: 11px; color: var(--text-dim); border-top: 1px solid var(--border-subtle); } .footer-link { color: var(--text-dim); text-decoration: none; transition: color 0.12s; } .footer-link:hover { color: #fff; } .separator { margin: 0 6px; color: #222222; } /* Toast System (Square & Polished) */ .toast-container { position: fixed; bottom: 20px; right: 20px; display: flex; flex-direction: column; gap: 6px; z-index: 200; pointer-events: none; } .toast { background: #111111; border: 1px solid var(--border-hover); color: #fff; padding: 9px 14px; font-size: 11px; font-family: inherit; box-shadow: 0 6px 20px rgba(0, 0, 0, 0.7); display: flex; align-items: center; gap: 8px; animation: toast-in 0.15s ease-out; transition: opacity 0.15s, transform 0.15s; pointer-events: auto; } .toast.toast-exit { opacity: 0; transform: translateY(4px); } @keyframes toast-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } } .toast-dot { width: 5px; height: 5px; background: var(--accent-emerald); display: inline-block; flex-shrink: 0; } /* Utilities */ .hidden { display: none !important; } /* Responsive */ @media (max-width: 768px) { .header { flex-direction: column; align-items: flex-start; } .header-right { width: 100%; justify-content: space-between; } .controls-bar { flex-direction: column; align-items: stretch; } .action-buttons { justify-content: space-between; } .proxy-grid { grid-template-columns: 1fr; } }