.client-live-region { position: fixed; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; } .client-instructions-toggle, .client-local-rules-toggle { position: relative; width: 42px; height: 48px; display: grid; place-items: center; padding: 0; border: 0; background: transparent; color: var(--client-muted); cursor: pointer; transition: color 240ms ease, transform 440ms cubic-bezier(0.16, 1, 0.3, 1); } .client-instructions-toggle svg, .client-local-rules-toggle svg { width: 23px; height: 23px; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; overflow: visible; transition: color 240ms ease, filter 360ms ease, transform 500ms cubic-bezier(0.16, 1, 0.3, 1); } .client-instructions-toggle span, .client-local-rules-toggle span { position: absolute; right: 48px; width: max-content; color: var(--client-text); font: 700 10px/1.2 'JetBrains Mono', 'SF Mono', ui-monospace, Menlo, monospace; letter-spacing: 0.04em; opacity: 0; filter: blur(5px); pointer-events: none; transform: translateX(8px); transition: opacity 350ms ease, filter 350ms ease, transform 500ms cubic-bezier(0.16, 1, 0.3, 1); } .client-instructions-toggle:hover, .client-instructions-toggle:focus-visible, .client-local-rules-toggle:hover, .client-local-rules-toggle:focus-visible { outline: 0; color: var(--client-accent); transform: translateX(-3px); } .client-instructions-toggle:hover span, .client-instructions-toggle:focus-visible span, .client-local-rules-toggle:hover span, .client-local-rules-toggle:focus-visible span { opacity: 1; filter: blur(0); transform: translateX(0); } .client-instructions-toggle:hover svg, .client-instructions-toggle:focus-visible svg, .client-local-rules-toggle:hover svg, .client-local-rules-toggle:focus-visible svg, .client-instructions-toggle.is-open svg, .client-local-rules-toggle.is-open svg { filter: drop-shadow(0 0 7px color-mix(in oklch, var(--client-accent) 52%, transparent)); } .client-rail-device-primary, .client-rail-device-secondary, .client-rail-rule-knob { transform-box: fill-box; transform-origin: center; } .client-rail-info-ring { stroke-dasharray: 1; } .client-rail-diagnostics-pulse { stroke-width: 2.4; opacity: 0; stroke-dasharray: 0.16 0.84; } .client-instructions-toggle.is-open:not(.client-devices-toggle):not(.client-diagnostics-toggle) .client-rail-info-ring { animation: client-rail-info-refill 680ms cubic-bezier(0.16, 1, 0.3, 1); } .client-devices-toggle.is-open .client-rail-device-primary { animation: client-rail-device-left 680ms cubic-bezier(0.16, 1, 0.3, 1); } .client-devices-toggle.is-open .client-rail-device-secondary { animation: client-rail-device-right 680ms cubic-bezier(0.16, 1, 0.3, 1); } .client-diagnostics-toggle.is-open .client-rail-diagnostics-pulse { animation: client-rail-diagnostics-pulse 760ms cubic-bezier(0.16, 1, 0.3, 1); } .client-local-rules-toggle.is-open .client-rail-rule-knob.is-top { animation: client-rail-rule-top 680ms cubic-bezier(0.16, 1, 0.3, 1); } .client-local-rules-toggle.is-open .client-rail-rule-knob.is-bottom { animation: client-rail-rule-bottom 680ms cubic-bezier(0.16, 1, 0.3, 1); } @keyframes client-rail-info-refill { from { opacity: 0.28; stroke-dashoffset: 1; } to { opacity: 1; stroke-dashoffset: 0; } } @keyframes client-rail-device-left { 0%, 100% { transform: translate(0, 0); } 38%, 58% { transform: translate(-0.6px, -2.25px); } 82% { transform: translate(0.15px, 0.35px); } } @keyframes client-rail-device-right { 0%, 100% { transform: translate(0, 0); } 38%, 58% { transform: translate(0.6px, -2.25px); } 82% { transform: translate(-0.15px, 0.35px); } } @keyframes client-rail-diagnostics-pulse { 0% { opacity: 0; stroke-dashoffset: 1; } 16%, 84% { opacity: 1; } 100% { opacity: 0; stroke-dashoffset: 0; } } @keyframes client-rail-rule-top { 0%, 100% { transform: translateX(0); } 42% { transform: translateX(-3px); } 72% { transform: translateX(1px); } } @keyframes client-rail-rule-bottom { 0%, 100% { transform: translateX(0); } 42% { transform: translateX(3px); } 72% { transform: translateX(-1px); } } .client-local-rules-toggle:disabled { cursor: default; color: var(--client-muted); transform: none; } .client-local-rules-toggle:disabled span { opacity: 0; filter: blur(5px); transform: translateX(8px); } .client-local-rules-toggle:disabled:hover span { opacity: 1; filter: blur(0); transform: translateX(0); } .client-instructions-toggle.is-open, .client-local-rules-toggle.is-open { color: var(--client-accent); } .client-local-rules-toggle.has-pending:not(.is-open) { color: oklch(0.68 0.14 72); } .client-local-rules-toggle.has-pending:not(.is-open) svg { filter: drop-shadow(0 0 7px oklch(0.68 0.14 72 / 0.42)); } .client-instructions-toggle.is-open span, .client-local-rules-toggle.is-open span { opacity: 0; visibility: hidden; } .client-drawer { position: fixed; inset: 0 0 0 auto; z-index: 50; overflow-y: auto; background: color-mix(in oklch, var(--client-bg) 99%, var(--client-panel)); color: var(--client-text); box-shadow: -26px 0 72px oklch(0.09 0.015 145 / 0.12); opacity: 0; visibility: hidden; transform: translateX(104%); transition: transform 760ms cubic-bezier(0.16, 1, 0.3, 1), opacity 500ms ease, visibility 0s 760ms; } .client-drawer.is-open { opacity: 1; visibility: visible; transform: translateX(0); transition-delay: 0s; } .client-drawer-sheet { position: relative; min-height: 100%; padding: 54px 72px 72px 34px; font-family: 'JetBrains Mono', 'SF Mono', ui-monospace, Menlo, monospace; } .client-delete-strike { --client-delete-strike-y: 50%; position: absolute; top: 0; right: 0; bottom: 0; left: 12px; z-index: 100; background: transparent; opacity: 0; pointer-events: none; transform: scaleX(0); transform-origin: left center; } .client-delete-strike::after { content: ''; position: absolute; left: 0; right: 0; top: calc(var(--client-delete-strike-y) - 1px); height: 2px; background: oklch(0.68 0.15 28); clip-path: polygon(0 24%, 100% 50%, 0 76%); } .client-deletable-row.is-removing > .client-delete-strike { animation: client-delete-strike 820ms cubic-bezier(0.16, 1, 0.3, 1) both; } .client-deletable-row.is-removing > :not(.client-delete-strike) { position: relative; z-index: 0; } .client-deletable-row.is-removing > :not(.client-delete-strike):not(.client-local-rule-enabled) { animation: client-delete-content-dim 820ms ease-out both; } .client-deletable-row.is-removing .client-local-rule-enabled circle, .client-deletable-row.is-removing .client-rule-check { opacity: 0; } .client-local-rule-delete { width: 28px; height: 32px; padding: 0; border: 0; background: transparent; color: var(--client-muted); font-size: 17px; cursor: pointer; transition: color 180ms ease, filter 260ms ease, transform 300ms cubic-bezier(0.16, 1, 0.3, 1); } .client-local-rule-delete:hover { color: oklch(0.68 0.15 28); filter: drop-shadow(0 0 7px oklch(0.68 0.15 28 / 0.42)); transform: rotate(8deg) scale(1.1); } .client-local-rule-enabled:focus-visible, .client-rule-type-trigger:focus-visible, .client-local-rule-delete:focus-visible, .client-local-rule-add:focus-visible, .client-local-rules-save:focus-visible, .client-local-rules-actions button:focus-visible { outline: 0; color: var(--client-accent); text-shadow: 0 0 10px color-mix(in oklch, var(--client-accent) 48%, transparent); } .client-local-rule-add { width: fit-content; padding: 7px 0; border: 0; background: transparent; color: var(--client-accent); font-size: 10px; font-weight: 700; cursor: pointer; transition: opacity 220ms ease, color 220ms ease, text-shadow 300ms ease; } .client-local-rule-add:hover { text-shadow: 0 0 10px color-mix(in oklch, var(--client-accent) 55%, transparent); } .client-local-rule-add:disabled { opacity: 0.3; cursor: not-allowed; text-shadow: none; } .client-local-rule-add-slot { min-height: 40px; display: flex; align-items: center; gap: 12px; } .client-local-rule-add-slot > span { color: var(--client-muted); font-size: 8px; opacity: 0; filter: blur(5px); transform: translateX(-6px); transition: opacity 220ms ease, filter 320ms ease, transform 380ms cubic-bezier(0.16, 1, 0.3, 1); } .client-local-rule-add-slot > span.is-visible { opacity: 1; filter: blur(0); transform: translateX(0); } @keyframes client-local-rule-enter { from { opacity: 0; filter: blur(8px); transform: translateY(-10px) scale(0.985); } to { opacity: 1; filter: blur(0); transform: translateY(0) scale(1); } } @keyframes client-local-rule-leave { 0%, 52% { opacity: 1; filter: blur(0); transform: translateX(0); } 100% { opacity: 0; filter: blur(8px); transform: translateX(28px); } } @keyframes client-delete-strike { 0% { opacity: 0.58; transform: scaleX(0); transform-origin: left center; } 42%, 52% { opacity: 0.58; transform: scaleX(1); transform-origin: left center; } 53% { opacity: 0.58; transform: scaleX(1); transform-origin: right center; } 100% { opacity: 0; transform: scaleX(0); transform-origin: right center; } } @keyframes client-delete-content-dim { 0%, 52% { opacity: 0.58; filter: brightness(0.55) saturate(0.65) blur(1.4px); } 100% { opacity: 0; filter: brightness(0.42) saturate(0.5) blur(2.6px); } } .client-instructions-header { display: grid; gap: 9px; margin: 0 8px 38px; } .client-drawer-close { position: absolute; top: 10px; right: 10px; width: 44px; height: 44px; padding: 0; border: 0; background: transparent; color: var(--client-muted); font: 400 24px/1 'JetBrains Mono', 'SF Mono', ui-monospace, Menlo, monospace; cursor: pointer; transition: color 220ms ease, transform 300ms cubic-bezier(0.16, 1, 0.3, 1); } .client-drawer-close:hover { color: var(--client-text); transform: scale(1.08); } .client-drawer-close:focus-visible { outline: 2px solid var(--client-accent); outline-offset: 2px; } .client-instructions-header span, .client-instruction-summary > span { color: var(--client-muted); font-size: 9px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; } .client-instructions-header h2 { margin: 0; font-size: 22px; letter-spacing: -0.045em; } .client-instructions-intro { display: grid; gap: 12px; margin-top: 15px; color: var(--client-muted); font-size: 11px; line-height: 1.7; } .client-instructions-intro p { margin: 0; } .client-instruction-copy-button { width: 104px; min-width: 104px; min-height: 34px; padding: 0; color: var(--client-accent); opacity: 1; } .client-tooltip-anchor { position: relative; } .client-tooltip { position: absolute; bottom: calc(100% + 6px); left: 50%; z-index: 1000; width: max-content; max-width: 220px; padding: 6px 8px; border-radius: 8px; background: oklch(0.14 0.012 145); box-shadow: 0 8px 26px oklch(0.08 0.015 145 / 0.16); color: oklch(0.94 0.008 145); font: 600 10px/1.35 'JetBrains Mono', 'SF Mono', ui-monospace, Menlo, monospace; letter-spacing: 0; text-align: center; white-space: normal; opacity: 0; visibility: hidden; filter: blur(2px); pointer-events: none; transform: translate(-50%, 2px); transition: opacity 90ms ease, filter 120ms ease, transform 140ms cubic-bezier(0.16, 1, 0.3, 1), visibility 0s 140ms; } .client-tooltip-anchor:hover > .client-tooltip, .client-tooltip-anchor:focus-visible > .client-tooltip, .client-tooltip-anchor:has(> :focus-visible) > .client-tooltip { opacity: 1; visibility: visible; filter: blur(0); transform: translate(-50%, 0); transition-delay: 20ms, 20ms, 20ms, 0s; } .client-duration-toggle > .client-tooltip { top: 50%; right: calc(100% + 12px); bottom: auto; left: auto; transform: translate(2px, -50%); } .client-duration-toggle:hover > .client-tooltip, .client-duration-toggle:focus-visible > .client-tooltip { transform: translate(0, -50%); } .client-form { position: static; grid-column: 3; align-self: center; justify-self: start; min-width: 0; width: min(360px, 100%); max-height: min(640px, calc(100vh - 120px)); overflow: visible; display: grid; gap: 36px; transition: opacity 650ms cubic-bezier(0.16, 1, 0.3, 1), filter 650ms cubic-bezier(0.16, 1, 0.3, 1); } .client-subscription-drawer { width: min(480px, 100vw); } .client-subscription-sheet { min-height: 100%; align-content: start; padding: 82px 72px 72px 42px; } .client-confirmation-popup { position: fixed; inset: 0; z-index: 100; display: grid; place-items: center; padding: 24px; background: color-mix(in oklch, var(--client-bg) 76%, transparent); -webkit-backdrop-filter: blur(0); backdrop-filter: blur(0); opacity: 0; visibility: hidden; pointer-events: none; transition: opacity 260ms ease, -webkit-backdrop-filter 520ms cubic-bezier(0.16, 1, 0.3, 1), backdrop-filter 520ms cubic-bezier(0.16, 1, 0.3, 1), visibility 0s 520ms; } .client-confirmation-popup.is-open { -webkit-backdrop-filter: blur(18px); backdrop-filter: blur(18px); opacity: 1; visibility: visible; pointer-events: auto; transition-delay: 0s; } .client-confirmation-dialog { width: min(430px, calc(100vw - 48px)); display: grid; gap: 14px; padding: 32px 34px; background: color-mix(in oklch, var(--client-bg) 82%, transparent); box-shadow: 0 0 86px color-mix(in oklch, var(--client-bg) 86%, transparent); color: var(--client-text); font-family: 'JetBrains Mono', 'SF Mono', ui-monospace, Menlo, monospace; opacity: 0; filter: blur(18px); transform: scale(0.9); transition: opacity 300ms ease, filter 520ms cubic-bezier(0.16, 1, 0.3, 1), transform 560ms cubic-bezier(0.16, 1, 0.3, 1); } .client-confirmation-popup.is-open .client-confirmation-dialog { opacity: 1; filter: blur(0); transform: scale(1); transition-delay: 90ms; } .client-confirmation-dialog > * { opacity: 0; filter: blur(7px); transform: translateY(7px); transition: opacity 260ms ease, filter 420ms cubic-bezier(0.16, 1, 0.3, 1), transform 460ms cubic-bezier(0.16, 1, 0.3, 1); } .client-confirmation-popup.is-open .client-confirmation-kicker { opacity: 1; filter: blur(0); transform: translateY(0); transition-delay: 170ms; } .client-confirmation-popup.is-open .client-confirmation-dialog h2 { opacity: 1; filter: blur(0); transform: translateY(0); transition-delay: 210ms; } .client-confirmation-popup.is-open .client-confirmation-dialog p { opacity: 1; filter: blur(0); transform: translateY(0); transition-delay: 270ms; } .client-confirmation-popup.is-open .client-confirmation-actions { opacity: 1; filter: blur(0); transform: translateY(0); transition-delay: 330ms; } .client-confirmation-kicker { color: var(--client-muted); font-size: 9px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; } .client-confirmation-dialog h2 { color: oklch(0.68 0.15 28); font-size: 18px; letter-spacing: -0.035em; } .client-confirmation-dialog p { max-width: 54ch; color: var(--client-muted); font-size: 11px; line-height: 1.7; } .client-confirmation-actions { display: flex; gap: 18px; margin-top: 4px; } .client-confirmation-actions button { padding: 6px 0; border: 0; background: transparent; color: var(--client-text); font-size: 10px; font-weight: 700; cursor: pointer; transition: color 200ms ease, filter 300ms ease, transform 300ms cubic-bezier(0.16, 1, 0.3, 1); } .client-confirmation-actions button:hover:not(:disabled), .client-confirmation-actions button:focus-visible { outline: none; filter: drop-shadow(0 0 7px currentColor); transform: translateY(-1px); } .client-confirmation-actions .is-danger { color: oklch(0.68 0.15 28); } .client-confirmation-actions button:disabled { opacity: 0.4; cursor: wait; } .client-shell:has(.harbor-brand.is-gateway-active) .client-form { opacity: 0.34; filter: grayscale(1) saturate(0); } @keyframes client-spin { to { transform: rotate(360deg); } } .client-server:focus-visible, .client-power:focus-visible { outline: 2px solid var(--client-accent); outline-offset: 3px; } .client-inline-error { position: absolute; left: 50%; z-index: 3; width: min(360px, 90vw); display: flex; align-items: center; justify-content: center; gap: 8px; flex-wrap: wrap; color: oklch(0.62 0.2 28); font: 600 11px/1.5 'JetBrains Mono', 'SF Mono', ui-monospace, Menlo, monospace; text-align: center; transform: translateX(-50%); } .client-inline-error small { color: var(--client-muted); font-size: 9px; white-space: nowrap; } .client-inline-error button { padding: 4px 7px; border: 0; border-radius: 6px; background: color-mix(in oklch, var(--client-control) 72%, transparent); color: var(--client-text); font-size: 9px; font-weight: 700; cursor: pointer; white-space: nowrap; } .client-inline-error button:focus-visible { outline: 2px solid oklch(0.68 0.15 28); outline-offset: 2px; } .client-operation-progress { color: var(--client-accent); } .client-operation-progress::before { width: 6px; height: 6px; border-radius: 50%; background: currentColor; box-shadow: 0 0 8px currentColor; content: ''; animation: client-operation-pulse 900ms ease-in-out infinite alternate; } @keyframes client-operation-pulse { to { opacity: 0.35; transform: scale(0.72); } } .client-copy-button { position: relative; width: 86px; padding: 6px 10px; border: 0; background: transparent; color: var(--client-muted); font: 700 9px/1.2 'JetBrains Mono', 'SF Mono', ui-monospace, Menlo, monospace; letter-spacing: 0.06em; cursor: pointer; opacity: 0.76; transition: color 220ms ease, opacity 220ms ease, transform 220ms cubic-bezier(0.16, 1, 0.3, 1); } .client-copy-label { transition: opacity 100ms ease; } .client-copy-button.is-copied .client-copy-label, .client-copy-button.is-copy-error .client-copy-label { opacity: 0; } .client-copy-feedback { position: absolute; inset: 0; display: grid; place-items: center; color: var(--client-accent); animation: client-copy-fade 800ms cubic-bezier(0.4, 0, 1, 1) forwards; } .client-copy-button.is-copy-error .client-copy-feedback { color: oklch(0.68 0.15 28); filter: drop-shadow(0 0 5px oklch(0.68 0.15 28 / 0.45)); } @keyframes client-copy-fade { 0%, 18% { opacity: 1; filter: drop-shadow(0 0 5px var(--client-accent)); } 100% { opacity: 0; filter: drop-shadow(0 0 0 transparent); } } .client-copy-button:hover { color: var(--client-text); opacity: 1; transform: translateY(-2px); } .client-copy-button:active { transform: translateY(0) scale(0.98); } .client-copy-button.is-copied { opacity: 1; color: var(--client-accent); } .client-copy-button:focus-visible { outline: 2px solid var(--client-accent); outline-offset: 3px; }