styles.css 7.0 KB

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