styles.css 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625
  1. :root {
  2. color-scheme: light;
  3. --canvas: #f2f4f1;
  4. --surface: #ffffff;
  5. --surface-soft: #f7f8f6;
  6. --ink: #182321;
  7. --ink-soft: #3f4d4a;
  8. --muted: #71807c;
  9. --line: #d8dfdc;
  10. --line-strong: #bac7c2;
  11. --teal: #0b766d;
  12. --teal-dark: #075b54;
  13. --teal-soft: #e2f1ed;
  14. --amber: #b96f14;
  15. --amber-soft: #fff1db;
  16. --red: #ad3a32;
  17. --red-soft: #fbe8e6;
  18. --blue: #3b6f8f;
  19. --blue-soft: #e7f0f5;
  20. --shadow: 0 14px 32px rgba(24, 35, 33, 0.08);
  21. }
  22. * { box-sizing: border-box; }
  23. html { min-width: 320px; }
  24. body {
  25. margin: 0;
  26. background: var(--canvas);
  27. color: var(--ink);
  28. font-family: "Avenir Next", "PingFang SC", "Hiragino Sans GB", sans-serif;
  29. letter-spacing: 0;
  30. }
  31. button, input, select { font: inherit; letter-spacing: 0; }
  32. button { cursor: pointer; }
  33. h1, h2, h3, p { margin: 0; }
  34. .app-header {
  35. position: sticky;
  36. top: 0;
  37. z-index: 20;
  38. height: 68px;
  39. display: grid;
  40. grid-template-columns: 1fr auto 1fr;
  41. align-items: center;
  42. gap: 24px;
  43. padding: 0 28px;
  44. background: rgba(255, 255, 255, 0.96);
  45. border-bottom: 1px solid var(--line);
  46. }
  47. .brand-block { display: flex; align-items: center; gap: 11px; }
  48. .brand-mark {
  49. width: 34px;
  50. height: 34px;
  51. display: grid;
  52. place-items: center;
  53. background: var(--ink);
  54. color: white;
  55. border-radius: 4px;
  56. font-family: Georgia, serif;
  57. font-size: 20px;
  58. }
  59. .brand-block div { display: grid; gap: 1px; }
  60. .brand-block strong { font-family: Georgia, serif; font-size: 15px; }
  61. .brand-block span:last-child { color: var(--muted); font-size: 11px; }
  62. .view-switcher {
  63. display: flex;
  64. align-items: center;
  65. padding: 3px;
  66. background: var(--surface-soft);
  67. border: 1px solid var(--line);
  68. border-radius: 6px;
  69. }
  70. .view-tab {
  71. min-height: 34px;
  72. padding: 0 16px;
  73. border: 0;
  74. background: transparent;
  75. color: var(--muted);
  76. border-radius: 4px;
  77. font-size: 13px;
  78. }
  79. .view-tab.is-active { background: var(--ink); color: white; }
  80. .system-status {
  81. justify-self: end;
  82. display: flex;
  83. align-items: center;
  84. gap: 8px;
  85. color: var(--ink-soft);
  86. font-size: 12px;
  87. }
  88. .status-dot {
  89. width: 8px;
  90. height: 8px;
  91. border-radius: 50%;
  92. background: #2d9b69;
  93. box-shadow: 0 0 0 4px #e5f4eb;
  94. }
  95. .app-view { display: none; }
  96. .app-view.is-active { display: grid; }
  97. #marketView {
  98. grid-template-columns: 330px minmax(0, 1fr);
  99. min-height: calc(100vh - 68px);
  100. }
  101. .inquiry-rail {
  102. min-width: 0;
  103. display: flex;
  104. flex-direction: column;
  105. padding: 26px 24px 20px;
  106. background: var(--surface);
  107. border-right: 1px solid var(--line);
  108. }
  109. .rail-heading { display: flex; gap: 12px; align-items: flex-start; }
  110. .section-index {
  111. color: var(--teal);
  112. font-family: Georgia, serif;
  113. font-size: 12px;
  114. font-weight: 700;
  115. }
  116. .rail-heading h1 { font-family: Georgia, "Songti SC", serif; font-size: 24px; font-weight: 600; }
  117. .rail-heading p { margin-top: 4px; color: var(--muted); font-size: 12px; }
  118. .inquiry-form {
  119. display: grid;
  120. grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  121. gap: 14px 12px;
  122. margin-top: 28px;
  123. }
  124. .field { min-width: 0; display: grid; gap: 6px; }
  125. .field-wide { grid-column: 1 / -1; }
  126. .field > span, .toggle-row > span:last-child {
  127. color: var(--ink-soft);
  128. font-size: 11px;
  129. font-weight: 600;
  130. }
  131. .field input, .field select {
  132. width: 100%;
  133. height: 39px;
  134. padding: 0 10px;
  135. border: 1px solid var(--line-strong);
  136. background: white;
  137. color: var(--ink);
  138. border-radius: 4px;
  139. outline: none;
  140. font-size: 13px;
  141. }
  142. .field input:focus, .field select:focus { border-color: var(--teal); box-shadow: 0 0 0 3px var(--teal-soft); }
  143. .toggle-row {
  144. display: flex;
  145. align-items: center;
  146. gap: 9px;
  147. min-height: 32px;
  148. cursor: pointer;
  149. }
  150. .toggle-row input { position: absolute; opacity: 0; pointer-events: none; }
  151. .toggle-control {
  152. position: relative;
  153. width: 34px;
  154. height: 19px;
  155. flex: 0 0 auto;
  156. border-radius: 10px;
  157. background: #cbd3d0;
  158. transition: background 160ms ease;
  159. }
  160. .toggle-control::after {
  161. content: "";
  162. position: absolute;
  163. width: 15px;
  164. height: 15px;
  165. top: 2px;
  166. left: 2px;
  167. background: white;
  168. border-radius: 50%;
  169. transition: transform 160ms ease;
  170. }
  171. .toggle-row input:checked + .toggle-control { background: var(--teal); }
  172. .toggle-row input:checked + .toggle-control::after { transform: translateX(15px); }
  173. .primary-command, .secondary-command, .icon-command {
  174. border: 0;
  175. border-radius: 4px;
  176. }
  177. .primary-command {
  178. height: 44px;
  179. display: flex;
  180. align-items: center;
  181. justify-content: space-between;
  182. margin-top: 4px;
  183. padding: 0 15px;
  184. background: var(--teal);
  185. color: white;
  186. font-weight: 700;
  187. font-size: 13px;
  188. transition: background 160ms ease, transform 160ms ease;
  189. }
  190. .primary-command:hover { background: var(--teal-dark); transform: translateY(-1px); }
  191. .primary-command:disabled { cursor: wait; opacity: 0.65; transform: none; }
  192. .secondary-command {
  193. min-height: 36px;
  194. padding: 0 13px;
  195. background: white;
  196. border: 1px solid var(--line-strong);
  197. color: var(--ink-soft);
  198. font-size: 12px;
  199. font-weight: 600;
  200. }
  201. .secondary-command:hover:not(:disabled) { border-color: var(--teal); color: var(--teal); }
  202. .secondary-command:disabled { cursor: default; opacity: 0.45; }
  203. .rail-foot {
  204. display: flex;
  205. justify-content: space-between;
  206. gap: 12px;
  207. margin-top: auto;
  208. padding-top: 22px;
  209. border-top: 1px solid var(--line);
  210. color: var(--muted);
  211. font-size: 11px;
  212. }
  213. .rail-foot strong { color: var(--teal-dark); font-weight: 600; }
  214. .market-workspace { min-width: 0; padding: 28px 32px 48px; }
  215. .decision-header {
  216. display: flex;
  217. align-items: flex-start;
  218. justify-content: space-between;
  219. gap: 24px;
  220. }
  221. .section-kicker { color: var(--teal); font-size: 10px; font-weight: 800; }
  222. .decision-header h2 {
  223. margin-top: 7px;
  224. font-family: Georgia, "Songti SC", serif;
  225. font-size: 26px;
  226. font-weight: 500;
  227. }
  228. .pipeline {
  229. display: grid;
  230. grid-template-columns: repeat(4, minmax(0, 1fr));
  231. margin-top: 24px;
  232. border: 1px solid var(--line);
  233. background: var(--surface);
  234. }
  235. .pipeline-step {
  236. position: relative;
  237. min-height: 70px;
  238. display: grid;
  239. align-content: center;
  240. gap: 4px;
  241. padding: 12px 16px;
  242. border-right: 1px solid var(--line);
  243. }
  244. .pipeline-step:last-child { border-right: 0; }
  245. .pipeline-step span { color: var(--muted); font-size: 10px; text-transform: uppercase; }
  246. .pipeline-step strong { font-size: 18px; }
  247. .pipeline-step em { color: var(--ink-soft); font-size: 11px; font-style: normal; }
  248. .pipeline-step.is-accent strong { color: var(--teal); }
  249. .pipeline-step.is-rejected strong { color: var(--red); }
  250. .recommendation-band {
  251. min-height: 196px;
  252. display: grid;
  253. grid-template-columns: minmax(0, 1.5fr) minmax(260px, 0.7fr);
  254. gap: 28px;
  255. margin-top: 16px;
  256. padding: 28px;
  257. background: var(--ink);
  258. color: white;
  259. border-radius: 6px;
  260. overflow: hidden;
  261. }
  262. .recommendation-copy { align-self: center; }
  263. .recommendation-label { color: #80cfc2; font-size: 10px; font-weight: 800; }
  264. .recommendation-copy h2 {
  265. max-width: 760px;
  266. margin-top: 9px;
  267. font-family: Georgia, "Songti SC", serif;
  268. font-size: 29px;
  269. font-weight: 500;
  270. line-height: 1.35;
  271. }
  272. .recommendation-copy p { max-width: 780px; margin-top: 13px; color: #c7d1ce; font-size: 13px; line-height: 1.7; }
  273. .recommendation-tags { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 17px; }
  274. .recommendation-tags span { padding: 5px 8px; border: 1px solid #51615d; border-radius: 3px; color: #dce4e1; font-size: 10px; }
  275. .quote-block {
  276. display: grid;
  277. align-content: center;
  278. padding-left: 28px;
  279. border-left: 1px solid #44524f;
  280. }
  281. .quote-block > span { color: #9baba7; font-size: 10px; }
  282. .quote-amount { margin-top: 7px; font-family: Georgia, serif; font-size: 37px; }
  283. .quote-amount small { margin-left: 5px; color: #9baba7; font: 11px "Avenir Next", sans-serif; }
  284. .quote-range { margin-top: 8px; color: #c7d1ce; font-size: 11px; }
  285. .confidence-row { display: flex; align-items: center; gap: 10px; margin-top: 18px; color: #c7d1ce; font-size: 11px; }
  286. .confidence-track { flex: 1; height: 4px; background: #45534f; }
  287. .confidence-track span { display: block; height: 100%; background: #65c2b3; }
  288. .recommendation-band.is-loading { grid-template-columns: 1fr; }
  289. .loading-block { align-self: center; display: grid; gap: 12px; }
  290. .loading-line { width: 62%; height: 17px; background: #34423f; animation: pulse 1.4s infinite; }
  291. .loading-line.short { width: 38%; }
  292. @keyframes pulse { 50% { opacity: 0.45; } }
  293. .candidate-section, .rejected-section { margin-top: 34px; }
  294. .section-heading { display: flex; align-items: center; justify-content: space-between; gap: 18px; margin-bottom: 13px; }
  295. .section-heading > div { display: flex; align-items: center; gap: 10px; }
  296. .section-heading h2 { font-size: 16px; }
  297. .section-meta { color: var(--muted); font-size: 11px; }
  298. .candidate-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
  299. .candidate-card {
  300. min-width: 0;
  301. display: flex;
  302. flex-direction: column;
  303. background: var(--surface);
  304. border: 1px solid var(--line);
  305. border-top: 3px solid var(--teal);
  306. border-radius: 5px;
  307. animation: rise-in 280ms both;
  308. }
  309. .candidate-card.type-economy { border-top-color: var(--blue); }
  310. .candidate-card.type-speed { border-top-color: var(--amber); }
  311. @keyframes rise-in { from { opacity: 0; transform: translateY(8px); } }
  312. .candidate-head { padding: 16px 16px 13px; border-bottom: 1px solid var(--line); }
  313. .candidate-type-row { display: flex; justify-content: space-between; gap: 10px; align-items: center; }
  314. .candidate-type { color: var(--teal); font-size: 11px; font-weight: 800; }
  315. .type-economy .candidate-type { color: var(--blue); }
  316. .type-speed .candidate-type { color: var(--amber); }
  317. .candidate-rank { color: var(--muted); font-family: Georgia, serif; font-size: 12px; }
  318. .candidate-head h3 { margin-top: 9px; min-height: 40px; font-size: 14px; line-height: 1.45; }
  319. .candidate-supplier { margin-top: 5px; color: var(--muted); font-size: 11px; }
  320. .candidate-facts { display: grid; grid-template-columns: repeat(3, 1fr); border-bottom: 1px solid var(--line); }
  321. .candidate-facts div { padding: 11px 10px; border-right: 1px solid var(--line); }
  322. .candidate-facts div:last-child { border-right: 0; }
  323. .candidate-facts span { display: block; color: var(--muted); font-size: 9px; }
  324. .candidate-facts strong { display: block; margin-top: 4px; font-size: 12px; }
  325. .score-list { display: grid; gap: 9px; padding: 14px 16px; }
  326. .score-row { display: grid; grid-template-columns: 58px 1fr 30px; align-items: center; gap: 8px; font-size: 10px; color: var(--ink-soft); }
  327. .score-track { height: 4px; background: #e5eae7; }
  328. .score-track span { display: block; height: 100%; background: var(--teal); }
  329. .score-row strong { text-align: right; font-size: 10px; }
  330. .candidate-reason { min-height: 72px; padding: 12px 16px; background: var(--surface-soft); color: var(--ink-soft); font-size: 11px; line-height: 1.55; }
  331. .candidate-price {
  332. display: flex;
  333. align-items: flex-end;
  334. justify-content: space-between;
  335. gap: 12px;
  336. margin-top: auto;
  337. padding: 14px 16px 16px;
  338. }
  339. .candidate-price span { display: block; color: var(--muted); font-size: 9px; }
  340. .candidate-price strong { display: block; margin-top: 3px; font-family: Georgia, serif; font-size: 22px; }
  341. .risk-label { max-width: 108px; padding: 4px 6px; border-radius: 3px; background: var(--amber-soft); color: var(--amber); font-size: 9px; text-align: right; }
  342. .risk-label.is-danger { background: var(--red-soft); color: var(--red); }
  343. .risk-label.is-safe { background: var(--teal-soft); color: var(--teal-dark); }
  344. .rejected-list { border-top: 1px solid var(--line-strong); }
  345. .rejected-row {
  346. display: grid;
  347. grid-template-columns: minmax(180px, 1.2fr) minmax(150px, 0.8fr) minmax(240px, 2fr);
  348. gap: 18px;
  349. align-items: center;
  350. min-height: 58px;
  351. padding: 10px 4px;
  352. border-bottom: 1px solid var(--line);
  353. font-size: 11px;
  354. }
  355. .rejected-row strong { font-size: 12px; }
  356. .rejected-row span { color: var(--muted); }
  357. .rejected-reasons { display: flex; flex-wrap: wrap; gap: 5px; }
  358. .rejected-reasons em { padding: 4px 6px; background: var(--red-soft); color: var(--red); border-radius: 3px; font-style: normal; font-size: 9px; }
  359. .mock-view { padding: 30px 32px 48px; }
  360. .mock-view.is-active { display: block; }
  361. .mock-heading {
  362. display: flex;
  363. align-items: flex-start;
  364. justify-content: space-between;
  365. gap: 24px;
  366. }
  367. .mock-heading h1 {
  368. margin-top: 6px;
  369. font-family: Georgia, "Songti SC", serif;
  370. font-size: 28px;
  371. font-weight: 500;
  372. }
  373. .mock-heading p { margin-top: 5px; color: var(--muted); font-size: 12px; }
  374. .mock-actions { display: flex; align-items: center; gap: 12px; }
  375. .volatile-label {
  376. padding: 5px 7px;
  377. border-radius: 3px;
  378. background: var(--amber-soft);
  379. color: var(--amber);
  380. font-size: 10px;
  381. font-weight: 700;
  382. }
  383. .data-summary {
  384. display: grid;
  385. grid-template-columns: repeat(7, minmax(0, 1fr));
  386. margin-top: 24px;
  387. background: var(--surface);
  388. border: 1px solid var(--line);
  389. }
  390. .data-stat {
  391. min-width: 0;
  392. min-height: 86px;
  393. display: grid;
  394. align-content: center;
  395. gap: 4px;
  396. padding: 13px 15px;
  397. border-right: 1px solid var(--line);
  398. }
  399. .data-stat:last-child { border-right: 0; }
  400. .data-stat span { color: var(--muted); font-size: 9px; }
  401. .data-stat strong { font-family: Georgia, serif; font-size: 23px; font-weight: 500; }
  402. .data-stat em { color: var(--teal); font-size: 9px; font-style: normal; }
  403. .data-stat.has-memory strong { color: var(--amber); }
  404. .mock-generator {
  405. display: grid;
  406. grid-template-columns: minmax(220px, 0.75fr) minmax(0, 2fr);
  407. gap: 28px;
  408. align-items: end;
  409. margin-top: 18px;
  410. padding: 22px;
  411. background: var(--ink);
  412. color: white;
  413. border-radius: 5px;
  414. }
  415. .generator-copy { display: flex; align-items: flex-start; gap: 10px; }
  416. .generator-copy h2 { font-size: 16px; }
  417. .generator-copy p { margin-top: 5px; color: #aebbb7; font-size: 10px; }
  418. .generator-controls {
  419. display: grid;
  420. grid-template-columns: minmax(220px, 1.5fr) minmax(100px, 0.5fr) minmax(100px, 0.5fr) minmax(190px, 0.9fr);
  421. gap: 10px;
  422. align-items: end;
  423. }
  424. .compact-field { min-width: 0; display: grid; gap: 6px; }
  425. .compact-field span { color: #aebbb7; font-size: 9px; font-weight: 700; }
  426. .compact-field select, .compact-field input {
  427. width: 100%;
  428. height: 39px;
  429. padding: 0 9px;
  430. border: 1px solid #4c5a57;
  431. border-radius: 4px;
  432. outline: 0;
  433. background: #23302e;
  434. color: white;
  435. font-size: 11px;
  436. }
  437. .mock-generator .primary-command { margin: 0; }
  438. .catalog-section { margin-top: 34px; }
  439. .catalog-heading {
  440. display: flex;
  441. align-items: center;
  442. justify-content: space-between;
  443. gap: 20px;
  444. margin-bottom: 12px;
  445. }
  446. .catalog-heading > div, .source-section > div:first-child {
  447. display: flex;
  448. align-items: center;
  449. gap: 10px;
  450. }
  451. .catalog-heading h2, .source-section h2 { font-size: 16px; }
  452. .catalog-tabs {
  453. display: flex;
  454. padding: 3px;
  455. border: 1px solid var(--line);
  456. border-radius: 5px;
  457. background: var(--surface);
  458. }
  459. .catalog-tab {
  460. min-height: 30px;
  461. padding: 0 11px;
  462. border: 0;
  463. border-radius: 3px;
  464. background: transparent;
  465. color: var(--muted);
  466. font-size: 10px;
  467. }
  468. .catalog-tab.is-active { background: var(--teal-soft); color: var(--teal-dark); font-weight: 700; }
  469. .catalog-table {
  470. min-height: 260px;
  471. overflow: auto;
  472. border: 1px solid var(--line);
  473. background: var(--surface);
  474. }
  475. .catalog-table table { font-size: 11px; }
  476. .catalog-table tbody tr:hover { background: #f2f7f5; }
  477. .catalog-table .status-current { color: var(--teal); font-weight: 700; }
  478. .catalog-table .status-expired { color: var(--red); font-weight: 700; }
  479. .runtime-mark { color: var(--amber); font-size: 9px; font-weight: 700; }
  480. .sensitivity-cell { min-width: 110px; }
  481. .sensitivity-track { width: 86px; height: 4px; background: #e5eae7; }
  482. .sensitivity-track span { display: block; height: 100%; background: var(--blue); }
  483. .source-section { margin-top: 30px; }
  484. .source-list { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 12px; }
  485. .source-list code {
  486. padding: 7px 9px;
  487. border: 1px solid var(--line);
  488. background: var(--surface);
  489. color: var(--ink-soft);
  490. font-size: 9px;
  491. }
  492. .operations-view { padding: 30px 32px 48px; }
  493. .operations-view.is-active { display: block; }
  494. .operations-heading { display: flex; justify-content: space-between; align-items: flex-start; gap: 24px; }
  495. .operations-heading h1 { margin-top: 6px; font-family: Georgia, "Songti SC", serif; font-size: 28px; font-weight: 500; }
  496. .operations-heading p { margin-top: 5px; color: var(--muted); font-size: 12px; }
  497. .operations-layout { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; margin-top: 24px; }
  498. .panel { min-height: 220px; background: var(--surface); border: 1px solid var(--line); border-radius: 5px; overflow: hidden; }
  499. .panel.wide { grid-column: 1 / -1; }
  500. .panel-title { display: flex; justify-content: space-between; align-items: center; padding: 12px 14px; border-bottom: 1px solid var(--line); }
  501. .panel-title h2 { font-size: 14px; }
  502. .panel-title span { color: var(--muted); font-size: 11px; }
  503. .table-wrap { overflow: auto; }
  504. table { width: 100%; border-collapse: collapse; font-size: 11px; }
  505. th, td { padding: 9px 11px; border-bottom: 1px solid var(--line); text-align: left; vertical-align: top; white-space: nowrap; }
  506. th { background: var(--surface-soft); color: var(--ink-soft); font-weight: 700; }
  507. .timeline { display: grid; grid-template-columns: repeat(7, minmax(120px, 1fr)); gap: 8px; padding: 14px; }
  508. .step { min-height: 76px; padding: 10px; background: var(--surface-soft); border-left: 3px solid var(--teal); }
  509. .step strong { display: block; font-size: 11px; }
  510. .step span { display: block; margin-top: 5px; color: var(--muted); font-size: 9px; }
  511. .badge-danger { color: var(--red); font-weight: 700; }
  512. .badge-warning { color: var(--amber); font-weight: 700; }
  513. .empty, .error { padding: 16px; color: var(--muted); font-size: 12px; }
  514. .error { color: var(--red); }
  515. .audit-dialog {
  516. width: min(720px, calc(100vw - 32px));
  517. max-height: min(780px, calc(100vh - 48px));
  518. padding: 0;
  519. border: 1px solid var(--line-strong);
  520. border-radius: 6px;
  521. box-shadow: var(--shadow);
  522. }
  523. .audit-dialog::backdrop { background: rgba(24, 35, 33, 0.42); }
  524. .dialog-heading { position: sticky; top: 0; display: flex; justify-content: space-between; align-items: flex-start; gap: 20px; padding: 20px 22px; background: white; border-bottom: 1px solid var(--line); }
  525. .dialog-heading h2 { margin-top: 5px; font-family: Georgia, "Songti SC", serif; font-size: 22px; font-weight: 500; }
  526. .icon-command { width: 34px; height: 34px; background: var(--surface-soft); border: 1px solid var(--line); color: var(--ink-soft); font-size: 22px; }
  527. .audit-content { padding: 22px; }
  528. .audit-grid { display: grid; grid-template-columns: repeat(2, 1fr); border: 1px solid var(--line); }
  529. .audit-item { min-height: 72px; padding: 12px; border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); }
  530. .audit-item:nth-child(2n) { border-right: 0; }
  531. .audit-item span { color: var(--muted); font-size: 9px; }
  532. .audit-item strong { display: block; margin-top: 5px; font-size: 12px; overflow-wrap: anywhere; }
  533. .audit-sources { margin-top: 20px; }
  534. .audit-sources h3 { font-size: 12px; }
  535. .audit-sources code { display: block; margin-top: 8px; padding: 9px 10px; background: var(--surface-soft); color: var(--ink-soft); font-size: 10px; overflow-wrap: anywhere; }
  536. @media (max-width: 1120px) {
  537. #marketView { grid-template-columns: 290px minmax(0, 1fr); }
  538. .market-workspace { padding-left: 22px; padding-right: 22px; }
  539. .candidate-grid { grid-template-columns: 1fr; }
  540. .candidate-card { display: grid; grid-template-columns: minmax(220px, 0.9fr) minmax(300px, 1.2fr); }
  541. .candidate-head { grid-row: 1 / span 2; }
  542. .candidate-facts { border-left: 1px solid var(--line); }
  543. .score-list { border-left: 1px solid var(--line); }
  544. .candidate-reason { grid-column: 1 / -1; min-height: 0; }
  545. .candidate-price { grid-column: 1 / -1; }
  546. .data-summary { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  547. .data-stat:nth-child(4) { border-right: 0; }
  548. .data-stat:nth-child(-n+4) { border-bottom: 1px solid var(--line); }
  549. .generator-controls { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  550. }
  551. @media (max-width: 780px) {
  552. .app-header { position: static; height: auto; grid-template-columns: 1fr auto; padding: 13px 16px; }
  553. .view-switcher { grid-column: 1 / -1; grid-row: 2; }
  554. .view-tab { flex: 1; }
  555. .system-status span:last-child { display: none; }
  556. #marketView { grid-template-columns: 1fr; }
  557. .inquiry-rail { border-right: 0; border-bottom: 1px solid var(--line); padding: 22px 18px; }
  558. .inquiry-form { grid-template-columns: minmax(0, 1fr); }
  559. .field-wide { grid-column: auto; }
  560. .rail-foot { margin-top: 24px; }
  561. .market-workspace { padding: 22px 16px 38px; }
  562. .decision-header { align-items: center; }
  563. .decision-header h2 { font-size: 21px; }
  564. .pipeline { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  565. .pipeline-step:nth-child(2) { border-right: 0; }
  566. .pipeline-step:nth-child(-n+2) { border-bottom: 1px solid var(--line); }
  567. .recommendation-band { grid-template-columns: 1fr; padding: 22px; }
  568. .recommendation-copy h2 { font-size: 23px; }
  569. .quote-block { padding: 18px 0 0; border-left: 0; border-top: 1px solid #44524f; }
  570. .candidate-card { display: flex; }
  571. .candidate-head { grid-row: auto; }
  572. .candidate-facts, .score-list { border-left: 0; }
  573. .rejected-row { grid-template-columns: 1fr; gap: 5px; padding: 13px 2px; }
  574. .mock-view { padding: 24px 16px 38px; }
  575. .mock-heading { display: grid; }
  576. .mock-actions { justify-content: space-between; }
  577. .data-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  578. .data-stat, .data-stat:nth-child(4) { border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); }
  579. .data-stat:nth-child(2n) { border-right: 0; }
  580. .data-stat:last-child { border-bottom: 0; }
  581. .mock-generator { grid-template-columns: 1fr; padding: 18px; }
  582. .generator-controls { grid-template-columns: 1fr 1fr; }
  583. .route-field, .mock-generator .primary-command { grid-column: 1 / -1; }
  584. .catalog-heading { display: grid; }
  585. .catalog-tabs { overflow-x: auto; }
  586. .catalog-tab { flex: 0 0 auto; }
  587. .operations-view { padding: 24px 16px 38px; }
  588. .operations-layout { grid-template-columns: 1fr; }
  589. .panel.wide { grid-column: auto; }
  590. .timeline { grid-template-columns: 1fr; }
  591. }
  592. @media (prefers-reduced-motion: reduce) {
  593. *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; }
  594. }