| 1 | .service-page .page-head { margin-bottom: 10px; } |
| 2 | .service-page .page-head { flex-wrap: wrap; row-gap: 8px; } |
| 3 | .service-page .page-head h1 { white-space: nowrap; } |
| 4 | .stat.image { padding: 0 3px; } |
| 5 | .stat.image .copy { display: inline-flex; align-items: center; gap: 5px; height: 20px; margin: 0; padding: 0 7px 0 5px; border-radius: 99px; } |
| 6 | .stat.image .version { max-width: 12ch; overflow: hidden; text-overflow: ellipsis; font-family: var(--mono); font-size: 11px; } |
| 7 | |
| 8 | .problem { |
| 9 | display: flex; |
| 10 | flex-wrap: wrap; |
| 11 | align-items: baseline; |
| 12 | gap: 4px 10px; |
| 13 | margin-bottom: 10px; |
| 14 | padding: 6px 12px; |
| 15 | border-radius: var(--radius); |
| 16 | background: color-mix(in srgb, var(--warning) 10%, transparent); |
| 17 | font-size: 13px; |
| 18 | } |
| 19 | .problem .status-label { color: var(--text); font-weight: 600; align-self: center; } |
| 20 | .problem .output { flex: 1; min-width: 0; color: var(--text-2); } |
| 21 | .problem a { color: var(--accent); text-decoration: underline dotted; text-underline-offset: 3px; } |
| 22 | |
| 23 | .service-strips { padding-bottom: 2px; } |
| 24 | .service-strips .strip-head .now { font-size: 15px; } |
| 25 | |
| 26 | .tab-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-bottom: 8px; } |
| 27 | .tab-row .search-box { position: relative; flex: 1 1 140px; min-width: 0; max-width: 240px; margin-left: auto; } |
| 28 | .search-hints { |
| 29 | position: absolute; |
| 30 | top: calc(100% + 6px); |
| 31 | right: -2px; |
| 32 | z-index: 5; |
| 33 | display: grid; |
| 34 | min-width: 300px; |
| 35 | padding: 4px; |
| 36 | border: 1px solid var(--line); |
| 37 | border-radius: var(--radius-lg); |
| 38 | background: var(--surface); |
| 39 | box-shadow: 0 8px 28px #0005; |
| 40 | animation: menu-in 200ms var(--ease-out); |
| 41 | } |
| 42 | .search-hints[hidden] { display: none; } |
| 43 | .search-hints button { |
| 44 | display: flex; |
| 45 | justify-content: space-between; |
| 46 | gap: 16px; |
| 47 | padding: 5px 8px; |
| 48 | border: 0; |
| 49 | border-radius: calc(var(--radius) - 2px); |
| 50 | background: none; |
| 51 | color: var(--text); |
| 52 | font: 12px var(--mono); |
| 53 | text-align: left; |
| 54 | cursor: pointer; |
| 55 | } |
| 56 | .search-hints button:hover { background: var(--hover); } |
| 57 | .search-hints span { color: var(--muted); font-family: var(--sans); } |
| 58 | .liveness { flex: none; font-size: 12px; color: var(--text-2); } |
| 59 | .liveness.live .status { animation: breathe 2.4s ease-in-out infinite; } |
| 60 | @keyframes breathe { 50% { opacity: 0.35; } } |
| 61 | @media (prefers-reduced-motion: reduce) { .liveness.live .status { animation: none; } } |
| 62 | |
| 63 | .logs-tab { display: flex; flex-direction: column; } |
| 64 | .logs-tab .empty { font-family: var(--sans); } |
| 65 | .log-view .log .skeleton { margin: 4px 0; } |
| 66 | |
| 67 | .empty p { margin: 0 0 4px; } |
| 68 | .empty strong { color: var(--text-2); font-weight: 600; } |
| 69 | |
| 70 | .traces.fill { display: flex; flex-direction: column; min-height: 320px; } |
| 71 | .trace-list { flex: none; max-height: 185px; overflow: auto; border-block: 1px solid var(--line); } |
| 72 | .trace-list thead th { position: sticky; top: 0; z-index: 1; padding-block: 4px; border: 0; box-shadow: inset 0 -1px var(--line); background: var(--page); } |
| 73 | .trace-list table.data { table-layout: fixed; } |
| 74 | .trace-list table.data td { padding-block: 3px; } |
| 75 | .trace-list tr:last-child td { border-bottom: 0; } |
| 76 | .trace-list :is(th, td):first-child { padding-left: var(--gutter); width: calc(76px + var(--gutter)); white-space: nowrap; } |
| 77 | .trace-list td.when { color: var(--text-2); } |
| 78 | .trace-list .code { width: 72px; } |
| 79 | .trace-list .spans { width: 56px; color: var(--text-2); } |
| 80 | .trace-list :is(th, td):last-child { padding-right: var(--gutter); width: calc(128px + var(--gutter)); } |
| 81 | .trace-list td.code { color: var(--text-2); font: 12px var(--mono); } |
| 82 | .trace-list td.code span { display: inline-flex; align-items: center; gap: 6px; } |
| 83 | .trace-list td.code.client { color: color-mix(in srgb, var(--warning) 75%, var(--text)); } |
| 84 | .trace-list .log-edge { border-top: 1px solid var(--line); } |
| 85 | .trace-list tr { cursor: pointer; } |
| 86 | .trace-list tr:hover td { background: var(--hover); } |
| 87 | .trace-list tr.selected td { background: var(--accent-wash); } |
| 88 | .trace-list td.request button { |
| 89 | display: block; |
| 90 | width: 100%; |
| 91 | border: 0; |
| 92 | padding: 0; |
| 93 | background: none; |
| 94 | color: inherit; |
| 95 | font: 12px var(--mono); |
| 96 | text-align: left; |
| 97 | white-space: nowrap; |
| 98 | overflow: hidden; |
| 99 | text-overflow: ellipsis; |
| 100 | cursor: pointer; |
| 101 | } |
| 102 | .trace-list div.duration { display: flex; justify-content: flex-end; align-items: center; gap: 8px; } |
| 103 | .trace-list .track { flex: none; width: 56px; height: 6px; border-radius: 3px; background: var(--raised); overflow: hidden; } |
| 104 | .trace-list .track .bar { display: block; height: 100%; background: var(--series-1); } |
| 105 | .traces .row-skeleton { height: 14px; margin: 9px var(--gutter); } |
| 106 | .traces .stale-note { margin-inline: var(--gutter); } |
| 107 | .flame-skeleton { flex: 1; margin: 36px var(--gutter) 12px; } |
| 108 | |
| 109 | .flame { flex: 1; min-height: 0; display: flex; flex-direction: column; } |
| 110 | .flame-bar { flex: none; display: flex; align-items: center; gap: 12px; padding: 6px var(--gutter) 4px; font-size: 12px; } |
| 111 | .flame-path { flex: 1; min-width: 0; display: flex; align-items: center; gap: 2px; color: var(--muted); } |
| 112 | .flame-path button { |
| 113 | min-width: 0; |
| 114 | max-width: max-content; |
| 115 | flex: 0 1 auto; |
| 116 | padding: 2px 5px; |
| 117 | border: 0; |
| 118 | border-radius: 4px; |
| 119 | background: none; |
| 120 | color: var(--text-2); |
| 121 | font: inherit; |
| 122 | white-space: nowrap; |
| 123 | overflow: hidden; |
| 124 | text-overflow: ellipsis; |
| 125 | cursor: pointer; |
| 126 | } |
| 127 | .flame-path button:hover { background: var(--hover); color: var(--text); } |
| 128 | .flame-path button[aria-current] { flex-shrink: 0; max-width: 50%; color: var(--text); font-weight: 600; } |
| 129 | .flame-bar .legend { display: flex; gap: 10px; } |
| 130 | .flame-bar .legend a { display: inline-flex; align-items: center; gap: 5px; color: var(--text-2); } |
| 131 | .flame-bar .legend a::before { content: ""; width: 8px; height: 8px; border-radius: 2px; background: var(--color); } |
| 132 | .flame-bar .legend a:hover { color: var(--text); } |
| 133 | .flame-bar .hint { flex: none; color: var(--muted); } |
| 134 | .flame-bar kbd { margin-right: 3px; } |
| 135 | .flame-canvas { position: relative; flex: 1; min-height: 120px; margin-inline: var(--gutter); } |
| 136 | .flame-canvas canvas { position: absolute; inset: 0; width: 100%; height: 100%; touch-action: none; } |
| 137 | .flame-canvas canvas:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; border-radius: 2px; } |
| 138 | .flame-hover { |
| 139 | position: absolute; |
| 140 | z-index: 2; |
| 141 | max-width: 340px; |
| 142 | padding: 6px 10px; |
| 143 | translate: 14px 16px; |
| 144 | border-radius: 6px; |
| 145 | background: var(--text); |
| 146 | color: var(--page); |
| 147 | font-size: 12px; |
| 148 | line-height: 1.4; |
| 149 | pointer-events: none; |
| 150 | box-shadow: var(--shadow); |
| 151 | } |
| 152 | .flame-hover.left { translate: calc(-100% - 14px) 16px; } |
| 153 | .flame-hover.up { translate: 14px calc(-100% - 10px); } |
| 154 | .flame-hover.left.up { translate: calc(-100% - 14px) calc(-100% - 10px); } |
| 155 | .flame-hover strong { display: block; overflow-wrap: anywhere; } |
| 156 | .flame-hover dl { display: grid; grid-template-columns: max-content auto; gap: 0 10px; margin: 2px 0 0; } |
| 157 | .flame-hover dt { opacity: 0.65; } |
| 158 | .flame-hover dd { margin: 0; font-variant-numeric: tabular-nums; } |
| 159 | .flame-hover .error { margin: 2px 0 0; color: color-mix(in srgb, var(--critical) 70%, var(--page)); } |
| 160 | .span-facts { |
| 161 | flex: none; |
| 162 | display: flex; |
| 163 | flex-wrap: wrap; |
| 164 | gap: 2px 18px; |
| 165 | max-height: 72px; |
| 166 | overflow: auto; |
| 167 | margin: 0; |
| 168 | padding: 8px var(--gutter) 10px; |
| 169 | border-top: 1px solid var(--line); |
| 170 | font-size: 12px; |
| 171 | } |
| 172 | .span-facts > div { display: flex; gap: 6px; min-width: 0; } |
| 173 | .span-facts dt { color: var(--muted); } |
| 174 | .span-facts dd { margin: 0; min-width: 0; overflow-wrap: anywhere; font-variant-numeric: tabular-nums; } |
| 175 | .span-facts a { color: var(--accent); text-decoration: underline dotted; text-underline-offset: 3px; } |
| 176 | |
| 177 | .stat.restart { color: var(--text-2); } |
| 178 | .stat.restart a { display: inline-flex; align-items: center; gap: 5px; } |
| 179 | .stat.restart a:hover { color: var(--text); } |
| 180 | .stat.restart .button { margin-left: 2px; background: none; color: var(--muted); } |
| 181 | .stat.restart .button:hover { color: var(--text); } |
| 182 | |
| 183 | .definition { padding-bottom: 8px; font-size: 13px; } |
| 184 | .definition dl { margin: 0; } |
| 185 | .definition h2 { margin: 28px 0 10px; } |
| 186 | .definition h2 .muted { font-weight: 400; font-size: 12px; } |
| 187 | .definition .kv { max-width: 760px; } |
| 188 | .definition .kv a.mono, .definition .kv > dd > div > a { color: var(--accent); text-decoration: underline dotted; text-underline-offset: 3px; } |
| 189 | .definition .chips { align-items: center; } |
| 190 | .definition .chip .status-label { gap: 5px; color: inherit; } |
| 191 | .definition .chip.mono { display: inline-flex; align-items: center; gap: 4px; font: 11px/20px var(--mono); } |
| 192 | .definition .chip svg { color: var(--muted); } |
| 193 | .definition .tasks { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 440px), 1fr)); gap: 12px; align-items: start; } |
| 194 | .definition .task { display: grid; gap: 10px; } |
| 195 | .definition .task-head { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; } |
| 196 | .definition .task-head h3 { margin: 0; font-size: 13px; font-weight: 650; } |
| 197 | .definition .task-head .chip.main { background: var(--accent-wash); color: var(--accent); } |
| 198 | .definition .task .state { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; font-size: 12px; } |
| 199 | .definition .task .about { margin: -4px 0 0; color: var(--text-2); } |
| 200 | .definition .task .kv { gap: 6px 14px; } |
| 201 | .definition .task .copy { overflow-wrap: anywhere; } |
| 202 | .definition ul.plain { margin: 0; padding: 0; list-style: none; } |
| 203 | .definition table.mounts { border-collapse: collapse; } |
| 204 | .definition table.mounts td { padding: 1px 12px 1px 0; vertical-align: baseline; overflow-wrap: anywhere; } |
| 205 | .definition table.mounts td:last-child { padding-right: 0; white-space: nowrap; } |
| 206 | .definition pre.source { |
| 207 | margin: 0; |
| 208 | padding: 12px 14px; |
| 209 | border: 1px solid var(--line); |
| 210 | border-radius: var(--radius-lg); |
| 211 | background: var(--surface); |
| 212 | font: 12px/1.55 var(--mono); |
| 213 | overflow-x: auto; |
| 214 | tab-size: 2; |
| 215 | } |