styles.css 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460
  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. .dns-value > span,
  222. .dns-current > span,
  223. .live-row span,
  224. .smtp-row span,
  225. .copy-row > span {
  226. color: var(--mh-muted);
  227. font-size: 0.78rem;
  228. margin: 0;
  229. }
  230. .dns-value,
  231. .dns-current,
  232. .live-list,
  233. .smtp-grid,
  234. .event-list {
  235. display: grid;
  236. gap: 0.65rem;
  237. }
  238. .dns-value .btn {
  239. justify-self: start;
  240. }
  241. code {
  242. background: #f4f7fb;
  243. border: 1px solid #e1e8f0;
  244. border-radius: 0.4rem;
  245. color: #24334a;
  246. display: block;
  247. font-size: 0.78rem;
  248. overflow-wrap: anywhere;
  249. padding: 0.45rem 0.55rem;
  250. white-space: normal;
  251. }
  252. .api-box pre {
  253. background: #111827;
  254. border-radius: 0.65rem;
  255. color: #e5eefb;
  256. margin: 0;
  257. overflow-x: auto;
  258. padding: 0.9rem;
  259. }
  260. .api-box pre code {
  261. background: transparent;
  262. border: 0;
  263. color: inherit;
  264. padding: 0;
  265. }
  266. .inline-warnings,
  267. .warning-list {
  268. display: grid;
  269. gap: 0.5rem;
  270. margin: 0;
  271. padding: 0;
  272. }
  273. .inline-warnings li,
  274. .warning-list li {
  275. background: #fff8e6;
  276. border: 1px solid #f5d88d;
  277. border-radius: 0.5rem;
  278. color: #6b4500;
  279. list-style: none;
  280. padding: 0.55rem 0.65rem;
  281. }
  282. .record-table-wrap {
  283. overflow-x: auto;
  284. }
  285. .copy-row {
  286. align-items: start;
  287. display: grid;
  288. gap: 0.55rem;
  289. grid-template-columns: minmax(4.8rem, auto) minmax(0, 1fr) auto;
  290. }
  291. .copy-row.inline {
  292. grid-template-columns: minmax(0, 1fr) auto;
  293. }
  294. .copy-row > p {
  295. grid-column: 2 / -1;
  296. margin: 0;
  297. }
  298. .credential-list,
  299. .mini-list {
  300. display: grid;
  301. gap: 0.75rem;
  302. }
  303. .credential-row .card-body,
  304. .mini-row {
  305. align-items: flex-start;
  306. display: flex;
  307. gap: 0.75rem;
  308. justify-content: space-between;
  309. }
  310. .mini-row {
  311. border: 1px solid var(--mh-line);
  312. border-radius: 0.65rem;
  313. padding: 0.75rem;
  314. }
  315. .mini-row > div:first-child {
  316. display: grid;
  317. gap: 0.2rem;
  318. min-width: 0;
  319. }
  320. .mini-row strong,
  321. .mini-row span {
  322. overflow-wrap: anywhere;
  323. }
  324. .event-row {
  325. border-bottom: 1px solid var(--mh-line);
  326. display: grid;
  327. gap: 0.25rem;
  328. padding: 0.55rem 0;
  329. }
  330. .event-row:last-child {
  331. border-bottom: 0;
  332. }
  333. .item-line {
  334. align-items: center;
  335. display: flex;
  336. gap: 0.75rem;
  337. justify-content: space-between;
  338. }
  339. .toast-host {
  340. bottom: 1rem;
  341. display: grid;
  342. gap: 0.5rem;
  343. position: fixed;
  344. right: 1rem;
  345. z-index: 1080;
  346. }
  347. .app-toast {
  348. background: #ffffff;
  349. border: 1px solid var(--mh-line);
  350. border-left: 4px solid var(--mh-blue);
  351. border-radius: 0.6rem;
  352. box-shadow: 0 1rem 2rem rgba(22, 34, 51, 0.16);
  353. color: var(--mh-ink);
  354. min-width: 14rem;
  355. padding: 0.75rem 0.9rem;
  356. }
  357. .app-toast.error {
  358. border-left-color: var(--mh-red);
  359. }
  360. body.busy button {
  361. cursor: wait;
  362. }
  363. @media (max-width: 1200px) {
  364. .summary-grid,
  365. .guide-hero {
  366. grid-template-columns: 1fr;
  367. }
  368. .summary-grid {
  369. grid-template-columns: repeat(2, minmax(0, 1fr));
  370. }
  371. }
  372. @media (max-width: 768px) {
  373. .topbar .container-xl,
  374. .detail-header,
  375. .credential-row .card-body,
  376. .mini-row {
  377. align-items: stretch;
  378. flex-direction: column;
  379. }
  380. .summary-grid {
  381. grid-template-columns: 1fr;
  382. }
  383. .copy-row,
  384. .record-card {
  385. grid-template-columns: 1fr;
  386. }
  387. .copy-row > p {
  388. grid-column: auto;
  389. }
  390. }