:root { --bg-color: #09090b; --card-bg: rgba(24, 24, 27, 0.65); --card-border: rgba(255, 255, 255, 0.08); --card-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.5), 0 0 2px rgba(255, 255, 255, 0.05) inset; --text-main: #f4f4f5; --text-secondary: #a1a1aa; --item-bg: rgba(255, 255, 255, 0.03); --item-bg-hover: rgba(255, 255, 255, 0.06); --item-border: rgba(255, 255, 255, 0.05); --icon-bg: rgba(255, 255, 255, 0.05); --input-bg: rgba(0, 0, 0, 0.3); --divider-color: rgba(255, 255, 255, 0.15); --divider-line: rgba(255, 255, 255, 0.08); --glow-1: rgba(0, 113, 227, 0.15); --glow-2: rgba(34, 211, 238, 0.12); --glow-3: rgba(168, 85, 247, 0.1); --accent-blue: #0a84ff; --accent-cyan: #30d158; --accent-cyan-light: rgba(10, 132, 255, 0.2); --success-green: #30d158; --danger-red: #ff453a; --border-radius-lg: 28px; --border-radius-sm: 18px; --transition-base: all 0.4s cubic-bezier(0.2, 0.8, 0.2, 1); --font-stack: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", "Helvetica Neue", Roboto, sans-serif; } body[data-theme="light"] { --bg-color: #f2f4f8; --card-bg: rgba(255, 255, 255, 0.85); --card-border: rgba(255, 255, 255, 1); --card-shadow: 0 10px 30px -5px rgba(12, 43, 100, 0.08), 0 4px 10px -3px rgba(12, 43, 100, 0.04), 0 0 1px rgba(0, 0, 0, 0.05); --text-main: #1d1d1f; --text-secondary: #86868b; --item-bg: #ffffff; --item-bg-hover: #f8fafd; --item-border: rgba(0, 0, 0, 0.04); --icon-bg: #f5f5f7; --input-bg: #ffffff; --divider-color: #86868b; --divider-line: #e5e5ea; --glow-1: rgba(0, 113, 227, 0.05); --glow-2: rgba(34, 211, 238, 0.05); --glow-3: rgba(168, 85, 247, 0.03); --accent-blue: #0071e3; --accent-cyan: #0071e3; --accent-cyan-light: rgba(0, 113, 227, 0.1); --success-green: #34c759; --danger-red: #ff3b30; } * { box-sizing: border-box; margin: 0; padding: 0; outline: none; } html, body, #app { min-height: 100%; } body { font-family: var(--font-stack); background-color: var(--bg-color); color: var(--text-main); display: flex; justify-content: center; align-items: center; min-height: 100vh; padding: 20px 20px 100px; position: relative; overflow-x: hidden; overflow-y: auto; transition: background-color 0.5s ease, color 0.5s ease; -webkit-font-smoothing: antialiased; } body::before { content: ""; position: fixed; inset: -25%; width: 150%; height: 150%; z-index: -1; background-image: radial-gradient(circle at 20% 20%, var(--glow-1) 0%, transparent 50%), radial-gradient(circle at 80% 20%, var(--glow-2) 0%, transparent 40%), radial-gradient(circle at 50% 80%, var(--glow-3) 0%, transparent 60%); animation: backgroundMove 25s infinite alternate ease-in-out; } body, button, input { font: inherit; } button { border: 0; color: inherit; } a { color: inherit; } .app-icon { display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; line-height: 1; } .app-icon svg { width: 100%; height: 100%; overflow: visible; } .container { width: 100%; max-width: 1000px; margin: auto; position: relative; z-index: 1; transition: var(--transition-base); } .header { position: relative; display: flex; flex-direction: column; justify-content: center; align-items: center; min-height: 80px; margin-top: 30px; margin-bottom: 40px; text-align: center; } .header h1 { font-size: 42px; font-weight: 800; letter-spacing: -1px; margin-bottom: 8px; } .header p { color: var(--text-secondary); font-size: 16px; font-weight: 400; letter-spacing: 0.5px; } .theme-toggle { position: absolute; top: 50%; right: 0; width: 44px; height: 44px; margin-top: -22px; border-radius: 50%; background: var(--card-bg); border: 1px solid var(--card-border); color: var(--text-main); box-shadow: var(--card-shadow); cursor: pointer; display: flex; justify-content: center; align-items: center; transition: var(--transition-base); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); } .theme-toggle:hover { transform: scale(1.08); box-shadow: 0 8px 25px rgba(0, 113, 227, 0.15); } .main-grid { display: grid; grid-template-columns: 1fr; gap: 30px; } .card { position: relative; display: flex; flex-direction: column; padding: 40px 30px; background: var(--card-bg); border: 1px solid var(--card-border); border-radius: var(--border-radius-lg); box-shadow: var(--card-shadow); transition: var(--transition-base); backdrop-filter: blur(40px) saturate(150%); -webkit-backdrop-filter: blur(40px) saturate(150%); } .card::before { content: ""; position: absolute; inset: 0 0 auto; height: 1px; border-radius: var(--border-radius-lg) var(--border-radius-lg) 0 0; opacity: 0.5; background: linear-gradient(90deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0)); } .section-title { margin-bottom: 25px; text-align: center; font-size: 12px; font-weight: 700; color: var(--text-secondary); text-transform: uppercase; letter-spacing: 2px; } .local-device-name { margin-top: -10px; margin-bottom: 18px; text-align: center; font-size: 13px; color: var(--text-secondary); } .local-device-name strong { color: var(--text-main); font-weight: 600; } .radar-container, .waiting-area { flex: 1; min-height: 200px; display: flex; flex-direction: column; justify-content: center; align-items: center; text-align: center; } .radar { position: relative; width: 80px; height: 80px; margin-bottom: 25px; display: flex; justify-content: center; align-items: center; border-radius: 50%; background: var(--accent-cyan-light); border: 1px solid rgba(0, 113, 227, 0.1); box-shadow: 0 0 20px var(--accent-cyan-light); } .radar::before, .radar::after { content: ""; position: absolute; inset: 0; border-radius: 50%; border: 2px solid var(--accent-blue); opacity: 0; animation: ripplePro 3s infinite cubic-bezier(0.1, 0.8, 0.3, 1); } .radar::before { animation-delay: 1.5s; } .radar-icon { font-size: 36px; color: var(--accent-blue); } .scan-status, .waiting-subtitle { margin-top: 10px; font-size: 14px; color: var(--text-secondary); } .device-list { width: 100%; flex: 1; display: flex; flex-direction: column; gap: 12px; } .device-item { position: relative; width: 100%; display: flex; align-items: center; padding: 16px 20px; background: var(--item-bg); border: 1px solid var(--item-border); border-radius: var(--border-radius-sm); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.02); cursor: pointer; color: var(--text-main); text-align: left; transition: var(--transition-base); } .device-item:hover { background: var(--item-bg-hover); transform: translateY(-2px); border-color: rgba(0, 113, 227, 0.3); box-shadow: 0 8px 20px -5px rgba(0, 113, 227, 0.15), 0 0 0 1px rgba(0, 113, 227, 0.1) inset; } .device-icon { width: 48px; height: 48px; margin-right: 16px; display: flex; justify-content: center; align-items: center; border-radius: 50%; background: var(--icon-bg); border: 1px solid var(--item-border); transition: var(--transition-base); } .device-info { flex: 1; } .device-status-beacon { position: absolute; top: 50%; right: 22px; width: 14px; height: 14px; transform: translateY(-50%); pointer-events: none; } .device-status-dot, .device-status-ring { position: absolute; inset: 0; border-radius: 50%; } .device-status-dot { inset: 3px; background: var(--accent-blue); box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.75), 0 0 14px rgba(10, 132, 255, 0.28); } .device-status-ring { border: 2px solid rgba(10, 132, 255, 0.22); opacity: 0; transform: scale(0.7); animation: deviceBeaconPing 2s infinite cubic-bezier(0.16, 0.84, 0.44, 1); } .device-status-ring-delay { animation-delay: 1s; } .device-icon .app-icon { position: relative; z-index: 1; color: var(--text-main); } .device-item:hover .device-icon { background: var(--accent-cyan-light); border-color: transparent; } .device-item:hover .device-icon .app-icon { color: var(--accent-blue); } .device-item:hover .device-status-dot { box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.85), 0 0 18px rgba(10, 132, 255, 0.36); } .device-item:hover .device-status-ring { border-color: rgba(10, 132, 255, 0.3); animation-duration: 1.4s; } .device-info h4 { margin-bottom: 4px; font-size: 16px; font-weight: 600; color: var(--text-main); } .device-info p { font-size: 13px; color: var(--text-secondary); } .room-action-area { flex: 1; display: flex; flex-direction: column; justify-content: center; } .btn-create { width: 100%; margin-bottom: 25px; padding: 18px; display: flex; align-items: center; justify-content: center; gap: 8px; background: var(--item-bg); color: var(--accent-blue); border: 1px solid var(--item-border); border-radius: var(--border-radius-sm); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.02); font-size: 16px; font-weight: 600; cursor: pointer; transition: var(--transition-base); } .btn-create:hover { background: var(--item-bg-hover); border-color: rgba(0, 113, 227, 0.3); transform: translateY(-2px); box-shadow: 0 8px 20px -5px rgba(0, 113, 227, 0.15); } .divider { position: relative; margin-bottom: 25px; text-align: center; color: var(--divider-color); font-size: 12px; font-weight: 500; text-transform: uppercase; letter-spacing: 1px; } .divider::before, .divider::after { content: ""; position: absolute; top: 50%; width: 35%; height: 1px; background: var(--divider-line); } .divider::before { left: 0; } .divider::after { right: 0; } .room-input-group { display: flex; flex-direction: column; gap: 12px; } .pending-downloads { margin-top: 22px; padding: 16px; border: 1px solid var(--item-border); border-radius: var(--border-radius-sm); background: var(--item-bg); max-height: 236px; overflow-y: auto; padding-right: 10px; } .pending-downloads::-webkit-scrollbar { width: 6px; } .pending-downloads::-webkit-scrollbar-thumb { background: var(--divider-color); border-radius: 999px; } .pending-downloads-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; font-size: 12px; font-weight: 700; letter-spacing: 0.08em; color: var(--text-secondary); position: sticky; top: 0; z-index: 1; background: var(--item-bg); padding-bottom: 8px; } .pending-download-item { display: flex; align-items: center; justify-content: space-between; gap: 12px; width: 100%; min-width: 0; box-sizing: border-box; padding: 12px 14px; border-radius: 16px; background: var(--input-bg); border: 1px solid var(--item-border); text-decoration: none; transition: var(--transition-base); } .pending-download-item + .pending-download-item { margin-top: 10px; } .pending-download-item:hover { background: var(--item-bg-hover); border-color: rgba(0, 113, 227, 0.25); color: var(--accent-blue); } .pending-download-copy { flex: 1; min-width: 0; overflow: hidden; } .pending-download-copy strong { display: -webkit-box; margin-bottom: 4px; overflow: hidden; text-overflow: ellipsis; white-space: normal; overflow-wrap: anywhere; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-height: 1.35; max-height: calc(1.35em * 2); font-size: 14px; font-weight: 600; color: var(--text-main); } .pending-download-copy p { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; color: var(--text-secondary); } .pending-download-icon { flex: none; } input.room-code, .text-input-group input, .text-input-group textarea { width: 100%; min-width: 0; padding: 18px; border: 1px solid var(--item-border); border-radius: var(--border-radius-sm); background: var(--input-bg); color: var(--text-main); box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.02); transition: var(--transition-base); } input.room-code { font-size: 24px; font-weight: 700; text-align: center; letter-spacing: 8px; font-family: ui-monospace, "SFMono-Regular", Menlo, monospace; } input.room-code:focus, .text-input-group input:focus, .text-input-group textarea:focus { background: var(--item-bg); border-color: var(--accent-blue); box-shadow: 0 0 0 3px var(--accent-cyan-light); } input.room-code::placeholder { letter-spacing: normal; font-size: 16px; font-weight: 400; color: var(--text-secondary); opacity: 0.6; } .btn-primary { width: 100%; padding: 18px; background: var(--accent-blue); color: #fff; border-radius: var(--border-radius-sm); box-shadow: 0 4px 12px rgba(0, 113, 227, 0.3); font-size: 16px; font-weight: 600; cursor: pointer; transition: var(--transition-base); } .btn-primary:hover, .text-input-group button:hover { background: #0066cc; transform: translateY(-2px); box-shadow: 0 6px 16px rgba(0, 113, 227, 0.4); } .huge-code { margin: 15px 0 25px; padding: 15px 30px; font-size: 56px; font-weight: 800; color: var(--accent-blue); letter-spacing: 10px; font-family: ui-monospace, monospace; border-radius: 20px; border: 1px solid rgba(0, 113, 227, 0.2); background: var(--accent-cyan-light); } .spinner { width: 28px; height: 28px; margin: 0 auto 15px; border-radius: 50%; border: 3px solid var(--item-border); border-top-color: var(--accent-blue); animation: spin 0.8s linear infinite; } .waiting-tip { font-size: 14px; font-weight: 500; color: var(--accent-blue); } .btn-cancel { margin-top: 25px; background: none; color: var(--text-secondary); font-size: 14px; cursor: pointer; transition: var(--transition-base); } .btn-cancel:hover { color: var(--text-main); } .transfer-panel, .admin-panel { width: 100%; margin: 0 auto; opacity: 0; transform: scale(0.95); animation: showPanelPro 0.5s forwards cubic-bezier(0.2, 0.8, 0.2, 1); } .transfer-panel { max-width: 650px; } .transfer-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 30px; padding-bottom: 20px; border-bottom: 1px solid var(--divider-line); } .connected-to h2 { margin-bottom: 4px; font-size: 20px; font-weight: 700; color: var(--text-main); } .connected-to p { display: flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 500; color: var(--success-green); } .connection-hint { display: block; margin-top: 8px; max-width: 42ch; font-size: 12px; line-height: 1.5; color: var(--text-secondary); } .close-btn { width: 36px; height: 36px; display: flex; justify-content: center; align-items: center; border-radius: 50%; background: var(--icon-bg); border: 1px solid var(--item-border); color: var(--text-secondary); cursor: pointer; transition: var(--transition-base); } .close-btn:hover { background: var(--item-bg-hover); color: var(--text-main); transform: rotate(90deg); } .drop-zone { padding: 40px 30px; margin-bottom: 20px; text-align: center; background: var(--input-bg); border: 2px dashed var(--divider-color); border-radius: var(--border-radius-sm); cursor: pointer; transition: var(--transition-base); } .drop-zone:hover, .drop-zone-active { border-color: var(--accent-blue); background-color: var(--accent-cyan-light); } .drop-zone-icon { margin-bottom: 12px; font-size: 42px; color: var(--text-secondary); transition: var(--transition-base); } .drop-zone:hover .drop-zone-icon, .drop-zone-active .drop-zone-icon { transform: translateY(-5px); color: var(--accent-blue); } .drop-zone-text { font-size: 15px; font-weight: 500; color: var(--text-main); } .text-input-group { display: flex; gap: 12px; margin-bottom: 20px; } .text-input-group input { flex: 1; padding: 16px 20px; font-size: 15px; } .text-input-group button { width: 52px; display: flex; align-items: center; justify-content: center; border-radius: var(--border-radius-sm); background: var(--accent-blue); color: #fff; box-shadow: 0 4px 12px rgba(0, 113, 227, 0.3); cursor: pointer; transition: var(--transition-base); } .batch-actions { display: flex; justify-content: flex-end; margin-bottom: 12px; height: 0; overflow: hidden; opacity: 0; pointer-events: none; transition: var(--transition-base); } .batch-actions.active { height: 36px; overflow: visible; opacity: 1; pointer-events: auto; } .btn-small-primary { display: flex; align-items: center; gap: 6px; padding: 8px 16px; background: var(--item-bg); color: var(--text-main); border: 1px solid var(--item-border); border-radius: 12px; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.04); font-size: 13px; font-weight: 600; cursor: pointer; transition: var(--transition-base); } .btn-small-primary:hover { background: var(--item-bg-hover); color: var(--accent-blue); border-color: rgba(0, 113, 227, 0.3); transform: translateY(-1px); } .batch-progress-container { max-height: 280px; overflow-y: auto; padding-right: 8px; padding-bottom: 10px; text-align: left; } .batch-progress-container::-webkit-scrollbar { width: 6px; } .batch-progress-container::-webkit-scrollbar-thumb { background: var(--divider-color); border-radius: 4px; } .batch-item { margin-bottom: 12px; width: 100%; min-width: 0; box-sizing: border-box; padding: 16px; background: var(--item-bg); border: 1px solid var(--item-border); border-radius: var(--border-radius-sm); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.02); transition: all 0.3s ease; } .batch-item:hover { border-color: rgba(0, 0, 0, 0.08); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.04); } body[data-theme="dark"] .batch-item:hover { border-color: rgba(255, 255, 255, 0.1); } .file-info { display: flex; justify-content: space-between; align-items: center; gap: 10px; min-width: 0; margin-bottom: 12px; font-size: 14px; } .file-info-left { flex: 1; min-width: 0; max-width: 60%; display: flex; align-items: center; gap: 10px; overflow: hidden; } .file-icon-wrapper { flex: none; width: 32px; height: 32px; display: flex; justify-content: center; align-items: center; border-radius: 8px; background: var(--icon-bg); color: var(--accent-blue); } .file-name { display: -webkit-box; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: normal; overflow-wrap: anywhere; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-height: 1.35; max-height: calc(1.35em * 2); font-weight: 500; color: var(--text-main); } .file-info-right { display: flex; flex: none; align-items: center; min-width: 0; gap: 8px; } .file-status { margin-right: 4px; white-space: nowrap; font-size: 12px; font-weight: 500; font-variant-numeric: tabular-nums; } .action-btn { width: 28px; height: 28px; display: flex; justify-content: center; align-items: center; border-radius: 8px; background: transparent; border: 1px solid transparent; color: var(--text-secondary); cursor: pointer; transition: var(--transition-base); } .action-btn:hover { color: var(--text-main); background: var(--icon-bg); border-color: var(--item-border); } .action-btn.primary:hover { color: var(--accent-blue); background: var(--accent-cyan-light); } .action-btn.danger:hover { color: var(--danger-red); background: rgba(255, 59, 48, 0.1); } .progress-bar-container { height: 6px; overflow: hidden; background: var(--icon-bg); border-radius: 4px; } .progress-bar-fill { height: 100%; width: 0; background: var(--accent-blue); border-radius: 4px; transition: width 0.1s linear; } .progress-bar-fill.success { background: var(--success-green); } .admin-header-card { margin-bottom: 30px; padding: 30px; } .transfer-head-compact { margin-bottom: 0; padding-bottom: 0; border-bottom: 0; } .admin-title { font-size: 24px; color: var(--text-main); } .connected-to .admin-subtitle { display: block; margin-top: 4px; color: var(--text-secondary); } .admin-summary-grid { margin-bottom: 30px; } .admin-stats-card { height: 100%; } .admin-stats-panel { display: flex; flex-direction: column; height: 100%; } .admin-stats-row { flex: 1; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-rows: repeat(2, minmax(0, 1fr)); gap: 12px; } .admin-stat-item { display: flex; flex-direction: column; justify-content: space-between; min-height: 0; padding: 16px 15px; text-align: left; border: 1px solid var(--item-border); border-radius: 20px; background: var(--item-bg); box-shadow: 0 8px 24px -18px rgba(12, 43, 100, 0.2); } .admin-stat-item-fluid { grid-column: 1 / -1; min-height: 142px; padding: 0; border: 0; background: transparent; box-shadow: none; } .admin-fluid-card { position: relative; isolation: isolate; display: flex; height: 100%; min-height: 0; overflow: hidden; padding: 0; border: 1px solid rgba(123, 166, 255, 0.5); border-radius: 16px; background-color: #edf1f9; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.04); } .admin-fluid-fill { position: absolute; left: 0; top: 0; width: 100%; height: 100%; pointer-events: none; } .admin-fluid-wave { position: absolute; left: 50%; top: calc(100% - var(--fluid-level)); width: 2500px; height: 2500px; transform: translateX(-50%); transform-origin: 50% 50%; transition: top 0.8s cubic-bezier(0.4, 0, 0.2, 1); } .admin-fluid-wave-a { background-color: rgba(175, 200, 245, 0.6); border-radius: 48.5%; animation: fluidSpin 20s linear infinite; } .admin-fluid-wave-b { background-color: rgba(145, 178, 235, 0.88); border-radius: 49%; animation: fluidSpin 25s linear infinite; animation-delay: -10s; } .admin-fluid-content { position: relative; z-index: 1; display: flex; align-items: center; gap: 18px; width: 100%; min-height: 110px; padding: 24px; } .admin-fluid-icon { width: 52px; height: 52px; display: flex; align-items: center; justify-content: center; flex: none; border-radius: 14px; background-color: #d7e1f4; color: #3b60c4; box-shadow: none; } .admin-fluid-copy { min-width: 0; flex: 1; } .admin-fluid-copy h3 { margin: 0 0 4px 0; margin-bottom: 8px; font-size: 22px; font-weight: 600; line-height: 1.15; color: #333333; } .admin-fluid-copy p { margin: 0; font-size: 13px; color: #778299; } .admin-fluid-copy small { display: block; margin-top: 10px; font-size: 12px; color: var(--text-secondary); } .admin-stat-kicker { font-size: 11px; font-weight: 700; letter-spacing: 0.08em; color: var(--text-secondary); } .admin-stat-item h3 { margin-top: 10px; margin-bottom: 6px; font-size: 34px; font-weight: 800; font-family: ui-monospace, monospace; line-height: 1; } .admin-stat-item p { font-size: 13px; font-weight: 500; color: var(--text-secondary); } .stat-suffix { font-size: 16px; } .admin-config-stack { display: flex; flex-direction: column; height: 100%; gap: 15px; } .admin-config-card { height: 100%; } .admin-config-row { margin-bottom: 0; } .admin-config-row-field { flex-direction: column; align-items: stretch; } .admin-config-row-last { margin-bottom: 0; } .admin-field-meta { display: flex; flex-direction: column; gap: 6px; } .admin-field-label { font-size: 13px; font-weight: 700; letter-spacing: 0.04em; color: var(--text-main); } .admin-field-hint { font-size: 12px; line-height: 1.5; color: var(--text-secondary); } .admin-field-control-row { display: flex; gap: 12px; } .admin-field-control-row input { flex: 1; } .admin-config-insights { display: flex; flex: 1; flex-direction: column; gap: 14px; } .admin-config-highlight { padding: 18px 20px; border: 1px solid var(--item-border); border-radius: 22px; background: linear-gradient(145deg, var(--item-bg-hover), var(--item-bg)); box-shadow: 0 16px 30px -24px rgba(12, 43, 100, 0.35); } .admin-config-badge { display: inline-flex; align-items: center; padding: 6px 10px; border-radius: 999px; background: var(--accent-cyan-light); color: var(--accent-blue); font-size: 11px; font-weight: 700; letter-spacing: 0.12em; } .admin-config-highlight h3 { margin-top: 14px; margin-bottom: 8px; font-size: 30px; font-weight: 800; font-family: ui-monospace, monospace; color: var(--text-main); } .admin-config-highlight p { font-size: 13px; line-height: 1.7; color: var(--text-secondary); } .admin-table-card { min-height: 0; } .admin-table-wrapper { max-height: 420px; overflow-x: auto; overflow-y: auto; border-radius: 18px; } .admin-table-wrapper::-webkit-scrollbar { width: 8px; height: 8px; } .admin-table-wrapper::-webkit-scrollbar-thumb { background: var(--divider-color); border-radius: 999px; } .admin-table { width: 100%; margin-top: 10px; border-collapse: collapse; font-size: 14px; text-align: left; } .admin-table th { position: sticky; top: 0; z-index: 1; padding: 14px 12px; color: var(--text-secondary); border-bottom: 1px solid var(--divider-line); background: var(--card-bg); font-weight: 600; white-space: nowrap; } .admin-table td { padding: 14px 12px; color: var(--text-main); border-bottom: 1px solid var(--item-border); } .admin-table tbody tr:last-child td { border-bottom: 0; } .admin-table tr:hover td { background-color: var(--item-bg-hover); } .hidden { display: none !important; } .footer { position: absolute; right: 0; bottom: 24px; left: 0; text-align: center; font-size: 13px; color: var(--text-secondary); opacity: 0.6; line-height: 1.8; letter-spacing: 0.5px; transition: var(--transition-base); } .footer:hover { opacity: 1; } .footer .divider-line { margin: 0 8px; opacity: 0.5; } .footer a { text-decoration: none; } .footer a:hover { color: var(--text-main); } #admin-trigger { cursor: pointer; user-select: none; } @keyframes backgroundMove { 0% { transform: scale(1) translate(0, 0); } 100% { transform: scale(1.05) translate(2%, 2%); } } @keyframes ripplePro { 0% { transform: scale(0.8); opacity: 0; } 20% { opacity: 0.5; } 100% { transform: scale(3); opacity: 0; } } @keyframes deviceBeaconPing { 0% { opacity: 0; transform: scale(0.7); } 22% { opacity: 0.9; } 100% { opacity: 0; transform: scale(2.8); } } @keyframes spin { to { transform: rotate(360deg); } } @keyframes showPanelPro { to { opacity: 1; transform: scale(1); } } @keyframes fluidSpin { 0% { transform: translateX(-50%) rotate(0deg); } 100% { transform: translateX(-50%) rotate(360deg); } } @media (min-width: 768px) { .main-grid { grid-template-columns: 1fr 1fr; gap: 40px; } } @media (min-width: 1024px) { .container { max-width: 1000px; padding: 40px 0; } .header h1 { font-size: 48px; } .card { padding: 40px; } .btn-create, .btn-primary, input.room-code { padding: 18px; } .transfer-panel { max-width: 700px; } } @media (max-width: 767px) { .admin-stats-row { grid-template-columns: 1fr; grid-template-rows: none; } .file-info, .file-info-right { align-items: flex-start; } .file-info { flex-direction: column; } .file-info-left, .file-info-right { max-width: 100%; width: 100%; } .file-info-right { flex-wrap: wrap; row-gap: 8px; justify-content: flex-end; } .file-status { max-width: 100%; overflow: hidden; text-overflow: ellipsis; } } @media (max-width: 600px) { body { padding-inline: 16px; } .theme-toggle { position: fixed; top: auto; right: 20px; bottom: 30px; width: 50px; height: 50px; margin-top: 0; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15); } .card, .admin-header-card { padding: 28px 22px; } .header { margin-bottom: 28px; } .header h1 { font-size: 36px; } .huge-code { width: 100%; font-size: 44px; letter-spacing: 8px; } .text-input-group { flex-direction: column; } .text-input-group button { width: 100%; min-height: 52px; } }