dashboard.css 40 KB

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