Files

1386 lines
29 KiB
CSS

.hermes-relay-plugin {
--hr-bg: var(--color-card, color-mix(in srgb, var(--midground-base, #f4f4f5) 4%, var(--background-base, #0b0b0c)));
--hr-surface: color-mix(in srgb, var(--color-card, var(--hr-bg)) 90%, transparent);
--hr-surface-muted: color-mix(in srgb, var(--color-muted, var(--hr-bg)) 76%, transparent);
--hr-border: var(--color-border, color-mix(in srgb, var(--midground-base, #f4f4f5) 16%, transparent));
--hr-text: var(--color-foreground, var(--midground, #f4f4f5));
--hr-card-text: var(--color-card-foreground, var(--hr-text));
--hr-muted: var(--color-muted-foreground, color-mix(in srgb, var(--hr-text) 68%, transparent));
--hr-danger: var(--color-destructive, #ef4444);
--hr-success: var(--color-success, #22c55e);
--hr-warning: var(--color-warning, #f59e0b);
--hr-ring: var(--color-ring, var(--hr-text));
--hr-popover: var(--color-popover, var(--hr-bg));
--hr-popover-text: var(--color-popover-foreground, var(--hr-card-text));
--hr-overlay: color-mix(in srgb, var(--background-base, #020617) 78%, transparent);
color: var(--hr-text);
font-family: var(
--theme-font-sans,
ui-sans-serif,
system-ui,
-apple-system,
BlinkMacSystemFont,
"Segoe UI",
sans-serif
);
font-size: 1rem;
line-height: var(--theme-line-height, 1.45);
max-width: 100%;
}
.hermes-relay-plugin,
.hermes-relay-plugin * {
box-sizing: border-box;
}
.hermes-relay-plugin h1,
.hermes-relay-plugin h2,
.hermes-relay-plugin h3,
.hermes-relay-plugin p,
.hermes-relay-plugin pre {
margin: 0;
}
.hermes-relay-plugin h1,
.hermes-relay-plugin [class*="CardTitle"],
.hermes-relay-plugin .font-semibold {
font-weight: 650;
}
.hermes-relay-plugin h1 {
font-size: 1.5rem;
line-height: 1.2;
}
.hermes-relay-plugin code,
.hermes-relay-plugin pre,
.hermes-relay-plugin .font-mono {
font-family:
var(--theme-font-mono, "SFMono-Regular", Consolas, "Liberation Mono", monospace);
}
.hermes-relay-plugin pre {
white-space: pre-wrap;
overflow-wrap: anywhere;
}
.hermes-relay-plugin select,
.hermes-relay-plugin textarea,
.hermes-relay-plugin input:not([class]) {
font: inherit;
color: inherit;
}
/*
* Buttons inherit the font but NOT the colour. The host's Nous DS ``Button``
* sets its own contrast text colour via utility classes (``text-background-base``
* for the solid fill, ``text-midground`` for outlined, ``text-current`` /
* ``text-destructive`` for ghost). A blanket ``color: inherit`` here (specificity
* 0,1,1) would outrank those utilities (0,1,0) and repaint every label in the
* container foreground — invisible against the light ``bg-midground`` fill
* (the blank-white-box symptom, issue #71 generalised). Plain ``<button>``
* elements in this plugin (tab strip, the advanced toggle) already set their
* colour explicitly via ``text-foreground`` / ``text-muted-foreground``, so they
* are unaffected by dropping the inherit.
*/
.hermes-relay-plugin button {
display: inline-flex;
min-height: 2rem;
align-items: center;
justify-content: center;
gap: 0.35rem;
border-radius: var(--radius-md, 6px);
white-space: nowrap;
}
.hermes-relay-plugin button:disabled {
cursor: not-allowed;
opacity: 0.55;
}
.hermes-relay-plugin input,
.hermes-relay-plugin select {
max-width: 100%;
border: 1px solid var(--hr-border);
border-radius: var(--radius-md, 6px);
background: var(--hr-bg);
color: var(--hr-card-text);
}
.hermes-relay-plugin input[type="checkbox"] {
width: 1rem;
height: 1rem;
accent-color: var(--hr-ring);
}
.hermes-relay-plugin canvas {
max-width: 100%;
height: auto;
}
.hermes-relay-plugin .hr-selectable {
user-select: all;
overflow-wrap: anywhere;
}
.hermes-relay-plugin .hr-mobile-setup-qr {
transition:
opacity 180ms ease,
transform 180ms ease;
animation: hr-mobile-setup-ready 180ms ease-out both;
}
@keyframes hr-mobile-setup-ready {
from {
opacity: 0;
transform: scale(0.985);
}
to {
opacity: 1;
transform: scale(1);
}
}
@media (prefers-reduced-motion: reduce) {
.hermes-relay-plugin .hr-mobile-setup-qr {
transition: none;
animation: none;
}
}
.hermes-relay-plugin .space-y-1 > * + * {
margin-top: 0.25rem;
}
.hermes-relay-plugin .space-y-2 > * + * {
margin-top: 0.5rem;
}
.hermes-relay-plugin .space-y-3 > * + * {
margin-top: 0.75rem;
}
.hermes-relay-plugin .space-y-4 > * + * {
margin-top: 1rem;
}
.hermes-relay-plugin .flex {
display: flex;
}
.hermes-relay-plugin .inline-block {
display: inline-block;
}
.hermes-relay-plugin .block {
display: block;
}
.hermes-relay-plugin .grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(210px, 100%), 1fr));
}
.hermes-relay-plugin .grid-cols-2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
@media (min-width: 640px) {
.hermes-relay-plugin .sm\:grid-cols-2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (min-width: 1024px) {
.hermes-relay-plugin .lg\:grid-cols-3 {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.hermes-relay-plugin .lg\:grid-cols-4 {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
}
@media (max-width: 560px) {
.hermes-relay-plugin .grid-cols-2 {
grid-template-columns: 1fr;
}
}
.hermes-relay-plugin .flex-row {
flex-direction: row;
}
.hermes-relay-plugin .flex-col {
flex-direction: column;
}
.hermes-relay-plugin .flex-wrap {
flex-wrap: wrap;
}
.hermes-relay-plugin .items-start {
align-items: flex-start;
}
.hermes-relay-plugin .items-center {
align-items: center;
}
.hermes-relay-plugin .justify-center {
justify-content: center;
}
.hermes-relay-plugin .justify-between {
justify-content: space-between;
}
.hermes-relay-plugin .justify-end {
justify-content: flex-end;
}
.hermes-relay-plugin .gap-1 {
gap: 0.25rem;
}
.hermes-relay-plugin .gap-2 {
gap: 0.5rem;
}
.hermes-relay-plugin .gap-3 {
gap: 0.75rem;
}
.hermes-relay-plugin .p-2 {
padding: 0.5rem;
}
.hermes-relay-plugin .p-3 {
padding: 0.75rem;
}
.hermes-relay-plugin .p-4 {
padding: 1rem;
}
.hermes-relay-plugin .px-2 {
padding-left: 0.5rem;
padding-right: 0.5rem;
}
.hermes-relay-plugin .px-3 {
padding-left: 0.75rem;
padding-right: 0.75rem;
}
.hermes-relay-plugin .px-4 {
padding-left: 1rem;
padding-right: 1rem;
}
.hermes-relay-plugin .py-2 {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
}
.hermes-relay-plugin .pt-0 {
padding-top: 0;
}
.hermes-relay-plugin .pt-1 {
padding-top: 0.25rem;
}
.hermes-relay-plugin .pt-3 {
padding-top: 0.75rem;
}
.hermes-relay-plugin .pb-2 {
padding-bottom: 0.5rem;
}
.hermes-relay-plugin .mt-1 {
margin-top: 0.25rem;
}
.hermes-relay-plugin .mt-2 {
margin-top: 0.5rem;
}
.hermes-relay-plugin .mt-3 {
margin-top: 0.75rem;
}
.hermes-relay-plugin .mt-4 {
margin-top: 1rem;
}
.hermes-relay-plugin .mb-1 {
margin-bottom: 0.25rem;
}
.hermes-relay-plugin .mb-3 {
margin-bottom: 0.75rem;
}
.hermes-relay-plugin .ml-auto {
margin-left: auto;
}
.hermes-relay-plugin .h-2\.5 {
height: 0.625rem;
}
.hermes-relay-plugin .w-2\.5 {
width: 0.625rem;
}
.hermes-relay-plugin .h-4,
.hermes-relay-plugin .w-4 {
width: 1rem;
height: 1rem;
}
.hermes-relay-plugin .h-9 {
min-height: 2.25rem;
}
.hermes-relay-plugin .h-10 {
min-height: 2.5rem;
}
.hermes-relay-plugin .w-full {
width: 100%;
}
.hermes-relay-plugin .w-fit {
width: fit-content;
}
.hermes-relay-plugin .max-w-xs {
max-width: 20rem;
}
.hermes-relay-plugin .max-w-xl {
max-width: 36rem;
}
.hermes-relay-plugin .max-h-\[90vh\] {
max-height: 90vh;
}
.hermes-relay-plugin .overflow-auto {
overflow: auto;
}
.hermes-relay-plugin .overflow-y-auto {
overflow-y: auto;
}
.hermes-relay-plugin .truncate {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.hermes-relay-plugin .whitespace-pre-wrap {
white-space: pre-wrap;
}
.hermes-relay-plugin .text-right {
text-align: right;
}
.hermes-relay-plugin .text-left {
text-align: left;
}
.hermes-relay-plugin .align-middle {
vertical-align: middle;
}
.hermes-relay-plugin .text-xs {
font-size: 0.75rem;
line-height: 1.35;
}
.hermes-relay-plugin .text-sm {
font-size: 0.875rem;
line-height: 1.45;
}
.hermes-relay-plugin .text-2xl {
font-size: 1.5rem;
line-height: 1.2;
}
.hermes-relay-plugin .font-medium {
font-weight: 500;
}
.hermes-relay-plugin .font-normal {
font-weight: 400;
}
.hermes-relay-plugin .text-muted-foreground {
color: var(--hr-muted);
}
.hermes-relay-plugin .text-foreground {
color: var(--hr-text);
}
.hermes-relay-plugin .text-destructive {
color: var(--hr-danger);
}
.hermes-relay-plugin .uppercase {
text-transform: uppercase !important;
}
.hermes-relay-plugin .tracking-wider {
letter-spacing: 0.05em !important;
}
.hermes-relay-plugin .tracking-widest {
letter-spacing: 0.12em !important;
}
.hermes-relay-plugin .capitalize {
text-transform: capitalize !important;
}
.hermes-relay-plugin .rounded {
border-radius: var(--radius-sm, 4px);
}
.hermes-relay-plugin .rounded-md {
border-radius: var(--radius-md, 6px);
}
.hermes-relay-plugin .border,
.hermes-relay-plugin .border-b,
.hermes-relay-plugin .border-t,
.hermes-relay-plugin .border-b-2 {
border-color: var(--hr-border);
}
.hermes-relay-plugin .border {
border-style: solid;
border-width: 1px;
}
.hermes-relay-plugin .border-b {
border-bottom-style: solid;
border-bottom-width: 1px;
}
.hermes-relay-plugin .border-t {
border-top-style: solid;
border-top-width: 1px;
}
.hermes-relay-plugin .border-b-2 {
border-bottom-style: solid;
border-bottom-width: 2px;
}
.hermes-relay-plugin .border-transparent {
border-color: transparent;
}
.hermes-relay-plugin .border-foreground {
border-color: var(--hr-text);
}
.hermes-relay-plugin .bg-background {
background: var(--hr-bg);
color: var(--hr-card-text);
}
.hermes-relay-plugin .bg-white {
background: #fff;
color: #111827;
}
/*
* Defensive contrast for any shadcn-class solid surface that a host's Button
* happens to emit (``bg-primary`` / ``bg-secondary``). The primary button path
* now goes through the Nous DS ``Button`` via the ui-shims adapter, which
* carries its own ``bg-midground`` / ``text-background-base`` utilities; these
* rules only matter for hosts whose components differ. Kept as a belt.
*/
.hermes-relay-plugin .bg-primary {
color: var(--color-primary-foreground, var(--primary-foreground, #0b0b0c));
}
.hermes-relay-plugin .bg-secondary {
color: var(--color-secondary-foreground, var(--secondary-foreground, var(--hr-text)));
}
/*
* Fallback button / badge skins — used ONLY when the host does not expose a
* Nous DS ``Button`` / ``Badge`` (see the no-component branch in
* lib/ui-shims.jsx). They paint from the plugin's resolved theme tokens so a
* component-less host still gets readable, theme-matched controls instead of a
* raw white default.
*/
.hermes-relay-plugin .hr-btn {
cursor: pointer;
border: 1px solid transparent;
}
.hermes-relay-plugin .hr-btn-solid {
background: var(--hr-text);
color: var(--hr-bg);
border-color: var(--hr-text);
}
.hermes-relay-plugin .hr-btn-solid:hover:not(:disabled) {
opacity: 0.9;
}
.hermes-relay-plugin .hr-btn-outline {
background: transparent;
color: var(--hr-text);
border-color: var(--hr-border);
}
.hermes-relay-plugin .hr-btn-outline:hover:not(:disabled) {
background: var(--hr-surface-muted);
}
.hermes-relay-plugin .hr-btn-ghost {
background: transparent;
color: var(--hr-text);
border-color: transparent;
}
.hermes-relay-plugin .hr-btn-ghost:hover:not(:disabled) {
background: var(--hr-surface-muted);
}
.hermes-relay-plugin .hr-btn-destructive {
background: var(--hr-danger);
color: #fff;
border-color: var(--hr-danger);
}
.hermes-relay-plugin .hr-badge {
display: inline-flex;
align-items: center;
gap: 0.25rem;
padding: 0.1rem 0.4rem;
border-radius: var(--radius-sm, 4px);
border: 1px solid transparent;
font-size: 0.75rem;
line-height: 1.2;
}
.hermes-relay-plugin .hr-badge-secondary {
background: var(--hr-surface-muted);
color: var(--hr-text);
border-color: var(--hr-border);
}
.hermes-relay-plugin .hr-badge-outline {
background: transparent;
color: var(--hr-muted);
border-color: var(--hr-border);
}
.hermes-relay-plugin .hr-badge-destructive {
background: color-mix(in srgb, var(--hr-danger) 16%, transparent);
color: var(--hr-danger);
border-color: color-mix(in srgb, var(--hr-danger) 40%, transparent);
}
.hermes-relay-plugin .bg-muted\/20,
.hermes-relay-plugin .bg-muted\/30,
.hermes-relay-plugin .bg-muted\/50 {
background: var(--hr-surface-muted);
}
.hermes-relay-plugin .bg-background\/80 {
background: color-mix(in srgb, var(--hr-bg) 82%, transparent);
}
.hermes-relay-plugin .bg-destructive\/10 {
background: color-mix(in srgb, var(--hr-danger) 12%, transparent);
}
.hermes-relay-plugin .border-destructive\/50 {
border-color: color-mix(in srgb, var(--hr-danger) 55%, transparent);
}
.hermes-relay-plugin .bg-amber-500\/10,
.hermes-relay-plugin .bg-amber-500\/15 {
background: color-mix(in srgb, var(--hr-warning) 16%, transparent);
}
.hermes-relay-plugin .border-amber-500\/50,
.hermes-relay-plugin .border-amber-500\/60 {
border-color: color-mix(in srgb, var(--hr-warning) 58%, transparent);
}
.hermes-relay-plugin .bg-emerald-500 {
background: var(--hr-success);
}
.hermes-relay-plugin .bg-amber-500 {
background: var(--hr-warning);
}
.hermes-relay-plugin .bg-destructive {
background: var(--hr-danger);
color: var(--color-destructive-foreground, var(--destructive-foreground, #fff));
}
.hermes-relay-plugin .bg-muted-foreground\/40 {
background: color-mix(in srgb, var(--hr-muted) 40%, transparent);
}
.hermes-relay-plugin .transition-colors {
transition:
color 0.15s ease,
border-color 0.15s ease,
background 0.15s ease;
}
.hermes-relay-plugin .hover\:text-foreground:hover {
color: var(--hr-text);
}
.hermes-relay-plugin .focus\:outline-none:focus {
outline: none;
}
.hermes-relay-plugin .focus-visible\:ring-1:focus-visible {
outline: 1px solid var(--hr-ring);
outline-offset: 2px;
}
.hermes-relay-plugin .cursor-pointer {
cursor: pointer;
}
.hermes-relay-plugin [role="tablist"] {
overflow-x: auto;
}
.hermes-relay-plugin [role="tablist"] button {
background: transparent;
border-top: 0;
border-left: 0;
border-right: 0;
border-radius: 0;
}
.hermes-relay-plugin .w-full.overflow-auto {
max-width: 100%;
overflow-x: auto;
}
.hermes-relay-plugin table {
width: 100%;
min-width: 720px;
border-collapse: collapse;
table-layout: fixed;
}
.hermes-relay-plugin thead {
background: var(--hr-surface-muted);
}
.hermes-relay-plugin th,
.hermes-relay-plugin td {
padding: 0.55rem;
text-align: left;
vertical-align: top;
overflow-wrap: anywhere;
}
.hermes-relay-plugin th {
color: var(--hr-muted);
font-size: 0.75rem;
font-weight: 600;
}
.hermes-relay-plugin tr {
border-bottom: 1px solid var(--hr-border);
}
.hermes-relay-plugin th:last-child,
.hermes-relay-plugin td:last-child {
width: 11rem;
}
.hermes-relay-plugin td:last-child .flex {
flex-wrap: wrap;
}
.hermes-relay-plugin .hr-switch {
position: relative;
display: inline-flex;
width: 2.25rem;
min-width: 2.25rem;
height: 1.25rem;
min-height: 1.25rem;
flex: 0 0 auto;
align-items: center;
padding: 0;
border: 1px solid var(--hr-border);
border-radius: 0;
background: var(--hr-bg);
transition: border-color 150ms ease, background 150ms ease;
}
.hermes-relay-plugin .hr-switch.checked {
border-color: color-mix(in srgb, var(--hr-success) 48%, transparent);
background: color-mix(in srgb, var(--hr-success) 18%, transparent);
}
.hermes-relay-plugin .hr-switch-thumb {
display: block;
width: 0.85rem;
height: 0.85rem;
transform: translateX(0.2rem);
background: color-mix(in srgb, var(--hr-muted) 70%, transparent);
transition: transform 150ms ease, background 150ms ease;
}
.hermes-relay-plugin .hr-switch.checked .hr-switch-thumb {
transform: translateX(1rem);
background: var(--hr-success);
}
.hermes-relay-plugin .hr-switch:focus-visible {
outline: 1px solid var(--hr-ring);
outline-offset: 2px;
}
/* Hermes-Relay information architecture ---------------------------------- */
.hermes-relay-plugin .hr-plugin-toolbar {
display: flex;
align-items: flex-end;
justify-content: space-between;
gap: 1rem;
border-bottom: 1px solid var(--hr-border);
}
.hermes-relay-plugin .hr-plugin-tablist {
min-width: 0;
flex: 1 1 auto;
overflow-x: auto;
border-bottom: 0;
}
.hermes-relay-plugin .hr-live-control {
display: flex;
flex: 0 0 auto;
align-items: center;
gap: 0.5rem;
min-height: 2.25rem;
padding-bottom: 0.35rem;
color: var(--hr-muted);
font-size: 0.75rem;
}
.hermes-relay-plugin .hr-tab-content {
min-width: 0;
}
.hermes-relay-plugin .hr-service-card {
overflow: hidden;
}
.hermes-relay-plugin .hr-service-header {
display: flex;
flex-direction: row;
align-items: flex-start;
justify-content: space-between;
gap: 1rem;
}
.hermes-relay-plugin .hr-service-details {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0;
}
.hermes-relay-plugin .hr-service-details > div {
display: grid;
min-width: 9rem;
gap: 0.2rem;
padding-right: 1.5rem;
margin-right: 1.5rem;
border-right: 1px solid var(--hr-border);
}
.hermes-relay-plugin .hr-service-details span {
color: var(--hr-muted);
font-size: 0.75rem;
}
.hermes-relay-plugin .hr-service-details strong {
font-family: var(--theme-font-mono, ui-monospace, monospace);
font-size: 0.875rem;
font-weight: 500;
}
.hermes-relay-plugin .hr-inline-error {
padding: 0 1rem 1rem;
}
.hermes-relay-plugin .hr-overview-grid,
.hermes-relay-plugin .hr-connection-choice-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 1rem;
}
.hermes-relay-plugin .hr-overview-device {
display: grid;
gap: 0.5rem;
padding-top: 0.75rem;
border-top: 1px solid var(--hr-border);
}
.hermes-relay-plugin .hr-device-list {
display: grid;
gap: 0.75rem;
}
.hermes-relay-plugin .hr-device-card {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
padding: 0.9rem;
border: 1px solid var(--hr-border);
background: color-mix(in srgb, var(--hr-surface-muted) 55%, transparent);
}
.hermes-relay-plugin .hr-device-card-compact {
padding: 0.75rem;
}
.hermes-relay-plugin .hr-device-main {
display: grid;
min-width: 0;
gap: 0.45rem;
}
.hermes-relay-plugin .hr-device-title-row,
.hermes-relay-plugin .hr-device-meta,
.hermes-relay-plugin .hr-grant-list,
.hermes-relay-plugin .hr-device-actions {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.45rem;
}
.hermes-relay-plugin .hr-device-meta > span + span::before {
content: "·";
margin-right: 0.45rem;
color: var(--hr-border);
}
.hermes-relay-plugin .hr-device-actions {
flex: 0 0 auto;
justify-content: flex-end;
}
.hermes-relay-plugin .hr-status-dot {
width: 0.55rem;
height: 0.55rem;
flex: 0 0 auto;
border-radius: 999px;
}
.hermes-relay-plugin .hr-status-dot-success {
background: var(--hr-success);
box-shadow: 0 0 0 3px color-mix(in srgb, var(--hr-success) 14%, transparent);
}
.hermes-relay-plugin .hr-empty-state {
display: grid;
place-items: center;
gap: 0.35rem;
min-height: 9rem;
padding: 1.5rem;
text-align: center;
border: 1px dashed var(--hr-border);
}
.hermes-relay-plugin .hr-activity-list {
display: grid;
}
.hermes-relay-plugin .hr-activity-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
padding: 0.75rem 0;
border-bottom: 1px solid var(--hr-border);
}
.hermes-relay-plugin .hr-activity-row:first-child {
padding-top: 0;
}
.hermes-relay-plugin .hr-activity-row:last-child {
padding-bottom: 0;
border-bottom: 0;
}
.hermes-relay-plugin .hr-activity-method {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.hermes-relay-plugin .hr-activity-tablist {
width: fit-content;
}
/* Settings follows the upstream Config page's rail + content pattern. */
.hermes-relay-plugin .hr-settings-layout {
display: grid;
grid-template-columns: 14rem minmax(0, 1fr);
gap: 1rem;
align-items: start;
}
.hermes-relay-plugin .hr-settings-nav {
display: grid;
gap: 1px;
padding: 0.5rem;
border: 1px solid var(--hr-border);
background: color-mix(in srgb, var(--hr-surface-muted) 55%, transparent);
}
.hermes-relay-plugin .hr-settings-nav-label {
padding: 0.4rem 0.55rem 0.6rem;
color: var(--hr-muted);
font-family: var(--theme-font-display, var(--theme-font-sans));
font-size: 0.75rem;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.hermes-relay-plugin .hr-settings-nav-item {
width: 100%;
justify-content: flex-start;
padding: 0.55rem 0.65rem;
border: 0;
border-radius: 0;
background: transparent;
color: var(--hr-muted);
font-family: var(--theme-font-sans);
font-size: 0.8rem;
text-align: left;
}
.hermes-relay-plugin .hr-settings-nav-item:hover,
.hermes-relay-plugin .hr-settings-nav-item.active {
background: var(--hr-surface-muted);
color: var(--hr-text);
}
.hermes-relay-plugin .hr-settings-nav-item.active {
box-shadow: inset 2px 0 0 var(--hr-text);
}
.hermes-relay-plugin .hr-settings-content {
min-width: 0;
}
.hermes-relay-plugin .hr-audit-details {
border: 1px solid var(--hr-border);
}
.hermes-relay-plugin .hr-audit-details > summary {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
padding: 0.75rem;
cursor: pointer;
list-style: none;
}
.hermes-relay-plugin .hr-audit-details > summary::-webkit-details-marker {
display: none;
}
.hermes-relay-plugin .hr-audit-blocks,
.hermes-relay-plugin .hr-audit-empty {
padding: 0 0.75rem 0.75rem;
}
/* Pairing uses the host Dialog primitive; these rules only compose its body. */
.hermes-relay-plugin.hr-pair-dialog {
width: min(72rem, calc(100vw - 2rem));
max-width: 72rem;
max-height: min(90vh, 52rem);
overflow-x: hidden;
overflow-y: auto;
}
.hermes-relay-plugin.hr-pair-dialog [data-slot="dialog-header"] {
padding-right: 3rem;
}
.hermes-relay-plugin .hr-pair-body {
display: grid;
grid-template-columns: minmax(34rem, 1.05fr) minmax(22rem, 0.95fr);
gap: 1rem;
padding: 1rem;
}
.hermes-relay-plugin .hr-pair-qr-column,
.hermes-relay-plugin .hr-pair-options-column {
display: grid;
align-content: start;
gap: 0.75rem;
min-width: 0;
}
.hermes-relay-plugin .hr-pair-loading {
display: grid;
min-height: 20rem;
place-items: center;
border: 1px dashed var(--hr-border);
}
.hermes-relay-plugin .hr-pair-code-row,
.hermes-relay-plugin .hr-pair-connection-header,
.hermes-relay-plugin .hr-endpoint-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.75rem;
}
.hermes-relay-plugin .hr-pair-panel,
.hermes-relay-plugin .hr-pair-advanced {
display: grid;
gap: 0.75rem;
padding: 0.85rem;
border: 1px solid var(--hr-border);
background: color-mix(in srgb, var(--hr-surface-muted) 50%, transparent);
}
.hermes-relay-plugin .hr-pair-panel-title,
.hermes-relay-plugin .hr-pair-advanced > summary {
font-family: var(--theme-font-display, var(--theme-font-sans));
font-size: 0.8rem;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.hermes-relay-plugin .hr-endpoint-list {
display: grid;
border-top: 1px solid var(--hr-border);
}
.hermes-relay-plugin .hr-endpoint-route {
display: grid;
gap: 0.35rem;
padding: 0.65rem 0;
border-bottom: 1px solid var(--hr-border);
}
.hermes-relay-plugin .hr-endpoint-route:last-child {
padding-bottom: 0;
border-bottom: 0;
}
.hermes-relay-plugin .hr-endpoint-route > .hr-endpoint-row {
padding: 0;
border-bottom: 0;
}
.hermes-relay-plugin .hr-endpoint-row {
padding: 0.65rem 0;
border-bottom: 1px solid var(--hr-border);
}
.hermes-relay-plugin .hr-endpoint-row:last-child {
padding-bottom: 0;
border-bottom: 0;
}
.hermes-relay-plugin .hr-endpoint-surfaces {
display: grid;
gap: 0.35rem;
}
.hermes-relay-plugin .hr-endpoint-surface {
display: grid;
grid-template-columns: minmax(5.5rem, auto) minmax(0, 1fr) auto;
align-items: center;
gap: 0.5rem;
}
.hermes-relay-plugin .hr-endpoint-address {
min-width: 0;
flex: 1 1 auto;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.hermes-relay-plugin .hr-pair-advanced {
padding: 0;
}
.hermes-relay-plugin .hr-pair-advanced > summary {
padding: 0.85rem;
cursor: pointer;
list-style: none;
}
.hermes-relay-plugin .hr-pair-advanced > summary::-webkit-details-marker {
display: none;
}
.hermes-relay-plugin .hr-pair-advanced-content {
padding: 0 0.85rem 0.85rem;
border-top: 1px solid var(--hr-border);
}
.hermes-relay-plugin .hr-pair-checkbox {
display: flex;
align-items: center;
gap: 0.5rem;
min-height: 2.25rem;
}
@media (max-width: 860px) {
.hermes-relay-plugin .hr-overview-grid,
.hermes-relay-plugin .hr-connection-choice-grid,
.hermes-relay-plugin .hr-settings-layout,
.hermes-relay-plugin .hr-pair-body {
grid-template-columns: 1fr;
}
.hermes-relay-plugin .hr-settings-nav {
display: flex;
overflow-x: auto;
}
.hermes-relay-plugin .hr-settings-nav-label {
display: none;
}
.hermes-relay-plugin .hr-settings-nav-item {
width: auto;
flex: 0 0 auto;
}
.hermes-relay-plugin .hr-settings-nav-item.active {
box-shadow: inset 0 -2px 0 var(--hr-text);
}
}
@media (max-width: 640px) {
.hermes-relay-plugin .hr-plugin-toolbar {
align-items: stretch;
flex-direction: column;
gap: 0.35rem;
}
.hermes-relay-plugin .hr-live-control {
align-self: flex-end;
padding-bottom: 0;
}
.hermes-relay-plugin .hr-service-header,
.hermes-relay-plugin .hr-device-card {
align-items: stretch;
flex-direction: column;
}
.hermes-relay-plugin .hr-service-details {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 0.75rem;
}
.hermes-relay-plugin .hr-service-details > div {
min-width: 0;
padding: 0;
margin: 0;
border-right: 0;
}
.hermes-relay-plugin .hr-device-actions {
justify-content: flex-start;
}
.hermes-relay-plugin.hr-pair-dialog {
width: calc(100vw - 1rem);
max-height: calc(100vh - 1rem);
}
.hermes-relay-plugin .hr-pair-body {
padding: 0.75rem;
}
.hermes-relay-plugin .hr-pair-connection-header {
align-items: stretch;
flex-direction: column;
}
.hermes-relay-plugin .hr-pair-connection-header select {
width: 100%;
}
.hermes-relay-plugin .hr-endpoint-surface {
grid-template-columns: minmax(5.5rem, auto) minmax(0, 1fr);
}
.hermes-relay-plugin .hr-endpoint-surface > :last-child {
grid-column: 2;
justify-self: start;
}
}
.hermes-relay-plugin .fixed {
position: fixed;
}
.hermes-relay-plugin .inset-0 {
inset: 0;
}
.hermes-relay-plugin .z-50 {
z-index: 50;
}
.hermes-relay-plugin .fixed.inset-0 {
display: flex;
align-items: center;
justify-content: center;
padding: 1rem;
background: var(--hr-overlay);
backdrop-filter: blur(2px);
overflow: auto;
}
.hermes-relay-plugin .fixed.inset-0 > * {
width: min(36rem, calc(100vw - 2rem));
max-height: min(90vh, 48rem);
overflow-y: auto;
box-shadow: 0 24px 80px rgba(0, 0, 0, 0.45);
}
.hermes-relay-plugin .fixed.inset-0 .bg-white {
display: flex;
justify-content: center;
width: fit-content;
max-width: 100%;
margin-left: auto;
margin-right: auto;
}
.hermes-relay-plugin.hr-modal-backdrop,
.hermes-relay-plugin .hr-modal-backdrop {
position: fixed !important;
inset: 0 !important;
z-index: 2147483000 !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
width: 100vw !important;
min-height: 100vh !important;
padding: clamp(1rem, 3vw, 2rem) !important;
background: var(--hr-overlay) !important;
backdrop-filter: blur(6px);
overflow-y: auto;
}
.hermes-relay-plugin .hr-modal-card {
width: min(38rem, calc(100vw - 2rem));
max-height: min(90vh, 54rem);
overflow-y: auto;
border: 1px solid var(--hr-border);
border-radius: var(--radius-lg, 8px);
background: var(--hr-popover) !important;
color: var(--hr-popover-text);
box-shadow: 0 28px 96px rgba(0, 0, 0, 0.68);
}
.hermes-relay-plugin .hr-modal-header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 0.75rem;
padding: 1rem 1rem 0.75rem;
border-bottom: 1px solid var(--hr-border);
}
.hermes-relay-plugin .hr-modal-title {
margin: 0;
font-size: 1.125rem;
line-height: 1.25;
font-weight: 700;
}
.hermes-relay-plugin .hr-modal-close {
flex: 0 0 auto;
}
.hermes-relay-plugin .hr-modal-body {
padding: 1rem;
}
.hermes-relay-plugin .hr-qr-frame {
display: flex;
justify-content: center;
width: fit-content;
max-width: 100%;
margin: 0 auto;
padding: 0.75rem;
border: 1px solid var(--hr-border);
border-radius: var(--radius-lg, 8px);
background: #fff !important;
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08);
}
.hermes-relay-plugin .hr-qr-frame canvas {
display: block;
width: min(280px, calc(100vw - 5rem)) !important;
height: auto !important;
max-width: 100%;
}
.hermes-relay-plugin .hr-pairing-qr {
overflow-x: auto;
}
.hermes-relay-plugin .hr-pairing-qr canvas {
width: auto !important;
height: auto !important;
max-width: none;
image-rendering: pixelated;
}
@media (max-width: 980px) {
.hermes-relay-plugin .hr-pair-body {
grid-template-columns: 1fr;
}
}
@media (max-width: 560px) {
.hermes-relay-plugin.hr-modal-backdrop,
.hermes-relay-plugin .hr-modal-backdrop {
align-items: flex-start !important;
padding: 0.75rem !important;
}
.hermes-relay-plugin .hr-modal-card {
width: 100%;
max-height: calc(100vh - 1.5rem);
}
}