:root{--bg: #0f1117;--bg-panel: #171a23;--bg-input: #1e2230;--border: #2a2f3e;--text: #d6dae3;--text-dim: #8b91a0;--accent: #4f8cff;--green: #3fb96a;--red: #e25555;--amber: #d9a13d;--mono: "Cascadia Code", Consolas, monospace}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:Segoe UI,system-ui,sans-serif;font-size:14px}.app{display:flex;flex-direction:column;min-height:100vh}.app-boot{padding:20vh 20px 0;text-align:center}.app-boot h1{font-size:15px;margin:0 0 6px;font-weight:600}.app-header{display:flex;align-items:center;gap:24px;padding:0 20px;background:var(--bg-panel);border-bottom:1px solid var(--border)}.app-header h1{font-size:15px;margin:14px 0;white-space:nowrap}.app-nav{display:flex;gap:4px}.nav-tab{background:none;border:none;border-bottom:2px solid transparent;color:var(--text-dim);padding:16px 14px 14px;cursor:pointer;font-size:13.5px}.nav-tab:hover{color:var(--text)}.nav-tab.active{color:var(--accent);border-bottom-color:var(--accent)}.app-main{padding:20px;width:100%}.panel{background:var(--bg-panel);border:1px solid var(--border);border-radius:8px;padding:16px;margin-bottom:16px}.panel h2{font-size:14px;margin:0 0 12px;color:var(--text)}.panel h3{font-size:13px;margin:14px 0 8px;color:var(--text-dim)}.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}button{background:var(--bg-input);border:1px solid var(--border);color:var(--text);border-radius:6px;padding:6px 12px;cursor:pointer;font-size:13px}button:hover:not(:disabled){border-color:var(--accent)}button:disabled{opacity:.5;cursor:not-allowed}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}button.danger{background:var(--red);border-color:var(--red);color:#fff}a.button{display:inline-block;background:var(--bg-input);border:1px solid var(--border);color:var(--text);border-radius:6px;padding:6px 12px;cursor:pointer;font-size:13px;text-decoration:none}a.button:hover{border-color:var(--accent)}input,select,textarea{background:var(--bg-input);border:1px solid var(--border);color:var(--text);border-radius:6px;padding:6px 10px;font-size:13px}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent)}textarea{font-family:var(--mono);font-size:12.5px;width:100%;min-height:320px}pre{background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:10px;font-family:var(--mono);font-size:12px;overflow:auto;max-height:480px;white-space:pre-wrap;word-break:break-all}table{border-collapse:collapse;width:100%;font-size:12.5px}th,td{border:1px solid var(--border);padding:5px 8px;text-align:left;max-width:360px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}th{background:var(--bg-input);position:sticky;top:0}td{font-family:var(--mono)}.table-wrap{overflow-x:auto;border-radius:6px}.table-scroll{position:relative}.table-scroll>.table-wrap,.table-wrap.has-hbar{scrollbar-width:none}.table-scroll>.table-wrap::-webkit-scrollbar,.table-wrap.has-hbar::-webkit-scrollbar{height:0}.table-hbar{position:sticky;bottom:0;z-index:4;overflow-x:auto;overflow-y:hidden;height:13px;background:var(--bg-panel);border-top:1px solid var(--border)}.table-hbar-space{height:1px}.table-hbar::-webkit-scrollbar{height:12px}.table-hbar::-webkit-scrollbar-track{background:var(--bg-input)}.table-hbar::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--accent) 55%,var(--border));border:2px solid var(--bg-input);border-radius:6px}.table-hbar::-webkit-scrollbar-thumb:hover{background:var(--accent)}.table-dock{position:sticky;top:0;height:0;z-index:5}.table-dock-pane{overflow:hidden;background:var(--bg-panel);border-bottom:1px solid var(--border);box-shadow:0 7px 8px -7px #000000e6}table.sticky-key tbody td:first-child,table.sticky-key thead tr:first-child th:first-child{position:sticky;left:0;box-shadow:3px 0 0 var(--accent),7px 0 7px -6px #000000d9}table.sticky-key tbody td:first-child{background:var(--bg-panel);z-index:1}table.sticky-key thead tr:first-child th:first-child{z-index:3}thead tr:first-child th{top:0;z-index:2}thead tr:nth-child(2) th{top:27px;z-index:1}thead th[colspan]{text-align:center;color:var(--text)}thead th[colspan]+th[colspan]{border-left:3px solid var(--accent)}.grp-start{border-left:3px solid var(--accent)}.inc-cell{width:30px;text-align:center;padding-left:2px;padding-right:2px}.inc-cell input[type=checkbox]{margin:0;vertical-align:middle}.cell-line{display:flex;align-items:center;gap:4px;min-width:0}.cell-line .cell-value{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cell-line>button{flex:0 0 auto}.origin-chip{flex:0 0 auto;padding:0 5px;border:1px solid var(--border);border-radius:8px;font-size:10px;line-height:15px;color:var(--text-dim);font-family:Segoe UI,system-ui,sans-serif}.origin-chip.acc{color:var(--accent);border-color:var(--accent)}.origin-chip.src{color:var(--green);border-color:var(--green)}.origin-chip.err{color:var(--red);border-color:var(--red)}.icon-btn{padding:2px 5px;line-height:1.1;font-size:12px;background:none}.icon-btn:hover:not(:disabled){background:var(--bg-input)}.icon-btn.acc{color:var(--accent);border-color:var(--accent)}.loc-off{opacity:.42}td.loc-remote{background-color:color-mix(in srgb,var(--text) 5%,transparent)}th.loc-remote{background-color:color-mix(in srgb,var(--text) 5%,var(--bg-input))}td.loc-remote.loc-off{background-color:color-mix(in srgb,var(--text) 16%,transparent)}.copy-cell{position:relative;padding-right:30px}.copy-btn{position:absolute;right:3px;top:50%;transform:translateY(-50%);padding:1px 5px;line-height:1.25;font-size:12px;background:var(--bg-input);border:1px solid var(--border);border-radius:4px;color:var(--text-dim);opacity:0;pointer-events:none;transition:opacity 90ms ease-out}td:hover>.copy-btn,.copy-btn:focus-visible,.copy-btn.ok,.copy-btn.err{opacity:1;pointer-events:auto}.copy-btn:hover:not(:disabled){color:var(--text);border-color:var(--accent);background:var(--bg-input)}.copy-btn.ok{color:var(--green);border-color:var(--green)}.copy-btn.err{color:var(--red);border-color:var(--red)}.badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:11.5px;border:1px solid var(--border);color:var(--text-dim)}.badge.ok{color:var(--green);border-color:var(--green)}.badge.warn{color:var(--amber);border-color:var(--amber)}.badge.err{color:var(--red);border-color:var(--red)}.badge.prod{color:var(--red);border-color:var(--red);font-weight:600}.access-chips .badge{padding:0 5px;font-size:10.5px}.spinner{display:inline-block;width:12px;height:12px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:engdash-spin .8s linear infinite}@keyframes engdash-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.spinner{animation-duration:2.4s}}.cmd{font-family:var(--mono);font-size:12.5px;background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:4px 10px;color:var(--text);-webkit-user-select:all;user-select:all}.commit-list{list-style:none;margin:6px 0;padding:0;font-family:var(--mono);font-size:12px}.commit-list li{padding:3px 0;border-bottom:1px solid var(--border)}.commit-list .hash{color:var(--accent);margin-right:8px}.commit-list .meta{color:var(--text-dim);margin-left:8px}.error-text{color:var(--red);font-size:12.5px;white-space:pre-wrap}.error-box{margin:4px 0}.error-details-toggle{background:none;border:none;color:var(--text-dim);text-decoration:underline;cursor:pointer;font-size:12px;padding:0 6px}.error-details-toggle:hover{color:var(--text);border:none}.ok-text{color:var(--green);font-size:12.5px}.dim{color:var(--text-dim);font-size:12.5px}.diff-equal{color:var(--text-dim)}.diff-different{color:var(--amber)}.diff-missing{color:var(--red)}.diff-excluded{color:var(--text-dim);opacity:.6}.eye-btn{padding:2px 6px;line-height:1.1;font-size:12px;background:none}.eye-btn:hover:not(:disabled){background:var(--bg-input)}.field{display:flex;flex-direction:column;gap:3px;margin-bottom:8px}.field label{font-size:11.5px;color:var(--text-dim)}.field input{width:100%}.check-row{display:flex;align-items:flex-start;gap:8px;padding:6px 2px;font-size:12.5px;color:var(--text);cursor:pointer}.check-row+.check-row{border-top:1px solid color-mix(in srgb,var(--border) 55%,transparent)}.check-row.disabled{cursor:default}.check-row>input[type=checkbox]{width:auto;flex:0 0 auto;margin:2px 0 0}.check-row-body{flex:1 1 auto;min-width:0;text-align:left}.check-row-note{display:block;color:var(--text-dim);font-size:11px;margin-top:2px}.overlay-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:100}.overlay-card{background:var(--bg-panel);border:1px solid var(--border);border-radius:10px;padding:20px;width:min(720px,92vw);max-height:84vh;overflow:auto}.overlay-card h2{font-size:14px;margin:0 0 12px}.overlay-card.wide{width:min(900px,94vw)}.overlay-card.full{width:96vw;height:92vh;max-height:92vh}.code-area{min-height:300px}.site-detail-head{align-items:center;gap:10px;margin-bottom:10px}.site-card{border:1px solid var(--border);border-radius:6px;padding:8px 12px;margin:8px 0}.site-card-head{margin-bottom:6px;font-size:12.5px}.linklike{background:none;border:none;padding:2px 4px;color:var(--accent);font-family:var(--mono);font-size:12.5px;cursor:pointer;border-radius:4px}.linklike:hover{background:var(--bg-input);border:none}.linklike.dim{color:var(--text-dim);font-style:italic}.file-list{border:1px solid var(--border);border-radius:6px;max-height:300px;overflow:auto}.file-row{display:flex;align-items:center;gap:8px;padding:5px 10px;border-bottom:1px solid var(--border);cursor:pointer;font-family:var(--mono);font-size:12.5px}.file-row:hover{background:var(--bg-input)}.file-row .file-path{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.master-detail{display:grid;grid-template-columns:260px minmax(0,1fr);border:1px solid var(--border);border-radius:6px;overflow:hidden}.md-list{border-right:1px solid var(--border);max-height:calc(100vh - 240px);min-height:440px;overflow:auto;scrollbar-gutter:stable}.md-item{padding:8px 10px;border-bottom:1px solid var(--border);cursor:pointer;font-size:12.5px}.md-item:hover{background:var(--bg-input)}.md-item.active{background:color-mix(in srgb,var(--accent) 18%,var(--bg-panel))}.md-item.dim{cursor:default}.md-item.dim:hover{background:none}.md-item .md-sub{color:var(--text-dim);font-size:11.5px}.md-section{padding:7px 10px 4px;font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--text-dim);background:var(--bg-input);border-bottom:1px solid var(--border)}.md-detail{padding:12px 14px;max-height:calc(100vh - 240px);min-height:440px;overflow:auto;scrollbar-gutter:stable}.md-list-head{display:flex;gap:6px;align-items:center;flex-wrap:wrap;padding:8px 10px;border-bottom:1px solid var(--border);background:var(--bg-panel);position:sticky;top:0;z-index:1}.md-list-head button{flex:0 0 auto}.md-detail-head{display:flex;gap:10px;align-items:center;justify-content:space-between;flex-wrap:wrap;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--border)}.md-detail-head h2,.md-detail-head h3{margin:0}.md-actions{justify-content:flex-end}.sub-tabs{display:flex;gap:2px;margin-bottom:8px}.sub-tab{border-radius:6px 6px 0 0;border-bottom:2px solid transparent;background:none}.sub-tab.active{color:var(--accent);border-bottom-color:var(--accent)}.cell-input{width:100%;border:none;background:transparent;font-family:var(--mono);font-size:12.5px;padding:2px 4px}.cell-input:focus{background:var(--bg-input);border-radius:4px}.ssh-tester{margin-top:10px;border-top:1px solid var(--border);padding-top:10px}.ssh-command{max-height:none;margin:0}.test-log{margin-top:10px}.test-step{display:grid;grid-template-columns:18px 170px 1fr;gap:8px;padding:5px 0;border-bottom:1px solid var(--border);font-size:12.5px;align-items:start}.test-step .test-detail{font-family:var(--mono);font-size:12px;white-space:pre-wrap;word-break:break-word}.test-step.ok .test-mark{color:var(--green)}.test-step.fail .test-mark,.test-step.fail .test-detail{color:var(--red)}.env-banner{padding:6px 12px;border-radius:6px;font-size:12.5px;margin-bottom:12px;border:1px solid var(--border)}.env-banner.readonly{border-color:var(--amber);color:var(--amber)}.drop-zone{display:flex;flex-direction:column;align-items:center;gap:4px;padding:18px 12px;border:1px dashed var(--border);border-radius:6px;background:var(--bg-input);cursor:pointer;text-align:center;font-size:12.5px}.drop-zone:hover{border-color:var(--accent)}.drop-zone.over{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,var(--bg-input))}
