.client-servers { display: block; } .client-server-grid { display: grid; grid-template-columns: 1fr; gap: 0; width: min(100%, 220px); margin-inline: auto; } .client-server-row { width: 220px; display: grid; grid-template-columns: minmax(0, 1fr) 120px minmax(0, 1fr); align-items: center; margin-inline: auto; } .client-server { min-width: 0; min-height: 44px; display: grid; place-items: end center; padding: 0 4px 4px; border: 0; border-bottom: 1px solid var(--client-border); border-radius: 0; background: transparent; color: var(--client-text); text-align: center; cursor: pointer; animation: client-server-enter 760ms calc(var(--server-index) * 110ms) cubic-bezier(0.16, 1, 0.3, 1) both; transition: border-color 160ms ease, background 160ms ease, transform 160ms ease; } @keyframes client-server-leave { 0% { opacity: 1; filter: blur(0); transform: translateY(0); } 100% { opacity: 0; filter: blur(3px); transform: translateY(8px); } } @keyframes client-server-enter { 0% { opacity: 0; filter: blur(3px); transform: translateY(-8px); } 100% { opacity: 1; filter: blur(0); transform: translateY(0); } } .client-server:hover:not(:disabled) { transform: translateY(-2px); background: transparent; opacity: 1; } .client-server:active:not(:disabled) { transform: translateY(0) scale(0.97); } .client-server.is-selected { border-bottom: 2px solid var(--client-accent); background: transparent; } .client-server strong { display: block; overflow: hidden; text-overflow: ellipsis; overflow-wrap: anywhere; font: var(--type-body); letter-spacing: var(--type-body-tracking); text-transform: var(--type-body-transform); text-align: center; } .client-server small { color: var(--client-muted); font: var(--type-body); letter-spacing: var(--type-body-tracking); text-transform: var(--type-body-transform); text-align: center; } .client-server-health { display: grid; place-items: center; color: var(--client-muted); font: var(--type-label); letter-spacing: var(--type-label-tracking); text-transform: var(--type-label-transform); font-variant-numeric: var(--numeric-tabular); white-space: nowrap; } .client-server-meta .client-server-health { width: 42px; min-height: 44px; place-items: end start; padding-bottom: 7px; } .client-server-health > span, .client-server-health > svg { grid-area: 1 / 1; transition: opacity 420ms ease, filter 520ms cubic-bezier(0.16, 1, 0.3, 1), color 520ms ease; } .client-server-health-checking { width: 12px; height: 12px; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; color: var(--client-accent); opacity: 0; filter: blur(4px); } .client-server-health.is-checking > span:first-child { opacity: 0; filter: blur(2px); } .client-server-health.is-checking .client-server-health-checking { opacity: 1; filter: blur(0); animation: client-spin 900ms linear infinite; } .client-servers.is-scalable { width: min(100%, 300px); margin-inline: auto; } .client-server-tools { display: grid; gap: 6px; margin-bottom: 6px; } .client-server-toolbar { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); grid-template-rows: 32px 28px; align-items: center; margin-bottom: 0; } .client-server-toolbar-title { grid-column: 2; grid-row: 1; color: var(--client-muted); font: var(--type-label); letter-spacing: var(--type-label-tracking); text-transform: var(--type-label-transform); white-space: nowrap; } .client-server-toolbar.is-single { grid-template-rows: 32px; } .client-server-mode-toggle { grid-column: 2; grid-row: 2; min-height: 28px; display: flex; align-items: center; justify-content: center; gap: 7px; margin: 0; padding: 5px 4px; border: 0; background: transparent; color: var(--client-muted); font: var(--type-label); letter-spacing: var(--type-label-tracking); text-transform: var(--type-label-transform); cursor: pointer; transition: color 220ms ease, text-shadow 320ms ease; } .client-server-check { grid-column: 3; grid-row: 1; justify-self: start; width: 32px; height: 32px; min-height: 32px; padding: 0; border: 0; background: transparent; color: var(--client-muted); display: flex; align-items: center; justify-content: center; cursor: pointer; transition: color 300ms ease, opacity 300ms ease, text-shadow 500ms ease; } .client-server-check svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; transition: transform 600ms cubic-bezier(0.16, 1, 0.3, 1); } .client-server-check-label { display: none; } .client-server-check.is-checking { color: var(--client-accent); opacity: 1; text-shadow: 0 0 9px color-mix(in oklch, var(--client-accent) 46%, transparent); } .client-server-check.is-checking svg { animation: client-spin 900ms linear infinite; } .client-server-check:hover:not(:disabled), .client-server-check:focus-visible { color: var(--client-accent); } .client-server-check:hover:not(:disabled) svg, .client-server-check:focus-visible:not(.is-checking) svg { transform: rotate(90deg); } .client-server-check:focus-visible { outline: 2px solid var(--client-accent); outline-offset: 1px; } .client-server-check:disabled { cursor: default; } .client-server-check:disabled:not(.is-checking) { opacity: 0.55; } .client-server-mode-toggle:hover, .client-server-mode-toggle.is-open { color: var(--client-accent); text-shadow: 0 0 10px color-mix(in oklch, var(--client-accent) 38%, transparent); } .client-server-mode-toggle svg { width: 10px; fill: none; stroke: currentColor; stroke-width: 1.5; transition: transform 480ms cubic-bezier(0.16, 1, 0.3, 1); } .client-server-mode-toggle.is-open svg { transform: rotate(180deg); } .client-server-mode-panels { display: grid; } .client-server-mode-panel { display: grid; grid-template-rows: 0fr; opacity: 0; visibility: hidden; filter: blur(7px); transform: translateY(-10px); transition: grid-template-rows 620ms cubic-bezier(0.16, 1, 0.3, 1), opacity 260ms ease, filter 420ms ease, transform 520ms cubic-bezier(0.16, 1, 0.3, 1), visibility 0s 620ms; } .client-server-mode-panel.is-open { grid-template-rows: 1fr; opacity: 1; visibility: visible; filter: blur(0); transform: translateY(0); transition-delay: 0s; } .client-server-mode-panel-inner { min-height: 0; overflow: hidden; } .client-server-mode-panel.is-advanced .client-server-tools, .client-server-mode-panel.is-advanced .client-server-pinned, .client-server-mode-panel.is-advanced .client-server-scroll { opacity: 0; filter: blur(5px); transform: translateY(-8px); transition: opacity 300ms ease, filter 440ms ease, transform 520ms cubic-bezier(0.16, 1, 0.3, 1); } .client-server-mode-panel.is-advanced.is-open .client-server-tools, .client-server-mode-panel.is-advanced.is-open .client-server-pinned, .client-server-mode-panel.is-advanced.is-open .client-server-scroll { opacity: 1; filter: blur(0); transform: translateY(0); } .client-server-mode-panel.is-advanced.is-open .client-server-tools { transition-delay: 90ms; } .client-server-mode-panel.is-advanced.is-open .client-server-pinned { transition-delay: 150ms; } .client-server-mode-panel.is-advanced.is-open .client-server-scroll { transition-delay: 210ms; } .client-server-tools input { width: 100%; height: 36px; padding: 0 4px; border: 0; border-bottom: 1px solid var(--client-border); outline: 0; background: transparent; color: var(--client-text); font: var(--type-body); letter-spacing: var(--type-body-tracking); text-transform: var(--type-body-transform); } .client-server-tools input:focus { border-bottom-color: var(--client-accent); } .client-server-filters { display: flex; justify-content: center; gap: 5px; flex-wrap: wrap; } .client-server-filters button, .client-server-group-toggle, .client-server-more { min-height: 30px; padding: 5px 7px; border: 0; background: transparent; color: var(--client-muted); font: var(--type-label); letter-spacing: var(--type-label-tracking); text-transform: var(--type-label-transform); cursor: pointer; } .client-server-filters button.is-active, .client-server-filters button:hover:not(:disabled), .client-server-group-toggle:hover, .client-server-more:hover { color: var(--client-accent); } .client-server-filters button:disabled { opacity: 0.4; cursor: default; } .client-server-pinned { display: grid; gap: 3px; margin-bottom: 6px; } .client-server-auto { width: 220px; min-height: 44px; display: grid; place-items: center; gap: 1px; margin-inline: auto; padding: 3px 6px 7px; border: 0; border-bottom: 1px solid var(--client-border); background: transparent; color: var(--client-text); font: inherit; cursor: pointer; } .client-server-auto.is-selected { border-bottom: 2px solid var(--client-accent); } .client-server-auto strong { font: var(--type-body); letter-spacing: var(--type-body-tracking); text-transform: var(--type-body-transform); } .client-server-auto small { color: var(--client-muted); font: var(--type-label); letter-spacing: var(--type-label-tracking); text-transform: var(--type-label-transform); } .client-server-scroll { max-height: 330px; overflow-y: auto; overscroll-behavior: contain; padding-right: 5px; scrollbar-width: none; } .client-server-scroll::-webkit-scrollbar { display: none; } .client-server-mode-panel.is-simple .client-server-scroll { max-height: 352px; overflow-y: auto; padding-right: 4px; scrollbar-width: thin; } .client-server-mode-panel.is-simple .client-server-scroll::-webkit-scrollbar { display: block; width: 4px; } .client-server-scroll.is-leaving { pointer-events: none; } .client-server-scroll.is-leaving .client-server { animation: client-server-leave 420ms calc(var(--server-index) * 45ms) cubic-bezier(0.4, 0, 1, 1) forwards; } .client-server-group + .client-server-group { margin-top: 8px; } .client-server-group-toggle { width: 100%; display: flex; justify-content: space-between; text-align: left; } .client-server-group-toggle small { font: var(--type-label); letter-spacing: var(--type-label-tracking); text-transform: var(--type-label-transform); } .client-servers.is-scalable .client-server-grid { gap: 0; } .client-server-meta { position: relative; grid-column: 3; justify-self: start; width: 42px; min-height: 44px; display: grid; place-items: center; margin-left: 4px; } .client-server-row .client-server { grid-column: 2; width: 120px; } .client-server-favorite { position: absolute; top: 50%; left: calc(100% + 2px); width: 44px; height: 44px; padding: 0; border: 0; background: transparent; color: var(--client-border); font: var(--type-control); letter-spacing: var(--type-control-tracking); text-transform: var(--type-control-transform); cursor: pointer; opacity: 0.45; transform: translateY(-50%); } .client-server-favorite.is-active { color: var(--client-accent); opacity: 1; } .client-server-empty { padding: 24px 4px; color: var(--client-muted); font: var(--type-control); letter-spacing: var(--type-control-tracking); text-transform: var(--type-control-transform); text-align: center; } .client-server-more { margin-top: 8px; } .client-server-pages { display: flex; align-items: center; justify-content: center; gap: 12px; color: var(--client-muted); font: var(--type-label); letter-spacing: var(--type-label-tracking); text-transform: var(--type-label-transform); } .client-server-more:disabled { opacity: 0.35; cursor: default; } .client-server-filters button:focus-visible, .client-server-mode-toggle:focus-visible, .client-server-group-toggle:focus-visible, .client-server-more:focus-visible, .client-server-auto:focus-visible, .client-server-favorite:focus-visible { outline: 2px solid var(--client-accent); outline-offset: 1px; } .client-server:disabled { cursor: wait; } /* The drawer uses the same picker behavior with a flat, full-width list. */ .client-profile-body .client-servers { display: flex; flex-direction: column; width: 100%; margin: 0; } .client-profile-body .client-server-mode-panels { order: 1; } .client-profile-body .client-server-toolbar { order: 2; grid-template-columns: auto 1fr; grid-template-rows: 40px; margin-top: 0; } .client-profile-body .client-server-toolbar-title { display: none; } .client-profile-body .client-server-check { grid-column: 1; grid-row: 1; justify-self: start; width: auto; gap: 8px; padding: 0 8px; } .client-profile-body .client-server-check-label { display: inline; font: var(--type-label); letter-spacing: var(--type-label-tracking); text-transform: var(--type-label-transform); } .client-profile-body .client-server-mode-toggle { grid-column: 2; grid-row: 1; justify-self: end; } .client-profile-body .client-servers.is-short .client-server-mode-toggle { display: none; } .client-profile-body .client-server-grid, .client-profile-body .client-server-row, .client-profile-body .client-server-auto, .client-profile-body .client-server-row .client-server { width: 100%; margin: 0; } .client-profile-body .client-server-row { grid-template-columns: minmax(0, 1fr) 64px; min-height: 44px; } .client-profile-body .client-server-row.is-selected { background: color-mix(in oklch, var(--client-accent) 2%, transparent); } .client-profile-body .client-server-row .client-server { grid-column: 1; min-height: 44px; display: grid; grid-template-columns: 18px minmax(0, 1fr) auto; place-items: center start; gap: 8px; padding: 0 8px; border: 0; text-align: left; animation: none; } .client-profile-body.is-open .client-server-row { animation: client-profile-server-in 420ms calc(var(--server-index) * 70ms) cubic-bezier(0.16, 1, 0.3, 1) both; } .client-profile-body.is-open .client-server-toolbar { animation: client-profile-ping-in 300ms 620ms cubic-bezier(0.16, 1, 0.3, 1) both; } .client-profile-body.is-closing .client-server-toolbar { animation: client-profile-ping-out 160ms cubic-bezier(0.4, 0, 1, 1) forwards; } .client-profile-body.is-closing .client-server-row { animation: client-profile-server-out 300ms var(--server-exit-delay) cubic-bezier(0.4, 0, 1, 1) forwards; } @keyframes client-profile-server-in { from { opacity: 0; filter: blur(4px); transform: translateY(-8px); } } @keyframes client-profile-server-out { to { opacity: 0; filter: blur(4px); transform: translateY(-8px); } } @keyframes client-profile-ping-in { from { opacity: 0; filter: blur(4px); transform: translateY(-5px); } } @keyframes client-profile-ping-out { to { opacity: 0; filter: blur(4px); transform: translateY(-5px); } } .client-profile-body .client-server-row .client-server::before { content: ''; width: 10px; height: 10px; border: 1px solid var(--client-muted); border-radius: 50%; } .client-profile-body .client-server-row .client-server.is-selected::before { border: 1px solid var(--client-accent); background: var(--client-accent); box-shadow: inset 0 0 0 2px color-mix(in oklch, var(--client-bg) 88%, transparent); } .client-profile-body .client-server strong, .client-profile-body .client-server small { text-align: left; } .client-profile-body .client-server strong { font: var(--type-control); letter-spacing: var(--type-control-tracking); text-transform: var(--type-control-transform); } .client-profile-body .client-server small { grid-column: 3; font: var(--type-micro); letter-spacing: var(--type-micro-tracking); text-transform: var(--type-micro-transform); } .client-profile-body .client-server-meta { grid-column: 2; justify-self: stretch; width: auto; margin: 0; } .client-profile-body .client-server-meta .client-server-health { width: auto; place-items: center end; padding: 0 10px 0 0; color: var(--client-accent); }