Files
2026-08-06 11:11:11 +08:00

351 lines
6.6 KiB
CSS
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* Control page styles - desktop layout */
* { margin: 0; padding: 0; box-sizing: border-box; }
:root {
--bg: #0f1117;
--card-bg: #1a1d2e;
--text: #e0e0e0;
--text-dim: #888;
--accent: #4A90D9;
--border: rgba(255,255,255,0.10);
--radius: 8px;
--btn-secondary: rgba(255,255,255,0.08);
--warn-bg: rgba(255,200,87,0.12);
--badge-on-bg: rgba(76,175,80,0.18);
--badge-on-fg: #7bc47f;
--badge-off-bg: rgba(224,85,85,0.18);
--badge-off-fg: #e28a8a;
}
/* 浅色主题:白偏蓝背景、黑色字体与图标 */
.theme-light {
--bg: #e8edf4;
--card-bg: #ffffff;
--text: #1c2333;
--text-dim: #5b6a7e;
--accent: #2f6fb2;
--border: #d7dfe8;
--radius: 8px;
--btn-secondary: #e4e9f0;
--warn-bg: #fffbea;
--badge-on-bg: #e8f5e9;
--badge-on-fg: #2e7d32;
--badge-off-bg: #ffebee;
--badge-off-fg: #c62828;
}
/* 主题切换动画:切换瞬间由 theme.js 临时加 .theme-anim */
html.theme-anim,
html.theme-anim * {
transition: background-color 0.55s ease, color 0.55s ease,
border-color 0.55s ease, box-shadow 0.55s ease !important;
}
html, body {
font-family: -apple-system, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
background: var(--bg);
color: var(--text);
min-height: 100vh;
}
#app {
max-width: 960px;
margin: 0 auto;
padding: 20px;
}
header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 24px;
flex-wrap: wrap;
gap: 12px;
}
header h1 {
font-size: 22px;
font-weight: 600;
}
#tabs {
display: flex;
gap: 4px;
}
.tab {
padding: 8px 20px;
border: none;
background: var(--card-bg);
border-radius: var(--radius);
cursor: pointer;
font-size: 14px;
color: var(--text-dim);
border: 1px solid var(--border);
}
.tab.active {
background: var(--accent);
color: #fff;
border-color: var(--accent);
}
.tab-content {
display: none;
}
.tab-content.active {
display: block;
}
.section {
background: var(--card-bg);
border-radius: var(--radius);
padding: 20px;
margin-bottom: 16px;
border: 1px solid var(--border);
}
.section h3 {
font-size: 16px;
margin-bottom: 14px;
color: var(--text);
font-weight: 500;
}
/* Forms */
.form-row {
margin-bottom: 12px;
}
.form-row label {
display: block;
font-size: 13px;
color: var(--text-dim);
margin-bottom: 4px;
}
.inline-form {
display: flex;
align-items: center;
gap: 8px;
flex-wrap: wrap;
}
input, select, button {
font-family: inherit;
font-size: 14px;
}
input[type="text"],
input[type="url"],
input[type="number"],
input[type="time"],
select {
padding: 8px 12px;
border: 1px solid var(--border);
border-radius: 6px;
background: var(--card-bg);
color: var(--text);
min-width: 120px;
}
input[type="color"] {
width: 36px;
height: 36px;
border: 1px solid var(--border);
border-radius: 6px;
cursor: pointer;
padding: 2px;
}
button {
padding: 8px 16px;
background: var(--accent);
color: #fff;
border: none;
border-radius: 6px;
cursor: pointer;
font-weight: 500;
}
button:hover {
opacity: 0.9;
}
button.btn-secondary {
background: var(--btn-secondary);
color: var(--text);
}
button.btn-danger {
background: #E05555;
}
/* Lists */
.group-item, .alarm-item, .clock-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px 12px;
border: 1px solid var(--border);
border-radius: 6px;
margin-bottom: 8px;
}
.group-item .info, .alarm-item .info, .clock-item .info {
display: flex;
align-items: center;
gap: 10px;
}
.group-color-dot {
width: 12px;
height: 12px;
border-radius: 50%;
}
.group-name {
font-weight: 500;
}
.group-sources {
font-size: 12px;
color: var(--text-dim);
}
.group-actions {
display: flex;
gap: 6px;
}
.group-actions button {
font-size: 12px;
padding: 4px 10px;
}
.badge {
display: inline-block;
padding: 2px 8px;
border-radius: 4px;
font-size: 11px;
font-weight: 500;
}
.badge-on { background: var(--badge-on-bg); color: var(--badge-on-fg); }
.badge-off { background: var(--badge-off-bg); color: var(--badge-off-fg); }
.small-btn {
font-size: 12px;
padding: 4px 10px;
background: var(--btn-secondary);
color: var(--text);
border: 1px solid var(--border);
border-radius: 4px;
cursor: pointer;
}
/* Day picker */
.day-picker {
display: flex;
gap: 4px;
}
.day-picker label {
display: flex;
align-items: center;
gap: 2px;
font-size: 13px;
cursor: pointer;
padding: 4px 8px;
border-radius: 4px;
border: 1px solid var(--border);
}
.day-picker label:has(input:checked) {
background: var(--accent);
color: #fff;
border-color: var(--accent);
}
.day-picker input[type="checkbox"] {
display: none;
}
/* Toast */
.toast {
position: fixed;
bottom: 20px;
right: 20px;
background: #333;
color: #fff;
padding: 10px 20px;
border-radius: 6px;
font-size: 14px;
animation: fadeIn 0.3s;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
/* ── Responsive breakpoints ────────────────── */
/* Tablet: 641–1024px */
@media (max-width: 1024px) {
#app { max-width: 100%; padding: 16px; }
.section { padding: 16px; }
}
/* Phone: ≤ 640px */
@media (max-width: 640px) {
#app { padding: 10px; }
header { flex-direction: column; align-items: flex-start; }
header h1 { font-size: 18px; }
#tabs { width: 100%; }
.tab { flex: 1; text-align: center; padding: 10px 8px; font-size: 13px; }
.section { padding: 14px; margin-bottom: 12px; }
.section h3 { font-size: 15px; margin-bottom: 10px; }
.inline-form { flex-direction: column; align-items: stretch; gap: 8px; }
input, select, button { width: 100%; min-width: 0; font-size: 15px; }
input[type="text"],
input[type="url"],
input[type="number"],
input[type="time"],
select { padding: 10px 12px; }
button { padding: 10px 16px; }
/* Day picker: wrap to two rows */
.day-picker { flex-wrap: wrap; gap: 4px; }
.day-picker label { padding: 6px 10px; font-size: 14px; }
/* List items: stack vertically */
.group-item, .alarm-item, .clock-item {
flex-direction: column;
align-items: flex-start;
gap: 8px;
}
.group-actions { width: 100%; justify-content: flex-end; }
/* Toast: full-width at bottom */
.toast {
left: 10px; right: 10px; bottom: 10px;
text-align: center; font-size: 14px;
}
}
/* Large desktop: > 1400px */
@media (min-width: 1400px) {
#app { max-width: 1200px; }
.section { padding: 28px; }
input[type="text"],
input[type="url"],
input[type="number"],
input[type="time"],
select { padding: 10px 14px; font-size: 15px; }
button { padding: 10px 20px; font-size: 15px; }
}