:root { color-scheme: dark; font-family: Inter, "Segoe UI", system-ui, sans-serif; background: #101418; color: #f8fafc; } * { box-sizing: border-box; } [v-cloak] { display: none; } body { margin: 0; min-height: 100vh; background: linear-gradient(180deg, rgba(20, 184, 166, 0.13), transparent 280px), #101418; } button, a, textarea { font: inherit; } .shell { width: min(1760px, calc(100vw - 24px)); margin: 0 auto; padding: 16px 0 28px; } .topbar, .panelHead, .syncRow { display: flex; align-items: center; justify-content: space-between; gap: 16px; } .panelHead.compact { margin-bottom: 10px; } .topbar { margin-bottom: 14px; } h1, h2, h3, p { margin: 0; } h1 { font-size: 24px; letter-spacing: 0; } .topbar p { margin-top: 8px; color: #aeb7c2; } .connection { display: inline-flex; align-items: center; gap: 8px; } .dot { width: 10px; height: 10px; border-radius: 999px; background: #ef4444; box-shadow: 0 0 0 4px rgba(239, 68, 68, 0.12); } .dot.ok { background: #22c55e; box-shadow: 0 0 0 4px rgba(34, 197, 94, 0.16); } .consoleLayout { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; } .previewPanel { grid-column: 1 / -1; } .panel { border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 8px; background: rgba(255, 255, 255, 0.055); padding: 14px; } .panelMeta { color: #94a3b8; font-size: 12px; } .panelHint { margin-top: 4px; color: #94a3b8; font-size: 12px; } h2 { font-size: 17px; } h3 { font-size: 15px; } button, .linkGrid a { border: 1px solid rgba(255, 255, 255, 0.14); border-radius: 6px; background: rgba(255, 255, 255, 0.07); color: #f8fafc; padding: 9px 12px; cursor: pointer; text-decoration: none; } button:hover, .linkGrid a:hover { border-color: rgba(20, 184, 166, 0.8); } button:disabled { cursor: wait; opacity: 0.62; } .previewGrid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0; margin-top: 10px; overflow: hidden; border: 1px solid rgba(255, 255, 255, 0.09); border-radius: 8px; background: #05070a; } .previewTile { overflow: hidden; border: 0; border-radius: 0; background: #05070a; } .previewTile header { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 38px; padding: 8px 10px; background: rgba(255, 255, 255, 0.045); border-bottom: 1px solid rgba(255, 255, 255, 0.08); } .previewTile strong { font-size: 13px; } .previewTile a { color: #5eead4; font-size: 12px; text-decoration: none; } .previewTile iframe { display: block; width: 100%; aspect-ratio: 7440 / 3510; border: 0; background: #05070a; } .primary { width: 100%; margin-top: 12px; background: #14b8a6; border-color: #14b8a6; color: #071211; font-weight: 760; } .sceneList, .syncStatus, .linkGrid, .actionGrid, .commandEcho { display: grid; gap: 10px; } .sceneList, .syncStatus, .linkGrid { margin-top: 10px; } .linkGrid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .scene { display: grid; grid-template-columns: 1fr auto; gap: 10px; align-items: center; padding: 10px; border-radius: 8px; border: 1px solid rgba(255, 255, 255, 0.08); background: rgba(255, 255, 255, 0.045); } .scene.active { border-color: rgba(20, 184, 166, 0.85); background: rgba(20, 184, 166, 0.12); } .scene h3 { font-size: 14px; margin-bottom: 4px; } .scene p { color: #aeb7c2; font-size: 12px; overflow-wrap: anywhere; } .syncRow { padding: 9px 10px; border-radius: 6px; background: rgba(0, 0, 0, 0.22); color: #cbd5e1; font-size: 13px; } .syncRow strong { color: #f8fafc; } .echoCard { display: grid; gap: 12px; padding: 12px; border: 1px solid rgba(255, 255, 255, 0.09); border-radius: 8px; background: rgba(0, 0, 0, 0.2); } .echoHead, .tileEcho { display: flex; align-items: center; justify-content: space-between; gap: 10px; } .echoHead h4 { margin: 0 0 4px; font-size: 14px; } .echoHead p, .tileEcho small, .emptyEcho { margin: 0; color: #94a3b8; font-size: 12px; } .echoState, .tileEcho strong { flex: 0 0 auto; border-radius: 999px; padding: 4px 8px; font-size: 12px; font-weight: 760; } .echoState.ok, .tileEcho.ok strong { background: rgba(34, 197, 94, 0.16); color: #86efac; } .echoState.ready, .tileEcho.ready strong { background: rgba(20, 184, 166, 0.16); color: #5eead4; } .echoState.wait, .tileEcho.wait strong { background: rgba(148, 163, 184, 0.14); color: #cbd5e1; } .tileEcho.bad strong { background: rgba(239, 68, 68, 0.16); color: #fca5a5; } .tileEchoGrid { display: grid; gap: 8px; } .tileEcho { min-height: 48px; padding: 8px 9px; border-radius: 6px; background: rgba(255, 255, 255, 0.055); } .tileEcho span { min-width: 44px; color: #f8fafc; font-weight: 700; } .tileEcho small { text-align: right; } .emptyEcho { padding: 12px; border-radius: 6px; background: rgba(0, 0, 0, 0.22); } .actionGrid { grid-template-columns: repeat(2, minmax(0, 1fr)); margin-top: 10px; } .customAction { display: grid; gap: 8px; margin-top: 10px; color: #cbd5e1; } textarea { resize: vertical; width: 100%; border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 6px; background: rgba(0, 0, 0, 0.28); color: #f8fafc; padding: 10px; } @media (max-width: 1240px) { .consoleLayout { grid-template-columns: repeat(2, minmax(0, 1fr)); } .previewPanel { grid-column: 1 / -1; } } @media (max-width: 980px) { .shell { width: min(100vw - 12px, 1760px); padding-top: 8px; } .panel { padding: 10px; } .consoleLayout, .topbar { grid-template-columns: 1fr; display: grid; } .previewTile header { min-height: 34px; padding: 6px 8px; } .linkGrid { grid-template-columns: 1fr; } } @media (orientation: portrait) and (max-width: 680px) { .previewGrid { grid-template-columns: 1fr; } }