global.less 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933
  1. :root {
  2. color-scheme: light;
  3. font-synthesis: none;
  4. --color-brand: #0f9fdb;
  5. --color-brand-strong: #0879b6;
  6. --color-brand-bright: #6ee7ff;
  7. --color-brand-soft: #e1f6ff;
  8. --color-ink: #081423;
  9. --color-muted: #586a7e;
  10. --color-canvas: #edf4f8;
  11. --color-surface: rgba(255, 255, 255, 0.84);
  12. --color-border: rgba(142, 169, 187, 0.28);
  13. --color-success: #168a5b;
  14. --color-warning: #b36b13;
  15. --color-danger: #d14343;
  16. --shadow-surface: 0 1px 0 rgba(255, 255, 255, 0.92) inset, 0 18px 48px rgba(24, 70, 96, 0.08);
  17. --shadow-raised: 0 1px 0 rgba(255, 255, 255, 0.94) inset, 0 28px 72px rgba(16, 88, 126, 0.16);
  18. --motion-standard: 220ms cubic-bezier(0.22, 1, 0.36, 1);
  19. --motion-spring: 420ms cubic-bezier(0.16, 1.35, 0.3, 1);
  20. --pointer-x: 72vw;
  21. --pointer-y: 18vh;
  22. }
  23. * {
  24. box-sizing: border-box;
  25. letter-spacing: 0;
  26. }
  27. html,
  28. body,
  29. #root {
  30. min-height: 100%;
  31. margin: 0;
  32. }
  33. body {
  34. min-width: 320px;
  35. overflow-x: hidden;
  36. background:
  37. linear-gradient(rgba(255, 255, 255, 0.28), rgba(255, 255, 255, 0)),
  38. var(--color-canvas);
  39. color: var(--color-ink);
  40. font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
  41. line-height: 1.5;
  42. }
  43. .lucide {
  44. stroke-width: 1.8;
  45. }
  46. .admin-experience {
  47. position: relative;
  48. min-height: 100%;
  49. isolation: isolate;
  50. }
  51. .ambient-canvas {
  52. position: fixed;
  53. z-index: -1;
  54. inset: 0;
  55. overflow: hidden;
  56. pointer-events: none;
  57. background:
  58. radial-gradient(560px circle at var(--pointer-x) var(--pointer-y), rgba(34, 179, 231, 0.18), transparent 58%),
  59. linear-gradient(115deg, rgba(255, 255, 255, 0.94), rgba(231, 243, 249, 0.82));
  60. }
  61. .ambient-canvas::before {
  62. position: absolute;
  63. inset: 0;
  64. background-image:
  65. linear-gradient(rgba(44, 91, 119, 0.045) 1px, transparent 1px),
  66. linear-gradient(90deg, rgba(44, 91, 119, 0.045) 1px, transparent 1px);
  67. background-size: 64px 64px;
  68. mask-image: linear-gradient(to bottom, black, transparent 82%);
  69. content: '';
  70. }
  71. .ambient-orbit {
  72. position: absolute;
  73. display: block;
  74. border: 1px solid rgba(15, 159, 219, 0.16);
  75. border-radius: 50%;
  76. }
  77. .ambient-orbit--one {
  78. width: 42vw;
  79. height: 42vw;
  80. top: -26vw;
  81. right: -8vw;
  82. box-shadow: 0 0 0 7vw rgba(55, 186, 231, 0.03), 0 0 0 14vw rgba(55, 186, 231, 0.025);
  83. }
  84. .ambient-orbit--two {
  85. width: 28vw;
  86. height: 28vw;
  87. bottom: -20vw;
  88. left: 14vw;
  89. border-color: rgba(22, 138, 91, 0.1);
  90. }
  91. ::selection {
  92. background: rgba(22, 143, 206, 0.2);
  93. }
  94. button,
  95. a,
  96. [role='button'] {
  97. touch-action: manipulation;
  98. }
  99. button:focus-visible,
  100. a:focus-visible,
  101. [role='button']:focus-visible {
  102. outline: 3px solid rgba(22, 143, 206, 0.28);
  103. outline-offset: 2px;
  104. }
  105. .page-content {
  106. position: relative;
  107. width: 100%;
  108. max-width: 1520px;
  109. margin: 0 auto;
  110. padding-bottom: 64px;
  111. animation: page-enter 480ms cubic-bezier(0.22, 1, 0.36, 1) both;
  112. }
  113. .page-toolbar {
  114. position: relative;
  115. display: flex;
  116. flex-wrap: wrap;
  117. align-items: flex-start;
  118. justify-content: space-between;
  119. gap: 24px;
  120. margin-bottom: 32px;
  121. padding: 12px 0 25px;
  122. border-bottom: 1px solid rgba(80, 116, 139, 0.16);
  123. }
  124. .page-toolbar::after {
  125. position: absolute;
  126. width: min(28vw, 320px);
  127. height: 2px;
  128. bottom: -1px;
  129. left: 0;
  130. background: linear-gradient(90deg, var(--color-brand), transparent);
  131. content: '';
  132. }
  133. .page-heading {
  134. min-width: 0;
  135. }
  136. .page-kicker {
  137. display: flex;
  138. align-items: center;
  139. gap: 8px;
  140. margin-bottom: 8px;
  141. color: var(--color-brand-strong);
  142. font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
  143. font-size: 10px;
  144. font-weight: 700;
  145. letter-spacing: 0.16em;
  146. }
  147. .page-kicker .lucide {
  148. animation: signal-pulse 2.4s ease-in-out infinite;
  149. }
  150. .page-title {
  151. margin: 0;
  152. color: var(--color-ink);
  153. font-family: "Avenir Next", "SF Pro Display", -apple-system, BlinkMacSystemFont, "PingFang SC", sans-serif;
  154. font-size: clamp(38px, 4vw, 64px);
  155. line-height: 0.98;
  156. font-weight: 760;
  157. letter-spacing: -0.055em;
  158. }
  159. .page-description {
  160. max-width: 680px;
  161. margin: 14px 0 0;
  162. color: var(--color-muted);
  163. font-size: 15px;
  164. line-height: 1.7;
  165. }
  166. .page-actions {
  167. display: flex;
  168. min-height: 40px;
  169. align-items: center;
  170. align-self: flex-end;
  171. }
  172. .surface {
  173. position: relative;
  174. overflow: hidden;
  175. background: var(--color-surface);
  176. border: 1px solid var(--color-border);
  177. border-radius: 22px;
  178. box-shadow: var(--shadow-surface);
  179. backdrop-filter: blur(20px) saturate(125%);
  180. transition: transform var(--motion-spring), border-color var(--motion-standard), box-shadow var(--motion-standard);
  181. }
  182. .surface::after {
  183. position: absolute;
  184. width: 180px;
  185. height: 180px;
  186. top: -130px;
  187. right: -100px;
  188. background: radial-gradient(circle, rgba(53, 190, 235, 0.12), transparent 68%);
  189. content: '';
  190. pointer-events: none;
  191. }
  192. .surface:hover {
  193. border-color: rgba(44, 164, 211, 0.34);
  194. box-shadow: var(--shadow-raised);
  195. transform: translateY(-3px);
  196. }
  197. .surface-header {
  198. display: flex;
  199. flex-wrap: wrap;
  200. align-items: center;
  201. justify-content: space-between;
  202. gap: 12px;
  203. min-height: 66px;
  204. padding: 14px 22px;
  205. border-bottom: 1px solid rgba(125, 153, 173, 0.18);
  206. }
  207. .surface-title {
  208. display: flex;
  209. align-items: center;
  210. gap: 10px;
  211. margin: 0;
  212. color: #26384a;
  213. font-size: 15px;
  214. line-height: 1.4;
  215. font-weight: 700;
  216. letter-spacing: -0.012em;
  217. }
  218. .surface-title-mark {
  219. width: 8px;
  220. height: 8px;
  221. background: var(--color-brand);
  222. border: 2px solid rgba(255, 255, 255, 0.9);
  223. border-radius: 50%;
  224. box-shadow: 0 0 0 4px rgba(15, 159, 219, 0.12);
  225. }
  226. .surface-body {
  227. padding: 22px;
  228. }
  229. .metric-grid,
  230. .metrics-grid {
  231. display: grid;
  232. grid-template-columns: repeat(4, minmax(0, 1fr));
  233. gap: 18px;
  234. margin-bottom: 22px;
  235. }
  236. .metric {
  237. --metric-accent: var(--color-brand);
  238. position: relative;
  239. display: flex;
  240. min-width: 0;
  241. min-height: 158px;
  242. align-items: flex-start;
  243. justify-content: space-between;
  244. gap: 12px;
  245. overflow: hidden;
  246. padding: 23px;
  247. background:
  248. linear-gradient(135deg, rgba(255, 255, 255, 0.96), rgba(247, 252, 255, 0.78)),
  249. var(--color-surface);
  250. border: 1px solid var(--color-border);
  251. border-radius: 22px;
  252. box-shadow: var(--shadow-surface);
  253. backdrop-filter: blur(18px) saturate(125%);
  254. transition: transform var(--motion-spring), border-color var(--motion-standard), box-shadow var(--motion-standard);
  255. }
  256. .metric::before {
  257. position: absolute;
  258. width: 150px;
  259. height: 150px;
  260. right: -74px;
  261. bottom: -86px;
  262. border: 1px solid color-mix(in srgb, var(--metric-accent) 23%, transparent);
  263. border-radius: 50%;
  264. content: '';
  265. }
  266. .metric-signal {
  267. position: absolute;
  268. width: 34px;
  269. height: 3px;
  270. top: 0;
  271. left: 23px;
  272. background: var(--metric-accent);
  273. border-radius: 0 0 4px 4px;
  274. box-shadow: 0 0 18px color-mix(in srgb, var(--metric-accent) 40%, transparent);
  275. }
  276. .metric:hover {
  277. border-color: rgba(22, 143, 206, 0.3);
  278. box-shadow: var(--shadow-raised);
  279. transform: translateY(-5px) scale(1.008);
  280. }
  281. .metric--success {
  282. --metric-accent: var(--color-success);
  283. }
  284. .metric--warning {
  285. --metric-accent: var(--color-warning);
  286. }
  287. .metric--danger {
  288. --metric-accent: var(--color-danger);
  289. }
  290. .metric--default {
  291. --metric-accent: #8190a2;
  292. }
  293. .metric-copy {
  294. min-width: 0;
  295. }
  296. .metric-label {
  297. color: var(--color-muted);
  298. font-size: 13px;
  299. font-weight: 650;
  300. letter-spacing: 0.02em;
  301. }
  302. .metric-value {
  303. margin-top: 14px;
  304. overflow-wrap: anywhere;
  305. color: var(--color-ink);
  306. font-family: "Avenir Next", "SF Pro Display", sans-serif;
  307. font-size: clamp(34px, 3.1vw, 48px);
  308. line-height: 0.95;
  309. font-weight: 760;
  310. font-variant-numeric: tabular-nums;
  311. letter-spacing: -0.055em;
  312. }
  313. .metric-hint {
  314. margin-top: 13px;
  315. color: #7a8999;
  316. font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
  317. font-size: 10px;
  318. font-weight: 650;
  319. letter-spacing: 0.12em;
  320. }
  321. .metric-icon {
  322. display: grid;
  323. width: 48px;
  324. height: 48px;
  325. flex: 0 0 48px;
  326. place-items: center;
  327. color: var(--metric-accent);
  328. background: color-mix(in srgb, var(--metric-accent) 10%, white);
  329. border: 1px solid color-mix(in srgb, var(--metric-accent) 20%, white);
  330. border-radius: 15px;
  331. transform: rotate(3deg);
  332. transition: transform var(--motion-spring), background var(--motion-standard);
  333. }
  334. .metric:hover .metric-icon {
  335. background: color-mix(in srgb, var(--metric-accent) 16%, white);
  336. transform: rotate(0deg) scale(1.08);
  337. }
  338. .split-grid {
  339. display: grid;
  340. grid-template-columns: minmax(0, 1.35fr) minmax(320px, 0.65fr);
  341. gap: 22px;
  342. margin-bottom: 22px;
  343. }
  344. .dashboard-metrics {
  345. grid-template-columns: 1.25fr 0.95fr 0.95fr 0.85fr;
  346. }
  347. .dashboard-primary-surface {
  348. min-height: 100%;
  349. }
  350. .ranking-row {
  351. display: grid;
  352. grid-template-columns: 38px minmax(0, 1fr) auto;
  353. align-items: center;
  354. gap: 10px;
  355. min-height: 54px;
  356. border-bottom: 1px solid rgba(125, 153, 173, 0.16);
  357. }
  358. .ranking-row:last-child {
  359. border-bottom: 0;
  360. }
  361. .ranking-index {
  362. display: grid;
  363. width: 28px;
  364. height: 28px;
  365. place-items: center;
  366. color: var(--color-brand-strong);
  367. background: var(--color-brand-soft);
  368. border-radius: 9px;
  369. font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
  370. font-size: 10px;
  371. font-weight: 700;
  372. }
  373. .rule-group {
  374. min-width: 0;
  375. padding: 14px 14px 0;
  376. background: #f6f9fc;
  377. border-left: 3px solid var(--color-brand);
  378. border-radius: 0 10px 10px 0;
  379. }
  380. .rule-group-title {
  381. margin: 0 0 12px;
  382. color: #263442;
  383. font-size: 15px;
  384. line-height: 1.4;
  385. font-weight: 600;
  386. }
  387. .numeric {
  388. font-variant-numeric: tabular-nums;
  389. }
  390. .danger-zone {
  391. border-color: #ffccc7;
  392. }
  393. .table-wrap {
  394. width: 100%;
  395. overflow: hidden;
  396. border-radius: 10px;
  397. }
  398. .workspace-tab-select {
  399. display: none;
  400. }
  401. .ant-table-wrapper .ant-table-cell {
  402. overflow-wrap: anywhere;
  403. }
  404. .ant-form-item-label > label {
  405. color: #33465a !important;
  406. font-weight: 600;
  407. }
  408. .ant-form-item-extra,
  409. .ant-form-item-explain {
  410. margin-top: 5px;
  411. line-height: 1.45;
  412. }
  413. .ant-btn,
  414. .ant-input,
  415. .ant-input-number,
  416. .ant-input-affix-wrapper,
  417. .ant-select-selector {
  418. transition: border-color var(--motion-standard), box-shadow var(--motion-standard), background var(--motion-standard) !important;
  419. }
  420. .ant-btn:not(.ant-btn-link):not(.ant-btn-text) {
  421. border-color: rgba(122, 153, 173, 0.34);
  422. box-shadow: 0 1px 0 rgba(255, 255, 255, 0.9) inset, 0 8px 22px rgba(27, 72, 98, 0.06);
  423. }
  424. .ant-btn:not(:disabled):active {
  425. transform: scale(0.97);
  426. }
  427. .ant-btn-primary:not(:disabled) {
  428. border-color: transparent;
  429. background: linear-gradient(135deg, #17ace5, #0879b6);
  430. box-shadow: 0 12px 28px rgba(9, 125, 183, 0.24);
  431. }
  432. .ant-btn-primary:not(:disabled):hover {
  433. background: linear-gradient(135deg, #26b9ef, #096da5) !important;
  434. box-shadow: 0 16px 34px rgba(9, 125, 183, 0.3);
  435. }
  436. .ant-input:hover,
  437. .ant-input-affix-wrapper:hover,
  438. .ant-input-number:hover,
  439. .ant-select:not(.ant-select-disabled):hover .ant-select-selector {
  440. border-color: rgba(22, 143, 206, 0.56) !important;
  441. }
  442. .ant-table-wrapper .ant-table-container {
  443. overflow: hidden;
  444. border: 1px solid rgba(129, 157, 176, 0.18);
  445. border-radius: 14px;
  446. }
  447. .ant-table-wrapper .ant-table-thead > tr > th {
  448. color: #3b4a5b;
  449. font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
  450. font-size: 10px;
  451. font-weight: 700;
  452. letter-spacing: 0.07em;
  453. text-transform: uppercase;
  454. }
  455. .ant-table-wrapper .ant-table-tbody > tr > td {
  456. border-bottom-color: #edf1f5;
  457. transition: background var(--motion-standard);
  458. }
  459. .ant-tabs .ant-tabs-nav {
  460. margin-bottom: 16px;
  461. }
  462. .ant-tabs .ant-tabs-tab {
  463. min-height: 44px;
  464. padding-inline: 4px;
  465. font-weight: 650;
  466. }
  467. .ant-alert {
  468. border-radius: 12px;
  469. }
  470. .ant-alert.ant-alert-info {
  471. color: #31596d;
  472. background: #edf9fe;
  473. border-color: #bce5f6;
  474. }
  475. .ant-alert.ant-alert-success {
  476. color: #315d4b;
  477. background: #effaf5;
  478. border-color: #bfe8d4;
  479. }
  480. .ant-alert.ant-alert-warning {
  481. color: #685125;
  482. background: #fff8e8;
  483. border-color: #f0d9a7;
  484. }
  485. .ant-alert.ant-alert-error {
  486. color: #763c3c;
  487. background: #fff2f1;
  488. border-color: #f3c5c2;
  489. }
  490. .ant-alert.ant-alert-info .ant-alert-message,
  491. .ant-alert.ant-alert-info .ant-alert-icon {
  492. color: #075e87;
  493. }
  494. .ant-alert.ant-alert-success .ant-alert-message,
  495. .ant-alert.ant-alert-success .ant-alert-icon {
  496. color: #09613e;
  497. }
  498. .ant-alert.ant-alert-warning .ant-alert-message,
  499. .ant-alert.ant-alert-warning .ant-alert-icon {
  500. color: #76510a;
  501. }
  502. .ant-alert.ant-alert-error .ant-alert-message,
  503. .ant-alert.ant-alert-error .ant-alert-icon {
  504. color: #8c3030;
  505. }
  506. .ant-alert .ant-alert-description {
  507. color: inherit;
  508. }
  509. .ant-tag {
  510. margin-inline-end: 6px;
  511. padding-inline: 7px;
  512. border-radius: 6px;
  513. line-height: 22px;
  514. }
  515. .ant-descriptions-bordered .ant-descriptions-view {
  516. overflow: hidden;
  517. border-radius: 10px;
  518. }
  519. .ant-modal .ant-modal-content,
  520. .ant-drawer .ant-drawer-content {
  521. border: 1px solid rgba(220, 229, 237, 0.8);
  522. box-shadow: 0 24px 64px rgba(22, 33, 49, 0.18);
  523. }
  524. .ant-modal .ant-modal-content {
  525. border-radius: 22px;
  526. }
  527. .admin-shell .ant-layout-header {
  528. border-bottom: 1px solid rgba(116, 150, 171, 0.18);
  529. background: rgba(248, 252, 254, 0.72) !important;
  530. box-shadow: 0 12px 44px rgba(29, 76, 103, 0.05);
  531. backdrop-filter: blur(24px) saturate(145%);
  532. }
  533. .admin-shell .ant-pro-sider {
  534. border-right: 1px solid rgba(110, 231, 255, 0.08);
  535. background:
  536. radial-gradient(circle at 15% 8%, rgba(40, 166, 216, 0.18), transparent 24rem),
  537. #0b1726 !important;
  538. box-shadow: 18px 0 54px rgba(7, 25, 40, 0.13);
  539. }
  540. .admin-shell .ant-menu-dark {
  541. background: transparent !important;
  542. }
  543. .admin-shell .ant-menu-item {
  544. min-height: 44px;
  545. margin-block: 5px;
  546. border: 1px solid transparent;
  547. transition: color var(--motion-standard), background var(--motion-standard), border-color var(--motion-standard), transform var(--motion-standard) !important;
  548. }
  549. .admin-shell .ant-menu-item:not(.ant-menu-item-selected):hover {
  550. border-color: rgba(110, 231, 255, 0.08);
  551. transform: translateX(3px);
  552. }
  553. .admin-shell .ant-menu-item-selected {
  554. border-color: rgba(110, 231, 255, 0.14);
  555. box-shadow: 0 12px 28px rgba(0, 0, 0, 0.16), 0 0 24px rgba(15, 159, 219, 0.08) inset;
  556. }
  557. .admin-shell .ant-pro-layout-content {
  558. padding-block: 40px 64px;
  559. background: transparent;
  560. }
  561. .brand-mark {
  562. display: grid;
  563. width: 38px;
  564. height: 38px;
  565. place-items: center;
  566. color: #ffffff;
  567. background: linear-gradient(145deg, #4dd4ff, #087db9 72%);
  568. border: 1px solid rgba(255, 255, 255, 0.24);
  569. border-radius: 13px;
  570. box-shadow: 0 10px 28px rgba(12, 137, 195, 0.28), 0 0 0 5px rgba(15, 159, 219, 0.06);
  571. transform: rotate(-3deg);
  572. }
  573. .admin-shell .ant-pro-global-header-logo h1 {
  574. display: flex;
  575. flex-direction: column;
  576. color: var(--color-ink);
  577. font-weight: 760;
  578. letter-spacing: -0.025em;
  579. }
  580. .admin-shell .ant-pro-global-header-logo h1::after {
  581. content: 'BOT OPERATIONS';
  582. margin-top: 1px;
  583. color: #6d7e90;
  584. font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
  585. font-size: 8px;
  586. font-weight: 700;
  587. letter-spacing: 0.16em;
  588. }
  589. .nav-button {
  590. min-height: 40px;
  591. }
  592. .control-plane {
  593. display: inline-flex;
  594. min-height: 32px;
  595. align-items: center;
  596. gap: 7px;
  597. padding: 0 11px;
  598. color: #557084;
  599. border: 1px solid rgba(115, 151, 173, 0.24);
  600. border-radius: 999px;
  601. font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
  602. font-size: 9px;
  603. font-weight: 700;
  604. letter-spacing: 0.1em;
  605. }
  606. .bot-selector .ant-select-selector {
  607. background: rgba(255, 255, 255, 0.62) !important;
  608. border-color: rgba(115, 151, 173, 0.28) !important;
  609. backdrop-filter: blur(12px);
  610. }
  611. .account-button {
  612. color: #33465a;
  613. }
  614. .assistant-alert {
  615. margin-bottom: 20px;
  616. }
  617. .assistant-section + .assistant-section,
  618. .assistant-tabs {
  619. margin-top: 20px;
  620. }
  621. .assistant-tabs > .ant-tabs-nav {
  622. padding-inline: 4px;
  623. }
  624. .assistant-settings .ant-form-item {
  625. margin-bottom: 20px;
  626. }
  627. .login-stage {
  628. position: relative;
  629. min-height: 100dvh;
  630. overflow: hidden;
  631. background:
  632. linear-gradient(120deg, rgba(255, 255, 255, 0.94), rgba(227, 243, 250, 0.74)),
  633. var(--color-canvas);
  634. isolation: isolate;
  635. }
  636. .login-stage::before {
  637. position: absolute;
  638. z-index: -1;
  639. inset: 0;
  640. background-image:
  641. linear-gradient(rgba(37, 100, 135, 0.055) 1px, transparent 1px),
  642. linear-gradient(90deg, rgba(37, 100, 135, 0.055) 1px, transparent 1px);
  643. background-size: 72px 72px;
  644. mask-image: radial-gradient(circle at center, black, transparent 78%);
  645. content: '';
  646. }
  647. .login-stage .ant-pro-form-login-page-container {
  648. background: rgba(255, 255, 255, 0.72);
  649. backdrop-filter: blur(24px) saturate(130%);
  650. }
  651. .login-stage .ant-pro-form-login-page-title {
  652. font-family: "Avenir Next", "SF Pro Display", -apple-system, BlinkMacSystemFont, sans-serif;
  653. font-weight: 760;
  654. letter-spacing: -0.045em;
  655. }
  656. .login-stage .ant-pro-form-login-page-desc {
  657. font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
  658. font-size: 9px;
  659. font-weight: 700;
  660. letter-spacing: 0.12em;
  661. }
  662. .login-orbit {
  663. position: absolute;
  664. z-index: -1;
  665. display: block;
  666. border: 1px solid rgba(15, 159, 219, 0.2);
  667. border-radius: 50%;
  668. }
  669. .login-orbit--one {
  670. width: 56vw;
  671. height: 56vw;
  672. top: -34vw;
  673. right: -12vw;
  674. box-shadow: 0 0 0 10vw rgba(15, 159, 219, 0.035), 0 0 0 20vw rgba(15, 159, 219, 0.025);
  675. }
  676. .login-orbit--two {
  677. width: 24vw;
  678. height: 24vw;
  679. bottom: -13vw;
  680. left: 8vw;
  681. border-color: rgba(22, 138, 91, 0.15);
  682. }
  683. @keyframes signal-pulse {
  684. 0%, 100% { opacity: 0.45; transform: scale(0.88); }
  685. 50% { opacity: 1; transform: scale(1); }
  686. }
  687. @keyframes page-enter {
  688. from {
  689. opacity: 0;
  690. transform: translateY(5px);
  691. }
  692. to {
  693. opacity: 1;
  694. transform: translateY(0);
  695. }
  696. }
  697. @media (max-width: 1023px) {
  698. .control-plane {
  699. display: none;
  700. }
  701. .metric-grid,
  702. .metrics-grid {
  703. grid-template-columns: repeat(2, minmax(0, 1fr));
  704. }
  705. .split-grid {
  706. grid-template-columns: 1fr;
  707. }
  708. }
  709. @media (max-width: 575px) {
  710. .page-content {
  711. padding-bottom: 36px;
  712. }
  713. .page-toolbar {
  714. gap: 16px;
  715. margin-bottom: 22px;
  716. padding-top: 4px;
  717. padding-bottom: 20px;
  718. }
  719. .page-title {
  720. font-size: 34px;
  721. line-height: 1;
  722. }
  723. .page-description {
  724. margin-top: 10px;
  725. font-size: 14px;
  726. }
  727. .metric {
  728. min-height: 134px;
  729. padding: 18px;
  730. border-radius: 17px;
  731. }
  732. .metric-value {
  733. font-size: 32px;
  734. }
  735. .metric-icon {
  736. width: 36px;
  737. height: 36px;
  738. flex-basis: 36px;
  739. border-radius: 10px;
  740. }
  741. .surface-body,
  742. .surface-header {
  743. padding-inline: 16px;
  744. }
  745. .surface,
  746. .ant-alert {
  747. border-radius: 17px;
  748. }
  749. .ant-pro-layout .ant-pro-layout-content {
  750. padding-inline: 12px !important;
  751. padding-block: 22px 32px;
  752. }
  753. .ant-btn {
  754. min-height: 44px;
  755. }
  756. .bot-selector {
  757. width: 128px !important;
  758. }
  759. .admin-shell .ant-pro-global-header-logo h1::after {
  760. display: none;
  761. }
  762. .account-name {
  763. display: none;
  764. }
  765. .account-button {
  766. width: 42px;
  767. padding-inline: 10px;
  768. }
  769. .ant-modal {
  770. max-width: calc(100vw - 24px);
  771. margin: 12px auto;
  772. }
  773. .workspace-tab-select {
  774. display: block;
  775. width: 100%;
  776. margin-bottom: 12px;
  777. }
  778. .workspace-tabs > .ant-tabs > .ant-tabs-nav {
  779. display: none;
  780. }
  781. }
  782. @media (max-width: 359px) {
  783. .metric-grid,
  784. .metrics-grid {
  785. grid-template-columns: 1fr;
  786. }
  787. }
  788. @media (prefers-reduced-motion: reduce) {
  789. *,
  790. *::before,
  791. *::after {
  792. scroll-behavior: auto !important;
  793. transition-duration: 0.01ms !important;
  794. animation-duration: 0.01ms !important;
  795. animation-iteration-count: 1 !important;
  796. }
  797. }