/* ═══════════════════════════════════════════════════════════ * page-settings.css — 爬蟲管理中心專屬樣式 * 從原 settings.html 1031 行 inline style 抽出 * 移除:藍紫漸層 / 大量 box-shadow / translateY hover / 紫色 info-section * 改用 ewoooc-tokens.css token 系統 * ═══════════════════════════════════════════════════════════ */ /* ──────────────── 統計卡 ──────────────── */ .momo-app .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: var(--momo-space-4); margin-bottom: var(--momo-space-6); } .momo-app .stat-card { background: var(--momo-bg-paper); border: 1px solid var(--momo-border-light); border-radius: var(--momo-radius-md); padding: var(--momo-space-5); position: relative; overflow: hidden; } .momo-app .stat-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--momo-page-accent); } .momo-app .stat-card.active::before { background: var(--momo-tag-olive-text); } .momo-app .stat-card.paused::before { background: var(--momo-tag-honey-text); } .momo-app .stat-card.total::before { background: var(--momo-page-accent); } .momo-app .stat-icon { width: 40px; height: 40px; border-radius: var(--momo-radius-sm); display: flex; align-items: center; justify-content: center; font-size: 18px; margin-bottom: var(--momo-space-3); background: var(--momo-page-accent-soft); color: var(--momo-page-accent-dark); } .momo-app .stat-card.active .stat-icon { background: var(--momo-tag-olive-bg); color: var(--momo-tag-olive-text); } .momo-app .stat-card.paused .stat-icon { background: var(--momo-tag-honey-bg); color: var(--momo-tag-honey-text); } .momo-app .stat-number { font-family: var(--momo-font-mono); font-size: 2rem; font-weight: 700; color: var(--momo-text-primary); line-height: 1; margin-bottom: var(--momo-space-2); letter-spacing: 0; } .momo-app .stat-label { font-family: var(--momo-font-display); color: var(--momo-text-secondary); font-size: var(--momo-text-label); font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; } /* ──────────────── 爬蟲卡 ──────────────── */ .momo-app .crawler-card { background: var(--momo-bg-paper); border: 1px solid var(--momo-border-light); border-radius: var(--momo-radius-md); padding: var(--momo-space-5); margin-bottom: var(--momo-space-4); position: relative; overflow: hidden; transition: border-color 0.15s ease; } .momo-app .crawler-card::before { content: ''; position: absolute; top: 0; left: 0; bottom: 0; width: 3px; background: var(--momo-border-light); } .momo-app .crawler-card.active::before { background: var(--momo-tag-olive-text); } .momo-app .crawler-card.paused::before { background: var(--momo-tag-honey-text); } .momo-app .crawler-card:hover { border-color: var(--momo-page-accent-line); } .momo-app .crawler-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: var(--momo-space-4); padding-left: var(--momo-space-3); } .momo-app .crawler-title { font-family: var(--momo-font-display); font-size: 1.1rem; font-weight: 700; color: var(--momo-text-primary); display: flex; align-items: center; gap: 8px; margin-bottom: var(--momo-space-2); } .momo-app .status-badge { display: inline-flex; align-items: center; gap: 6px; padding: 3px 10px; border-radius: var(--momo-radius-pill); font-family: var(--momo-font-mono); font-size: 11px; font-weight: 600; letter-spacing: 0.04em; } .momo-app .status-badge.active { background: var(--momo-tag-olive-bg); color: var(--momo-tag-olive-text); border: 1px solid var(--momo-tag-olive-border); } .momo-app .status-badge.paused { background: var(--momo-tag-honey-bg); color: var(--momo-tag-honey-text); border: 1px solid var(--momo-tag-honey-border); } .momo-app .crawler-body { padding-left: var(--momo-space-3); } .momo-app .crawler-info { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--momo-space-2); margin-bottom: var(--momo-space-4); } .momo-app .info-item { display: flex; align-items: center; gap: 8px; color: var(--momo-text-secondary); font-size: var(--momo-text-body-sm); padding: var(--momo-space-2) var(--momo-space-3); background: var(--momo-bg-subtle); border-radius: var(--momo-radius-sm); } .momo-app .info-item i { color: var(--momo-text-tertiary); } .momo-app .pause-reason { background: var(--momo-tag-honey-bg); border-left: 3px solid var(--momo-tag-honey-text); padding: var(--momo-space-3) var(--momo-space-4); margin: var(--momo-space-3) 0; border-radius: var(--momo-radius-sm); } .momo-app .pause-reason strong { color: var(--momo-tag-honey-text); display: block; margin-bottom: 4px; } .momo-app .pause-reason small { color: var(--momo-tag-rust-text); } .momo-app .crawler-controls { display: flex; gap: var(--momo-space-3); padding-top: var(--momo-space-4); border-top: 1px solid var(--momo-border-light); } /* Toggle Switch — 改用群組色 */ .momo-app .toggle-switch { position: relative; display: inline-block; width: 44px; height: 24px; } .momo-app .toggle-switch input { opacity: 0; width: 0; height: 0; } .momo-app .slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background: var(--momo-border-strong); transition: 0.2s; border-radius: var(--momo-radius-pill); } .momo-app .slider:before { position: absolute; content: ""; height: 18px; width: 18px; left: 3px; bottom: 3px; background: var(--momo-surface-raised); transition: 0.2s; border-radius: 50%; box-shadow: 0 1px 2px rgba(0,0,0,0.15); } .momo-app input:checked + .slider { background: var(--momo-tag-olive-text); } .momo-app input:checked + .slider:before { transform: translateX(20px); } /* ──────────────── 自訂按鈕 ──────────────── */ .momo-app .btn-custom { padding: 6px 14px; border: 1px solid var(--momo-border-light); border-radius: var(--momo-radius-sm); background: var(--momo-bg-elevated); color: var(--momo-text-primary); font-size: var(--momo-text-body-sm); font-weight: 500; cursor: pointer; transition: all 0.15s ease; display: inline-flex; align-items: center; gap: 6px; } .momo-app .btn-custom:hover { border-color: var(--momo-page-accent-line); background: var(--momo-page-accent-soft); color: var(--momo-page-accent-dark); } .momo-app .btn-schedule { background: var(--momo-page-accent); color: var(--momo-page-inverse); border-color: var(--momo-page-accent); } .momo-app .btn-schedule:hover { background: var(--momo-page-accent-dark); border-color: var(--momo-page-accent-dark); color: var(--momo-page-inverse); } /* refresh button */ .momo-app .refresh-btn { background: var(--momo-page-accent); color: var(--momo-page-inverse); border: none; padding: 8px 16px; border-radius: var(--momo-radius-sm); font-size: var(--momo-text-body-sm); font-weight: 500; cursor: pointer; transition: background 0.15s ease; } .momo-app .refresh-btn:hover { background: var(--momo-page-accent-dark); } .momo-app .refresh-btn.spinning i { animation: spin 1s linear infinite; } @keyframes spin { from { transform: rotate(0); } to { transform: rotate(360deg); } } /* ──────────────── Info section(移除紫色漸層) ──────────────── */ .momo-app .info-section { background: var(--momo-page-accent-soft); border-left: 3px solid var(--momo-page-accent); padding: var(--momo-space-4) var(--momo-space-5); border-radius: var(--momo-radius-md); margin: var(--momo-space-5) 0; } .momo-app .info-section h5 { color: var(--momo-page-accent-dark); font-family: var(--momo-font-display); font-weight: 700; margin-bottom: var(--momo-space-3); } .momo-app .info-section ul { margin: 0; padding-left: 20px; color: var(--momo-text-primary); } .momo-app .info-section li { margin: var(--momo-space-2) 0; line-height: 1.6; } .momo-app .info-section code { background: var(--momo-bg-elevated); padding: 2px 6px; border-radius: var(--momo-radius-sm); color: var(--momo-page-accent-dark); font-family: var(--momo-font-mono); font-size: 12px; } /* ──────────────── 分頁 divider ──────────────── */ .momo-app .section-divider { margin: var(--momo-space-7) 0; border: 0; border-top: 1px solid var(--momo-border-light); } /* ──────────────── Section header ──────────────── */ .momo-app .section-header { background: var(--momo-bg-paper); border: 1px solid var(--momo-border-light); padding: var(--momo-space-4) var(--momo-space-5); border-radius: var(--momo-radius-md); margin-bottom: var(--momo-space-4); display: flex; justify-content: space-between; align-items: center; } .momo-app .section-header h5 { margin: 0; color: var(--momo-text-primary); font-family: var(--momo-font-display); font-weight: 700; } /* ──────────────── Search box ──────────────── */ .momo-app .category-search-container { background: var(--momo-bg-paper); border: 1px solid var(--momo-border-light); padding: var(--momo-space-4); border-radius: var(--momo-radius-md); margin-bottom: var(--momo-space-4); } .momo-app .search-box { position: relative; } .momo-app .search-box input { width: 100%; padding: 10px 40px; border: 1px solid var(--momo-border-light); border-radius: var(--momo-radius-sm); font-size: var(--momo-text-body-sm); background: var(--momo-bg-elevated); color: var(--momo-text-primary); } .momo-app .search-box input:focus { outline: none; border-color: var(--momo-page-accent-line); box-shadow: var(--momo-shadow-focus); } .momo-app .search-box .search-icon, .momo-app .search-box .clear-icon { position: absolute; top: 50%; transform: translateY(-50%); color: var(--momo-text-tertiary); } .momo-app .search-box .search-icon { left: 14px; } .momo-app .search-box .clear-icon { right: 14px; cursor: pointer; display: none; } .momo-app .search-box.has-text .clear-icon { display: block; } /* ──────────────── 分類卡 grid ──────────────── */ .momo-app .categories-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: var(--momo-space-4); } .momo-app .category-card { background: var(--momo-bg-paper); border: 1px solid var(--momo-border-light); border-radius: var(--momo-radius-md); padding: var(--momo-space-5); transition: border-color 0.15s ease; position: relative; overflow: hidden; } .momo-app .category-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--momo-page-accent); } .momo-app .category-card:hover { border-color: var(--momo-page-accent-line); } .momo-app .category-name { font-family: var(--momo-font-display); font-size: 1.05rem; font-weight: 700; color: var(--momo-text-primary); margin-bottom: var(--momo-space-3); display: flex; align-items: center; gap: 8px; } .momo-app .category-name i { color: var(--momo-page-accent-dark); } .momo-app .category-url { display: flex; align-items: center; gap: 8px; padding: var(--momo-space-3); background: var(--momo-bg-subtle); border-radius: var(--momo-radius-sm); margin-bottom: var(--momo-space-4); word-break: break-all; } .momo-app .category-url i { color: var(--momo-text-tertiary); flex-shrink: 0; } .momo-app .category-url a { color: var(--momo-text-secondary); text-decoration: none; font-family: var(--momo-font-mono); font-size: 12px; } .momo-app .category-url a:hover { color: var(--momo-page-accent-dark); } .momo-app .category-actions { display: flex; gap: var(--momo-space-2); } .momo-app .category-btn { flex: 1; padding: 6px 10px; border: 1px solid var(--momo-border-light); border-radius: var(--momo-radius-sm); background: var(--momo-bg-elevated); color: var(--momo-text-secondary); font-size: var(--momo-text-body-sm); cursor: pointer; display: inline-flex; align-items: center; justify-content: center; gap: 6px; transition: all 0.15s ease; } .momo-app .category-btn:hover { border-color: var(--momo-page-accent-line); background: var(--momo-page-accent-soft); color: var(--momo-page-accent-dark); } .momo-app .category-btn.delete:hover { border-color: var(--momo-tag-rust-border); background: var(--momo-tag-rust-bg); color: var(--momo-tag-rust-text); } /* Empty state */ .momo-app .empty-state { background: var(--momo-bg-paper); border: 1px dashed var(--momo-border-light); border-radius: var(--momo-radius-md); padding: var(--momo-space-7); text-align: center; } .momo-app .empty-state-icon { font-size: 3rem; color: var(--momo-text-tertiary); margin-bottom: var(--momo-space-3); } .momo-app .empty-state h5 { color: var(--momo-text-primary); font-family: var(--momo-font-display); margin-bottom: var(--momo-space-2); } .momo-app .empty-state p { color: var(--momo-text-secondary); margin-bottom: var(--momo-space-4); } .momo-app .empty-state-btn { background: var(--momo-page-accent); color: var(--momo-page-inverse); border: none; padding: 10px 20px; border-radius: var(--momo-radius-sm); font-weight: 500; cursor: pointer; display: inline-flex; align-items: center; gap: 8px; } .momo-app .empty-state-btn:hover { background: var(--momo-page-accent-dark); } .momo-app .no-results { text-align: center; padding: var(--momo-space-6); color: var(--momo-text-tertiary); } .momo-app .no-results i { font-size: 2rem; margin-bottom: var(--momo-space-2); } /* ──────────────── Toast & Loading ──────────────── */ .momo-app .toast-container { position: fixed; bottom: var(--momo-space-5); right: var(--momo-space-5); z-index: 9999; display: flex; flex-direction: column; gap: 10px; } .momo-app .toast-notification { display: flex; align-items: center; gap: 12px; background: var(--momo-bg-elevated); border: 1px solid var(--momo-border-light); border-left: 3px solid var(--momo-tag-olive-text); padding: var(--momo-space-3) var(--momo-space-4); border-radius: var(--momo-radius-sm); box-shadow: var(--momo-shadow-modal); min-width: 280px; animation: slideIn 0.25s ease-out; } .momo-app .toast-notification.error { border-left-color: var(--momo-tag-rust-text); } .momo-app .toast-icon i { color: var(--momo-tag-olive-text); font-size: 18px; } .momo-app .toast-notification.error .toast-icon i { color: var(--momo-tag-rust-text); } .momo-app .toast-message { color: var(--momo-text-primary); font-size: var(--momo-text-body-sm); } @keyframes slideIn { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } .momo-app .loading-overlay { position: fixed; inset: 0; background: rgba(41, 38, 27, 0.6); display: none; align-items: center; justify-content: center; z-index: 9998; } .momo-app .loading-overlay.active { display: flex; } .momo-app .loading-spinner { background: var(--momo-bg-elevated); padding: var(--momo-space-5); border-radius: var(--momo-radius-md); text-align: center; } .momo-app .loading-spinner i { font-size: 2rem; color: var(--momo-page-accent); animation: spin 1s linear infinite; } .momo-app .loading-text { margin-top: var(--momo-space-2); color: var(--momo-text-secondary); }