mirror of
https://github.com/NewFuture/DDNS.git
synced 2026-10-20 00:16:45 +00:00
* feat(web): add local management dashboard Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * fix(web): address review and Python 2 compatibility Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * chore: remove design session artifacts Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * fix(web): harden packaged resources and HTTP semantics Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * test(web): support Python 2 handler mocks Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * fix(web): detect all external schedulers Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2815 lines
48 KiB
CSS
2815 lines
48 KiB
CSS
html,
|
|
body {
|
|
min-height: 100%;
|
|
margin: 0;
|
|
background: #e9eef2;
|
|
}
|
|
|
|
body {
|
|
overflow-x: hidden;
|
|
}
|
|
|
|
body.dark-theme {
|
|
background: #071018;
|
|
}
|
|
|
|
[hidden] {
|
|
display: none !important;
|
|
}
|
|
|
|
.portal {
|
|
--canvas: #e9eef2;
|
|
--surface: #fcfdfd;
|
|
--surface-muted: #f2f5f7;
|
|
--surface-strong: #e6ecef;
|
|
--ink: #10212c;
|
|
--ink-soft: #314753;
|
|
--muted: #5b6e79;
|
|
--faint: #778993;
|
|
--line: #cdd7dd;
|
|
--line-strong: #9babb4;
|
|
--accent: #0a73c5;
|
|
--accent-hover: #075c9f;
|
|
--accent-soft: #e2f0fb;
|
|
--success: #087a56;
|
|
--success-soft: #dff3eb;
|
|
--warning: #9a5a0a;
|
|
--warning-soft: #faecd5;
|
|
--danger: #b22f46;
|
|
--danger-soft: #f9e3e7;
|
|
--instrument: #08151e;
|
|
--instrument-raised: #0d1d28;
|
|
--instrument-line: #29404d;
|
|
--instrument-text: #eff6f8;
|
|
--instrument-muted: #9fb0b9;
|
|
--instrument-blue: #39a0ff;
|
|
--instrument-green: #4fd0a0;
|
|
--instrument-amber: #f0b35b;
|
|
min-height: 100vh;
|
|
background: var(--canvas);
|
|
color: var(--ink);
|
|
color-scheme: light;
|
|
font-family:
|
|
ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
|
|
"Microsoft YaHei", sans-serif;
|
|
font-size: 14px;
|
|
line-height: 1.5;
|
|
-webkit-font-smoothing: antialiased;
|
|
}
|
|
|
|
.portal.dark {
|
|
--canvas: #071018;
|
|
--surface: #0f1a23;
|
|
--surface-muted: #13212c;
|
|
--surface-strong: #1a2b37;
|
|
--ink: #edf4f7;
|
|
--ink-soft: #c4d0d6;
|
|
--muted: #98aab4;
|
|
--faint: #7f929d;
|
|
--line: #273b47;
|
|
--line-strong: #4a6270;
|
|
--accent: #55adf4;
|
|
--accent-hover: #77bdf7;
|
|
--accent-soft: #153653;
|
|
--success: #59d2a6;
|
|
--success-soft: #153b31;
|
|
--warning: #f0b35b;
|
|
--warning-soft: #3a2b18;
|
|
--danger: #ff8092;
|
|
--danger-soft: #43242c;
|
|
--instrument: #040b10;
|
|
--instrument-raised: #0a151d;
|
|
--instrument-line: #243b48;
|
|
--instrument-text: #f2f8fa;
|
|
--instrument-muted: #a1b2bb;
|
|
--instrument-blue: #55adf4;
|
|
--instrument-green: #5ad7a8;
|
|
--instrument-amber: #f2b85f;
|
|
color-scheme: dark;
|
|
}
|
|
|
|
.portal *,
|
|
.portal *::before,
|
|
.portal *::after {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.portal button,
|
|
.portal input,
|
|
.portal select,
|
|
.portal textarea {
|
|
font: inherit;
|
|
}
|
|
|
|
.portal button,
|
|
.portal a,
|
|
.portal summary {
|
|
-webkit-tap-highlight-color: transparent;
|
|
}
|
|
|
|
.portal button:focus-visible,
|
|
.portal a:focus-visible,
|
|
.portal input:focus-visible,
|
|
.portal select:focus-visible,
|
|
.portal textarea:focus-visible,
|
|
.portal summary:focus-visible {
|
|
outline: 3px solid rgba(10, 115, 197, 0.28);
|
|
outline-offset: 2px;
|
|
}
|
|
|
|
.dark button:focus-visible,
|
|
.dark a:focus-visible,
|
|
.dark input:focus-visible,
|
|
.dark select:focus-visible,
|
|
.dark textarea:focus-visible,
|
|
.dark summary:focus-visible {
|
|
outline-color: rgba(85, 173, 244, 0.38);
|
|
}
|
|
|
|
.portal svg {
|
|
display: block;
|
|
fill: none;
|
|
stroke: currentColor;
|
|
stroke-linecap: round;
|
|
stroke-linejoin: round;
|
|
stroke-width: 1.8;
|
|
}
|
|
|
|
.icon-sprite {
|
|
position: absolute;
|
|
width: 0;
|
|
height: 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.sr-only {
|
|
position: absolute;
|
|
width: 1px;
|
|
height: 1px;
|
|
overflow: hidden;
|
|
padding: 0;
|
|
border: 0;
|
|
margin: -1px;
|
|
clip: rect(0, 0, 0, 0);
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.app-header {
|
|
position: sticky;
|
|
top: 0;
|
|
z-index: 50;
|
|
border-bottom: 1px solid var(--line);
|
|
background: rgba(252, 253, 253, 0.94);
|
|
backdrop-filter: blur(14px);
|
|
}
|
|
|
|
.dark .app-header {
|
|
background: rgba(15, 26, 35, 0.94);
|
|
}
|
|
|
|
.app-header-inner {
|
|
width: min(calc(100% - 40px), 1240px);
|
|
min-height: 62px;
|
|
display: grid;
|
|
grid-template-columns: minmax(180px, 1fr) auto minmax(180px, 1fr);
|
|
align-items: stretch;
|
|
gap: 24px;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.brand {
|
|
width: fit-content;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
padding: 0;
|
|
border: 0;
|
|
background: transparent;
|
|
color: var(--ink);
|
|
cursor: pointer;
|
|
text-align: left;
|
|
}
|
|
|
|
.brand-symbol {
|
|
width: 32px;
|
|
height: 32px;
|
|
display: grid;
|
|
place-items: center;
|
|
flex: 0 0 auto;
|
|
border: 1px solid var(--line);
|
|
border-radius: 7px;
|
|
background: #ffffff;
|
|
box-shadow: 0 4px 10px rgba(12, 31, 42, 0.08);
|
|
}
|
|
|
|
.brand-symbol img {
|
|
width: 22px;
|
|
height: 22px;
|
|
}
|
|
|
|
.brand > span:last-child {
|
|
display: grid;
|
|
gap: 1px;
|
|
}
|
|
|
|
.brand strong {
|
|
font-size: 14px;
|
|
line-height: 1.15;
|
|
letter-spacing: 0.01em;
|
|
}
|
|
|
|
.brand small {
|
|
color: var(--muted);
|
|
font-size: 11px;
|
|
line-height: 1.2;
|
|
}
|
|
|
|
.command-nav {
|
|
--nav-gap: 24px;
|
|
position: relative;
|
|
display: flex;
|
|
align-items: stretch;
|
|
gap: var(--nav-gap);
|
|
}
|
|
|
|
.command-nav::after {
|
|
position: absolute;
|
|
bottom: -1px;
|
|
left: 0;
|
|
width: 52px;
|
|
height: 2px;
|
|
background: var(--accent);
|
|
content: "";
|
|
transform: translateX(0);
|
|
transition: transform 220ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
}
|
|
|
|
.command-nav.config-active::after {
|
|
transform: translateX(calc(100% + var(--nav-gap)));
|
|
}
|
|
|
|
.command-nav button {
|
|
position: relative;
|
|
min-width: 52px;
|
|
padding: 1px 2px 0;
|
|
border: 0;
|
|
background: transparent;
|
|
color: var(--muted);
|
|
font-size: 13px;
|
|
font-weight: 650;
|
|
cursor: pointer;
|
|
transition: color 160ms ease;
|
|
}
|
|
|
|
.command-nav button:hover {
|
|
color: var(--ink);
|
|
}
|
|
|
|
.command-nav button.active {
|
|
color: var(--ink);
|
|
}
|
|
|
|
.command-nav button:disabled {
|
|
color: var(--muted);
|
|
cursor: not-allowed;
|
|
opacity: 0.38;
|
|
}
|
|
|
|
.header-actions {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: flex-end;
|
|
gap: 10px;
|
|
}
|
|
|
|
.header-health,
|
|
.save-state,
|
|
.connected-state {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
color: var(--success);
|
|
font-size: 12px;
|
|
font-weight: 650;
|
|
white-space: nowrap;
|
|
transition: color 180ms ease;
|
|
}
|
|
|
|
.header-health i,
|
|
.save-state i,
|
|
.connected-state i {
|
|
width: 7px;
|
|
height: 7px;
|
|
flex: 0 0 auto;
|
|
border-radius: 50%;
|
|
background: currentColor;
|
|
box-shadow: 0 0 0 3px rgba(8, 122, 86, 0.11);
|
|
}
|
|
|
|
.header-health.attention,
|
|
.connected-state.attention,
|
|
.save-state.dirty {
|
|
color: var(--warning);
|
|
}
|
|
|
|
.header-health.attention i,
|
|
.connected-state.attention i,
|
|
.save-state.dirty i {
|
|
box-shadow: 0 0 0 3px rgba(154, 90, 10, 0.12);
|
|
}
|
|
|
|
.header-health.error,
|
|
.connected-state.error {
|
|
color: var(--danger);
|
|
}
|
|
|
|
.header-health.error i,
|
|
.connected-state.error i {
|
|
box-shadow: 0 0 0 3px rgba(178, 47, 70, 0.12);
|
|
}
|
|
|
|
.header-health.syncing {
|
|
color: var(--accent);
|
|
}
|
|
|
|
.header-health.syncing i {
|
|
box-shadow: 0 0 0 3px rgba(10, 115, 197, 0.13);
|
|
}
|
|
|
|
.connected-state.muted {
|
|
color: var(--faint);
|
|
}
|
|
|
|
.theme-button {
|
|
width: 34px;
|
|
height: 34px;
|
|
display: grid;
|
|
place-items: center;
|
|
padding: 0;
|
|
border: 1px solid transparent;
|
|
border-radius: 6px;
|
|
background: transparent;
|
|
color: var(--muted);
|
|
cursor: pointer;
|
|
transition:
|
|
border-color 150ms ease,
|
|
background-color 150ms ease,
|
|
color 150ms ease;
|
|
}
|
|
|
|
.theme-button:hover {
|
|
border-color: var(--line);
|
|
background: var(--surface-muted);
|
|
color: var(--ink);
|
|
}
|
|
|
|
.theme-button svg {
|
|
width: 17px;
|
|
height: 17px;
|
|
}
|
|
|
|
.theme-icon-sun {
|
|
display: none !important;
|
|
}
|
|
|
|
.dark .theme-icon-moon {
|
|
display: none !important;
|
|
}
|
|
|
|
.dark .theme-icon-sun {
|
|
display: block !important;
|
|
}
|
|
|
|
.stage {
|
|
min-height: calc(100vh - 62px);
|
|
}
|
|
|
|
.content {
|
|
width: min(calc(100% - 40px), 1240px);
|
|
margin: 0 auto;
|
|
padding: 38px 0 88px;
|
|
}
|
|
|
|
.overview-view,
|
|
.config-view {
|
|
scroll-margin-top: 86px;
|
|
}
|
|
|
|
.page-header {
|
|
min-height: 54px;
|
|
display: flex;
|
|
align-items: flex-end;
|
|
justify-content: space-between;
|
|
gap: 24px;
|
|
margin-bottom: 20px;
|
|
}
|
|
|
|
.page-header h1,
|
|
.page-header h2 {
|
|
margin: 0;
|
|
color: var(--ink);
|
|
font-size: 22px;
|
|
font-weight: 720;
|
|
letter-spacing: -0.02em;
|
|
line-height: 1.2;
|
|
}
|
|
|
|
.page-header p {
|
|
max-width: 66ch;
|
|
margin: 6px 0 0;
|
|
color: var(--muted);
|
|
font-size: 13px;
|
|
}
|
|
|
|
.button {
|
|
min-height: 38px;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 8px;
|
|
padding: 0 14px;
|
|
border: 1px solid transparent;
|
|
border-radius: 6px;
|
|
font-size: 13px;
|
|
font-weight: 680;
|
|
line-height: 1;
|
|
text-decoration: none;
|
|
cursor: pointer;
|
|
transition:
|
|
border-color 150ms ease,
|
|
background-color 150ms ease,
|
|
color 150ms ease,
|
|
box-shadow 150ms ease;
|
|
}
|
|
|
|
.button svg {
|
|
width: 16px;
|
|
height: 16px;
|
|
}
|
|
|
|
.button.primary {
|
|
border-color: var(--accent);
|
|
background: var(--accent);
|
|
color: #ffffff;
|
|
box-shadow: 0 6px 14px rgba(7, 92, 159, 0.18);
|
|
}
|
|
|
|
.button.primary:hover:not(:disabled) {
|
|
border-color: var(--accent-hover);
|
|
background: var(--accent-hover);
|
|
box-shadow: 0 8px 18px rgba(7, 92, 159, 0.24);
|
|
}
|
|
|
|
.button.secondary {
|
|
border-color: var(--line);
|
|
background: var(--surface);
|
|
color: var(--ink);
|
|
}
|
|
|
|
.button.secondary:hover:not(:disabled) {
|
|
border-color: var(--line-strong);
|
|
background: var(--surface-muted);
|
|
}
|
|
|
|
.button.ghost {
|
|
border-color: transparent;
|
|
background: transparent;
|
|
color: var(--muted);
|
|
}
|
|
|
|
.button.ghost:hover:not(:disabled) {
|
|
border-color: var(--line);
|
|
background: var(--surface-muted);
|
|
color: var(--ink);
|
|
}
|
|
|
|
.button.danger {
|
|
color: var(--danger);
|
|
}
|
|
|
|
.button:disabled {
|
|
cursor: not-allowed;
|
|
opacity: 0.48;
|
|
box-shadow: none;
|
|
}
|
|
|
|
.status-hero {
|
|
position: relative;
|
|
overflow: hidden;
|
|
border: 1px solid #203542;
|
|
border-radius: 12px;
|
|
background: var(--instrument);
|
|
color: var(--instrument-text);
|
|
box-shadow: 0 16px 34px rgba(15, 36, 48, 0.16);
|
|
}
|
|
|
|
.status-hero::after {
|
|
position: absolute;
|
|
z-index: 3;
|
|
inset: 2px;
|
|
border: 1px solid transparent;
|
|
border-radius: 9px;
|
|
content: "";
|
|
opacity: 0;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.status-hero.sync-complete {
|
|
--sync-result: var(--instrument-green);
|
|
}
|
|
|
|
.status-hero.sync-failed {
|
|
--sync-result: #ff8092;
|
|
}
|
|
|
|
.status-hero.sync-complete::after,
|
|
.status-hero.sync-failed::after {
|
|
border-color: var(--sync-result);
|
|
animation: result-frame 640ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
}
|
|
|
|
.status-hero.sync-complete .latest-signal strong,
|
|
.status-hero.sync-failed .latest-signal strong {
|
|
animation: evidence-confirm 560ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
}
|
|
|
|
@keyframes result-frame {
|
|
0% {
|
|
opacity: 0;
|
|
transform: scale(0.996);
|
|
}
|
|
|
|
28% {
|
|
opacity: 0.78;
|
|
}
|
|
|
|
100% {
|
|
opacity: 0;
|
|
transform: scale(1);
|
|
}
|
|
}
|
|
|
|
@keyframes evidence-confirm {
|
|
0% {
|
|
color: var(--sync-result);
|
|
}
|
|
|
|
100% {
|
|
color: var(--instrument-text);
|
|
}
|
|
}
|
|
|
|
.hero-primary {
|
|
position: relative;
|
|
z-index: 1;
|
|
min-height: 112px;
|
|
display: grid;
|
|
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
align-items: center;
|
|
gap: 18px;
|
|
padding: 26px 30px 22px;
|
|
border-bottom: 1px solid var(--instrument-line);
|
|
}
|
|
|
|
.status-app-icon {
|
|
width: 42px;
|
|
height: 42px;
|
|
position: relative;
|
|
display: grid;
|
|
place-items: center;
|
|
border: 1px solid #36505f;
|
|
border-radius: 8px;
|
|
background: #f8fbfc;
|
|
}
|
|
|
|
.status-app-icon img {
|
|
width: 27px;
|
|
height: 27px;
|
|
}
|
|
|
|
.status-app-icon::after {
|
|
position: absolute;
|
|
right: -4px;
|
|
bottom: -4px;
|
|
width: 10px;
|
|
height: 10px;
|
|
border: 2px solid var(--instrument);
|
|
border-radius: 50%;
|
|
background: var(--instrument-green);
|
|
content: "";
|
|
}
|
|
|
|
.status-hero.attention .status-app-icon::after {
|
|
background: var(--instrument-amber);
|
|
}
|
|
|
|
.status-hero.error .status-app-icon::after {
|
|
background: var(--danger);
|
|
}
|
|
|
|
.status-copy {
|
|
min-width: 0;
|
|
}
|
|
|
|
.status-copy h2 {
|
|
margin: 0;
|
|
color: var(--instrument-text);
|
|
font-size: 25px;
|
|
font-weight: 700;
|
|
letter-spacing: -0.025em;
|
|
line-height: 1.2;
|
|
}
|
|
|
|
.status-copy p {
|
|
max-width: 68ch;
|
|
margin: 6px 0 0;
|
|
color: var(--instrument-muted);
|
|
font-size: 13px;
|
|
}
|
|
|
|
.signal-action {
|
|
min-height: 42px;
|
|
padding: 0 17px;
|
|
border-color: #416174;
|
|
background: #f2f7f9;
|
|
color: #0b2838;
|
|
box-shadow: 0 7px 18px rgba(0, 0, 0, 0.2);
|
|
}
|
|
|
|
.signal-action:hover:not(:disabled) {
|
|
border-color: #ffffff;
|
|
background: #ffffff;
|
|
}
|
|
|
|
.signal-action svg {
|
|
width: 17px;
|
|
height: 17px;
|
|
}
|
|
|
|
.status-topology {
|
|
position: relative;
|
|
z-index: 1;
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 1fr) minmax(54px, 0.35fr) minmax(0, 1fr) minmax(54px, 0.35fr) minmax(0, 1fr);
|
|
align-items: center;
|
|
gap: 14px;
|
|
padding: 32px 34px 36px;
|
|
}
|
|
|
|
.route-node {
|
|
position: relative;
|
|
min-width: 0;
|
|
display: grid;
|
|
gap: 7px;
|
|
padding-top: 20px;
|
|
}
|
|
|
|
.route-node::before {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
width: 9px;
|
|
height: 9px;
|
|
border: 2px solid var(--instrument-blue);
|
|
border-radius: 50%;
|
|
background: var(--instrument);
|
|
box-shadow: 0 0 0 4px rgba(57, 160, 255, 0.1);
|
|
content: "";
|
|
}
|
|
|
|
.route-node small {
|
|
color: var(--instrument-muted);
|
|
font-size: 11px;
|
|
font-weight: 660;
|
|
letter-spacing: 0.055em;
|
|
}
|
|
|
|
.route-node strong {
|
|
overflow: hidden;
|
|
color: var(--instrument-text);
|
|
font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
font-size: 27px;
|
|
font-variant-numeric: tabular-nums;
|
|
font-weight: 620;
|
|
letter-spacing: -0.035em;
|
|
line-height: 1.05;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.route-connector {
|
|
position: relative;
|
|
height: 1px;
|
|
margin-top: -22px;
|
|
overflow: visible;
|
|
background: var(--instrument-line);
|
|
}
|
|
|
|
.route-connector::after {
|
|
position: absolute;
|
|
top: -3px;
|
|
right: -1px;
|
|
width: 7px;
|
|
height: 7px;
|
|
border-top: 1px solid #5b7481;
|
|
border-right: 1px solid #5b7481;
|
|
content: "";
|
|
transform: rotate(45deg);
|
|
}
|
|
|
|
.status-hero.syncing .route-connector::before {
|
|
position: absolute;
|
|
top: -1px;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 3px;
|
|
border-radius: 2px;
|
|
background: var(--instrument-blue);
|
|
box-shadow: 0 0 14px rgba(57, 160, 255, 0.62);
|
|
content: "";
|
|
transform: scaleX(0);
|
|
transform-origin: left center;
|
|
animation: route-trace 260ms cubic-bezier(0.16, 1, 0.3, 1) 110ms both;
|
|
}
|
|
|
|
.status-hero.syncing .route-connector:nth-of-type(2)::before {
|
|
animation-delay: 360ms;
|
|
}
|
|
|
|
.status-hero.syncing .route-node::before {
|
|
animation: node-confirm 180ms cubic-bezier(0.16, 1, 0.3, 1) both;
|
|
}
|
|
|
|
.status-hero.syncing .route-node:nth-child(3)::before {
|
|
animation-delay: 250ms;
|
|
}
|
|
|
|
.status-hero.syncing .route-node:nth-child(5)::before {
|
|
animation-delay: 500ms;
|
|
}
|
|
|
|
@keyframes route-trace {
|
|
0% {
|
|
opacity: 0.35;
|
|
transform: scaleX(0);
|
|
}
|
|
|
|
100% {
|
|
opacity: 1;
|
|
transform: scaleX(1);
|
|
}
|
|
}
|
|
|
|
@keyframes node-confirm {
|
|
0% {
|
|
background: var(--instrument);
|
|
transform: scale(0.78);
|
|
}
|
|
|
|
58% {
|
|
background: var(--instrument-blue);
|
|
transform: scale(1.32);
|
|
}
|
|
|
|
100% {
|
|
background: var(--instrument-blue);
|
|
transform: scale(1);
|
|
}
|
|
}
|
|
|
|
.observability-rail {
|
|
position: relative;
|
|
z-index: 1;
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 1fr) minmax(320px, 0.72fr);
|
|
border-top: 1px solid var(--instrument-line);
|
|
background: var(--instrument-raised);
|
|
}
|
|
|
|
.latest-signal,
|
|
.recovery-signal {
|
|
min-height: 78px;
|
|
padding: 17px 22px;
|
|
}
|
|
|
|
.latest-signal {
|
|
display: grid;
|
|
grid-template-columns: minmax(112px, auto) minmax(0, 1fr);
|
|
align-content: center;
|
|
column-gap: 18px;
|
|
}
|
|
|
|
.latest-signal > span {
|
|
grid-row: 1 / span 2;
|
|
align-self: center;
|
|
color: var(--instrument-muted);
|
|
font-size: 11px;
|
|
}
|
|
|
|
.latest-signal time {
|
|
display: block;
|
|
margin-top: 3px;
|
|
color: var(--instrument-text);
|
|
font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
font-size: 13px;
|
|
font-variant-numeric: tabular-nums;
|
|
}
|
|
|
|
.latest-signal strong,
|
|
.latest-signal small {
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.latest-signal strong {
|
|
color: var(--instrument-text);
|
|
font-size: 13px;
|
|
}
|
|
|
|
.latest-signal small {
|
|
color: var(--instrument-muted);
|
|
font-size: 11px;
|
|
}
|
|
|
|
.recovery-signal {
|
|
display: grid;
|
|
grid-template-columns: 28px minmax(0, 1fr) 18px;
|
|
align-items: center;
|
|
gap: 12px;
|
|
border: 0;
|
|
border-left: 1px solid var(--instrument-line);
|
|
background: transparent;
|
|
color: var(--instrument-text);
|
|
cursor: pointer;
|
|
text-align: left;
|
|
transition: background-color 150ms ease;
|
|
}
|
|
|
|
.recovery-signal:hover {
|
|
background: rgba(255, 255, 255, 0.035);
|
|
}
|
|
|
|
.recovery-signal > svg:first-child {
|
|
width: 20px;
|
|
height: 20px;
|
|
color: var(--instrument-blue);
|
|
}
|
|
|
|
.recovery-signal.attention > svg:first-child {
|
|
color: var(--instrument-amber);
|
|
}
|
|
|
|
.recovery-signal span {
|
|
min-width: 0;
|
|
display: grid;
|
|
gap: 2px;
|
|
}
|
|
|
|
.recovery-signal small {
|
|
color: var(--instrument-muted);
|
|
font-size: 11px;
|
|
}
|
|
|
|
.recovery-signal strong {
|
|
overflow: hidden;
|
|
font-size: 12px;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.signal-arrow {
|
|
width: 16px;
|
|
height: 16px;
|
|
color: var(--instrument-muted);
|
|
}
|
|
|
|
.first-run .status-copy h2 {
|
|
color: #ffffff;
|
|
}
|
|
|
|
.first-run .status-topology {
|
|
padding-top: 35px;
|
|
}
|
|
|
|
.first-run .route-node::before {
|
|
border-color: var(--instrument-amber);
|
|
box-shadow: 0 0 0 4px rgba(240, 179, 91, 0.1);
|
|
}
|
|
|
|
.first-run .route-node strong {
|
|
font-family: inherit;
|
|
font-size: 19px;
|
|
font-weight: 690;
|
|
letter-spacing: -0.015em;
|
|
}
|
|
|
|
.first-run .latest-signal {
|
|
grid-column: 1 / -1;
|
|
}
|
|
|
|
.dashboard-grid,
|
|
.ledger-grid {
|
|
display: grid;
|
|
overflow: hidden;
|
|
border: 1px solid var(--line);
|
|
border-radius: 10px;
|
|
margin-top: 24px;
|
|
background: var(--surface);
|
|
box-shadow: 0 8px 20px rgba(24, 48, 61, 0.07);
|
|
}
|
|
|
|
.dashboard-grid {
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
}
|
|
|
|
.ledger-grid {
|
|
grid-template-columns: minmax(0, 1.15fr) minmax(380px, 0.85fr);
|
|
margin-top: 18px;
|
|
}
|
|
|
|
.settings-section {
|
|
min-width: 0;
|
|
}
|
|
|
|
.settings-section + .settings-section {
|
|
border-left: 1px solid var(--line);
|
|
}
|
|
|
|
.section-heading {
|
|
min-height: 62px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 16px;
|
|
padding: 13px 18px;
|
|
border-bottom: 1px solid var(--line);
|
|
background: var(--surface-muted);
|
|
}
|
|
|
|
.section-heading > div:first-child {
|
|
min-width: 0;
|
|
display: flex;
|
|
align-items: baseline;
|
|
gap: 10px;
|
|
}
|
|
|
|
.section-heading h2 {
|
|
margin: 0;
|
|
color: var(--ink);
|
|
font-size: 14px;
|
|
font-weight: 710;
|
|
}
|
|
|
|
.section-heading > div:first-child > span {
|
|
color: var(--muted);
|
|
font-size: 11px;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.settings-section.data-updated .section-heading {
|
|
animation: data-confirm 640ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
}
|
|
|
|
@keyframes data-confirm {
|
|
0% {
|
|
background: var(--surface-muted);
|
|
}
|
|
|
|
24% {
|
|
background: var(--accent-soft);
|
|
}
|
|
|
|
100% {
|
|
background: var(--surface-muted);
|
|
}
|
|
}
|
|
|
|
.settings-group {
|
|
min-width: 0;
|
|
}
|
|
|
|
.settings-row,
|
|
.record-row {
|
|
min-height: 68px;
|
|
display: grid;
|
|
align-items: center;
|
|
gap: 12px;
|
|
padding: 12px 17px;
|
|
border-bottom: 1px solid var(--line);
|
|
}
|
|
|
|
.settings-row:last-child,
|
|
.record-row:last-child {
|
|
border-bottom: 0;
|
|
}
|
|
|
|
.settings-row {
|
|
grid-template-columns: 34px minmax(0, 1fr) minmax(120px, auto) auto;
|
|
}
|
|
|
|
.record-row {
|
|
grid-template-columns: 44px minmax(0, 1fr) minmax(120px, auto) auto;
|
|
}
|
|
|
|
.setting-icon,
|
|
.record-type {
|
|
height: 30px;
|
|
display: grid;
|
|
place-items: center;
|
|
border: 1px solid var(--line);
|
|
border-radius: 5px;
|
|
background: var(--surface-muted);
|
|
color: var(--accent);
|
|
font-size: 9px;
|
|
font-weight: 760;
|
|
letter-spacing: 0.03em;
|
|
}
|
|
|
|
.setting-icon {
|
|
width: 30px;
|
|
}
|
|
|
|
.setting-icon svg {
|
|
width: 16px;
|
|
height: 16px;
|
|
}
|
|
|
|
.setting-icon.violet {
|
|
color: #7454c6;
|
|
}
|
|
|
|
.dark .setting-icon.violet {
|
|
color: #b7a0ff;
|
|
}
|
|
|
|
.record-type {
|
|
width: 44px;
|
|
font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
}
|
|
|
|
.setting-copy {
|
|
min-width: 0;
|
|
display: grid;
|
|
gap: 3px;
|
|
}
|
|
|
|
.setting-copy strong {
|
|
overflow: hidden;
|
|
color: var(--ink);
|
|
font-size: 13px;
|
|
font-weight: 660;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.setting-copy small {
|
|
overflow: hidden;
|
|
color: var(--muted);
|
|
font-size: 11px;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.settings-row code,
|
|
.record-row code {
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
color: var(--ink-soft);
|
|
font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
font-size: 11px;
|
|
font-variant-numeric: tabular-nums;
|
|
text-align: right;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.native-empty {
|
|
min-height: 112px;
|
|
display: grid;
|
|
place-content: center;
|
|
gap: 4px;
|
|
padding: 24px;
|
|
color: var(--muted);
|
|
text-align: center;
|
|
}
|
|
|
|
.native-empty strong {
|
|
color: var(--ink-soft);
|
|
font-size: 13px;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.native-empty span,
|
|
.native-empty small {
|
|
color: var(--muted);
|
|
font-size: 11px;
|
|
}
|
|
|
|
.records-heading,
|
|
.activity-heading {
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.search-field {
|
|
width: 210px;
|
|
height: 34px;
|
|
display: grid;
|
|
grid-template-columns: 16px minmax(0, 1fr);
|
|
align-items: center;
|
|
gap: 7px;
|
|
padding: 0 10px;
|
|
border: 1px solid var(--line);
|
|
border-radius: 5px;
|
|
background: var(--surface);
|
|
color: var(--muted);
|
|
}
|
|
|
|
.search-field svg {
|
|
width: 15px;
|
|
height: 15px;
|
|
}
|
|
|
|
.search-field input {
|
|
width: 100%;
|
|
min-width: 0;
|
|
padding: 0;
|
|
border: 0;
|
|
outline: 0;
|
|
background: transparent;
|
|
color: var(--ink);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.search-field input::placeholder {
|
|
color: var(--faint);
|
|
}
|
|
|
|
.filter-tabs {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 3px;
|
|
padding: 2px;
|
|
border: 1px solid var(--line);
|
|
border-radius: 5px;
|
|
background: var(--surface);
|
|
}
|
|
|
|
.filter-tabs button {
|
|
min-height: 27px;
|
|
padding: 0 9px;
|
|
border: 0;
|
|
border-radius: 3px;
|
|
background: transparent;
|
|
color: var(--muted);
|
|
font-size: 11px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.filter-tabs button.active {
|
|
background: var(--surface-strong);
|
|
color: var(--ink);
|
|
}
|
|
|
|
.activity-ledger {
|
|
height: 100%;
|
|
}
|
|
|
|
.event-stream {
|
|
min-height: 100%;
|
|
padding: 0;
|
|
margin: 0;
|
|
list-style: none;
|
|
}
|
|
|
|
.event-stream li {
|
|
min-height: 68px;
|
|
display: grid;
|
|
grid-template-columns: 52px 58px 72px minmax(0, 1fr);
|
|
align-items: center;
|
|
gap: 10px;
|
|
padding: 12px 17px;
|
|
border-bottom: 1px solid var(--line);
|
|
}
|
|
|
|
.event-stream li:last-child {
|
|
border-bottom: 0;
|
|
}
|
|
|
|
.event-stream li > time {
|
|
color: var(--muted);
|
|
font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
font-size: 10px;
|
|
font-variant-numeric: tabular-nums;
|
|
}
|
|
|
|
.event-badge {
|
|
color: var(--success);
|
|
font-size: 10px;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.event-badge.warn {
|
|
color: var(--warning);
|
|
}
|
|
|
|
.event-source {
|
|
overflow: hidden;
|
|
color: var(--muted);
|
|
font-size: 10px;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.event-stream li > div {
|
|
min-width: 0;
|
|
display: grid;
|
|
gap: 2px;
|
|
}
|
|
|
|
.event-stream li > div strong,
|
|
.event-stream li > div small {
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.event-stream li > div strong {
|
|
color: var(--ink);
|
|
font-size: 12px;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.event-stream li > div small {
|
|
color: var(--muted);
|
|
font-size: 10px;
|
|
}
|
|
|
|
.event-stream .native-empty {
|
|
display: grid;
|
|
grid-template-columns: 1fr;
|
|
place-content: center;
|
|
}
|
|
|
|
.setup-brief {
|
|
display: grid;
|
|
grid-template-columns: minmax(250px, 0.9fr) minmax(420px, 1.5fr) minmax(210px, 0.75fr);
|
|
align-items: stretch;
|
|
overflow: hidden;
|
|
border: 1px solid var(--line);
|
|
border-radius: 10px;
|
|
margin-bottom: 28px;
|
|
background: var(--surface);
|
|
box-shadow: 0 12px 28px rgba(24, 48, 61, 0.09);
|
|
}
|
|
|
|
.setup-copy,
|
|
.setup-target {
|
|
padding: 25px 24px;
|
|
}
|
|
|
|
.setup-copy {
|
|
background: var(--instrument);
|
|
color: var(--instrument-text);
|
|
}
|
|
|
|
.setup-copy h2 {
|
|
margin: 0;
|
|
color: var(--instrument-text);
|
|
font-size: 23px;
|
|
font-weight: 710;
|
|
letter-spacing: -0.025em;
|
|
}
|
|
|
|
.setup-copy p {
|
|
max-width: 42ch;
|
|
margin: 8px 0 0;
|
|
color: var(--instrument-muted);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.setup-sequence {
|
|
display: grid;
|
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
padding: 0;
|
|
margin: 0;
|
|
list-style: none;
|
|
}
|
|
|
|
.setup-sequence li {
|
|
min-width: 0;
|
|
display: grid;
|
|
align-content: center;
|
|
gap: 3px;
|
|
padding: 20px;
|
|
border-right: 1px solid var(--line);
|
|
}
|
|
|
|
.setup-sequence li:last-child {
|
|
border-right: 0;
|
|
}
|
|
|
|
.setup-sequence li > span {
|
|
width: 25px;
|
|
height: 25px;
|
|
display: grid;
|
|
place-items: center;
|
|
border: 1px solid var(--line-strong);
|
|
border-radius: 50%;
|
|
margin-bottom: 7px;
|
|
color: var(--accent);
|
|
font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
font-size: 11px;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.setup-sequence strong {
|
|
color: var(--ink);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.setup-sequence small {
|
|
color: var(--muted);
|
|
font-size: 10px;
|
|
}
|
|
|
|
.setup-target {
|
|
display: grid;
|
|
align-content: center;
|
|
gap: 3px;
|
|
border-left: 1px solid var(--line);
|
|
background: var(--surface-muted);
|
|
}
|
|
|
|
.setup-target > span,
|
|
.setup-target small {
|
|
color: var(--muted);
|
|
font-size: 10px;
|
|
}
|
|
|
|
.setup-target code {
|
|
overflow: hidden;
|
|
color: var(--ink);
|
|
font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
font-size: 12px;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.config-view {
|
|
margin-top: 52px;
|
|
}
|
|
|
|
.first-run .config-view {
|
|
margin-top: 0;
|
|
}
|
|
|
|
.config-shell {
|
|
display: block;
|
|
}
|
|
|
|
.config-shell > summary {
|
|
list-style: none;
|
|
}
|
|
|
|
.config-shell > summary::-webkit-details-marker {
|
|
display: none;
|
|
}
|
|
|
|
.config-summary {
|
|
min-height: 82px;
|
|
display: grid;
|
|
grid-template-columns: 42px minmax(0, 1fr) auto;
|
|
align-items: center;
|
|
gap: 14px;
|
|
padding: 15px 18px;
|
|
border: 1px solid var(--line);
|
|
border-radius: 10px;
|
|
background: var(--surface);
|
|
box-shadow: 0 10px 24px rgba(24, 48, 61, 0.07);
|
|
cursor: pointer;
|
|
transition:
|
|
border-color 160ms ease-out,
|
|
background 160ms ease-out,
|
|
box-shadow 220ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
}
|
|
|
|
.config-summary:hover {
|
|
border-color: var(--line-strong);
|
|
background: var(--surface-muted);
|
|
box-shadow: 0 14px 30px rgba(24, 48, 61, 0.1);
|
|
}
|
|
|
|
.config-shell[open] > .config-summary {
|
|
margin-bottom: 24px;
|
|
background: var(--surface-muted);
|
|
}
|
|
|
|
.first-run .config-shell[open] > .config-summary {
|
|
display: none;
|
|
}
|
|
|
|
.config-summary-mark {
|
|
width: 42px;
|
|
height: 42px;
|
|
display: grid;
|
|
place-items: center;
|
|
border: 1px solid var(--line-strong);
|
|
border-radius: 7px;
|
|
background: var(--accent-soft);
|
|
color: var(--accent);
|
|
font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
font-size: 9px;
|
|
font-weight: 760;
|
|
letter-spacing: 0.04em;
|
|
}
|
|
|
|
.config-summary-copy {
|
|
min-width: 0;
|
|
display: grid;
|
|
gap: 3px;
|
|
}
|
|
|
|
.config-summary-copy h2,
|
|
.config-summary-copy p {
|
|
overflow: hidden;
|
|
margin: 0;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.config-summary-copy h2 {
|
|
color: var(--ink);
|
|
font-size: 14px;
|
|
font-weight: 710;
|
|
letter-spacing: -0.01em;
|
|
}
|
|
|
|
.config-summary-copy p {
|
|
color: var(--muted);
|
|
font-size: 11px;
|
|
}
|
|
|
|
.config-summary-meta,
|
|
.config-summary-action,
|
|
.config-summary-status {
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
|
|
.config-summary-meta {
|
|
justify-content: flex-end;
|
|
gap: 22px;
|
|
}
|
|
|
|
.config-summary-status {
|
|
gap: 7px;
|
|
color: var(--muted);
|
|
font-size: 11px;
|
|
font-weight: 650;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.config-summary-status i {
|
|
width: 6px;
|
|
height: 6px;
|
|
border-radius: 50%;
|
|
background: currentColor;
|
|
}
|
|
|
|
.config-summary-status.success {
|
|
color: var(--success);
|
|
}
|
|
|
|
.config-summary-status.attention {
|
|
color: var(--warning);
|
|
}
|
|
|
|
.config-summary-status.error {
|
|
color: var(--danger);
|
|
}
|
|
|
|
.config-summary-action {
|
|
min-width: 100px;
|
|
justify-content: flex-end;
|
|
gap: 8px;
|
|
color: var(--accent);
|
|
font-size: 11px;
|
|
font-weight: 680;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.config-summary-action svg {
|
|
width: 15px;
|
|
height: 15px;
|
|
transition: transform 180ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
}
|
|
|
|
.config-summary-action .when-open {
|
|
display: none;
|
|
}
|
|
|
|
.config-shell[open] .config-summary-action .when-closed {
|
|
display: none;
|
|
}
|
|
|
|
.config-shell[open] .config-summary-action .when-open {
|
|
display: inline;
|
|
}
|
|
|
|
.config-shell[open] .config-summary-action svg {
|
|
transform: rotate(90deg);
|
|
}
|
|
|
|
.config-shell[open] > .config-body {
|
|
animation: config-body-reveal 260ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
}
|
|
|
|
@keyframes config-body-reveal {
|
|
from {
|
|
opacity: 0.72;
|
|
transform: translateY(-8px);
|
|
clip-path: inset(0 0 6% 0);
|
|
}
|
|
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
clip-path: inset(0);
|
|
}
|
|
}
|
|
|
|
.config-heading {
|
|
align-items: center;
|
|
}
|
|
|
|
.page-actions {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: flex-end;
|
|
gap: 8px;
|
|
}
|
|
|
|
.save-state {
|
|
margin-right: 8px;
|
|
color: var(--success);
|
|
}
|
|
|
|
.config-editor {
|
|
overflow: hidden;
|
|
border: 1px solid var(--line);
|
|
border-radius: 10px;
|
|
background: var(--surface);
|
|
box-shadow: 0 12px 28px rgba(24, 48, 61, 0.08);
|
|
}
|
|
|
|
.editor-title {
|
|
min-height: 76px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 20px;
|
|
padding: 14px 18px;
|
|
border-bottom: 1px solid var(--line);
|
|
background: var(--surface-muted);
|
|
}
|
|
|
|
.profile-picker {
|
|
min-width: 0;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 11px;
|
|
}
|
|
|
|
.profile-picker > span:last-child {
|
|
min-width: 0;
|
|
display: grid;
|
|
gap: 4px;
|
|
}
|
|
|
|
.profile-picker small {
|
|
overflow: hidden;
|
|
color: var(--muted);
|
|
font-size: 10px;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.profile-picker select {
|
|
width: auto;
|
|
min-width: 210px;
|
|
max-width: 420px;
|
|
padding: 0;
|
|
border: 0;
|
|
outline: 0;
|
|
background: transparent;
|
|
color: var(--ink);
|
|
font-size: 13px;
|
|
font-weight: 680;
|
|
}
|
|
|
|
.provider-logo {
|
|
width: 38px;
|
|
height: 38px;
|
|
display: grid;
|
|
place-items: center;
|
|
flex: 0 0 auto;
|
|
border: 1px solid var(--line-strong);
|
|
border-radius: 6px;
|
|
background: var(--surface);
|
|
color: var(--accent);
|
|
font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
font-size: 9px;
|
|
font-weight: 760;
|
|
letter-spacing: 0.02em;
|
|
}
|
|
|
|
.editor-tools {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: flex-end;
|
|
gap: 4px;
|
|
}
|
|
|
|
.studio-link {
|
|
margin-right: 5px;
|
|
}
|
|
|
|
.config-notice {
|
|
padding: 12px 18px;
|
|
border-bottom: 1px solid var(--line);
|
|
background: var(--warning-soft);
|
|
color: var(--warning);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.config-notice.error {
|
|
background: var(--danger-soft);
|
|
color: var(--danger);
|
|
}
|
|
|
|
.config-pane {
|
|
border-bottom: 1px solid var(--line);
|
|
}
|
|
|
|
.config-pane:last-of-type {
|
|
border-bottom: 0;
|
|
}
|
|
|
|
.config-pane:not([open]) > :not(summary) {
|
|
display: none;
|
|
}
|
|
|
|
.section-title {
|
|
min-height: 80px;
|
|
display: grid;
|
|
grid-template-columns: minmax(210px, 0.55fr) minmax(0, 1fr) 18px;
|
|
align-items: center;
|
|
gap: 28px;
|
|
padding: 18px 28px;
|
|
list-style: none;
|
|
cursor: default;
|
|
}
|
|
|
|
.section-title::-webkit-details-marker {
|
|
display: none;
|
|
}
|
|
|
|
.section-title > div {
|
|
min-width: 0;
|
|
display: contents;
|
|
}
|
|
|
|
.section-title h3 {
|
|
margin: 0;
|
|
color: var(--ink);
|
|
font-size: 14px;
|
|
font-weight: 710;
|
|
}
|
|
|
|
.section-title p {
|
|
max-width: 72ch;
|
|
margin: 0;
|
|
color: var(--muted);
|
|
font-size: 11px;
|
|
}
|
|
|
|
.pane-chevron {
|
|
display: none !important;
|
|
width: 15px;
|
|
height: 15px;
|
|
color: var(--muted);
|
|
transition: transform 160ms ease;
|
|
}
|
|
|
|
.pane-content {
|
|
padding: 0 28px 30px;
|
|
}
|
|
|
|
.form-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
gap: 18px 22px;
|
|
}
|
|
|
|
.field {
|
|
min-width: 0;
|
|
display: grid;
|
|
align-content: start;
|
|
gap: 7px;
|
|
}
|
|
|
|
.field > span {
|
|
color: var(--ink-soft);
|
|
font-size: 11px;
|
|
font-weight: 650;
|
|
}
|
|
|
|
.field > span small {
|
|
margin-left: 5px;
|
|
color: var(--muted);
|
|
font-size: 10px;
|
|
font-weight: 450;
|
|
}
|
|
|
|
.field input,
|
|
.field select,
|
|
.field textarea,
|
|
.add-domain input {
|
|
width: 100%;
|
|
min-width: 0;
|
|
border: 1px solid var(--line);
|
|
border-radius: 5px;
|
|
background: var(--surface);
|
|
color: var(--ink);
|
|
transition:
|
|
border-color 150ms ease,
|
|
background-color 150ms ease,
|
|
box-shadow 150ms ease;
|
|
}
|
|
|
|
.field input,
|
|
.field select,
|
|
.add-domain input {
|
|
min-height: 40px;
|
|
padding: 0 11px;
|
|
}
|
|
|
|
.field textarea {
|
|
padding: 12px;
|
|
}
|
|
|
|
.field .source-field {
|
|
min-height: 64px;
|
|
resize: vertical;
|
|
}
|
|
|
|
.field input:hover,
|
|
.field select:hover,
|
|
.field textarea:hover,
|
|
.add-domain input:hover {
|
|
border-color: var(--line-strong);
|
|
}
|
|
|
|
.field input:focus,
|
|
.field select:focus,
|
|
.field textarea:focus,
|
|
.add-domain input:focus {
|
|
border-color: var(--accent);
|
|
outline: 0;
|
|
box-shadow: 0 0 0 3px rgba(10, 115, 197, 0.11);
|
|
}
|
|
|
|
.field input::placeholder,
|
|
.field textarea::placeholder,
|
|
.add-domain input::placeholder {
|
|
color: var(--faint);
|
|
opacity: 1;
|
|
}
|
|
|
|
.field input:disabled,
|
|
.field select:disabled,
|
|
.field textarea:disabled {
|
|
cursor: not-allowed;
|
|
opacity: 0.56;
|
|
}
|
|
|
|
.domain-columns {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
border-top: 1px solid var(--line);
|
|
border-bottom: 1px solid var(--line);
|
|
}
|
|
|
|
.domain-section {
|
|
min-width: 0;
|
|
padding: 20px 0;
|
|
}
|
|
|
|
.domain-section:first-child {
|
|
padding-right: 24px;
|
|
border-right: 1px solid var(--line);
|
|
}
|
|
|
|
.domain-section:last-child {
|
|
padding-left: 24px;
|
|
}
|
|
|
|
.domain-heading {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
margin-bottom: 14px;
|
|
}
|
|
|
|
.domain-heading > div {
|
|
min-width: 0;
|
|
display: grid;
|
|
gap: 2px;
|
|
}
|
|
|
|
.domain-heading strong {
|
|
color: var(--ink);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.domain-heading small {
|
|
color: var(--muted);
|
|
font-size: 10px;
|
|
}
|
|
|
|
.protocol {
|
|
min-width: 44px;
|
|
height: 27px;
|
|
display: grid;
|
|
place-items: center;
|
|
border: 1px solid var(--line-strong);
|
|
border-radius: 4px;
|
|
color: var(--accent);
|
|
font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
font-size: 10px;
|
|
font-weight: 740;
|
|
}
|
|
|
|
.protocol.ipv6 {
|
|
color: #7454c6;
|
|
}
|
|
|
|
.dark .protocol.ipv6 {
|
|
color: #b7a0ff;
|
|
}
|
|
|
|
.domain-list {
|
|
min-height: 34px;
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-content: flex-start;
|
|
gap: 6px;
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
.domain-list > span {
|
|
min-height: 30px;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 4px 6px 4px 9px;
|
|
border: 1px solid var(--line);
|
|
border-radius: 4px;
|
|
background: var(--surface-muted);
|
|
color: var(--ink);
|
|
font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
font-size: 10px;
|
|
}
|
|
|
|
.domain-list > span button {
|
|
width: 21px;
|
|
height: 21px;
|
|
display: grid;
|
|
place-items: center;
|
|
padding: 0;
|
|
border: 0;
|
|
border-radius: 3px;
|
|
background: transparent;
|
|
color: var(--muted);
|
|
cursor: pointer;
|
|
}
|
|
|
|
.domain-list > span button:hover {
|
|
background: var(--danger-soft);
|
|
color: var(--danger);
|
|
}
|
|
|
|
.domain-empty {
|
|
align-self: center;
|
|
color: var(--muted);
|
|
font-size: 10px;
|
|
}
|
|
|
|
.add-domain {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 1fr) auto;
|
|
}
|
|
|
|
.add-domain input {
|
|
border-radius: 5px 0 0 5px;
|
|
}
|
|
|
|
.add-domain button {
|
|
min-width: 62px;
|
|
padding: 0 12px;
|
|
border: 1px solid var(--line);
|
|
border-left: 0;
|
|
border-radius: 0 5px 5px 0;
|
|
background: var(--surface-muted);
|
|
color: var(--ink);
|
|
font-size: 11px;
|
|
font-weight: 650;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.add-domain button:hover {
|
|
background: var(--surface-strong);
|
|
}
|
|
|
|
.setting-pair {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
margin-top: 24px;
|
|
border-top: 1px solid var(--line);
|
|
border-bottom: 1px solid var(--line);
|
|
}
|
|
|
|
.setting {
|
|
min-height: 88px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 18px;
|
|
padding: 17px 0;
|
|
}
|
|
|
|
.setting:first-child {
|
|
padding-right: 24px;
|
|
border-right: 1px solid var(--line);
|
|
}
|
|
|
|
.setting:last-child {
|
|
padding-left: 24px;
|
|
}
|
|
|
|
.setting > div {
|
|
min-width: 0;
|
|
}
|
|
|
|
.setting strong {
|
|
color: var(--ink);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.setting p {
|
|
max-width: 46ch;
|
|
margin: 4px 0 0;
|
|
color: var(--muted);
|
|
font-size: 10px;
|
|
}
|
|
|
|
.switch {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.switch input {
|
|
position: absolute;
|
|
opacity: 0;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.switch-track {
|
|
width: 34px;
|
|
height: 19px;
|
|
position: relative;
|
|
flex: 0 0 auto;
|
|
border: 1px solid var(--line-strong);
|
|
border-radius: 10px;
|
|
background: var(--surface-strong);
|
|
transition:
|
|
border-color 150ms ease,
|
|
background-color 150ms ease;
|
|
}
|
|
|
|
.switch-track::after {
|
|
position: absolute;
|
|
top: 2px;
|
|
left: 2px;
|
|
width: 13px;
|
|
height: 13px;
|
|
border-radius: 50%;
|
|
background: var(--surface);
|
|
box-shadow: 0 2px 5px rgba(15, 36, 48, 0.24);
|
|
content: "";
|
|
transition: transform 170ms cubic-bezier(0.2, 0.7, 0.2, 1);
|
|
}
|
|
|
|
.switch input:checked + .switch-track {
|
|
border-color: var(--accent);
|
|
background: var(--accent);
|
|
}
|
|
|
|
.switch input:checked + .switch-track::after {
|
|
transform: translateX(15px);
|
|
}
|
|
|
|
.switch input:focus-visible + .switch-track {
|
|
outline: 3px solid rgba(10, 115, 197, 0.24);
|
|
outline-offset: 2px;
|
|
}
|
|
|
|
.switch-label {
|
|
min-width: 26px;
|
|
color: var(--muted);
|
|
font-size: 10px;
|
|
}
|
|
|
|
.advanced-group {
|
|
margin-top: 22px;
|
|
border-top: 1px solid var(--line);
|
|
}
|
|
|
|
.advanced-group > summary {
|
|
min-height: 54px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 14px;
|
|
padding: 0;
|
|
list-style: none;
|
|
color: var(--ink);
|
|
cursor: pointer;
|
|
}
|
|
|
|
.advanced-group > summary::-webkit-details-marker {
|
|
display: none;
|
|
}
|
|
|
|
.advanced-group > summary > span {
|
|
display: flex;
|
|
align-items: baseline;
|
|
gap: 8px;
|
|
}
|
|
|
|
.advanced-group > summary strong {
|
|
font-size: 11px;
|
|
}
|
|
|
|
.advanced-group > summary small {
|
|
color: var(--muted);
|
|
font-size: 10px;
|
|
}
|
|
|
|
.advanced-group > summary svg {
|
|
width: 14px;
|
|
height: 14px;
|
|
color: var(--muted);
|
|
transition: transform 150ms ease;
|
|
}
|
|
|
|
.advanced-group[open] > summary svg {
|
|
transform: rotate(90deg);
|
|
}
|
|
|
|
.advanced-content {
|
|
padding: 5px 0 20px;
|
|
}
|
|
|
|
.advanced-hint {
|
|
margin: 0 0 12px;
|
|
color: var(--muted);
|
|
font-size: 10px;
|
|
}
|
|
|
|
.automation-card {
|
|
min-height: 76px;
|
|
display: grid;
|
|
grid-template-columns: 32px minmax(0, 1fr) minmax(150px, 0.34fr) auto;
|
|
align-items: center;
|
|
gap: 14px;
|
|
padding: 14px 0;
|
|
border-top: 1px solid var(--line);
|
|
border-bottom: 1px solid var(--line);
|
|
}
|
|
|
|
.automation-icon {
|
|
width: 30px;
|
|
height: 30px;
|
|
display: grid;
|
|
place-items: center;
|
|
color: var(--accent);
|
|
}
|
|
|
|
.automation-card.attention .automation-icon,
|
|
.automation-card.attention > div strong {
|
|
color: var(--warning);
|
|
}
|
|
|
|
.automation-icon svg {
|
|
width: 19px;
|
|
height: 19px;
|
|
}
|
|
|
|
.automation-card > div {
|
|
min-width: 0;
|
|
display: grid;
|
|
gap: 2px;
|
|
}
|
|
|
|
.automation-card > div strong {
|
|
color: var(--ink);
|
|
font-size: 12px;
|
|
}
|
|
|
|
.automation-card > div p {
|
|
overflow: hidden;
|
|
margin: 0;
|
|
color: var(--muted);
|
|
font-size: 10px;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.compact-field {
|
|
grid-template-columns: minmax(0, 1fr);
|
|
}
|
|
|
|
.compact-field input {
|
|
min-height: 36px;
|
|
}
|
|
|
|
.json-editor {
|
|
min-height: 340px;
|
|
resize: vertical;
|
|
background: var(--instrument) !important;
|
|
color: var(--instrument-text) !important;
|
|
font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace !important;
|
|
font-size: 12px;
|
|
line-height: 1.6;
|
|
tab-size: 2;
|
|
}
|
|
|
|
.inline-actions {
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
gap: 8px;
|
|
margin-top: 10px;
|
|
}
|
|
|
|
.editor-footer {
|
|
min-height: 68px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 20px;
|
|
padding: 13px 18px;
|
|
border-top: 1px solid var(--line);
|
|
background: var(--surface-muted);
|
|
color: var(--muted);
|
|
font-size: 11px;
|
|
}
|
|
|
|
.editor-footer > div {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
|
|
.editor-footer .dirty {
|
|
color: var(--warning);
|
|
}
|
|
|
|
.save-state.confirmed i {
|
|
animation: state-confirm 480ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
}
|
|
|
|
@keyframes state-confirm {
|
|
0% {
|
|
opacity: 0.45;
|
|
transform: scale(0.72);
|
|
}
|
|
|
|
52% {
|
|
opacity: 1;
|
|
transform: scale(1.5);
|
|
}
|
|
|
|
100% {
|
|
opacity: 1;
|
|
transform: scale(1);
|
|
}
|
|
}
|
|
|
|
.toast {
|
|
position: fixed;
|
|
right: 22px;
|
|
bottom: 22px;
|
|
z-index: 100;
|
|
max-width: min(390px, calc(100vw - 44px));
|
|
padding: 12px 15px;
|
|
border: 1px solid #29404d;
|
|
border-radius: 7px;
|
|
background: #08151e;
|
|
color: #eff6f8;
|
|
box-shadow: 0 15px 34px rgba(3, 12, 18, 0.34);
|
|
font-size: 12px;
|
|
opacity: 0;
|
|
transform: translateY(8px) scale(0.985);
|
|
transition:
|
|
opacity 160ms ease-out,
|
|
transform 220ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
}
|
|
|
|
.toast.visible {
|
|
opacity: 1;
|
|
transform: translateY(0) scale(1);
|
|
}
|
|
|
|
.toast.warning {
|
|
border-color: #83591f;
|
|
color: #f5cf92;
|
|
}
|
|
|
|
.toast.error {
|
|
border-color: #8c3344;
|
|
color: #ffadb9;
|
|
}
|
|
|
|
.portal.busy {
|
|
cursor: progress;
|
|
}
|
|
|
|
.portal.busy button,
|
|
.portal.busy input,
|
|
.portal.busy select,
|
|
.portal.busy textarea {
|
|
cursor: progress;
|
|
}
|
|
|
|
.spinning {
|
|
animation: spin 850ms linear infinite;
|
|
}
|
|
|
|
@keyframes spin {
|
|
to {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
|
|
@media (max-width: 1040px) {
|
|
.status-topology {
|
|
grid-template-columns: minmax(0, 1fr) 46px minmax(0, 1fr) 46px minmax(0, 1fr);
|
|
gap: 10px;
|
|
}
|
|
|
|
.ledger-grid {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.ledger-grid .settings-section + .settings-section {
|
|
border-top: 1px solid var(--line);
|
|
border-left: 0;
|
|
}
|
|
|
|
.setup-brief {
|
|
grid-template-columns: minmax(230px, 0.8fr) minmax(0, 1.4fr);
|
|
}
|
|
|
|
.setup-target {
|
|
grid-column: 1 / -1;
|
|
border-top: 1px solid var(--line);
|
|
border-left: 0;
|
|
}
|
|
}
|
|
|
|
@media (max-width: 800px) {
|
|
.app-header-inner {
|
|
width: min(calc(100% - 28px), 1240px);
|
|
grid-template-columns: minmax(130px, 1fr) auto minmax(112px, 1fr);
|
|
gap: 14px;
|
|
}
|
|
|
|
.content {
|
|
width: min(calc(100% - 28px), 1240px);
|
|
padding-top: 28px;
|
|
}
|
|
|
|
.config-summary-meta {
|
|
gap: 12px;
|
|
}
|
|
|
|
.config-summary-action {
|
|
min-width: 0;
|
|
}
|
|
|
|
.hero-primary {
|
|
grid-template-columns: auto minmax(0, 1fr);
|
|
}
|
|
|
|
.signal-action {
|
|
grid-column: 1 / -1;
|
|
width: 100%;
|
|
}
|
|
|
|
.observability-rail {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.recovery-signal {
|
|
border-top: 1px solid var(--instrument-line);
|
|
border-left: 0;
|
|
}
|
|
|
|
.dashboard-grid {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.dashboard-grid .settings-section + .settings-section {
|
|
border-top: 1px solid var(--line);
|
|
border-left: 0;
|
|
}
|
|
|
|
.setup-brief {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.setup-sequence {
|
|
grid-column: 1;
|
|
}
|
|
|
|
.setup-target {
|
|
grid-column: 1;
|
|
}
|
|
|
|
.config-heading {
|
|
align-items: flex-start;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.page-actions {
|
|
width: 100%;
|
|
justify-content: flex-start;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.editor-title {
|
|
align-items: flex-start;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.editor-tools {
|
|
width: 100%;
|
|
justify-content: flex-start;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.studio-link {
|
|
margin-right: auto;
|
|
}
|
|
|
|
.form-grid,
|
|
.domain-columns,
|
|
.setting-pair {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.domain-section:first-child,
|
|
.setting:first-child {
|
|
padding-right: 0;
|
|
border-right: 0;
|
|
}
|
|
|
|
.domain-section:last-child,
|
|
.setting:last-child {
|
|
padding-left: 0;
|
|
border-top: 1px solid var(--line);
|
|
}
|
|
|
|
.automation-card {
|
|
grid-template-columns: 32px minmax(0, 1fr) auto;
|
|
}
|
|
|
|
.automation-card .compact-field {
|
|
grid-column: 2 / 3;
|
|
}
|
|
|
|
.automation-card > .button {
|
|
grid-column: 3;
|
|
grid-row: 1 / span 2;
|
|
}
|
|
}
|
|
|
|
@media (max-width: 720px) {
|
|
.app-header-inner {
|
|
min-height: 58px;
|
|
}
|
|
|
|
.brand small {
|
|
display: none;
|
|
}
|
|
|
|
.command-nav {
|
|
--nav-gap: 15px;
|
|
}
|
|
|
|
.header-health > span {
|
|
position: absolute;
|
|
width: 1px;
|
|
height: 1px;
|
|
overflow: hidden;
|
|
clip: rect(0, 0, 0, 0);
|
|
}
|
|
|
|
.header-health {
|
|
width: 20px;
|
|
justify-content: center;
|
|
}
|
|
|
|
.content {
|
|
padding-top: 22px;
|
|
}
|
|
|
|
.config-summary {
|
|
min-height: 72px;
|
|
grid-template-columns: 36px minmax(0, 1fr);
|
|
grid-template-rows: auto auto;
|
|
gap: 10px;
|
|
padding: 12px 14px;
|
|
}
|
|
|
|
.config-summary-mark {
|
|
width: 36px;
|
|
height: 36px;
|
|
grid-row: 1 / span 2;
|
|
}
|
|
|
|
.config-summary-meta {
|
|
grid-column: 2;
|
|
grid-row: 2;
|
|
justify-content: space-between;
|
|
gap: 10px;
|
|
}
|
|
|
|
.config-summary-action .when-closed,
|
|
.config-summary-action .when-open {
|
|
display: none !important;
|
|
}
|
|
|
|
.overview-view,
|
|
.config-view {
|
|
scroll-margin-top: 72px;
|
|
}
|
|
|
|
.page-header {
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
.page-header h1,
|
|
.page-header h2 {
|
|
font-size: 20px;
|
|
}
|
|
|
|
.hero-primary {
|
|
padding: 22px 20px 20px;
|
|
}
|
|
|
|
.status-copy h2 {
|
|
font-size: 21px;
|
|
}
|
|
|
|
.status-topology {
|
|
grid-template-columns: 1fr;
|
|
gap: 0;
|
|
padding: 24px 20px 26px;
|
|
}
|
|
|
|
.route-node {
|
|
grid-template-columns: 1fr;
|
|
align-items: start;
|
|
gap: 3px;
|
|
padding: 9px 0 9px 23px;
|
|
}
|
|
|
|
.route-node::before {
|
|
top: 15px;
|
|
left: 0;
|
|
}
|
|
|
|
.route-node strong {
|
|
font-size: 18px;
|
|
text-align: left;
|
|
}
|
|
|
|
.route-connector {
|
|
width: 1px;
|
|
height: 24px;
|
|
margin: 0 0 0 4px;
|
|
}
|
|
|
|
.route-connector::after {
|
|
top: auto;
|
|
right: auto;
|
|
bottom: 0;
|
|
left: -3px;
|
|
transform: rotate(135deg);
|
|
}
|
|
|
|
.status-hero.syncing .route-connector::before {
|
|
top: 0;
|
|
left: -1px;
|
|
width: 3px;
|
|
height: 100%;
|
|
transform: scaleY(0);
|
|
transform-origin: center top;
|
|
animation-name: route-trace-vertical;
|
|
}
|
|
|
|
@keyframes route-trace-vertical {
|
|
0% {
|
|
opacity: 0.35;
|
|
transform: scaleY(0);
|
|
}
|
|
|
|
100% {
|
|
opacity: 1;
|
|
transform: scaleY(1);
|
|
}
|
|
}
|
|
|
|
.latest-signal {
|
|
grid-template-columns: 92px minmax(0, 1fr);
|
|
padding: 15px 18px;
|
|
}
|
|
|
|
.recovery-signal {
|
|
padding: 15px 18px;
|
|
}
|
|
|
|
.settings-row {
|
|
grid-template-columns: 34px minmax(0, 1fr) auto;
|
|
}
|
|
|
|
.record-row {
|
|
grid-template-columns: 44px minmax(0, 1fr) auto;
|
|
}
|
|
|
|
.settings-row code,
|
|
.record-row code {
|
|
grid-column: 2 / -1;
|
|
grid-row: 2;
|
|
text-align: left;
|
|
}
|
|
|
|
.setup-sequence {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.setup-sequence li {
|
|
grid-template-columns: 30px minmax(0, 1fr);
|
|
align-items: center;
|
|
column-gap: 10px;
|
|
padding: 14px 20px;
|
|
border-right: 0;
|
|
border-bottom: 1px solid var(--line);
|
|
}
|
|
|
|
.setup-sequence li > span {
|
|
grid-row: 1 / span 2;
|
|
margin: 0;
|
|
}
|
|
|
|
.setup-sequence li:last-child {
|
|
border-bottom: 0;
|
|
}
|
|
|
|
.config-view {
|
|
margin-top: 58px;
|
|
}
|
|
|
|
.first-run .config-view {
|
|
margin-top: 0;
|
|
}
|
|
|
|
.config-editor {
|
|
border-radius: 8px;
|
|
}
|
|
|
|
.editor-title {
|
|
padding: 14px;
|
|
}
|
|
|
|
.profile-picker {
|
|
width: 100%;
|
|
}
|
|
|
|
.profile-picker > span:last-child {
|
|
flex: 1;
|
|
}
|
|
|
|
.profile-picker select {
|
|
width: 100%;
|
|
min-width: 0;
|
|
max-width: none;
|
|
}
|
|
|
|
.config-notice {
|
|
padding: 11px 14px;
|
|
}
|
|
|
|
.section-title {
|
|
min-height: 76px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 15px;
|
|
padding: 17px 18px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.section-title > div {
|
|
min-width: 0;
|
|
display: grid;
|
|
gap: 4px;
|
|
}
|
|
|
|
.section-title p {
|
|
display: block;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.pane-chevron {
|
|
display: block !important;
|
|
flex: 0 0 auto;
|
|
}
|
|
|
|
.config-pane[open] .pane-chevron {
|
|
transform: rotate(90deg);
|
|
}
|
|
|
|
.pane-content {
|
|
padding: 0 18px 24px;
|
|
}
|
|
|
|
.automation-card {
|
|
grid-template-columns: 30px minmax(0, 1fr);
|
|
}
|
|
|
|
.automation-card .compact-field,
|
|
.automation-card > .button {
|
|
grid-column: 1 / -1;
|
|
grid-row: auto;
|
|
}
|
|
|
|
.editor-footer {
|
|
align-items: flex-start;
|
|
flex-direction: column;
|
|
padding: 14px;
|
|
}
|
|
|
|
.editor-footer > div {
|
|
width: 100%;
|
|
justify-content: flex-end;
|
|
}
|
|
}
|
|
|
|
@media (max-width: 480px) {
|
|
.app-header-inner {
|
|
width: min(calc(100% - 22px), 1240px);
|
|
grid-template-columns: auto 1fr auto;
|
|
gap: 10px;
|
|
}
|
|
|
|
.brand > span:last-child {
|
|
display: none;
|
|
}
|
|
|
|
.command-nav {
|
|
justify-self: center;
|
|
}
|
|
|
|
.content {
|
|
width: min(calc(100% - 22px), 1240px);
|
|
padding-bottom: 64px;
|
|
}
|
|
|
|
.status-hero {
|
|
border-radius: 9px;
|
|
}
|
|
|
|
.hero-primary {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.status-app-icon {
|
|
width: 38px;
|
|
height: 38px;
|
|
}
|
|
|
|
.signal-action {
|
|
grid-column: 1;
|
|
}
|
|
|
|
.latest-signal {
|
|
grid-template-columns: 1fr;
|
|
gap: 3px;
|
|
}
|
|
|
|
.latest-signal > span {
|
|
grid-row: auto;
|
|
}
|
|
|
|
.latest-signal time {
|
|
display: inline;
|
|
margin-left: 5px;
|
|
}
|
|
|
|
.section-heading {
|
|
align-items: flex-start;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.search-field {
|
|
width: 100%;
|
|
}
|
|
|
|
.settings-row,
|
|
.record-row {
|
|
grid-template-columns: 34px minmax(0, 1fr);
|
|
}
|
|
|
|
.record-row {
|
|
grid-template-columns: 44px minmax(0, 1fr);
|
|
}
|
|
|
|
.settings-row .connected-state,
|
|
.record-row .connected-state {
|
|
grid-column: 2;
|
|
}
|
|
|
|
.event-stream li {
|
|
grid-template-columns: 48px 54px minmax(0, 1fr);
|
|
padding-right: 12px;
|
|
padding-left: 12px;
|
|
}
|
|
|
|
.event-source {
|
|
display: none;
|
|
}
|
|
|
|
.page-actions {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
}
|
|
|
|
.save-state {
|
|
grid-column: 1 / -1;
|
|
}
|
|
|
|
.editor-tools {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
}
|
|
|
|
.studio-link {
|
|
grid-column: 1 / -1;
|
|
justify-content: flex-start;
|
|
margin: 0;
|
|
}
|
|
|
|
.inline-actions,
|
|
.editor-footer > div {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
}
|
|
|
|
.toast {
|
|
right: 12px;
|
|
bottom: 12px;
|
|
left: 12px;
|
|
max-width: none;
|
|
}
|
|
}
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
*,
|
|
*::before,
|
|
*::after {
|
|
scroll-behavior: auto !important;
|
|
animation-duration: 0.01ms !important;
|
|
animation-iteration-count: 1 !important;
|
|
transition-duration: 0.01ms !important;
|
|
}
|
|
}
|