/* 免费演出雷达(free_show)样式 */ :root { --bg-deep: #0d0d13; --bg-card: #1a1a24; --bg-elevated: #2a2a38; --border: #3d3d52; --text-primary: #ffffff; --text-secondary: #b8b8cc; --text-muted: #9090aa; --showstart: #ff4757; --showstart-glow: rgba(255,71,87,0.15); --maoyan: #ffc312; --maoyan-glow: rgba(255,195,18,0.12); --damai: #f97316; --damai-glow: rgba(249,115,22,0.12); --free: #00e676; --free-glow: rgba(0,230,118,0.2); } /* 页面底色:本工具为暗黑主题,必须自带 body 背景/文字色, 否则浏览器默认白底 + 黑字会导致深色卡片上标题不可读 */ html, body { background: var(--bg-deep); } body { color: var(--text-primary); } .fs-app { position: relative; z-index: 1; max-width: 960px; margin: 0 auto; padding: 0 16px; } /* Header */ .fs-header { padding: 32px 0 20px; display: flex; align-items: baseline; gap: 12px; } .fs-header h1 { font-size: 28px; font-weight: 700; letter-spacing: -0.5px; color: var(--text-primary); } .fs-header .tagline { font-size: 13px; color: var(--text-muted); letter-spacing: 0.5px; } /* Tab bar */ .fs-tab-bar { display: flex; gap: 4px; background: var(--bg-card); border: 1px solid var(--border); border-radius: 12px; padding: 4px; margin-bottom: 20px; position: relative; } .fs-tab-btn { flex: 1; padding: 12px 16px; border: none; background: transparent; color: var(--text-secondary); font-size: 14px; font-weight: 600; font-family: inherit; cursor: pointer; border-radius: 9px; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); position: relative; z-index: 1; display: flex; align-items: center; justify-content: center; gap: 8px; } .fs-tab-btn .dot { width: 8px; height: 8px; border-radius: 50%; transition: all 0.3s; } .fs-tab-btn[data-tab="showstart"] .dot { background: var(--showstart); } .fs-tab-btn[data-tab="maoyan"] .dot { background: var(--maoyan); } .fs-tab-btn[data-tab="damai"] .dot { background: var(--damai); } .fs-tab-btn:hover { color: var(--text-primary); } .fs-tab-btn.active { color: var(--text-primary); background: var(--bg-elevated); box-shadow: 0 2px 8px rgba(0,0,0,0.3); } .fs-tab-btn.active[data-tab="showstart"] { box-shadow: 0 2px 12px var(--showstart-glow); } .fs-tab-btn.active[data-tab="maoyan"] { box-shadow: 0 2px 12px var(--maoyan-glow); } .fs-tab-btn.active[data-tab="damai"] { box-shadow: 0 2px 12px var(--damai-glow); } /* Controls */ .fs-controls { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin-bottom: 20px; padding: 14px 16px; background: var(--bg-card); border: 1px solid var(--border); border-radius: 10px; } .fs-controls select, .fs-controls input { background: var(--bg-elevated); border: 1px solid var(--border); color: var(--text-primary); padding: 8px 12px; border-radius: 7px; font-size: 13px; font-family: inherit; outline: none; transition: border-color 0.2s; } .fs-controls select:focus, .fs-controls input:focus { border-color: var(--text-muted); } .fs-controls input[type="number"] { width: 70px; } .fs-controls label { font-size: 12px; color: var(--text-muted); letter-spacing: 0.5px; } .fs-btn-fetch { margin-left: auto; padding: 9px 28px; border: none; border-radius: 7px; font-size: 13px; font-weight: 700; font-family: inherit; cursor: pointer; color: #fff; transition: all 0.2s; letter-spacing: 0.3px; } .fs-btn-fetch[data-platform="showstart"] { background: var(--showstart); } .fs-btn-fetch[data-platform="maoyan"] { background: var(--maoyan); color: #111; } .fs-btn-fetch[data-platform="damai"] { background: var(--damai); } .fs-btn-fetch:hover { transform: translateY(-1px); filter: brightness(1.1); } .fs-btn-fetch:active { transform: translateY(0); } .fs-btn-fetch:disabled { opacity: 0.4; cursor: not-allowed; transform: none; filter: none; } /* Status bar */ .fs-status-bar { font-size: 12px; color: var(--text-muted); padding: 8px 0; min-height: 30px; transition: color 0.3s; } .fs-status-bar.error { color: var(--showstart); } .fs-status-bar .count { color: var(--free); font-weight: 700; font-family: monospace; } /* Event list */ .fs-section-label { font-size: 11px; letter-spacing: 1.5px; color: var(--text-muted); margin: 24px 0 12px; padding-bottom: 8px; border-bottom: 1px solid var(--border); display: flex; align-items: center; gap: 8px; } .fs-section-label .num { font-size: 13px; font-weight: 700; color: var(--text-secondary); } .fs-event-list { display: flex; flex-direction: column; gap: 8px; } .fs-event-card { display: flex; gap: 14px; padding: 14px; background: var(--bg-card); border: 1px solid var(--border); border-radius: 10px; transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1); cursor: pointer; text-decoration: none; color: inherit; position: relative; overflow: hidden; } .fs-event-card::before { content: ''; position: absolute; inset: 0; opacity: 0; transition: opacity 0.3s; border-radius: 10px; } .fs-event-card[data-platform="showstart"]::before { background: linear-gradient(135deg, var(--showstart-glow), transparent 60%); } .fs-event-card[data-platform="maoyan"]::before { background: linear-gradient(135deg, var(--maoyan-glow), transparent 60%); } .fs-event-card[data-platform="damai"]::before { background: linear-gradient(135deg, var(--damai-glow), transparent 60%); } .fs-event-card:hover { border-color: var(--text-muted); transform: translateX(4px); } .fs-event-card:hover::before { opacity: 1; } .fs-event-poster { width: 64px; height: 84px; border-radius: 6px; object-fit: cover; background: var(--bg-elevated); flex-shrink: 0; position: relative; z-index: 1; } .fs-event-body { flex: 1; min-width: 0; position: relative; z-index: 1; } .fs-event-title { font-size: 14px; font-weight: 600; line-height: 1.5; margin-bottom: 6px; display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .fs-event-meta { display: flex; flex-wrap: wrap; gap: 6px; font-size: 11px; color: var(--text-muted); } .fs-event-meta span { padding: 2px 7px; background: var(--bg-elevated); border-radius: 4px; } .fs-event-price { position: absolute; right: 14px; top: 14px; font-size: 18px; font-weight: 700; z-index: 1; } .fs-event-price.free { color: var(--free); text-shadow: 0 0 20px var(--free-glow); } .fs-event-price.cheap { color: #4ecdc4; } .fs-event-price.normal { color: var(--text-secondary); } /* Loading */ .fs-loading-wrap { display: flex; flex-direction: column; align-items: center; padding: 60px 20px; gap: 16px; } .fs-spinner { width: 32px; height: 32px; border: 3px solid var(--border); border-top-color: var(--text-secondary); border-radius: 50%; animation: fs-spin 0.7s linear infinite; } @keyframes fs-spin { to { transform: rotate(360deg); } } .fs-loading-text { font-size: 13px; color: var(--text-muted); } /* Empty state */ .fs-empty-state { text-align: center; padding: 60px 20px; color: var(--text-muted); } .fs-empty-state .icon { font-size: 40px; margin-bottom: 12px; opacity: 0.5; } .fs-empty-state p { font-size: 14px; line-height: 1.8; } /* Animations */ @keyframes fs-fadeUp { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } } .fs-event-card { animation: fs-fadeUp 0.4s ease both; } .fs-event-card:nth-child(1) { animation-delay: 0.02s; } .fs-event-card:nth-child(2) { animation-delay: 0.06s; } .fs-event-card:nth-child(3) { animation-delay: 0.10s; } .fs-event-card:nth-child(4) { animation-delay: 0.14s; } .fs-event-card:nth-child(5) { animation-delay: 0.18s; } .fs-event-card:nth-child(6) { animation-delay: 0.22s; } .fs-event-card:nth-child(7) { animation-delay: 0.26s; } .fs-event-card:nth-child(8) { animation-delay: 0.30s; } /* Platform badge */ .fs-platform-badge { position: absolute; left: 14px; bottom: 14px; font-size: 10px; font-weight: 700; padding: 2px 6px; border-radius: 3px; letter-spacing: 0.5px; z-index: 1; } .fs-platform-badge.showstart { background: rgba(255,71,87,0.2); color: var(--showstart); } .fs-platform-badge.maoyan { background: rgba(255,195,18,0.2); color: var(--maoyan); } .fs-platform-badge.damai { background: rgba(249,115,22,0.2); color: var(--damai); } /* Footer */ .fs-footer { margin-top: 40px; padding: 20px 0; border-top: 1px solid var(--border); font-size: 11px; color: var(--text-muted); text-align: center; line-height: 1.8; } .fs-footer a { color: var(--maoyan); text-decoration: none; } .fs-footer a:hover { text-decoration: underline; } .fs-footer code { background: var(--bg-elevated); border: 1px solid var(--border); border-radius: 4px; padding: 1px 5px; font-size: 10px; } /* 交互详情弹窗(debug 模式) */ .fs-dialog-mask { position: fixed; inset: 0; background: rgba(0,0,0,0.55); z-index: 999; display: flex; align-items: center; justify-content: center; } .fs-dialog { width: min(680px, 92vw); max-height: 80vh; overflow: auto; background: var(--bg-card); border: 1px solid var(--border); border-radius: 10px; padding: 18px 20px; color: var(--text-secondary); font-size: 12px; line-height: 1.8; } .fs-dialog h3 { color: var(--text-primary); font-size: 14px; margin-bottom: 10px; display: flex; align-items: center; justify-content: space-between; } .fs-dialog .fs-dialog-close { border: 1px solid var(--border); background: var(--bg-elevated); color: var(--text-secondary); border-radius: 6px; padding: 2px 10px; cursor: pointer; font-size: 12px; } .fs-dialog pre { background: var(--bg-deep); border: 1px solid var(--border); border-radius: 6px; padding: 10px; white-space: pre-wrap; word-break: break-all; max-height: 40vh; overflow: auto; font-size: 11px; } .fs-dialog .fs-dialog-actions { margin-top: 10px; display: flex; gap: 8px; align-items: center; } .fs-dialog .fs-dialog-countdown { color: var(--text-muted); margin-left: auto; } @media (max-width: 600px) { .fs-header h1 { font-size: 22px; } .fs-controls { flex-direction: column; align-items: stretch; } .fs-btn-fetch { margin-left: 0; } .fs-event-price { position: static; margin-top: 8px; } }