styles.css 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466
  1. :root {
  2. --mh-sidebar: #142033;
  3. --mh-sidebar-soft: #1c2b42;
  4. --mh-line: #dce3ec;
  5. --mh-ink: #172033;
  6. --mh-muted: #66758a;
  7. --mh-blue: #206bc4;
  8. --mh-green: #2fb344;
  9. --mh-yellow: #f59f00;
  10. --mh-red: #d63939;
  11. }
  12. .navbar-vertical {
  13. background: var(--mh-sidebar);
  14. }
  15. .navbar-brand {
  16. gap: 0.7rem;
  17. justify-content: flex-start;
  18. }
  19. .brand-mark {
  20. align-items: center;
  21. background: #ffffff;
  22. border-radius: 0.5rem;
  23. color: var(--mh-sidebar);
  24. display: inline-flex;
  25. font-weight: 800;
  26. height: 2rem;
  27. justify-content: center;
  28. letter-spacing: 0;
  29. width: 2rem;
  30. }
  31. .primary-nav .nav-link {
  32. border: 0;
  33. text-align: left;
  34. width: 100%;
  35. }
  36. .primary-nav .nav-link.active {
  37. background: var(--mh-sidebar-soft);
  38. }
  39. .sidebar-block {
  40. border-top: 1px solid rgba(255, 255, 255, 0.12);
  41. color: #d8e2ef;
  42. margin-top: 1rem;
  43. padding-top: 1rem;
  44. }
  45. .sidebar-block code {
  46. background: rgba(255, 255, 255, 0.08);
  47. border: 1px solid rgba(255, 255, 255, 0.14);
  48. color: #ffffff;
  49. }
  50. .topbar .container-xl {
  51. align-items: center;
  52. display: flex;
  53. justify-content: space-between;
  54. }
  55. .view {
  56. display: none;
  57. }
  58. .view.active {
  59. display: block;
  60. }
  61. .hidden {
  62. display: none !important;
  63. }
  64. .domain-list {
  65. display: grid;
  66. gap: 0.5rem;
  67. }
  68. .domain-item {
  69. background: rgba(255, 255, 255, 0.06);
  70. border: 1px solid rgba(255, 255, 255, 0.1);
  71. border-radius: 0.5rem;
  72. color: #ffffff;
  73. display: grid;
  74. gap: 0.25rem;
  75. padding: 0.65rem 0.75rem;
  76. text-align: left;
  77. width: 100%;
  78. }
  79. .domain-item:hover,
  80. .domain-item.active {
  81. background: rgba(255, 255, 255, 0.12);
  82. border-color: rgba(255, 255, 255, 0.28);
  83. }
  84. .domain-item span,
  85. .domain-item small {
  86. overflow-wrap: anywhere;
  87. }
  88. .domain-item small {
  89. color: #9fb2ca;
  90. }
  91. .empty-mini {
  92. border: 1px dashed rgba(255, 255, 255, 0.22);
  93. border-radius: 0.5rem;
  94. color: #aabbd0;
  95. padding: 0.75rem;
  96. }
  97. .main-panel {
  98. min-height: 32rem;
  99. overflow: hidden;
  100. }
  101. .empty-state {
  102. align-content: center;
  103. display: grid;
  104. gap: 0.5rem;
  105. justify-items: center;
  106. min-height: 28rem;
  107. padding: 2rem;
  108. text-align: center;
  109. }
  110. .detail-header {
  111. align-items: flex-start;
  112. justify-content: space-between;
  113. }
  114. .detail-actions,
  115. .status-strip {
  116. display: flex;
  117. flex-wrap: wrap;
  118. gap: 0.5rem;
  119. }
  120. .detail-body {
  121. display: grid;
  122. gap: 1rem;
  123. }
  124. .guide-hero {
  125. background: linear-gradient(135deg, #f7fbff, #f6f8fb);
  126. border: 1px solid var(--mh-line);
  127. border-radius: 0.75rem;
  128. display: grid;
  129. gap: 1rem;
  130. grid-template-columns: minmax(16rem, 0.8fr) minmax(0, 1.2fr);
  131. padding: 1rem;
  132. }
  133. .guide-hero h3 {
  134. font-size: 1.35rem;
  135. margin: 0.2rem 0;
  136. overflow-wrap: anywhere;
  137. }
  138. .guide-hero p {
  139. color: var(--mh-muted);
  140. margin: 0;
  141. overflow-wrap: anywhere;
  142. }
  143. .summary-grid {
  144. display: grid;
  145. gap: 0.75rem;
  146. grid-template-columns: repeat(5, minmax(0, 1fr));
  147. }
  148. .metric-card.compact {
  149. background: #ffffff;
  150. border: 1px solid var(--mh-line);
  151. border-radius: 0.65rem;
  152. display: grid;
  153. gap: 0.35rem;
  154. min-height: 4.7rem;
  155. padding: 0.8rem;
  156. }
  157. .metric-card.compact span {
  158. color: var(--mh-muted);
  159. font-size: 0.78rem;
  160. }
  161. .metric-card.compact strong {
  162. color: var(--mh-ink);
  163. font-size: 0.95rem;
  164. }
  165. .subpanel {
  166. height: 100%;
  167. }
  168. .record-steps {
  169. display: grid;
  170. gap: 0.85rem;
  171. }
  172. .record-card {
  173. border: 1px solid var(--mh-line);
  174. border-radius: 0.75rem;
  175. display: grid;
  176. gap: 0.75rem;
  177. grid-template-columns: 2rem minmax(0, 1fr);
  178. padding: 0.85rem;
  179. }
  180. .record-card.ok {
  181. border-color: rgba(47, 179, 68, 0.45);
  182. }
  183. .record-card.warn {
  184. border-color: rgba(245, 159, 0, 0.45);
  185. }
  186. .record-card.pending {
  187. border-color: rgba(32, 107, 196, 0.45);
  188. }
  189. .record-card.missing,
  190. .record-card.failed {
  191. border-color: rgba(214, 57, 57, 0.45);
  192. }
  193. .record-step span {
  194. align-items: center;
  195. background: #eef4fb;
  196. border-radius: 999px;
  197. color: var(--mh-blue);
  198. display: flex;
  199. font-size: 0.75rem;
  200. font-weight: 700;
  201. height: 1.75rem;
  202. justify-content: center;
  203. width: 1.75rem;
  204. }
  205. .record-card-body {
  206. display: grid;
  207. gap: 0.7rem;
  208. min-width: 0;
  209. }
  210. .record-card-title {
  211. align-items: flex-start;
  212. display: flex;
  213. gap: 0.75rem;
  214. justify-content: space-between;
  215. }
  216. .record-card-title h4 {
  217. font-size: 0.98rem;
  218. margin: 0;
  219. }
  220. .record-card-title p,
  221. .managed-note,
  222. .dns-value > span,
  223. .dns-current > span,
  224. .live-row span,
  225. .smtp-row span,
  226. .copy-row > span {
  227. color: var(--mh-muted);
  228. font-size: 0.78rem;
  229. margin: 0;
  230. }
  231. .managed-note {
  232. color: var(--mh-blue);
  233. margin-top: 0.25rem;
  234. }
  235. .dns-value,
  236. .dns-current,
  237. .live-list,
  238. .smtp-grid,
  239. .event-list {
  240. display: grid;
  241. gap: 0.65rem;
  242. }
  243. .dns-value .btn {
  244. justify-self: start;
  245. }
  246. code {
  247. background: #f4f7fb;
  248. border: 1px solid #e1e8f0;
  249. border-radius: 0.4rem;
  250. color: #24334a;
  251. display: block;
  252. font-size: 0.78rem;
  253. overflow-wrap: anywhere;
  254. padding: 0.45rem 0.55rem;
  255. white-space: normal;
  256. }
  257. .api-box pre {
  258. background: #111827;
  259. border-radius: 0.65rem;
  260. color: #e5eefb;
  261. margin: 0;
  262. overflow-x: auto;
  263. padding: 0.9rem;
  264. }
  265. .api-box pre code {
  266. background: transparent;
  267. border: 0;
  268. color: inherit;
  269. padding: 0;
  270. }
  271. .inline-warnings,
  272. .warning-list {
  273. display: grid;
  274. gap: 0.5rem;
  275. margin: 0;
  276. padding: 0;
  277. }
  278. .inline-warnings li,
  279. .warning-list li {
  280. background: #fff8e6;
  281. border: 1px solid #f5d88d;
  282. border-radius: 0.5rem;
  283. color: #6b4500;
  284. list-style: none;
  285. padding: 0.55rem 0.65rem;
  286. }
  287. .record-table-wrap {
  288. overflow-x: auto;
  289. }
  290. .copy-row {
  291. align-items: start;
  292. display: grid;
  293. gap: 0.55rem;
  294. grid-template-columns: minmax(4.8rem, auto) minmax(0, 1fr) auto;
  295. }
  296. .copy-row.inline {
  297. grid-template-columns: minmax(0, 1fr) auto;
  298. }
  299. .copy-row > p {
  300. grid-column: 2 / -1;
  301. margin: 0;
  302. }
  303. .credential-list,
  304. .mini-list {
  305. display: grid;
  306. gap: 0.75rem;
  307. }
  308. .credential-row .card-body,
  309. .mini-row {
  310. align-items: flex-start;
  311. display: flex;
  312. gap: 0.75rem;
  313. justify-content: space-between;
  314. }
  315. .mini-row {
  316. border: 1px solid var(--mh-line);
  317. border-radius: 0.65rem;
  318. padding: 0.75rem;
  319. }
  320. .mini-row > div:first-child {
  321. display: grid;
  322. gap: 0.2rem;
  323. min-width: 0;
  324. }
  325. .mini-row strong,
  326. .mini-row span {
  327. overflow-wrap: anywhere;
  328. }
  329. .event-row {
  330. border-bottom: 1px solid var(--mh-line);
  331. display: grid;
  332. gap: 0.25rem;
  333. padding: 0.55rem 0;
  334. }
  335. .event-row:last-child {
  336. border-bottom: 0;
  337. }
  338. .item-line {
  339. align-items: center;
  340. display: flex;
  341. gap: 0.75rem;
  342. justify-content: space-between;
  343. }
  344. .toast-host {
  345. bottom: 1rem;
  346. display: grid;
  347. gap: 0.5rem;
  348. position: fixed;
  349. right: 1rem;
  350. z-index: 1080;
  351. }
  352. .app-toast {
  353. background: #ffffff;
  354. border: 1px solid var(--mh-line);
  355. border-left: 4px solid var(--mh-blue);
  356. border-radius: 0.6rem;
  357. box-shadow: 0 1rem 2rem rgba(22, 34, 51, 0.16);
  358. color: var(--mh-ink);
  359. min-width: 14rem;
  360. padding: 0.75rem 0.9rem;
  361. }
  362. .app-toast.error {
  363. border-left-color: var(--mh-red);
  364. }
  365. body.busy button {
  366. cursor: wait;
  367. }
  368. @media (max-width: 1200px) {
  369. .summary-grid,
  370. .guide-hero {
  371. grid-template-columns: 1fr;
  372. }
  373. .summary-grid {
  374. grid-template-columns: repeat(2, minmax(0, 1fr));
  375. }
  376. }
  377. @media (max-width: 768px) {
  378. .topbar .container-xl,
  379. .detail-header,
  380. .credential-row .card-body,
  381. .mini-row {
  382. align-items: stretch;
  383. flex-direction: column;
  384. }
  385. .summary-grid {
  386. grid-template-columns: 1fr;
  387. }
  388. .copy-row,
  389. .record-card {
  390. grid-template-columns: 1fr;
  391. }
  392. .copy-row > p {
  393. grid-column: auto;
  394. }
  395. }