globals.css 19 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058
  1. :root {
  2. color-scheme: dark;
  3. --bg: oklch(0.145 0.012 255);
  4. --bg-dots: oklch(0.31 0.018 255 / 0.28);
  5. --surface: oklch(0.19 0.014 255);
  6. --surface-raised: oklch(0.235 0.018 255);
  7. --surface-active: oklch(0.275 0.028 252);
  8. --line: oklch(0.37 0.022 255);
  9. --line-strong: oklch(0.53 0.035 255);
  10. --ink: oklch(0.95 0.008 255);
  11. --ink-soft: oklch(0.79 0.018 255);
  12. --muted: oklch(0.66 0.022 255);
  13. --plan: oklch(0.72 0.12 255);
  14. --execute: oklch(0.76 0.12 205);
  15. --validate: oklch(0.78 0.13 150);
  16. --decide: oklch(0.78 0.14 74);
  17. --loop: oklch(0.76 0.15 48);
  18. --danger: oklch(0.7 0.17 27);
  19. --focus: oklch(0.82 0.13 220);
  20. --success-line: oklch(0.58 0.09 150);
  21. --loop-line: oklch(0.48 0.1 48);
  22. --loop-surface: oklch(0.25 0.045 48);
  23. --error-line: oklch(0.48 0.1 28);
  24. --error-surface: oklch(0.24 0.055 28);
  25. --error-ink: oklch(0.86 0.09 28);
  26. --shadow: 0 20px 60px oklch(0.05 0.01 255 / 0.4);
  27. font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", sans-serif;
  28. }
  29. * {
  30. box-sizing: border-box;
  31. }
  32. html,
  33. body {
  34. min-height: 100%;
  35. margin: 0;
  36. }
  37. body {
  38. background: var(--bg);
  39. color: var(--ink);
  40. font-size: 14px;
  41. line-height: 1.5;
  42. }
  43. button,
  44. select {
  45. font: inherit;
  46. }
  47. button {
  48. color: inherit;
  49. }
  50. button:focus-visible,
  51. select:focus-visible {
  52. outline: 2px solid var(--focus);
  53. outline-offset: 3px;
  54. }
  55. h1,
  56. h2,
  57. h3,
  58. p {
  59. margin: 0;
  60. }
  61. code,
  62. pre,
  63. .ribbon-label,
  64. .cycle-index,
  65. .step-type,
  66. .status-chip,
  67. .step-metrics,
  68. .evidence-summary dd {
  69. font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
  70. }
  71. .journey-app {
  72. min-height: 100dvh;
  73. background-color: var(--bg);
  74. background-image: radial-gradient(circle, var(--bg-dots) 1px, transparent 1px);
  75. background-size: 22px 22px;
  76. }
  77. .app-bar {
  78. position: sticky;
  79. z-index: 30;
  80. top: 0;
  81. min-height: 68px;
  82. display: flex;
  83. align-items: center;
  84. gap: 18px;
  85. padding: 10px 22px;
  86. border-bottom: 1px solid var(--line);
  87. background: oklch(0.16 0.014 255 / 0.96);
  88. }
  89. .brand-lockup {
  90. min-width: 230px;
  91. display: flex;
  92. align-items: center;
  93. gap: 11px;
  94. }
  95. .brand-mark {
  96. width: 24px;
  97. height: 24px;
  98. border: 1px solid var(--line-strong);
  99. border-radius: 7px;
  100. background:
  101. linear-gradient(90deg, transparent 45%, var(--ink) 45% 55%, transparent 55%),
  102. linear-gradient(transparent 45%, var(--ink) 45% 55%, transparent 55%);
  103. box-shadow: inset 0 0 0 5px var(--surface-raised);
  104. }
  105. .brand-lockup > div {
  106. display: grid;
  107. }
  108. .brand-lockup strong {
  109. font-size: 14px;
  110. }
  111. .brand-lockup span:last-child {
  112. color: var(--muted);
  113. font-size: 11px;
  114. }
  115. .run-picker {
  116. min-width: 0;
  117. flex: 1;
  118. display: flex;
  119. align-items: center;
  120. gap: 10px;
  121. }
  122. .run-picker > span {
  123. flex: none;
  124. color: var(--muted);
  125. font-size: 11px;
  126. }
  127. .run-picker select {
  128. width: min(540px, 100%);
  129. height: 44px;
  130. padding: 0 32px 0 11px;
  131. overflow: hidden;
  132. border: 1px solid var(--line);
  133. border-radius: 8px;
  134. background: var(--surface);
  135. color: var(--ink-soft);
  136. text-overflow: ellipsis;
  137. }
  138. .zoom-switch {
  139. display: flex;
  140. padding: 3px;
  141. border: 1px solid var(--line);
  142. border-radius: 9px;
  143. background: var(--surface);
  144. }
  145. .zoom-switch button {
  146. min-width: 54px;
  147. height: 44px;
  148. padding: 0 10px;
  149. border: 0;
  150. border-radius: 6px;
  151. background: transparent;
  152. color: var(--muted);
  153. cursor: pointer;
  154. }
  155. .zoom-switch button:hover {
  156. color: var(--ink);
  157. }
  158. .zoom-switch button.active {
  159. background: var(--surface-active);
  160. color: var(--ink);
  161. box-shadow: 0 1px 8px oklch(0.06 0.01 255 / 0.35);
  162. }
  163. .icon-button {
  164. width: 44px;
  165. height: 44px;
  166. display: grid;
  167. flex: none;
  168. place-items: center;
  169. border: 1px solid var(--line);
  170. border-radius: 8px;
  171. background: var(--surface);
  172. cursor: pointer;
  173. }
  174. .icon-button:hover {
  175. border-color: var(--line-strong);
  176. background: var(--surface-raised);
  177. }
  178. .mission-strip {
  179. display: flex;
  180. align-items: stretch;
  181. gap: 20px;
  182. padding: 20px 24px;
  183. border-bottom: 1px solid var(--line);
  184. background: oklch(0.17 0.016 255 / 0.92);
  185. }
  186. .mission-copy {
  187. min-width: 0;
  188. flex: 1;
  189. display: flex;
  190. align-items: center;
  191. gap: 14px;
  192. }
  193. .mission-copy h1 {
  194. max-width: 75ch;
  195. font-size: 18px;
  196. font-weight: 650;
  197. line-height: 1.4;
  198. text-wrap: pretty;
  199. }
  200. .run-status {
  201. flex: none;
  202. padding: 4px 7px;
  203. border: 1px solid var(--line-strong);
  204. border-radius: 999px;
  205. color: var(--ink-soft);
  206. font-size: 10px;
  207. }
  208. .input-ribbon {
  209. max-width: 48%;
  210. display: flex;
  211. align-items: center;
  212. gap: 8px;
  213. padding: 8px 10px;
  214. overflow: hidden;
  215. border: 1px solid var(--line);
  216. border-radius: 8px;
  217. background: var(--surface);
  218. color: var(--muted);
  219. white-space: nowrap;
  220. }
  221. .input-ribbon > * + * {
  222. padding-left: 8px;
  223. border-left: 1px solid var(--line);
  224. }
  225. .input-ribbon strong {
  226. max-width: 320px;
  227. overflow: hidden;
  228. color: var(--ink-soft);
  229. font-size: 12px;
  230. text-overflow: ellipsis;
  231. }
  232. .input-ribbon span {
  233. font-size: 10px;
  234. }
  235. .ribbon-label {
  236. color: var(--execute);
  237. font-size: 9px !important;
  238. font-weight: 700;
  239. }
  240. .workspace {
  241. min-height: calc(100dvh - 136px);
  242. display: flex;
  243. }
  244. .overview-canvas,
  245. .flow-canvas {
  246. width: min(1180px, calc(100% - 48px));
  247. margin: 0 auto;
  248. padding: 42px 0 100px;
  249. }
  250. .zoom-evidence .flow-canvas {
  251. width: auto;
  252. min-width: 0;
  253. flex: 1;
  254. padding-right: 32px;
  255. padding-left: 32px;
  256. }
  257. .overview-heading,
  258. .flow-heading {
  259. display: flex;
  260. align-items: flex-end;
  261. justify-content: space-between;
  262. gap: 32px;
  263. margin-bottom: 28px;
  264. }
  265. .overview-heading h2,
  266. .flow-heading h2 {
  267. font-size: 21px;
  268. letter-spacing: -0.015em;
  269. text-wrap: balance;
  270. }
  271. .overview-heading p,
  272. .flow-heading p {
  273. max-width: 55ch;
  274. color: var(--muted);
  275. font-size: 12px;
  276. line-height: 1.65;
  277. text-wrap: pretty;
  278. }
  279. .flow-heading > div > span {
  280. display: block;
  281. margin-bottom: 5px;
  282. color: var(--plan);
  283. font-size: 11px;
  284. }
  285. .cycle-line {
  286. position: relative;
  287. margin: 0;
  288. padding: 0;
  289. list-style: none;
  290. }
  291. .cycle-line::before {
  292. content: "";
  293. position: absolute;
  294. top: 34px;
  295. bottom: 34px;
  296. left: 31px;
  297. width: 1px;
  298. background: var(--line-strong);
  299. }
  300. .cycle-line li {
  301. position: relative;
  302. padding-bottom: 14px;
  303. }
  304. .cycle-line button {
  305. position: relative;
  306. width: 100%;
  307. min-height: 138px;
  308. display: grid;
  309. grid-template-columns: 62px minmax(0, 1fr) 24px;
  310. align-items: center;
  311. gap: 18px;
  312. padding: 20px 22px 20px 0;
  313. border: 1px solid var(--line);
  314. border-radius: 12px;
  315. background: var(--surface);
  316. text-align: left;
  317. cursor: pointer;
  318. transition: 180ms cubic-bezier(0.22, 1, 0.36, 1);
  319. }
  320. .cycle-line button:hover {
  321. border-color: var(--line-strong);
  322. background: var(--surface-raised);
  323. transform: translateY(-2px);
  324. box-shadow: var(--shadow);
  325. }
  326. .cycle-index {
  327. position: relative;
  328. z-index: 1;
  329. width: 30px;
  330. height: 30px;
  331. display: grid;
  332. place-items: center;
  333. margin-left: 16px;
  334. border: 1px solid var(--line-strong);
  335. border-radius: 50%;
  336. background: var(--bg);
  337. color: var(--ink-soft);
  338. font-size: 10px;
  339. }
  340. .cycle-copy {
  341. min-width: 0;
  342. }
  343. .cycle-title-row {
  344. display: flex;
  345. align-items: center;
  346. gap: 12px;
  347. }
  348. .cycle-title-row h3 {
  349. font-size: 16px;
  350. }
  351. .cycle-copy > p {
  352. max-width: 78ch;
  353. margin-top: 7px;
  354. overflow: hidden;
  355. color: var(--ink-soft);
  356. font-size: 12px;
  357. text-overflow: ellipsis;
  358. white-space: nowrap;
  359. }
  360. .cycle-facts,
  361. .cycle-lifecycle {
  362. display: flex;
  363. align-items: center;
  364. flex-wrap: wrap;
  365. gap: 7px;
  366. }
  367. .cycle-facts {
  368. margin-top: 12px;
  369. }
  370. .cycle-facts span,
  371. .cycle-lifecycle span {
  372. display: inline-flex;
  373. align-items: center;
  374. gap: 4px;
  375. color: var(--muted);
  376. font-size: 10px;
  377. }
  378. .cycle-facts span {
  379. padding: 3px 7px;
  380. border: 1px solid var(--line);
  381. border-radius: 999px;
  382. }
  383. .cycle-lifecycle {
  384. margin-top: 12px;
  385. }
  386. .cycle-lifecycle span + span::before {
  387. content: "→";
  388. margin-right: 3px;
  389. color: var(--line-strong);
  390. }
  391. .cycle-lifecycle span.present {
  392. color: var(--ink-soft);
  393. }
  394. .cycle-open {
  395. color: var(--muted);
  396. transform: rotate(-90deg);
  397. }
  398. .status-chip {
  399. display: inline-flex;
  400. align-items: center;
  401. padding: 3px 7px;
  402. border: 1px solid var(--line-strong);
  403. border-radius: 999px;
  404. color: var(--ink-soft);
  405. font-size: 9px;
  406. font-weight: 700;
  407. white-space: nowrap;
  408. }
  409. .status-passed,
  410. .status-completed,
  411. .status-accept,
  412. .status-accepted {
  413. border-color: var(--success-line);
  414. color: var(--validate);
  415. }
  416. .status-failed,
  417. .status-retry,
  418. .status-revise,
  419. .status-needs_replan {
  420. border-color: var(--loop-line);
  421. color: var(--loop);
  422. }
  423. .causal-spine {
  424. position: relative;
  425. width: min(900px, 100%);
  426. margin: 0 auto;
  427. }
  428. .causal-spine::before {
  429. content: "";
  430. position: absolute;
  431. top: 12px;
  432. bottom: 12px;
  433. left: 50%;
  434. width: 1px;
  435. background: var(--line-strong);
  436. }
  437. .flow-unit {
  438. position: relative;
  439. z-index: 1;
  440. padding-bottom: 42px;
  441. }
  442. .flow-connector {
  443. position: absolute;
  444. bottom: 11px;
  445. left: calc(50% - 13px);
  446. width: 26px;
  447. height: 26px;
  448. display: grid;
  449. place-items: center;
  450. border: 1px solid var(--line-strong);
  451. border-radius: 50%;
  452. background: var(--bg);
  453. color: var(--muted);
  454. }
  455. .step-node {
  456. position: relative;
  457. width: min(680px, 100%);
  458. margin: 0 auto;
  459. overflow: hidden;
  460. border: 1px solid var(--line);
  461. border-radius: 12px;
  462. background: var(--surface);
  463. box-shadow: 0 12px 34px oklch(0.05 0.01 255 / 0.2);
  464. transition: 180ms cubic-bezier(0.22, 1, 0.36, 1);
  465. }
  466. .step-node::before {
  467. content: "";
  468. display: block;
  469. height: 2px;
  470. background: var(--plan);
  471. }
  472. .step-node.type-execute::before { background: var(--execute); }
  473. .step-node.type-validate::before { background: var(--validate); }
  474. .step-node.type-decide::before { background: var(--decide); }
  475. .step-node:hover,
  476. .step-node.selected {
  477. border-color: var(--line-strong);
  478. background: var(--surface-raised);
  479. box-shadow: var(--shadow);
  480. transform: translateY(-2px);
  481. }
  482. .step-node:has(.step-hit-area:focus-visible) {
  483. outline: 2px solid var(--focus);
  484. outline-offset: 3px;
  485. }
  486. .step-node.selected {
  487. outline: 1px solid var(--focus);
  488. outline-offset: 3px;
  489. }
  490. .step-hit-area {
  491. position: absolute;
  492. z-index: 2;
  493. inset: 0;
  494. width: 100%;
  495. border: 0;
  496. background: transparent;
  497. cursor: pointer;
  498. }
  499. .step-header,
  500. .step-node > h3,
  501. .step-layer,
  502. .data-flow,
  503. .contract-summary,
  504. .step-metrics {
  505. position: relative;
  506. z-index: 1;
  507. }
  508. .step-header {
  509. display: flex;
  510. align-items: center;
  511. justify-content: space-between;
  512. padding: 15px 18px 0;
  513. }
  514. .step-type {
  515. display: inline-flex;
  516. align-items: center;
  517. gap: 6px;
  518. color: var(--plan);
  519. font-size: 10px;
  520. font-weight: 700;
  521. }
  522. .type-execute .step-type { color: var(--execute); }
  523. .type-validate .step-type { color: var(--validate); }
  524. .type-decide .step-type { color: var(--decide); }
  525. .step-node > h3 {
  526. padding: 12px 18px 16px;
  527. font-size: 17px;
  528. line-height: 1.35;
  529. text-wrap: balance;
  530. }
  531. .step-layer {
  532. display: grid;
  533. grid-template-columns: 84px minmax(0, 1fr);
  534. gap: 4px 10px;
  535. padding: 12px 18px;
  536. border-top: 1px solid var(--line);
  537. }
  538. .step-layer > span {
  539. display: inline-flex;
  540. align-items: center;
  541. gap: 6px;
  542. color: var(--plan);
  543. font-size: 11px;
  544. font-weight: 700;
  545. }
  546. .process-layer > span {
  547. color: var(--execute);
  548. }
  549. .step-layer p {
  550. color: var(--ink-soft);
  551. font-size: 12px;
  552. line-height: 1.65;
  553. text-wrap: pretty;
  554. }
  555. .step-layer small {
  556. grid-column: 2;
  557. color: var(--muted);
  558. font-size: 9px;
  559. }
  560. .data-flow {
  561. display: grid;
  562. grid-template-columns: 1fr 20px 1fr;
  563. align-items: stretch;
  564. gap: 8px;
  565. padding: 12px 18px;
  566. border-top: 1px solid var(--line);
  567. background: oklch(0.16 0.014 255 / 0.45);
  568. }
  569. .data-flow > div {
  570. min-width: 0;
  571. display: flex;
  572. align-items: center;
  573. flex-wrap: wrap;
  574. gap: 6px;
  575. }
  576. .data-flow > svg {
  577. align-self: center;
  578. color: var(--line-strong);
  579. transform: rotate(-90deg);
  580. }
  581. .data-flow span {
  582. display: inline-flex;
  583. align-items: center;
  584. gap: 5px;
  585. color: var(--execute);
  586. font-size: 10px;
  587. }
  588. .data-flow b {
  589. max-width: 210px;
  590. overflow: hidden;
  591. padding: 3px 6px;
  592. border: 1px solid var(--line);
  593. border-radius: 5px;
  594. color: var(--ink-soft);
  595. font-size: 9px;
  596. font-weight: 500;
  597. text-overflow: ellipsis;
  598. white-space: nowrap;
  599. }
  600. .contract-summary {
  601. display: flex;
  602. align-items: center;
  603. flex-wrap: wrap;
  604. gap: 7px;
  605. padding: 11px 18px;
  606. border-top: 1px solid var(--line);
  607. color: var(--muted);
  608. font-size: 9px;
  609. }
  610. .contract-summary strong {
  611. margin-right: 3px;
  612. color: var(--ink-soft);
  613. font-size: 10px;
  614. }
  615. .contract-summary span + span::before {
  616. content: "·";
  617. margin-right: 7px;
  618. color: var(--line-strong);
  619. }
  620. .step-metrics {
  621. min-height: 34px;
  622. display: flex;
  623. align-items: center;
  624. gap: 10px;
  625. padding: 7px 18px;
  626. border-top: 1px solid var(--line);
  627. color: var(--muted);
  628. font-size: 9px;
  629. }
  630. .evidence-cue {
  631. display: inline-flex;
  632. align-items: center;
  633. gap: 4px;
  634. margin-left: auto;
  635. color: var(--ink-soft);
  636. }
  637. .parallel-frame {
  638. width: min(1040px, 100%);
  639. margin: 0 auto;
  640. padding: 14px;
  641. border: 1px dashed var(--line-strong);
  642. border-radius: 14px;
  643. background: oklch(0.16 0.014 255 / 0.78);
  644. }
  645. .parallel-heading {
  646. display: flex;
  647. align-items: center;
  648. gap: 7px;
  649. padding: 2px 3px 12px;
  650. color: var(--execute);
  651. font-size: 11px;
  652. }
  653. .parallel-lanes {
  654. display: grid;
  655. grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  656. gap: 12px;
  657. }
  658. .parallel-lanes .step-node {
  659. width: 100%;
  660. height: 100%;
  661. }
  662. .parallel-badge {
  663. position: absolute;
  664. z-index: 3;
  665. top: 49px;
  666. right: 18px;
  667. color: var(--execute);
  668. font-family: "SFMono-Regular", Consolas, monospace;
  669. font-size: 9px;
  670. }
  671. .loop-ribbon {
  672. position: relative;
  673. z-index: 3;
  674. display: flex;
  675. align-items: center;
  676. gap: 6px;
  677. padding: 9px 18px;
  678. border-top: 1px solid var(--loop-line);
  679. background: var(--loop-surface);
  680. color: var(--loop);
  681. font-size: 10px;
  682. font-weight: 700;
  683. }
  684. .projection-note {
  685. width: min(680px, 100%);
  686. margin: 12px auto 0;
  687. color: var(--muted);
  688. font-size: 10px;
  689. text-align: center;
  690. }
  691. .evidence-panel {
  692. position: sticky;
  693. top: 68px;
  694. width: min(520px, 42vw);
  695. height: calc(100dvh - 68px);
  696. flex: none;
  697. display: grid;
  698. grid-template-rows: auto minmax(0, 1fr);
  699. border-left: 1px solid var(--line);
  700. background: var(--surface);
  701. box-shadow: -24px 0 70px oklch(0.05 0.01 255 / 0.32);
  702. }
  703. .evidence-header {
  704. min-height: 92px;
  705. display: flex;
  706. align-items: flex-start;
  707. gap: 16px;
  708. padding: 17px 18px;
  709. border-bottom: 1px solid var(--line);
  710. }
  711. .evidence-header > div {
  712. min-width: 0;
  713. flex: 1;
  714. }
  715. .evidence-header span {
  716. color: var(--plan);
  717. font-size: 10px;
  718. }
  719. .evidence-header h2 {
  720. margin-top: 6px;
  721. font-size: 15px;
  722. line-height: 1.4;
  723. }
  724. .evidence-header button {
  725. width: 44px;
  726. height: 44px;
  727. display: grid;
  728. flex: none;
  729. place-items: center;
  730. border: 1px solid var(--line);
  731. border-radius: 7px;
  732. background: transparent;
  733. cursor: pointer;
  734. }
  735. .evidence-scroll {
  736. min-height: 0;
  737. overflow: auto;
  738. padding: 16px 18px 60px;
  739. }
  740. .evidence-summary {
  741. padding: 14px;
  742. border: 1px solid var(--line);
  743. border-radius: 9px;
  744. background: var(--surface-raised);
  745. }
  746. .evidence-summary > span {
  747. color: var(--plan);
  748. font-size: 10px;
  749. }
  750. .evidence-summary > p {
  751. margin-top: 7px;
  752. color: var(--ink-soft);
  753. font-size: 12px;
  754. line-height: 1.65;
  755. }
  756. .evidence-summary dl {
  757. margin: 14px 0 0;
  758. }
  759. .evidence-summary dl > div {
  760. display: grid;
  761. grid-template-columns: 72px minmax(0, 1fr);
  762. gap: 8px;
  763. padding: 5px 0;
  764. border-top: 1px solid var(--line);
  765. }
  766. .evidence-summary dt {
  767. color: var(--muted);
  768. font-size: 9px;
  769. }
  770. .evidence-summary dd {
  771. min-width: 0;
  772. margin: 0;
  773. overflow: hidden;
  774. color: var(--ink-soft);
  775. font-size: 9px;
  776. text-overflow: ellipsis;
  777. white-space: nowrap;
  778. }
  779. .evidence-block,
  780. .artifact-reader {
  781. margin-top: 13px;
  782. border: 1px solid var(--line);
  783. border-radius: 9px;
  784. background: var(--bg);
  785. }
  786. .evidence-block summary,
  787. .artifact-reader header {
  788. display: flex;
  789. align-items: center;
  790. gap: 7px;
  791. padding: 11px 12px;
  792. color: var(--ink-soft);
  793. cursor: pointer;
  794. font-size: 11px;
  795. }
  796. .evidence-block pre,
  797. .artifact-reader pre {
  798. max-height: 420px;
  799. margin: 0;
  800. padding: 12px;
  801. overflow: auto;
  802. border-top: 1px solid var(--line);
  803. color: var(--ink-soft);
  804. font-size: 9px;
  805. line-height: 1.6;
  806. white-space: pre-wrap;
  807. overflow-wrap: anywhere;
  808. }
  809. .artifact-reader button {
  810. min-height: 44px;
  811. margin: 0 12px 12px;
  812. padding: 7px 10px;
  813. border: 1px solid var(--line-strong);
  814. border-radius: 6px;
  815. background: var(--surface-raised);
  816. cursor: pointer;
  817. }
  818. .artifact-reader > p {
  819. padding: 0 12px 12px;
  820. color: var(--danger);
  821. font-size: 10px;
  822. }
  823. .evidence-empty,
  824. .empty-state {
  825. color: var(--muted);
  826. }
  827. .evidence-empty {
  828. padding: 24px 18px;
  829. }
  830. .empty-state {
  831. min-height: 100dvh;
  832. display: grid;
  833. place-content: center;
  834. gap: 10px;
  835. padding: 24px;
  836. text-align: center;
  837. }
  838. .empty-state h1 {
  839. color: var(--ink);
  840. font-size: 22px;
  841. }
  842. .empty-state p {
  843. max-width: 65ch;
  844. }
  845. .error-banner {
  846. display: flex;
  847. align-items: center;
  848. gap: 9px;
  849. padding: 9px 22px;
  850. border-bottom: 1px solid var(--error-line);
  851. background: var(--error-surface);
  852. color: var(--error-ink);
  853. font-size: 11px;
  854. }
  855. .error-banner span {
  856. flex: 1;
  857. }
  858. .error-banner button {
  859. min-height: 44px;
  860. border: 0;
  861. background: transparent;
  862. color: inherit;
  863. text-decoration: underline;
  864. cursor: pointer;
  865. }
  866. .journey-skeleton {
  867. width: min(900px, calc(100% - 48px));
  868. display: grid;
  869. gap: 18px;
  870. margin: 60px auto;
  871. }
  872. .journey-skeleton span {
  873. height: 150px;
  874. border: 1px solid var(--line);
  875. border-radius: 12px;
  876. background: var(--surface);
  877. animation: skeleton-pulse 1.6s ease-in-out infinite;
  878. }
  879. .is-spinning {
  880. animation: spin 900ms linear infinite;
  881. }
  882. @keyframes spin { to { transform: rotate(360deg); } }
  883. @keyframes skeleton-pulse { 50% { background: var(--surface-raised); } }
  884. @media (max-width: 1000px) {
  885. .app-bar { flex-wrap: wrap; }
  886. .brand-lockup { flex: 1; }
  887. .run-picker { order: 3; flex-basis: 100%; }
  888. .run-picker select { max-width: none; }
  889. .mission-strip { display: grid; }
  890. .input-ribbon { max-width: 100%; overflow-x: auto; }
  891. .zoom-evidence .flow-canvas { display: none; }
  892. .evidence-panel { width: 100%; border-left: 0; }
  893. }
  894. @media (max-width: 700px) {
  895. .app-bar { padding: 10px 14px; }
  896. .brand-lockup span:last-child { display: none; }
  897. .zoom-switch button { min-width: 48px; }
  898. .mission-strip { padding: 16px 14px; }
  899. .mission-copy { align-items: flex-start; }
  900. .mission-copy h1 { font-size: 15px; }
  901. .input-ribbon span:nth-last-child(-n + 2) { display: none; }
  902. .overview-canvas,
  903. .flow-canvas { width: calc(100% - 28px); padding-top: 28px; }
  904. .overview-heading,
  905. .flow-heading { display: grid; gap: 10px; }
  906. .cycle-line::before { left: 24px; }
  907. .cycle-line button { grid-template-columns: 48px minmax(0, 1fr); padding-right: 14px; }
  908. .cycle-index { margin-left: 9px; }
  909. .cycle-open { display: none; }
  910. .cycle-copy > p { white-space: normal; }
  911. .step-layer { grid-template-columns: 1fr; }
  912. .step-layer small { grid-column: 1; }
  913. .data-flow { grid-template-columns: 1fr; }
  914. .data-flow > svg { margin: 0 auto; transform: none; }
  915. .parallel-lanes { grid-template-columns: 1fr; }
  916. }
  917. @media (prefers-reduced-motion: reduce) {
  918. *,
  919. *::before,
  920. *::after {
  921. scroll-behavior: auto !important;
  922. animation-duration: 0.01ms !important;
  923. transition-duration: 0.01ms !important;
  924. }
  925. }