:root { font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; color: #e5e7eb; background: #101216; font-synthesis: none; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } * { box-sizing: border-box; } body { margin: 0; min-height: 100vh; background: #101216; } button, input { font: inherit; } button { border: 0; } button:disabled { cursor: not-allowed; opacity: 0.56; } .simple-shell { display: block; min-height: 100vh; background: #101216; padding: 0; } .simple-panel { display: grid; align-content: start; min-height: 100vh; width: 100%; border: 0; border-radius: 0; background: #101216; box-shadow: none; padding: 18px 18px 96px; } .simple-header, .finder-card, .section-head, .add-toolbar, .process-add-line, .app-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .simple-header { margin: -18px -18px 16px; border-bottom: 1px solid #2a2f3a; background: #181b22; padding: 14px 18px; } .simple-header small, .simple-field span, .app-row-main > div > span, .config-path, .finder-card span { color: #8d99ae; } .simple-header h1, .section-head h2 { margin: 0; letter-spacing: 0; } .simple-header h1 { margin-top: 4px; font-size: 22px; line-height: 1.1; font-weight: 650; } .section-head h2 { font-size: 16px; } .ghost-button, .add-toolbar button, .process-add-line button, .app-row button, .open-config-button, .service-button, .service-menu-button { min-height: 36px; border: 1px solid #343b49; border-radius: 4px; background: #242a35; color: #eef2ff; padding: 8px 12px; cursor: pointer; } .ghost-button:hover, .add-toolbar button:hover, .process-add-line button:hover, .app-row button:hover, .open-config-button:hover, .service-button:hover, .service-menu-button:hover { background: #2d3543; } .finder-card { position: relative; isolation: isolate; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; justify-content: stretch; min-height: 56px; overflow: visible; border: 1px solid #2b3342; border-radius: 4px; background: #151923; padding: 12px; } .finder-border-glow { position: absolute; z-index: 0; inset: 0; overflow: hidden; border-radius: inherit; opacity: 0; pointer-events: none; transition: opacity 0.22s ease; } .finder-card > :not(.finder-border-glow) { position: relative; z-index: 1; } .finder-card.checking .finder-border-glow, .finder-card.working .finder-border-glow { opacity: 1; } .finder-card.checking .finder-border-glow { opacity: 0.78; } .finder-card.settling .finder-border-glow { opacity: 0; transition-duration: 0.7s; } .finder-border-glow-segment { position: absolute; display: block; background: #93c5fd; box-shadow: 0 0 8px rgba(96, 165, 250, 0.95), 0 0 16px rgba(34, 197, 94, 0.36); opacity: 0; } .finder-border-glow-segment.top, .finder-border-glow-segment.bottom { width: 108px; height: 2px; background: linear-gradient(90deg, transparent, #60a5fa 24%, #bbf7d0 54%, transparent); } .finder-border-glow-segment.right, .finder-border-glow-segment.left { width: 2px; height: 64px; background: linear-gradient(180deg, transparent, #60a5fa 24%, #bbf7d0 54%, transparent); } .finder-border-glow-segment.top { top: 0; animation: finder-border-top 1.6s linear infinite; } .finder-border-glow-segment.right { right: 0; animation: finder-border-right 1.6s linear infinite; } .finder-border-glow-segment.bottom { bottom: 0; animation: finder-border-bottom 1.6s linear infinite; } .finder-border-glow-segment.left { left: 0; animation: finder-border-left 1.6s linear infinite; } .finder-text, .app-row > div, .app-row-main > div { min-width: 0; } .finder-card strong, .finder-card span, .app-row-main strong, .app-row-main > div > span { display: block; overflow-wrap: anywhere; } .status-light { flex: 0 0 auto; width: 11px; height: 11px; border-radius: 999px; background: #ef4444; } .finder-card.found .status-light { background: #22c55e; box-shadow: 0 0 0 4px rgba(34, 197, 94, 0.12); } .finder-card.missing .status-light { background: #f59e0b; box-shadow: 0 0 0 4px rgba(245, 158, 11, 0.12); } .finder-card.checking .status-light { border: 2px solid #3b82f6; border-top-color: transparent; background: transparent; box-shadow: none; animation: spin 0.75s linear infinite; } .setup-toggle { display: inline-flex; gap: 7px; align-items: center; width: fit-content; min-height: 0; border: 0; background: transparent; color: #93c5fd; padding: 4px 0 0; text-align: left; cursor: pointer; } .setup-toggle:hover { color: #bfdbfe; } .setup-toggle span { display: inline-block; border: 1px solid #343b49; border-radius: 4px; background: #1b202b; color: #cbd5e1; padding: 1px 6px; font-size: 11px; font-weight: 700; } .setup-details { display: grid; grid-column: 2 / -1; gap: 6px; border-top: 1px solid #2b3342; margin-top: 2px; padding-top: 10px; } .setup-item { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 9px; align-items: start; min-height: 34px; border: 1px solid #263040; border-radius: 4px; background: #111720; padding: 8px 9px; } .setup-state-dot { width: 9px; height: 9px; border-radius: 999px; background: #f59e0b; box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.12); margin-top: 5px; } .setup-item.installed .setup-state-dot { background: #22c55e; box-shadow: 0 0 0 3px rgba(34, 197, 94, 0.12); } .setup-item strong, .setup-item span { display: block; overflow-wrap: anywhere; } .setup-item span { color: #9aa8bd; font-size: 13px; } .service-actions { position: relative; display: flex; gap: 6px; align-items: center; } .service-button { min-width: 102px; white-space: nowrap; } .service-button.stop { color: #fecaca; } .service-button.install { border-color: #166534; background: #14532d; color: #dcfce7; font-weight: 700; } .service-button.install:hover { background: #166534; } .service-menu { position: relative; display: flex; } .service-menu-button { display: grid; place-items: center; width: 42px; padding: 0; } .service-menu-button svg { display: block; } .service-menu-popover { position: absolute; top: calc(100% + 6px); right: 0; z-index: 6; min-width: 172px; border: 1px solid #343b49; border-radius: 4px; background: #171c26; box-shadow: 0 12px 30px rgba(0, 0, 0, 0.38); padding: 5px; } .service-menu-popover button { width: 100%; min-height: 34px; border: 0; border-radius: 3px; background: transparent; color: #fecaca; text-align: left; padding: 7px 9px; cursor: pointer; } .service-menu-popover button:hover { background: rgba(127, 29, 29, 0.42); } .simple-field { display: grid; gap: 7px; margin: 14px 0; } .simple-field input, .process-add-line input { min-height: 42px; width: 100%; border: 1px solid #343b49; border-radius: 4px; background: #0d1016; color: #f8fafc; outline: none; padding: 9px 11px; } .simple-field input:focus, .process-add-line input:focus { border-color: #3b82f6; box-shadow: 0 0 0 1px #3b82f6; } .apps-section { display: grid; gap: 10px; margin-top: 8px; } .section-head span { min-width: 28px; border: 1px solid #343b49; border-radius: 4px; background: #1b202b; color: #dbeafe; padding: 3px 9px; text-align: center; font-size: 12px; font-weight: 700; } .add-toolbar { justify-content: center; padding: 4px 0; } .add-tile { display: grid; place-items: center; width: 74px; height: 48px; border-color: #2b3342; background: #131720; color: #dbeafe; padding: 0; } .add-tile svg { display: block; } .add-tile:hover { border-color: #3b82f6; background: #182033; } .add-tile[aria-pressed="true"] { border-color: #3b82f6; background: #1e3a8a; } .tile-loading { color: #dbeafe; font-weight: 800; animation: pulse 1s ease-in-out infinite; } .process-add-line { display: grid; grid-template-columns: minmax(0, 1fr) 72px 88px; } .process-add-line button { border-color: #166534; background: #14532d; font-weight: 700; } .process-add-line .process-cancel-button { border-color: #343b49; background: #242a35; color: #cbd5e1; font-weight: 600; } .process-add-line button:hover { background: #166534; } .process-add-line .process-cancel-button:hover { background: #2d3543; } .app-list { display: grid; gap: 8px; } .app-row-main { display: flex; align-items: center; gap: 10px; } .app-row .item-icon { display: grid; flex: 0 0 auto; align-self: center; place-items: center; width: 34px; height: 34px; border: 1px solid #2b3342; border-radius: 4px; background: #0d1016; color: #dbeafe; line-height: 0; } .app-row .item-icon svg { display: block; } .app-row, .empty-state { border: 1px solid #2b3342; border-radius: 4px; background: #131720; padding: 10px 12px; } .app-row button { color: #fecaca; } .empty-state { color: #8d99ae; min-height: 48px; } .list-skeleton { display: grid; gap: 8px; } .list-skeleton span { min-height: 56px; border: 1px solid #2b3342; border-radius: 4px; background: linear-gradient(90deg, transparent, rgba(148, 163, 184, 0.12), transparent), #131720; background-size: 220% 100%; animation: shimmer 1.15s linear infinite; } .command-row { display: grid; grid-template-columns: minmax(0, 1fr) 132px; gap: 8px; margin-top: 14px; } .apply-button { min-height: 46px; width: 100%; border: 1px solid #16a34a; border-radius: 4px; background: #22c55e; color: #04130a; font-weight: 800; cursor: pointer; } .apply-button:hover { background: #4ade80; } .open-config-button { min-height: 46px; width: 100%; } .config-path { margin: 10px 0 0; font-size: 12px; overflow-wrap: anywhere; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } .log-dock { position: fixed; right: 10px; bottom: 10px; left: 10px; z-index: 30; display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px; align-items: center; min-height: 48px; border: 1px solid #2b3342; border-radius: 4px; background: rgba(19, 23, 32, 0.98); box-shadow: 0 12px 32px rgba(0, 0, 0, 0.34); padding: 7px; } .log-dock.error { border-color: rgba(239, 68, 68, 0.58); } .log-dock.success { border-color: rgba(34, 197, 94, 0.58); } .log-dock.info { border-color: rgba(59, 130, 246, 0.58); } .log-current { display: flex; min-width: 0; gap: 10px; align-items: baseline; padding: 0 8px; transition: opacity 180ms ease, transform 180ms ease; } .log-current.hidden { color: #8d99ae; opacity: 0.72; } .log-current.visible { opacity: 1; } .log-current strong, .log-current span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .log-current strong { flex: 0 0 auto; } .log-current span { min-width: 0; } .log-muted { color: #8d99ae; } .log-toggle { display: inline-flex; gap: 8px; align-items: center; min-height: 34px; border: 1px solid #343b49; border-radius: 4px; background: #242a35; color: #eef2ff; padding: 7px 10px; cursor: pointer; } .log-toggle:hover { background: #2d3543; } .log-toggle span { min-width: 22px; border-radius: 4px; background: #1b202b; color: #dbeafe; padding: 2px 6px; text-align: center; font-size: 12px; font-weight: 700; } .log-history { display: grid; grid-column: 1 / -1; gap: 6px; max-height: 230px; overflow: auto; border-top: 1px solid #2b3342; padding-top: 7px; } .log-history-row { display: grid; grid-template-columns: 76px minmax(0, 1fr); gap: 10px; align-items: start; border: 1px solid #2b3342; border-radius: 4px; background: #0d1016; padding: 8px; } .log-history-row.error { border-color: rgba(239, 68, 68, 0.42); } .log-history-row.success { border-color: rgba(34, 197, 94, 0.36); } .log-history-row.info { border-color: rgba(59, 130, 246, 0.36); } .log-history-row time { color: #8d99ae; font-size: 12px; } .log-history-row strong, .log-history-row span { display: block; overflow-wrap: anywhere; } .log-history-row span { color: #b6c2d4; } @keyframes spin { to { transform: rotate(360deg); } } @keyframes pulse { 50% { opacity: 0.45; } } @keyframes finder-border-top { 0% { left: -116px; opacity: 0; } 4%, 23% { opacity: 1; } 25%, 100% { left: calc(100% + 8px); opacity: 0; } } @keyframes finder-border-right { 0%, 25% { top: -72px; opacity: 0; } 29%, 48% { opacity: 1; } 50%, 100% { top: calc(100% + 8px); opacity: 0; } } @keyframes finder-border-bottom { 0%, 50% { right: -116px; opacity: 0; } 54%, 73% { opacity: 1; } 75%, 100% { right: calc(100% + 8px); opacity: 0; } } @keyframes finder-border-left { 0%, 75% { bottom: -72px; opacity: 0; } 79%, 98% { opacity: 1; } 100% { bottom: calc(100% + 8px); opacity: 0; } } @keyframes shimmer { from { background-position: 220% 0; } to { background-position: -220% 0; } } @media (max-width: 680px) { .simple-shell { padding: 0; } .simple-panel { padding: 14px 14px 100px; } .simple-header, .app-row { align-items: stretch; flex-direction: column; } .add-toolbar { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); } .add-tile { width: 100%; } .process-add-line { grid-template-columns: 1fr; } .finder-card { grid-template-columns: auto minmax(0, 1fr); } .service-actions { grid-column: 1 / -1; } .setup-details { grid-column: 1 / -1; } .service-button { flex: 1; } .command-row { grid-template-columns: 1fr; } .log-dock { right: 8px; left: 8px; grid-template-columns: 1fr; } .log-current { align-items: flex-start; flex-direction: column; gap: 2px; } .log-history-row { grid-template-columns: 1fr; } }