dashboard.css 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743
  1. /**
  2. * Analytics dashboard blocks: overview, top lists and the Studio dashboard traffic block.
  3. * Colours are custom properties, read by the chart script too, with a dark set for html.dark.
  4. */
  5. .bx-analytics,
  6. .bx-analytics-std {
  7. --bx-analytics-accent: #4f46e5;
  8. --bx-analytics-accent-fill: rgba(79, 70, 229, 0.12);
  9. --bx-analytics-bar: rgba(79, 70, 229, 0.09);
  10. --bx-analytics-hover: rgba(15, 23, 42, 0.05);
  11. --bx-analytics-border: rgba(15, 23, 42, 0.1);
  12. --bx-analytics-grid: rgba(15, 23, 42, 0.08);
  13. --bx-analytics-muted: #57606a;
  14. --bx-analytics-good: #047857;
  15. --bx-analytics-bad: #b91c1c;
  16. --bx-analytics-warn: #b45309;
  17. --bx-analytics-online: #16a34a;
  18. --bx-analytics-c1: #4f46e5;
  19. --bx-analytics-c2: #0891b2;
  20. --bx-analytics-c3: #d97706;
  21. --bx-analytics-c4: #db2777;
  22. --bx-analytics-c5: #16a34a;
  23. --bx-analytics-c6: #7c3aed;
  24. --bx-analytics-c7: #dc2626;
  25. --bx-analytics-c8: #64748b;
  26. }
  27. html.dark .bx-analytics,
  28. html.dark .bx-analytics-std {
  29. --bx-analytics-accent: #a5b4fc;
  30. --bx-analytics-accent-fill: rgba(165, 180, 252, 0.14);
  31. --bx-analytics-bar: rgba(165, 180, 252, 0.12);
  32. --bx-analytics-hover: rgba(255, 255, 255, 0.06);
  33. --bx-analytics-border: rgba(255, 255, 255, 0.1);
  34. --bx-analytics-grid: rgba(255, 255, 255, 0.08);
  35. --bx-analytics-muted: #a8b0bb;
  36. --bx-analytics-good: #6ee7b7;
  37. --bx-analytics-bad: #fca5a5;
  38. --bx-analytics-warn: #fcd34d;
  39. --bx-analytics-online: #4ade80;
  40. --bx-analytics-c1: #a5b4fc;
  41. --bx-analytics-c2: #67e8f9;
  42. --bx-analytics-c3: #fcd34d;
  43. --bx-analytics-c4: #f9a8d4;
  44. --bx-analytics-c5: #86efac;
  45. --bx-analytics-c6: #c4b5fd;
  46. --bx-analytics-c7: #fca5a5;
  47. --bx-analytics-c8: #cbd5e1;
  48. }
  49. .bx-analytics {
  50. position: relative;
  51. transition: opacity 0.15s ease;
  52. }
  53. .bx-analytics button {
  54. font: inherit;
  55. color: inherit;
  56. background: none;
  57. border: 0;
  58. margin: 0;
  59. cursor: pointer;
  60. text-align: inherit;
  61. }
  62. .bx-analytics button:focus-visible,
  63. .bx-analytics select:focus-visible,
  64. .bx-analytics-std a:focus-visible {
  65. outline: 2px solid var(--bx-analytics-accent);
  66. outline-offset: 2px;
  67. }
  68. .bx-analytics-loading {
  69. opacity: 0.55;
  70. pointer-events: none;
  71. }
  72. .bx-analytics-failed::after {
  73. content: attr(data-bx-analytics-error);
  74. display: block;
  75. margin-top: 0.5rem;
  76. color: var(--bx-analytics-bad);
  77. font-size: 0.875rem;
  78. }
  79. .bx-analytics-sr {
  80. position: absolute;
  81. width: 1px;
  82. height: 1px;
  83. margin: -1px;
  84. padding: 0;
  85. overflow: hidden;
  86. clip: rect(0, 0, 0, 0);
  87. white-space: nowrap;
  88. border: 0;
  89. }
  90. /* toolbar */
  91. .bx-analytics-toolbar {
  92. display: flex;
  93. flex-wrap: wrap;
  94. align-items: flex-end;
  95. justify-content: space-between;
  96. gap: 0.75rem;
  97. margin-bottom: 1rem;
  98. }
  99. .bx-analytics-controls {
  100. display: flex;
  101. flex-wrap: wrap;
  102. align-items: flex-end;
  103. gap: 0.5rem 0.75rem;
  104. }
  105. .bx-analytics-control {
  106. display: flex;
  107. flex-direction: column;
  108. gap: 0.25rem;
  109. }
  110. .bx-analytics-control-label {
  111. font-size: 0.75rem;
  112. color: var(--bx-analytics-muted);
  113. }
  114. .bx-analytics-select {
  115. min-width: 10rem;
  116. }
  117. .bx-analytics-chips {
  118. display: flex;
  119. flex-wrap: wrap;
  120. gap: 0.5rem;
  121. }
  122. .bx-analytics .bx-analytics-chip {
  123. display: inline-flex;
  124. align-items: center;
  125. gap: 0.25rem;
  126. min-height: 2.25rem;
  127. padding: 0 0.75rem;
  128. border-radius: 999px;
  129. background: var(--bx-analytics-accent-fill);
  130. font-size: 0.875rem;
  131. }
  132. .bx-analytics-chip-name {
  133. color: var(--bx-analytics-muted);
  134. }
  135. .bx-analytics-chip-value {
  136. max-width: 16rem;
  137. overflow: hidden;
  138. text-overflow: ellipsis;
  139. white-space: nowrap;
  140. }
  141. .bx-analytics-chip-x {
  142. margin-left: 0.25rem;
  143. font-size: 1.125rem;
  144. line-height: 1;
  145. }
  146. /* online now */
  147. .bx-analytics-online {
  148. display: inline-flex;
  149. align-items: center;
  150. gap: 0.5rem;
  151. font-variant-numeric: tabular-nums;
  152. font-weight: 600;
  153. }
  154. .bx-analytics-online-dot {
  155. width: 0.625rem;
  156. height: 0.625rem;
  157. border-radius: 50%;
  158. background: var(--bx-analytics-online);
  159. box-shadow: 0 0 0 0 var(--bx-analytics-online);
  160. animation: bx-analytics-pulse 2s ease-out infinite;
  161. }
  162. @keyframes bx-analytics-pulse {
  163. 0% { box-shadow: 0 0 0 0 rgba(22, 163, 74, 0.45); }
  164. 70% { box-shadow: 0 0 0 0.5rem rgba(22, 163, 74, 0); }
  165. 100% { box-shadow: 0 0 0 0 rgba(22, 163, 74, 0); }
  166. }
  167. @media (prefers-reduced-motion: reduce) {
  168. .bx-analytics-online-dot {
  169. animation: none;
  170. }
  171. .bx-analytics {
  172. transition: none;
  173. }
  174. }
  175. /* key figures */
  176. .bx-analytics-kpis {
  177. display: grid;
  178. grid-template-columns: repeat(2, 1fr);
  179. border: 1px solid var(--bx-analytics-border);
  180. border-radius: 0.75rem;
  181. overflow: hidden;
  182. }
  183. .bx-analytics .bx-analytics-kpi {
  184. display: flex;
  185. flex-direction: column;
  186. gap: 0.25rem;
  187. padding: 0.75rem 1rem;
  188. box-shadow: inset -1px 0 0 var(--bx-analytics-border), inset 0 -1px 0 var(--bx-analytics-border);
  189. }
  190. .bx-analytics .bx-analytics-kpi:hover {
  191. background: var(--bx-analytics-hover);
  192. }
  193. .bx-analytics .bx-analytics-kpi[aria-pressed="true"] {
  194. background: var(--bx-analytics-accent-fill);
  195. box-shadow: inset -1px 0 0 var(--bx-analytics-border), inset 0 -3px 0 var(--bx-analytics-accent);
  196. }
  197. .bx-analytics-kpi-title {
  198. font-size: 0.8125rem;
  199. color: var(--bx-analytics-muted);
  200. }
  201. .bx-analytics-kpi-figures {
  202. display: flex;
  203. flex-wrap: wrap;
  204. align-items: baseline;
  205. justify-content: space-between;
  206. gap: 0.25rem 0.5rem;
  207. }
  208. .bx-analytics-kpi-value {
  209. font-size: 1.5rem;
  210. font-weight: 600;
  211. line-height: 1.2;
  212. font-variant-numeric: tabular-nums;
  213. }
  214. .bx-analytics-kpi-change {
  215. font-size: 0.8125rem;
  216. font-variant-numeric: tabular-nums;
  217. color: var(--bx-analytics-muted);
  218. }
  219. .bx-analytics-trend-good {
  220. color: var(--bx-analytics-good);
  221. }
  222. .bx-analytics-trend-bad {
  223. color: var(--bx-analytics-bad);
  224. }
  225. @media (min-width: 40rem) {
  226. .bx-analytics-kpis {
  227. grid-template-columns: repeat(3, 1fr);
  228. }
  229. }
  230. @media (min-width: 72rem) {
  231. .bx-analytics-kpis {
  232. grid-template-columns: repeat(6, 1fr);
  233. }
  234. }
  235. /* chart */
  236. .bx-analytics-chart {
  237. position: relative;
  238. height: 18rem;
  239. margin-top: 1rem;
  240. }
  241. /*
  242. * Tabbed top lists. On a touch screen the tabs stay in one row, and a row wider than its card scrolls sideways, like the site's main
  243. * menu bar, with the scrollbar hidden; where scroll-driven animations work, the clipped end fades out to show there is more. The
  244. * fade stops at the ends, and the script scrolls the selected or focused tab clear of it (scroll-padding sets by how much). With a
  245. * mouse, which can't swipe a row, the tabs wrap onto a second line instead.
  246. */
  247. @property --bx-analytics-tabs-fade-start {
  248. syntax: "<length>";
  249. inherits: false;
  250. initial-value: 0px;
  251. }
  252. @property --bx-analytics-tabs-fade-end {
  253. syntax: "<length>";
  254. inherits: false;
  255. initial-value: 0px;
  256. }
  257. .bx-analytics-tabs {
  258. display: flex;
  259. flex-wrap: nowrap;
  260. min-width: 0;
  261. margin-bottom: 0.75rem;
  262. overflow-x: auto;
  263. overflow-y: hidden;
  264. overscroll-behavior-x: contain;
  265. scroll-padding-inline: 2rem;
  266. scrollbar-width: none;
  267. -webkit-overflow-scrolling: touch;
  268. box-shadow: inset 0 -1px 0 var(--bx-analytics-border);
  269. }
  270. .bx-analytics-tabs::-webkit-scrollbar {
  271. display: none;
  272. }
  273. @supports (animation-timeline: scroll()) {
  274. .bx-analytics-tabs {
  275. -webkit-mask-image: linear-gradient(to right, transparent, #000 var(--bx-analytics-tabs-fade-start), #000 calc(100% - var(--bx-analytics-tabs-fade-end)), transparent);
  276. mask-image: linear-gradient(to right, transparent, #000 var(--bx-analytics-tabs-fade-start), #000 calc(100% - var(--bx-analytics-tabs-fade-end)), transparent);
  277. animation: bx-analytics-tabs-fade linear both;
  278. animation-timeline: scroll(self inline);
  279. }
  280. }
  281. @keyframes bx-analytics-tabs-fade {
  282. from {
  283. --bx-analytics-tabs-fade-start: 0px;
  284. --bx-analytics-tabs-fade-end: 2rem;
  285. }
  286. 10%, 90% {
  287. --bx-analytics-tabs-fade-start: 2rem;
  288. --bx-analytics-tabs-fade-end: 2rem;
  289. }
  290. to {
  291. --bx-analytics-tabs-fade-start: 2rem;
  292. --bx-analytics-tabs-fade-end: 0px;
  293. }
  294. }
  295. @media (hover: hover) and (pointer: fine) {
  296. .bx-analytics-tabs {
  297. flex-wrap: wrap;
  298. column-gap: 0.25rem;
  299. overflow: visible;
  300. -webkit-mask-image: none;
  301. mask-image: none;
  302. animation: none;
  303. }
  304. }
  305. .bx-analytics .bx-analytics-tab {
  306. flex: none;
  307. min-height: 2.75rem;
  308. padding: 0 0.5rem;
  309. font-size: 0.9375rem;
  310. color: var(--bx-analytics-muted);
  311. white-space: nowrap;
  312. }
  313. .bx-analytics .bx-analytics-tabs .bx-analytics-tab:focus-visible {
  314. /* inside the tab, so the scrolling row does not clip it; outranks the site's body:not(.bx-std) [tabindex="0"]:focus-visible */
  315. outline-offset: -2px;
  316. }
  317. .bx-analytics .bx-analytics-tab:hover {
  318. color: inherit;
  319. }
  320. .bx-analytics .bx-analytics-tab[aria-selected="true"] {
  321. color: inherit;
  322. font-weight: 600;
  323. box-shadow: inset 0 -2px 0 var(--bx-analytics-accent);
  324. }
  325. .bx-analytics-list-head {
  326. display: flex;
  327. justify-content: space-between;
  328. padding: 0 0.625rem 0.375rem;
  329. font-size: 0.8125rem;
  330. color: var(--bx-analytics-muted);
  331. }
  332. .bx-analytics-rows {
  333. list-style: none;
  334. margin: 0;
  335. padding: 0;
  336. display: flex;
  337. flex-direction: column;
  338. gap: 0.25rem;
  339. }
  340. .bx-analytics-row {
  341. position: relative;
  342. }
  343. .bx-analytics .bx-analytics-row-btn,
  344. .bx-analytics-std-platform {
  345. position: relative;
  346. display: flex;
  347. align-items: center;
  348. justify-content: space-between;
  349. gap: 0.75rem;
  350. width: 100%;
  351. min-height: 2.25rem;
  352. padding: 0 0.625rem;
  353. border-radius: 0.5rem;
  354. isolation: isolate;
  355. }
  356. .bx-analytics .bx-analytics-row-btn:hover {
  357. background: var(--bx-analytics-hover);
  358. }
  359. .bx-analytics-row-bar {
  360. position: absolute;
  361. top: 0;
  362. bottom: 0;
  363. left: 0;
  364. z-index: -1;
  365. border-radius: 0.5rem;
  366. background: var(--bx-analytics-bar);
  367. }
  368. .bx-analytics-row-label {
  369. min-width: 0;
  370. overflow: hidden;
  371. text-overflow: ellipsis;
  372. white-space: nowrap;
  373. font-size: 0.9375rem;
  374. }
  375. .bx-analytics-row-value {
  376. flex: none;
  377. font-variant-numeric: tabular-nums;
  378. font-weight: 600;
  379. font-size: 0.9375rem;
  380. }
  381. .bx-analytics-row-share {
  382. display: inline-block;
  383. min-width: 3.25rem;
  384. text-align: right;
  385. font-weight: 400;
  386. font-size: 0.8125rem;
  387. color: var(--bx-analytics-muted);
  388. }
  389. .bx-analytics-empty {
  390. padding: 1.5rem 0.625rem;
  391. text-align: center;
  392. color: var(--bx-analytics-muted);
  393. }
  394. /* Studio dashboard: traffic */
  395. .bx-analytics-std {
  396. display: flex;
  397. flex-direction: column;
  398. gap: 0.75rem;
  399. height: 100%;
  400. }
  401. .bx-analytics-std-online-title {
  402. font-weight: 400;
  403. color: var(--bx-analytics-muted);
  404. font-size: 0.875rem;
  405. }
  406. .bx-analytics-std-kpis {
  407. display: grid;
  408. grid-template-columns: 1fr 1fr;
  409. gap: 0.75rem;
  410. }
  411. .bx-analytics-std-kpi {
  412. display: flex;
  413. flex-direction: column;
  414. gap: 0.25rem;
  415. }
  416. .bx-analytics-std-spark {
  417. width: 100%;
  418. height: 3.5rem;
  419. }
  420. .bx-analytics-std-spark polyline {
  421. fill: none;
  422. stroke: var(--bx-analytics-accent);
  423. stroke-width: 2;
  424. stroke-linejoin: round;
  425. stroke-linecap: round;
  426. }
  427. .bx-analytics-std-platforms {
  428. list-style: none;
  429. margin: 0;
  430. padding: 0;
  431. display: flex;
  432. flex-direction: column;
  433. gap: 0.25rem;
  434. }
  435. .bx-analytics-std-link {
  436. margin-top: auto;
  437. font-size: 0.875rem;
  438. }
  439. /* Studio: a section's blocks; with the Studio block's own 8px, content sits 16px from its edge */
  440. .bx-analytics-studio {
  441. padding: 0.5rem;
  442. display: grid;
  443. /* one column when the section is narrower than a card (phones) */
  444. grid-template-columns: repeat(auto-fit, minmax(min(22rem, 100%), 1fr));
  445. gap: 1.5rem 2rem;
  446. }
  447. /* wide tables and code scroll inside their card instead of widening it past the padding */
  448. .bx-analytics-studio-card {
  449. min-width: 0;
  450. }
  451. .bx-analytics-studio-wide {
  452. grid-column: 1 / -1;
  453. }
  454. .bx-analytics-studio-title {
  455. margin: 0 0 0.5rem;
  456. font-size: 1rem;
  457. font-weight: 600;
  458. }
  459. .bx-analytics-std-kpi .bx-analytics-kpi-figures {
  460. justify-content: flex-start;
  461. }
  462. /* tables */
  463. .bx-analytics-table-wrap {
  464. overflow-x: auto;
  465. border-radius: 0.5rem;
  466. }
  467. .bx-analytics-table-wrap:focus-visible {
  468. outline: 2px solid var(--bx-analytics-accent);
  469. outline-offset: 2px;
  470. }
  471. .bx-analytics-table {
  472. width: 100%;
  473. border-collapse: separate;
  474. border-spacing: 0 0.25rem;
  475. font-variant-numeric: tabular-nums;
  476. }
  477. .bx-analytics-table th {
  478. padding: 0 0.625rem 0.25rem;
  479. font-size: 0.8125rem;
  480. font-weight: 500;
  481. color: var(--bx-analytics-muted);
  482. text-align: right;
  483. white-space: nowrap;
  484. }
  485. .bx-analytics-table td {
  486. padding: 0 0.625rem;
  487. height: 2.25rem;
  488. font-size: 0.9375rem;
  489. text-align: right;
  490. white-space: nowrap;
  491. }
  492. .bx-analytics-table th.bx-analytics-col-label,
  493. .bx-analytics-table td.bx-analytics-col-label,
  494. .bx-analytics-table th.bx-analytics-col-text,
  495. .bx-analytics-table td.bx-analytics-col-text {
  496. text-align: left;
  497. }
  498. .bx-analytics-table td.bx-analytics-col-label {
  499. width: 100%;
  500. padding: 0;
  501. }
  502. .bx-analytics-table tbody tr:hover td {
  503. background: var(--bx-analytics-hover);
  504. }
  505. .bx-analytics-table tbody td:first-child {
  506. border-radius: 0.5rem 0 0 0.5rem;
  507. }
  508. .bx-analytics-table tbody td:last-child {
  509. border-radius: 0 0.5rem 0.5rem 0;
  510. }
  511. .bx-analytics-cell-label {
  512. position: relative;
  513. display: flex;
  514. align-items: center;
  515. gap: 0.5rem;
  516. min-height: 2.25rem;
  517. padding: 0 0.625rem;
  518. isolation: isolate;
  519. }
  520. .bx-analytics .bx-analytics-cell-btn,
  521. .bx-analytics-cell-link,
  522. .bx-analytics-cell-text {
  523. min-width: 0;
  524. overflow: hidden;
  525. text-overflow: ellipsis;
  526. white-space: nowrap;
  527. }
  528. .bx-analytics .bx-analytics-cell-btn:hover,
  529. .bx-analytics-cell-link:hover {
  530. text-decoration: underline;
  531. }
  532. .bx-analytics-cell-sub {
  533. flex: none;
  534. font-size: 0.8125rem;
  535. color: var(--bx-analytics-muted);
  536. }
  537. .bx-analytics-pager {
  538. display: flex;
  539. align-items: center;
  540. justify-content: flex-end;
  541. gap: 0.75rem;
  542. margin-top: 0.75rem;
  543. font-size: 0.875rem;
  544. }
  545. .bx-analytics .bx-analytics-pager-btn {
  546. min-height: 2.25rem;
  547. padding: 0 0.875rem;
  548. border-radius: 0.5rem;
  549. box-shadow: inset 0 0 0 1px var(--bx-analytics-border);
  550. }
  551. .bx-analytics .bx-analytics-pager-btn:hover:not([disabled]) {
  552. background: var(--bx-analytics-hover);
  553. }
  554. .bx-analytics .bx-analytics-pager-btn[disabled] {
  555. opacity: 0.45;
  556. cursor: default;
  557. }
  558. .bx-analytics-pager-info {
  559. color: var(--bx-analytics-muted);
  560. }
  561. /* realtime */
  562. .bx-analytics-realtime-head {
  563. display: grid;
  564. grid-template-columns: minmax(12rem, auto) 1fr;
  565. gap: 1rem 2rem;
  566. align-items: start;
  567. }
  568. @media (max-width: 40rem) {
  569. .bx-analytics-realtime-head {
  570. grid-template-columns: 1fr;
  571. }
  572. }
  573. .bx-analytics-realtime-online {
  574. display: flex;
  575. align-items: center;
  576. flex-wrap: wrap;
  577. gap: 0.5rem 0.75rem;
  578. }
  579. .bx-analytics-realtime-count {
  580. font-size: 2.5rem;
  581. font-weight: 600;
  582. line-height: 1;
  583. font-variant-numeric: tabular-nums;
  584. }
  585. .bx-analytics-realtime-label {
  586. flex-basis: 100%;
  587. font-size: 0.875rem;
  588. color: var(--bx-analytics-muted);
  589. }
  590. .bx-analytics-realtime-platforms {
  591. min-width: 0;
  592. }
  593. .bx-analytics-minutes {
  594. display: flex;
  595. align-items: flex-end;
  596. gap: 2px;
  597. height: 4.5rem;
  598. margin-top: 1.25rem;
  599. box-shadow: inset 0 -1px 0 var(--bx-analytics-border);
  600. }
  601. .bx-analytics-minute {
  602. flex: 1 1 0;
  603. min-height: 0;
  604. border-radius: 2px 2px 0 0;
  605. background: var(--bx-analytics-accent);
  606. opacity: 0.85;
  607. }
  608. .bx-analytics-minutes-axis {
  609. display: flex;
  610. justify-content: space-between;
  611. margin-top: 0.25rem;
  612. font-size: 0.75rem;
  613. color: var(--bx-analytics-muted);
  614. }
  615. .bx-analytics-subtitle {
  616. margin: 1.25rem 0 0.5rem;
  617. font-size: 0.9375rem;
  618. font-weight: 600;
  619. }
  620. .bx-analytics-feed {
  621. list-style: none;
  622. margin: 0;
  623. padding: 0;
  624. }
  625. .bx-analytics-feed-item {
  626. display: grid;
  627. grid-template-columns: 8.5rem minmax(0, 1fr) auto;
  628. gap: 0.25rem 1rem;
  629. align-items: baseline;
  630. padding: 0.5rem 0;
  631. box-shadow: inset 0 -1px 0 var(--bx-analytics-border);
  632. font-size: 0.875rem;
  633. }
  634. @media (max-width: 40rem) {
  635. .bx-analytics-feed-item {
  636. grid-template-columns: 1fr;
  637. }
  638. }
  639. .bx-analytics-feed-time,
  640. .bx-analytics-feed-meta {
  641. color: var(--bx-analytics-muted);
  642. white-space: nowrap;
  643. }
  644. .bx-analytics-feed-page {
  645. display: flex;
  646. flex-direction: column;
  647. min-width: 0;
  648. }
  649. .bx-analytics-feed-title,
  650. .bx-analytics-feed-path {
  651. overflow: hidden;
  652. text-overflow: ellipsis;
  653. white-space: nowrap;
  654. }
  655. .bx-analytics-feed-path {
  656. font-size: 0.8125rem;
  657. color: var(--bx-analytics-muted);
  658. }
  659. /* map */
  660. .bx-analytics-map-layout {
  661. display: grid;
  662. grid-template-columns: minmax(0, 2fr) minmax(16rem, 1fr);
  663. gap: 1.5rem;
  664. }
  665. @media (max-width: 64rem) {
  666. .bx-analytics-map-layout {
  667. grid-template-columns: minmax(0, 1fr);
  668. }
  669. }
  670. .bx-analytics-map {
  671. height: 26rem;
  672. border-radius: 0.75rem;
  673. overflow: hidden;
  674. z-index: 0;
  675. background: var(--bx-analytics-hover);
  676. }
  677. html.dark .bx-analytics-map .leaflet-tile-pane {
  678. filter: invert(1) hue-rotate(180deg) brightness(0.85) contrast(0.9);
  679. }
  680. .bx-analytics-note {
  681. margin: 0.75rem 0 0;
  682. font-size: 0.8125rem;
  683. color: var(--bx-analytics-muted);
  684. }
  685. /* tiles: key figures that aren't chart switches */
  686. .bx-analytics-tiles {
  687. display: grid;
  688. grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
  689. border: 1px solid var(--bx-analytics-border);
  690. border-radius: 0.75rem;
  691. overflow: hidden;
  692. }
  693. .bx-analytics-tile {
  694. display: flex;
  695. flex-direction: column;
  696. gap: 0.25rem;
  697. padding: 0.75rem 1rem;
  698. box-shadow: inset -1px 0 0 var(--bx-analytics-border), inset 0 -1px 0 var(--bx-analytics-border);
  699. }
  700. .bx-analytics-tile-sub {
  701. font-size: 0.8125rem;
  702. color: var(--bx-analytics-muted);
  703. }
  704. .bx-analytics-chart-sm {
  705. height: 13rem;
  706. }
  707. .bx-analytics-columns {
  708. display: grid;
  709. grid-template-columns: minmax(0, 3fr) minmax(0, 2fr);
  710. gap: 1.5rem 2rem;
  711. margin-top: 1.25rem;
  712. }
  713. @media (max-width: 64rem) {
  714. .bx-analytics-columns {
  715. grid-template-columns: minmax(0, 1fr);
  716. }
  717. }
  718. .bx-analytics-columns > div > .bx-analytics-subtitle:first-child {
  719. margin-top: 0;
  720. }
  721. .bx-analytics-table .bx-analytics-cell-label {
  722. min-width: 14rem;
  723. max-width: 36rem;
  724. }
  725. /* detail views: an event, a visit, a member */
  726. .bx-analytics .bx-analytics-back {
  727. display: inline-flex;
  728. align-items: center;
  729. min-height: 2.25rem;
  730. margin-bottom: 0.75rem;
  731. padding: 0 0.75rem 0 0.5rem;
  732. border-radius: 0.5rem;
  733. font-size: 0.875rem;
  734. color: var(--bx-analytics-muted);
  735. }
  736. .bx-analytics .bx-analytics-back::before {
  737. content: '\2190';
  738. margin-right: 0.375rem;
  739. }
  740. .bx-analytics .bx-analytics-back:hover {
  741. background: var(--bx-analytics-hover);
  742. color: inherit;
  743. }
  744. .bx-analytics-detail-title {
  745. margin: 0 0 0.75rem;
  746. font-size: 1.125rem;
  747. font-weight: 600;
  748. }
  749. .bx-analytics-member {
  750. display: flex;
  751. align-items: center;
  752. gap: 0.75rem;
  753. margin-bottom: 1rem;
  754. }
  755. .bx-analytics-member-thumb {
  756. flex: none;
  757. width: 2.5rem;
  758. height: 2.5rem;
  759. border-radius: 50%;
  760. object-fit: cover;
  761. }
  762. .bx-analytics-member-guest {
  763. display: inline-flex;
  764. align-items: center;
  765. justify-content: center;
  766. background: var(--bx-analytics-hover);
  767. color: var(--bx-analytics-muted);
  768. font-weight: 600;
  769. }
  770. .bx-analytics-member-name {
  771. font-size: 1.125rem;
  772. font-weight: 600;
  773. }
  774. .bx-analytics-facts {
  775. display: grid;
  776. grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr));
  777. gap: 0.75rem 1.5rem;
  778. margin: 0 0 0.5rem;
  779. }
  780. .bx-analytics-fact dt {
  781. font-size: 0.8125rem;
  782. color: var(--bx-analytics-muted);
  783. }
  784. .bx-analytics-fact dd {
  785. margin: 0.125rem 0 0;
  786. overflow-wrap: anywhere;
  787. }
  788. .bx-analytics-timeline {
  789. list-style: none;
  790. margin: 0;
  791. padding: 0;
  792. }
  793. .bx-analytics-timeline-item {
  794. position: relative;
  795. display: grid;
  796. grid-template-columns: 3.5rem 1rem minmax(0, 1fr) auto;
  797. gap: 0.5rem;
  798. align-items: start;
  799. padding: 0.375rem 0;
  800. font-size: 0.875rem;
  801. }
  802. .bx-analytics-timeline-item::before {
  803. content: '';
  804. position: absolute;
  805. left: calc(4.5rem - 1px);
  806. top: 0;
  807. bottom: 0;
  808. width: 2px;
  809. background: var(--bx-analytics-border);
  810. }
  811. .bx-analytics-timeline-time {
  812. font-variant-numeric: tabular-nums;
  813. color: var(--bx-analytics-muted);
  814. text-align: right;
  815. }
  816. .bx-analytics-timeline-dot {
  817. position: relative;
  818. z-index: 1;
  819. width: 0.625rem;
  820. height: 0.625rem;
  821. margin: 0.3rem auto 0;
  822. border-radius: 50%;
  823. background: var(--bx-analytics-c1);
  824. }
  825. .bx-analytics-timeline-event .bx-analytics-timeline-dot {
  826. background: var(--bx-analytics-c3);
  827. }
  828. .bx-analytics-timeline-una .bx-analytics-timeline-dot {
  829. background: var(--bx-analytics-c5);
  830. }
  831. .bx-analytics-timeline-body {
  832. display: flex;
  833. flex-direction: column;
  834. min-width: 0;
  835. }
  836. .bx-analytics-timeline-kind {
  837. font-size: 0.75rem;
  838. color: var(--bx-analytics-muted);
  839. }
  840. .bx-analytics-timeline-label,
  841. .bx-analytics-timeline-path {
  842. overflow: hidden;
  843. text-overflow: ellipsis;
  844. white-space: nowrap;
  845. }
  846. .bx-analytics-timeline-path {
  847. font-size: 0.8125rem;
  848. color: var(--bx-analytics-muted);
  849. }
  850. .bx-analytics-timeline-engaged {
  851. font-size: 0.8125rem;
  852. color: var(--bx-analytics-muted);
  853. white-space: nowrap;
  854. }
  855. /* journeys */
  856. .bx-analytics-journeys {
  857. display: grid;
  858. grid-template-columns: minmax(14rem, 1fr) minmax(0, 3fr);
  859. gap: 1.5rem 2rem;
  860. margin-bottom: 1rem;
  861. }
  862. @media (max-width: 64rem) {
  863. .bx-analytics-journeys {
  864. grid-template-columns: minmax(0, 1fr);
  865. }
  866. }
  867. .bx-analytics-journey-start .bx-analytics-subtitle {
  868. margin-top: 0;
  869. }
  870. .bx-analytics .bx-analytics-row-btn-active {
  871. background: var(--bx-analytics-accent-fill);
  872. font-weight: 600;
  873. }
  874. .bx-analytics-flow {
  875. display: grid;
  876. grid-template-columns: repeat(3, minmax(0, 1fr));
  877. gap: 1rem;
  878. align-items: start;
  879. }
  880. @media (max-width: 40rem) {
  881. .bx-analytics-flow {
  882. grid-template-columns: minmax(0, 1fr);
  883. }
  884. }
  885. .bx-analytics-flow-step {
  886. display: flex;
  887. flex-direction: column;
  888. gap: 0.375rem;
  889. min-width: 0;
  890. }
  891. .bx-analytics-flow-head {
  892. font-size: 0.8125rem;
  893. color: var(--bx-analytics-muted);
  894. }
  895. .bx-analytics .bx-analytics-flow-node,
  896. .bx-analytics-flow-node {
  897. position: relative;
  898. display: flex;
  899. align-items: center;
  900. justify-content: space-between;
  901. gap: 0.5rem;
  902. min-height: 2.5rem;
  903. padding: 0 0.625rem;
  904. border-radius: 0.5rem;
  905. box-shadow: inset 0 0 0 1px var(--bx-analytics-border);
  906. font-size: 0.875rem;
  907. isolation: isolate;
  908. overflow: hidden;
  909. }
  910. .bx-analytics .bx-analytics-flow-node:not([disabled]):hover {
  911. background: var(--bx-analytics-hover);
  912. }
  913. .bx-analytics .bx-analytics-flow-node[disabled] {
  914. cursor: default;
  915. }
  916. .bx-analytics-flow-node-main {
  917. background: var(--bx-analytics-accent-fill);
  918. box-shadow: inset 0 0 0 1px var(--bx-analytics-accent);
  919. font-weight: 600;
  920. }
  921. .bx-analytics .bx-analytics-flow-node-active {
  922. box-shadow: inset 0 0 0 2px var(--bx-analytics-accent);
  923. font-weight: 600;
  924. }
  925. .bx-analytics-flow-exit {
  926. color: var(--bx-analytics-muted);
  927. font-style: italic;
  928. }
  929. .bx-analytics-flow-page {
  930. min-width: 0;
  931. overflow: hidden;
  932. text-overflow: ellipsis;
  933. white-space: nowrap;
  934. }
  935. .bx-analytics-flow-count {
  936. flex: none;
  937. font-variant-numeric: tabular-nums;
  938. color: var(--bx-analytics-muted);
  939. }
  940. /* retention cohorts: each cell tinted by its share */
  941. .bx-analytics-cohorts th[scope="row"] {
  942. font-weight: 500;
  943. white-space: nowrap;
  944. }
  945. .bx-analytics-cohorts td.bx-analytics-cohort-cell {
  946. min-width: 3.5rem;
  947. text-align: center;
  948. background: color-mix(in srgb, var(--bx-analytics-accent) calc(var(--bx-analytics-heat, 0) * 85%), transparent);
  949. }
  950. .bx-analytics-cohorts tbody tr:hover td.bx-analytics-cohort-cell {
  951. background: color-mix(in srgb, var(--bx-analytics-accent) calc(var(--bx-analytics-heat, 0) * 85%), transparent);
  952. }
  953. .bx-analytics-cohorts td.bx-analytics-cohort-strong {
  954. color: #fff;
  955. }
  956. html.dark .bx-analytics-cohorts td.bx-analytics-cohort-strong {
  957. color: #111827;
  958. }
  959. /* goals: one card per goal with its conversion rate */
  960. .bx-analytics-cards {
  961. display: grid;
  962. grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));
  963. gap: 0.75rem;
  964. list-style: none;
  965. margin: 0 0 1rem;
  966. padding: 0;
  967. }
  968. .bx-analytics-card {
  969. display: flex;
  970. flex-direction: column;
  971. gap: 0.375rem;
  972. min-width: 0;
  973. padding: 1rem;
  974. border: 1px solid var(--bx-analytics-border);
  975. border-radius: 0.75rem;
  976. }
  977. .bx-analytics-card-head {
  978. display: flex;
  979. align-items: flex-start;
  980. justify-content: space-between;
  981. gap: 0.5rem;
  982. }
  983. .bx-analytics-card-title {
  984. min-width: 0;
  985. font-weight: 600;
  986. overflow-wrap: anywhere;
  987. }
  988. .bx-analytics-card-sub {
  989. font-size: 0.8125rem;
  990. color: var(--bx-analytics-muted);
  991. overflow-wrap: anywhere;
  992. }
  993. .bx-analytics-card-figures {
  994. display: flex;
  995. align-items: baseline;
  996. gap: 0.5rem;
  997. margin-top: 0.25rem;
  998. }
  999. .bx-analytics-card-actions {
  1000. display: flex;
  1001. flex-wrap: wrap;
  1002. align-items: center;
  1003. gap: 0.25rem 0.75rem;
  1004. margin-top: auto;
  1005. padding-top: 0.25rem;
  1006. }
  1007. .bx-analytics-badge {
  1008. flex: none;
  1009. padding: 0.125rem 0.5rem;
  1010. border-radius: 999px;
  1011. background: var(--bx-analytics-hover);
  1012. font-size: 0.75rem;
  1013. color: var(--bx-analytics-muted);
  1014. white-space: nowrap;
  1015. }
  1016. .bx-analytics-meter {
  1017. height: 0.375rem;
  1018. border-radius: 999px;
  1019. background: var(--bx-analytics-bar);
  1020. overflow: hidden;
  1021. }
  1022. .bx-analytics-meter > span {
  1023. display: block;
  1024. height: 100%;
  1025. border-radius: inherit;
  1026. background: var(--bx-analytics-accent);
  1027. }
  1028. .bx-analytics .bx-analytics-link-btn {
  1029. min-height: 2.25rem;
  1030. padding: 0 0.25rem;
  1031. color: var(--bx-analytics-accent);
  1032. font-size: 0.875rem;
  1033. text-decoration: underline;
  1034. text-underline-offset: 2px;
  1035. }
  1036. .bx-analytics .bx-analytics-danger {
  1037. color: var(--bx-analytics-bad);
  1038. }
  1039. .bx-analytics .bx-analytics-add-btn {
  1040. display: inline-flex;
  1041. align-items: center;
  1042. min-height: 2.25rem;
  1043. padding: 0 0.875rem;
  1044. border: 1px dashed var(--bx-analytics-accent);
  1045. border-radius: 0.5rem;
  1046. color: var(--bx-analytics-accent);
  1047. font-size: 0.875rem;
  1048. font-weight: 500;
  1049. }
  1050. .bx-analytics .bx-analytics-add-btn:hover,
  1051. .bx-analytics .bx-analytics-link-btn:hover {
  1052. background: var(--bx-analytics-hover);
  1053. }
  1054. /* funnels: steps as bars of the first step's visits, with the drop between them */
  1055. .bx-analytics-funnel-bar {
  1056. display: flex;
  1057. flex-wrap: wrap;
  1058. align-items: center;
  1059. justify-content: space-between;
  1060. gap: 0.75rem;
  1061. margin-bottom: 1rem;
  1062. }
  1063. .bx-analytics .bx-analytics-chip-active {
  1064. box-shadow: inset 0 0 0 2px var(--bx-analytics-accent);
  1065. font-weight: 600;
  1066. }
  1067. .bx-analytics-funnel {
  1068. display: flex;
  1069. flex-direction: column;
  1070. gap: 0.25rem;
  1071. list-style: none;
  1072. margin: 0;
  1073. padding: 0;
  1074. }
  1075. .bx-analytics-funnel-step {
  1076. display: flex;
  1077. flex-direction: column;
  1078. gap: 0.375rem;
  1079. }
  1080. .bx-analytics-funnel-label {
  1081. display: flex;
  1082. align-items: center;
  1083. gap: 0.5rem;
  1084. min-width: 0;
  1085. }
  1086. .bx-analytics-funnel-number {
  1087. display: inline-flex;
  1088. flex: none;
  1089. align-items: center;
  1090. justify-content: center;
  1091. width: 1.5rem;
  1092. height: 1.5rem;
  1093. border-radius: 999px;
  1094. background: var(--bx-analytics-accent-fill);
  1095. color: var(--bx-analytics-accent);
  1096. font-size: 0.75rem;
  1097. font-weight: 600;
  1098. }
  1099. .bx-analytics-funnel-pattern {
  1100. min-width: 0;
  1101. overflow: hidden;
  1102. text-overflow: ellipsis;
  1103. white-space: nowrap;
  1104. font-weight: 500;
  1105. }
  1106. .bx-analytics-funnel-bar-track {
  1107. position: relative;
  1108. display: flex;
  1109. align-items: center;
  1110. min-height: 2.25rem;
  1111. border-radius: 0.5rem;
  1112. background: var(--bx-analytics-hover);
  1113. overflow: hidden;
  1114. }
  1115. .bx-analytics-funnel-fill {
  1116. position: absolute;
  1117. inset: 0 auto 0 0;
  1118. background: color-mix(in srgb, var(--bx-analytics-accent) 32%, transparent);
  1119. }
  1120. .bx-analytics-funnel-figures {
  1121. position: relative;
  1122. padding: 0 0.75rem;
  1123. font-size: 0.875rem;
  1124. font-variant-numeric: tabular-nums;
  1125. }
  1126. .bx-analytics-funnel-drop {
  1127. align-self: flex-start;
  1128. margin: 0 0 0.5rem 2rem;
  1129. font-size: 0.8125rem;
  1130. color: var(--bx-analytics-bad);
  1131. }
  1132. /* goal and funnel forms */
  1133. .bx-analytics-form {
  1134. display: flex;
  1135. flex-wrap: wrap;
  1136. align-items: flex-start;
  1137. gap: 0.75rem 1rem;
  1138. margin-top: 0.5rem;
  1139. padding: 1rem;
  1140. border: 1px solid var(--bx-analytics-border);
  1141. border-radius: 0.75rem;
  1142. }
  1143. .bx-analytics-form .bx-analytics-subtitle {
  1144. flex: 1 0 100%;
  1145. margin: 0;
  1146. }
  1147. .bx-analytics-field {
  1148. display: flex;
  1149. flex-direction: column;
  1150. gap: 0.25rem;
  1151. min-width: 0;
  1152. }
  1153. .bx-analytics-field-wide {
  1154. flex: 1 0 100%;
  1155. }
  1156. .bx-analytics-field-grow {
  1157. flex: 1 1 12rem;
  1158. }
  1159. .bx-analytics-field-row {
  1160. display: flex;
  1161. flex: 1 0 100%;
  1162. align-items: center;
  1163. gap: 0.5rem;
  1164. }
  1165. .bx-analytics-field-row .bx-analytics-funnel-number {
  1166. margin-right: 0.25rem;
  1167. }
  1168. .bx-analytics-hint {
  1169. flex: 1 0 100%;
  1170. font-size: 0.8125rem;
  1171. color: var(--bx-analytics-muted);
  1172. }
  1173. .bx-analytics-form-error {
  1174. flex: 1 0 100%;
  1175. margin: 0;
  1176. font-size: 0.875rem;
  1177. color: var(--bx-analytics-bad);
  1178. }
  1179. .bx-analytics-form-actions {
  1180. display: flex;
  1181. flex: 1 0 100%;
  1182. gap: 0.5rem;
  1183. }
  1184. /* revenue: splits, notes under a report, the import of past payments */
  1185. .bx-analytics-revenue-split {
  1186. margin-top: 1.25rem;
  1187. }
  1188. .bx-analytics-notes {
  1189. margin-top: 1rem;
  1190. }
  1191. .bx-analytics-notes .bx-analytics-note {
  1192. margin: 0.25rem 0 0;
  1193. }
  1194. .bx-analytics-import {
  1195. display: flex;
  1196. flex-wrap: wrap;
  1197. align-items: center;
  1198. justify-content: space-between;
  1199. gap: 0.75rem 1.5rem;
  1200. margin-top: 1.25rem;
  1201. padding: 1rem;
  1202. border: 1px solid var(--bx-analytics-border);
  1203. border-radius: 0.75rem;
  1204. }
  1205. .bx-analytics-import-text {
  1206. flex: 1 1 20rem;
  1207. min-width: 0;
  1208. }
  1209. .bx-analytics-import .bx-analytics-subtitle {
  1210. margin-top: 0;
  1211. }
  1212. .bx-analytics-import-status {
  1213. margin: 0 0 0.25rem;
  1214. }
  1215. .bx-analytics .bx-analytics-import-btn {
  1216. display: inline-flex;
  1217. align-items: center;
  1218. min-height: 2.75rem;
  1219. padding: 0 1rem;
  1220. border: 1px solid var(--bx-analytics-accent);
  1221. border-radius: 0.5rem;
  1222. color: var(--bx-analytics-accent);
  1223. font-size: 0.875rem;
  1224. font-weight: 500;
  1225. }
  1226. .bx-analytics .bx-analytics-import-btn:hover {
  1227. background: var(--bx-analytics-hover);
  1228. }
  1229. .bx-analytics .bx-analytics-import-btn:disabled {
  1230. opacity: 0.6;
  1231. cursor: progress;
  1232. }
  1233. /* health: errors with a trend line per row, an error's stack, vitals cards */
  1234. .bx-analytics-spark {
  1235. display: block;
  1236. width: 6rem;
  1237. height: 1.5rem;
  1238. color: var(--bx-analytics-bad);
  1239. }
  1240. .bx-analytics-col-spark {
  1241. width: 6.5rem;
  1242. }
  1243. .bx-analytics-error-title {
  1244. overflow-wrap: anywhere;
  1245. }
  1246. .bx-analytics-error-actions {
  1247. display: flex;
  1248. flex-wrap: wrap;
  1249. gap: 0.5rem;
  1250. margin: 0 0 1rem;
  1251. }
  1252. .bx-analytics .bx-analytics-action-btn {
  1253. display: inline-flex;
  1254. align-items: center;
  1255. min-height: 2.75rem;
  1256. padding: 0 1rem;
  1257. border: 1px solid var(--bx-analytics-accent);
  1258. border-radius: 0.5rem;
  1259. color: var(--bx-analytics-accent);
  1260. font-size: 0.875rem;
  1261. font-weight: 500;
  1262. }
  1263. .bx-analytics .bx-analytics-action-btn:hover {
  1264. background: var(--bx-analytics-hover);
  1265. }
  1266. .bx-analytics .bx-analytics-action-btn:disabled {
  1267. opacity: 0.6;
  1268. cursor: progress;
  1269. }
  1270. .bx-analytics-stack {
  1271. max-height: 24rem;
  1272. margin: 0 0 1rem;
  1273. padding: 0.75rem 1rem;
  1274. overflow: auto;
  1275. border: 1px solid var(--bx-analytics-border);
  1276. border-radius: 0.5rem;
  1277. background: var(--bx-analytics-hover);
  1278. font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  1279. font-size: 0.8125rem;
  1280. line-height: 1.5;
  1281. white-space: pre;
  1282. }
  1283. .bx-analytics-stack:focus-visible {
  1284. outline: 2px solid var(--bx-analytics-accent);
  1285. outline-offset: 2px;
  1286. }
  1287. .bx-analytics-error-breakdowns {
  1288. display: grid;
  1289. grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr));
  1290. gap: 0 2rem;
  1291. }
  1292. .bx-analytics-error-breakdowns .bx-analytics-table .bx-analytics-cell-label {
  1293. min-width: 8rem;
  1294. }
  1295. .bx-analytics-rating {
  1296. font-weight: 500;
  1297. white-space: nowrap;
  1298. }
  1299. .bx-analytics-rating-good {
  1300. color: var(--bx-analytics-good);
  1301. }
  1302. .bx-analytics-rating-needs-improvement {
  1303. color: var(--bx-analytics-warn);
  1304. }
  1305. .bx-analytics-rating-poor {
  1306. color: var(--bx-analytics-bad);
  1307. }
  1308. .bx-analytics-performance .bx-analytics-controls {
  1309. margin-bottom: 1rem;
  1310. }
  1311. .bx-analytics-vitals {
  1312. display: grid;
  1313. grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr));
  1314. gap: 0.75rem;
  1315. list-style: none;
  1316. margin: 0 0 1.25rem;
  1317. padding: 0;
  1318. }
  1319. .bx-analytics .bx-analytics-vital {
  1320. display: flex;
  1321. flex-direction: column;
  1322. gap: 0.25rem;
  1323. width: 100%;
  1324. height: 100%;
  1325. padding: 0.875rem 1rem;
  1326. border: 1px solid var(--bx-analytics-border);
  1327. border-radius: 0.75rem;
  1328. }
  1329. .bx-analytics .bx-analytics-vital:hover {
  1330. background: var(--bx-analytics-hover);
  1331. }
  1332. .bx-analytics .bx-analytics-vital[aria-pressed="true"] {
  1333. border-color: var(--bx-analytics-accent);
  1334. box-shadow: inset 0 0 0 1px var(--bx-analytics-accent);
  1335. }
  1336. .bx-analytics-vital-title {
  1337. font-size: 0.8125rem;
  1338. color: var(--bx-analytics-muted);
  1339. }
  1340. .bx-analytics-vital-value {
  1341. font-size: 1.5rem;
  1342. font-weight: 600;
  1343. font-variant-numeric: tabular-nums;
  1344. }
  1345. .bx-analytics-vital-is-none .bx-analytics-vital-value {
  1346. font-size: 1rem;
  1347. font-weight: 500;
  1348. color: var(--bx-analytics-muted);
  1349. }
  1350. .bx-analytics-vital-rating {
  1351. font-size: 0.8125rem;
  1352. font-weight: 500;
  1353. }
  1354. .bx-analytics-vital-is-good .bx-analytics-vital-rating {
  1355. color: var(--bx-analytics-good);
  1356. }
  1357. .bx-analytics-vital-is-needs-improvement .bx-analytics-vital-rating {
  1358. color: var(--bx-analytics-warn);
  1359. }
  1360. .bx-analytics-vital-is-poor .bx-analytics-vital-rating {
  1361. color: var(--bx-analytics-bad);
  1362. }
  1363. .bx-analytics-vital-dist {
  1364. display: flex;
  1365. height: 0.375rem;
  1366. margin: 0.25rem 0;
  1367. overflow: hidden;
  1368. border-radius: 999px;
  1369. background: var(--bx-analytics-border);
  1370. }
  1371. .bx-analytics-vital-dist > span {
  1372. display: block;
  1373. height: 100%;
  1374. }
  1375. .bx-analytics-vital-dist .bx-analytics-vital-good {
  1376. background: var(--bx-analytics-good);
  1377. }
  1378. .bx-analytics-vital-dist .bx-analytics-vital-ni {
  1379. background: var(--bx-analytics-warn);
  1380. }
  1381. .bx-analytics-vital-dist .bx-analytics-vital-poor {
  1382. background: var(--bx-analytics-bad);
  1383. }
  1384. .bx-analytics-vital-sub {
  1385. font-size: 0.75rem;
  1386. color: var(--bx-analytics-muted);
  1387. }
  1388. /* query: what to break down and sort by, and the CSV download */
  1389. .bx-analytics-query .bx-analytics-download {
  1390. display: inline-flex;
  1391. align-items: center;
  1392. gap: 0.375rem;
  1393. min-height: 2.25rem;
  1394. margin-left: auto;
  1395. padding: 0 0.875rem;
  1396. border: 1px solid var(--bx-analytics-border);
  1397. border-radius: 0.5rem;
  1398. color: var(--bx-analytics-accent);
  1399. font-size: 0.875rem;
  1400. font-weight: 500;
  1401. text-decoration: none;
  1402. }
  1403. .bx-analytics-query .bx-analytics-download::before {
  1404. content: '\2193';
  1405. content: '\2193' / '';
  1406. }
  1407. .bx-analytics-query .bx-analytics-download:hover {
  1408. background: var(--bx-analytics-hover);
  1409. }
  1410. .bx-analytics-query .bx-analytics-download:focus-visible {
  1411. outline: 2px solid var(--bx-analytics-accent);
  1412. outline-offset: 2px;
  1413. }
  1414. .bx-analytics-query .bx-analytics-chart {
  1415. margin-bottom: 1rem;
  1416. }
  1417. /* Studio tools: API playground, dashboards, setup */
  1418. .bx-analytics-tool {
  1419. --bx-analytics-on-accent: #ffffff;
  1420. min-width: 0;
  1421. }
  1422. html.dark .bx-analytics-tool {
  1423. --bx-analytics-on-accent: #111827;
  1424. }
  1425. .bx-analytics-tool p {
  1426. margin: 0 0 0.75rem;
  1427. }
  1428. .bx-analytics-tool-intro {
  1429. max-width: 48rem;
  1430. color: var(--bx-analytics-muted);
  1431. }
  1432. .bx-analytics-subtitle-first {
  1433. margin-top: 0;
  1434. }
  1435. .bx-analytics .bx-analytics-tool-link {
  1436. color: var(--bx-analytics-accent);
  1437. text-decoration: underline;
  1438. text-underline-offset: 2px;
  1439. }
  1440. .bx-analytics .bx-analytics-tool-link:focus-visible {
  1441. outline: 2px solid var(--bx-analytics-accent);
  1442. outline-offset: 2px;
  1443. }
  1444. .bx-analytics-notices {
  1445. display: flex;
  1446. flex-direction: column;
  1447. gap: 0.5rem;
  1448. margin-bottom: 1rem;
  1449. }
  1450. .bx-analytics .bx-analytics-notice {
  1451. flex: 1 0 100%;
  1452. margin: 0;
  1453. padding: 0.625rem 0.875rem;
  1454. border: 1px solid var(--bx-analytics-border);
  1455. border-left: 3px solid var(--bx-analytics-warn);
  1456. border-radius: 0.5rem;
  1457. font-size: 0.875rem;
  1458. }
  1459. .bx-analytics .bx-analytics-tool-btn {
  1460. display: inline-flex;
  1461. align-items: center;
  1462. justify-content: center;
  1463. min-height: 2.75rem;
  1464. padding: 0 1rem;
  1465. border: 1px solid var(--bx-analytics-accent);
  1466. border-radius: 0.5rem;
  1467. color: var(--bx-analytics-accent);
  1468. font-size: 0.875rem;
  1469. font-weight: 500;
  1470. text-align: center;
  1471. }
  1472. .bx-analytics .bx-analytics-tool-btn:hover {
  1473. background: var(--bx-analytics-hover);
  1474. }
  1475. .bx-analytics .bx-analytics-tool-btn-primary,
  1476. .bx-analytics .bx-analytics-tool-btn-primary:hover {
  1477. background: var(--bx-analytics-accent);
  1478. color: var(--bx-analytics-on-accent);
  1479. }
  1480. .bx-analytics .bx-analytics-tool-btn-primary:hover {
  1481. filter: brightness(1.08);
  1482. }
  1483. .bx-analytics .bx-analytics-tool-btn:disabled {
  1484. opacity: 0.6;
  1485. cursor: progress;
  1486. }
  1487. .bx-analytics .bx-analytics-copy-btn {
  1488. flex: none;
  1489. min-height: 2.25rem;
  1490. padding: 0 0.625rem;
  1491. border-radius: 0.375rem;
  1492. color: var(--bx-analytics-accent);
  1493. font-size: 0.8125rem;
  1494. font-weight: 500;
  1495. }
  1496. .bx-analytics .bx-analytics-copy-btn:hover {
  1497. background: var(--bx-analytics-hover);
  1498. }
  1499. .bx-analytics-tool .bx-analytics-form-actions {
  1500. flex-wrap: wrap;
  1501. margin-bottom: 0.75rem;
  1502. }
  1503. /* code with a copy button */
  1504. .bx-analytics-code-block {
  1505. min-width: 0;
  1506. margin-bottom: 0.75rem;
  1507. }
  1508. .bx-analytics-code-head {
  1509. display: flex;
  1510. flex-wrap: wrap;
  1511. align-items: center;
  1512. gap: 0.25rem 0.75rem;
  1513. }
  1514. .bx-analytics-code-label {
  1515. font-size: 0.8125rem;
  1516. font-weight: 500;
  1517. color: var(--bx-analytics-muted);
  1518. }
  1519. .bx-analytics-code-head .bx-analytics-copy-btn {
  1520. margin-left: auto;
  1521. }
  1522. .bx-analytics-code {
  1523. max-height: 24rem;
  1524. margin: 0.25rem 0 0;
  1525. padding: 0.625rem 0.875rem;
  1526. overflow: auto;
  1527. border: 1px solid var(--bx-analytics-border);
  1528. border-radius: 0.5rem;
  1529. background: var(--bx-analytics-hover);
  1530. font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  1531. font-size: 0.8125rem;
  1532. line-height: 1.5;
  1533. white-space: pre;
  1534. }
  1535. .bx-analytics-code code,
  1536. .bx-analytics-tool td code,
  1537. .bx-analytics-facts code,
  1538. .bx-analytics-tags code {
  1539. font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  1540. font-size: 0.8125rem;
  1541. }
  1542. .bx-analytics-code:focus-visible {
  1543. outline: 2px solid var(--bx-analytics-accent);
  1544. outline-offset: 2px;
  1545. }
  1546. .bx-analytics-api-output {
  1547. max-height: 36rem;
  1548. }
  1549. /* tables of the tools: text columns wrap where they must */
  1550. .bx-analytics-tool-table .bx-analytics-col-wrap {
  1551. white-space: normal;
  1552. overflow-wrap: anywhere;
  1553. }
  1554. .bx-analytics-tool-table .bx-analytics-col-strong {
  1555. font-weight: 500;
  1556. }
  1557. /* API playground */
  1558. .bx-analytics-api-fields {
  1559. display: flex;
  1560. flex-wrap: wrap;
  1561. align-items: flex-start;
  1562. gap: 0.75rem 1rem;
  1563. margin-bottom: 0.75rem;
  1564. }
  1565. .bx-analytics-api-fields .bx-analytics-field-grow {
  1566. flex: 1 1 20rem;
  1567. }
  1568. .bx-analytics .bx-analytics-code-input {
  1569. width: 100%;
  1570. min-height: 6rem;
  1571. box-sizing: border-box;
  1572. font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  1573. font-size: 0.8125rem;
  1574. line-height: 1.5;
  1575. resize: vertical;
  1576. }
  1577. .bx-analytics .bx-analytics-code-input[aria-invalid="true"] {
  1578. outline: 2px solid var(--bx-analytics-bad);
  1579. outline-offset: 1px;
  1580. }
  1581. .bx-analytics-api-docs {
  1582. margin-bottom: 1rem;
  1583. }
  1584. .bx-analytics-api-docs > summary {
  1585. display: list-item;
  1586. padding: 0.5rem 0;
  1587. color: var(--bx-analytics-accent);
  1588. font-size: 0.875rem;
  1589. font-weight: 500;
  1590. cursor: pointer;
  1591. }
  1592. .bx-analytics-api-docs > summary:focus-visible {
  1593. outline: 2px solid var(--bx-analytics-accent);
  1594. outline-offset: 2px;
  1595. }
  1596. .bx-analytics-api-doc {
  1597. margin-bottom: 0.75rem;
  1598. }
  1599. .bx-analytics-api-doc[hidden] {
  1600. display: none;
  1601. }
  1602. .bx-analytics-api-calls {
  1603. display: flex;
  1604. flex-direction: column;
  1605. }
  1606. .bx-analytics-api-meta {
  1607. font-size: 0.8125rem;
  1608. color: var(--bx-analytics-muted);
  1609. font-variant-numeric: tabular-nums;
  1610. }
  1611. /* states with an icon: tracker status, checks */
  1612. .bx-analytics-icon {
  1613. flex: none;
  1614. width: 1rem;
  1615. height: 1rem;
  1616. }
  1617. .bx-analytics .bx-analytics-state {
  1618. display: inline-flex;
  1619. align-items: center;
  1620. gap: 0.375rem;
  1621. }
  1622. .bx-analytics-state-receiving,
  1623. .bx-analytics-state-yes {
  1624. color: var(--bx-analytics-good);
  1625. }
  1626. .bx-analytics-state-quiet {
  1627. color: var(--bx-analytics-warn);
  1628. }
  1629. .bx-analytics-state-nodata,
  1630. .bx-analytics-state-off,
  1631. .bx-analytics-state-note {
  1632. color: var(--bx-analytics-muted);
  1633. }
  1634. .bx-analytics-state-no {
  1635. color: var(--bx-analytics-bad);
  1636. }
  1637. .bx-analytics-checklist {
  1638. display: flex;
  1639. flex-direction: column;
  1640. gap: 0.375rem;
  1641. margin: 0 0 0.75rem;
  1642. padding: 0;
  1643. list-style: none;
  1644. }
  1645. .bx-analytics-checklist .bx-analytics-state {
  1646. align-items: flex-start;
  1647. }
  1648. .bx-analytics-checklist .bx-analytics-icon {
  1649. margin-top: 0.125rem;
  1650. }
  1651. /* setup */
  1652. .bx-analytics-setup-result:not(:empty) {
  1653. margin-bottom: 1rem;
  1654. padding: 0.875rem 1rem;
  1655. border: 1px solid var(--bx-analytics-border);
  1656. border-radius: 0.75rem;
  1657. }
  1658. .bx-analytics-setup-verdict {
  1659. font-weight: 600;
  1660. }
  1661. .bx-analytics-facts {
  1662. display: grid;
  1663. grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
  1664. gap: 0.75rem 1.5rem;
  1665. margin: 0;
  1666. }
  1667. .bx-analytics-fact {
  1668. min-width: 0;
  1669. margin: 0;
  1670. }
  1671. .bx-analytics-fact dt {
  1672. font-size: 0.75rem;
  1673. color: var(--bx-analytics-muted);
  1674. }
  1675. .bx-analytics-fact dd {
  1676. margin: 0.125rem 0 0;
  1677. overflow-wrap: anywhere;
  1678. }
  1679. .bx-analytics-setup-clients {
  1680. display: grid;
  1681. grid-template-columns: repeat(auto-fit, minmax(min(100%, 22rem), 1fr));
  1682. gap: 1rem;
  1683. }
  1684. .bx-analytics-setup-client {
  1685. min-width: 0;
  1686. padding: 1rem;
  1687. border: 1px solid var(--bx-analytics-border);
  1688. border-radius: 0.75rem;
  1689. }
  1690. .bx-analytics-setup-client-title {
  1691. margin: 0 0 0.5rem;
  1692. font-size: 0.9375rem;
  1693. font-weight: 600;
  1694. }
  1695. .bx-analytics-setup-client .bx-analytics-hint {
  1696. display: block;
  1697. margin: 0;
  1698. }
  1699. .bx-analytics-tags {
  1700. display: flex;
  1701. flex-wrap: wrap;
  1702. gap: 0.375rem;
  1703. margin: 0.25rem 0 0;
  1704. padding: 0;
  1705. list-style: none;
  1706. }
  1707. .bx-analytics-tags li {
  1708. padding: 0.125rem 0.5rem;
  1709. border-radius: 999px;
  1710. background: var(--bx-analytics-hover);
  1711. }
  1712. .bx-analytics-setup-events {
  1713. display: flex;
  1714. flex-direction: column;
  1715. }