医梦与深信服FastGPT合作模式动画.html 67 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507
  1. <!doctype html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1" />
  6. <title>医梦 × 深信服 FastGPT 医疗智能体联合方案</title>
  7. <style>
  8. :root {
  9. --ink: #162033;
  10. --muted: #667085;
  11. --line: #d9e2ec;
  12. --paper: #ffffff;
  13. --bg: #f6f3ed;
  14. --deep: #10233f;
  15. --emoon: #c75a1f;
  16. --emoon-soft: #fff0e3;
  17. --sxf: #2563eb;
  18. --sxf-soft: #eaf2ff;
  19. --hospital: #059669;
  20. --hospital-soft: #e7f8f0;
  21. --warn: #dc2626;
  22. --warn-soft: #ffebe8;
  23. --gold: #f59e0b;
  24. --black: #111827;
  25. --shadow: 0 28px 70px rgba(31, 41, 55, 0.14);
  26. }
  27. * { box-sizing: border-box; }
  28. html, body {
  29. margin: 0;
  30. min-height: 100%;
  31. font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Helvetica Neue", sans-serif;
  32. background:
  33. radial-gradient(circle at 16% 12%, rgba(37, 99, 235, 0.16), transparent 28%),
  34. radial-gradient(circle at 84% 10%, rgba(199, 90, 31, 0.16), transparent 26%),
  35. linear-gradient(135deg, #f8f5ef 0%, #eef5fb 48%, #f8f4ec 100%);
  36. color: var(--ink);
  37. }
  38. body {
  39. display: flex;
  40. justify-content: center;
  41. padding: 34px 28px;
  42. }
  43. .stage {
  44. width: min(1280px, calc(100vw - 56px));
  45. min-height: 840px;
  46. background: var(--paper);
  47. border-radius: 24px;
  48. box-shadow: var(--shadow);
  49. border: 1px solid rgba(16, 35, 63, 0.08);
  50. overflow: hidden;
  51. position: relative;
  52. }
  53. .stage::before {
  54. content: "";
  55. position: absolute;
  56. left: 0;
  57. top: 0;
  58. bottom: 0;
  59. width: 8px;
  60. background: linear-gradient(180deg, var(--emoon) 0%, var(--gold) 54%, var(--sxf) 100%);
  61. z-index: 5;
  62. }
  63. .topbar {
  64. padding: 34px 42px 0 54px;
  65. display: flex;
  66. justify-content: space-between;
  67. gap: 28px;
  68. align-items: flex-start;
  69. }
  70. .kicker {
  71. display: flex;
  72. align-items: center;
  73. gap: 10px;
  74. margin-bottom: 12px;
  75. color: var(--muted);
  76. font-weight: 700;
  77. font-size: 15px;
  78. }
  79. .dot {
  80. width: 9px;
  81. height: 9px;
  82. border-radius: 999px;
  83. background: var(--emoon);
  84. box-shadow: 16px 0 0 var(--sxf), 32px 0 0 var(--hospital);
  85. margin-right: 32px;
  86. }
  87. h1 {
  88. margin: 0;
  89. font-size: clamp(30px, 3.55vw, 46px);
  90. line-height: 1.08;
  91. letter-spacing: 0;
  92. color: #0d172a;
  93. max-width: 860px;
  94. }
  95. .term {
  96. display: inline-block;
  97. padding: 5px 15px 7px;
  98. border-radius: 12px;
  99. background: #111827;
  100. color: #fff;
  101. font-family: "JetBrains Mono", "SF Mono", Menlo, monospace;
  102. font-size: 0.82em;
  103. vertical-align: 3px;
  104. white-space: nowrap;
  105. }
  106. .headline-emoon { color: var(--emoon); }
  107. .headline-sxf { color: var(--sxf); }
  108. .meeting-card {
  109. flex: 0 0 292px;
  110. background: #101f38;
  111. color: #fff;
  112. border-radius: 18px;
  113. padding: 17px 19px;
  114. min-height: 132px;
  115. position: relative;
  116. overflow: hidden;
  117. }
  118. .meeting-card::after {
  119. content: "";
  120. position: absolute;
  121. width: 160px;
  122. height: 160px;
  123. border-radius: 50%;
  124. background: rgba(255,255,255,0.08);
  125. right: -58px;
  126. bottom: -76px;
  127. }
  128. .meeting-card strong {
  129. display: block;
  130. font-size: 21px;
  131. margin-bottom: 10px;
  132. }
  133. .meeting-card span {
  134. display: block;
  135. color: rgba(255,255,255,0.78);
  136. font-size: 15px;
  137. line-height: 1.55;
  138. position: relative;
  139. z-index: 1;
  140. }
  141. .tabs {
  142. display: grid;
  143. grid-template-columns: repeat(6, minmax(0, 1fr));
  144. gap: 10px;
  145. padding: 24px 42px 0 54px;
  146. }
  147. .tab {
  148. border: 1px solid var(--line);
  149. background: #f8fafc;
  150. color: #435166;
  151. border-radius: 14px;
  152. padding: 12px 10px;
  153. font-size: 15px;
  154. font-weight: 800;
  155. cursor: pointer;
  156. transition: transform 180ms ease, background 180ms ease, color 180ms ease, border 180ms ease;
  157. white-space: nowrap;
  158. }
  159. .tab:hover { transform: translateY(-1px); }
  160. .tab.active {
  161. background: #111827;
  162. border-color: #111827;
  163. color: #fff;
  164. }
  165. .content {
  166. padding: 28px 42px 40px 54px;
  167. position: relative;
  168. }
  169. .scene {
  170. display: none;
  171. min-height: 600px;
  172. animation: fadeUp 420ms ease both;
  173. }
  174. .scene.active { display: block; }
  175. @keyframes fadeUp {
  176. from { opacity: 0; transform: translateY(16px); }
  177. to { opacity: 1; transform: translateY(0); }
  178. }
  179. .quote {
  180. text-align: center;
  181. font-size: clamp(27px, 3.4vw, 48px);
  182. line-height: 1.18;
  183. font-weight: 900;
  184. color: #0f172a;
  185. margin: 8px auto 28px;
  186. max-width: 1080px;
  187. }
  188. .quote .left-word { color: var(--sxf); }
  189. .quote .right-word { color: var(--emoon); }
  190. .quote .sep { color: #b8a999; margin: 0 8px; }
  191. .split {
  192. display: grid;
  193. grid-template-columns: 1fr 230px 1fr;
  194. gap: 22px;
  195. align-items: stretch;
  196. margin-top: 20px;
  197. }
  198. .actor {
  199. border-radius: 20px;
  200. padding: 26px 26px;
  201. min-height: 395px;
  202. border: 2px solid;
  203. position: relative;
  204. overflow: hidden;
  205. }
  206. .actor.sxf {
  207. background: var(--sxf-soft);
  208. border-color: #bed3ff;
  209. }
  210. .actor.emoon {
  211. background: var(--emoon-soft);
  212. border-color: #ffd0a6;
  213. }
  214. .actor.hospital {
  215. background: var(--hospital-soft);
  216. border-color: #a9e9ce;
  217. }
  218. .actor-title {
  219. display: flex;
  220. align-items: center;
  221. justify-content: space-between;
  222. gap: 14px;
  223. margin-bottom: 10px;
  224. }
  225. .actor-name {
  226. font-size: 30px;
  227. font-weight: 900;
  228. letter-spacing: 0;
  229. }
  230. .actor.sxf .actor-name { color: var(--sxf); }
  231. .actor.emoon .actor-name { color: var(--emoon); }
  232. .actor.hospital .actor-name { color: var(--hospital); }
  233. .actor-tag {
  234. font-size: 14px;
  235. font-weight: 800;
  236. color: #fff;
  237. background: #111827;
  238. padding: 5px 10px;
  239. border-radius: 999px;
  240. white-space: nowrap;
  241. }
  242. .actor-sub {
  243. color: #6b7280;
  244. font-size: 17px;
  245. line-height: 1.45;
  246. margin-bottom: 18px;
  247. font-weight: 700;
  248. }
  249. .items {
  250. list-style: none;
  251. padding: 0;
  252. margin: 0;
  253. display: grid;
  254. gap: 9px;
  255. }
  256. .items li {
  257. display: flex;
  258. gap: 10px;
  259. align-items: flex-start;
  260. min-height: 34px;
  261. font-size: 18px;
  262. line-height: 1.45;
  263. color: #1f2937;
  264. font-weight: 700;
  265. }
  266. .check, .cross, .lock {
  267. min-width: 24px;
  268. height: 24px;
  269. border-radius: 999px;
  270. display: inline-flex;
  271. align-items: center;
  272. justify-content: center;
  273. color: #fff;
  274. font-size: 15px;
  275. font-weight: 900;
  276. margin-top: 1px;
  277. }
  278. .check { background: var(--hospital); }
  279. .cross { background: var(--warn); }
  280. .lock { background: #111827; }
  281. .protocol {
  282. display: flex;
  283. flex-direction: column;
  284. justify-content: center;
  285. align-items: center;
  286. gap: 12px;
  287. min-height: 395px;
  288. }
  289. .pill {
  290. display: inline-flex;
  291. align-items: center;
  292. justify-content: center;
  293. min-height: 34px;
  294. padding: 8px 14px;
  295. border-radius: 999px;
  296. color: #fff;
  297. font-family: "JetBrains Mono", "SF Mono", Menlo, monospace;
  298. font-size: 14px;
  299. font-weight: 800;
  300. white-space: nowrap;
  301. box-shadow: 0 10px 20px rgba(17, 24, 39, 0.12);
  302. }
  303. .pill.sxf { background: var(--sxf); }
  304. .pill.emoon { background: var(--emoon); }
  305. .pill.hospital { background: var(--hospital); }
  306. .pill.dark { background: #111827; }
  307. .pill.warn { background: var(--warn); }
  308. .arrow-svg {
  309. width: 205px;
  310. height: 105px;
  311. overflow: visible;
  312. }
  313. .arrow-flow {
  314. stroke-dasharray: 12 10;
  315. animation: dash 1.6s linear infinite;
  316. }
  317. @keyframes dash {
  318. to { stroke-dashoffset: -44; }
  319. }
  320. .summary-grid {
  321. display: grid;
  322. grid-template-columns: 1.05fr 1.2fr;
  323. gap: 22px;
  324. align-items: stretch;
  325. margin-top: 18px;
  326. }
  327. .dark-panel {
  328. background: #101f38;
  329. color: #fff;
  330. border-radius: 22px;
  331. padding: 28px;
  332. min-height: 440px;
  333. position: relative;
  334. overflow: hidden;
  335. }
  336. .dark-panel::after {
  337. content: "";
  338. position: absolute;
  339. right: -96px;
  340. top: -96px;
  341. width: 230px;
  342. height: 230px;
  343. border-radius: 50%;
  344. border: 36px solid rgba(255,255,255,0.06);
  345. }
  346. .dark-panel h2, .panel h2 {
  347. margin: 0 0 18px;
  348. font-size: 30px;
  349. line-height: 1.18;
  350. letter-spacing: 0;
  351. }
  352. .dark-panel p {
  353. color: rgba(255,255,255,0.78);
  354. font-size: 18px;
  355. line-height: 1.6;
  356. margin: 0 0 18px;
  357. font-weight: 650;
  358. }
  359. .big-equation {
  360. display: grid;
  361. gap: 13px;
  362. margin-top: 24px;
  363. position: relative;
  364. z-index: 1;
  365. }
  366. .eq-row {
  367. display: grid;
  368. grid-template-columns: 46px 1fr;
  369. align-items: center;
  370. gap: 12px;
  371. color: #fff;
  372. }
  373. .eq-icon {
  374. width: 46px;
  375. height: 46px;
  376. border-radius: 14px;
  377. display: grid;
  378. place-items: center;
  379. font-weight: 900;
  380. font-size: 20px;
  381. }
  382. .eq-icon.sxf { background: var(--sxf); }
  383. .eq-icon.emoon { background: var(--emoon); }
  384. .eq-icon.hospital { background: var(--hospital); }
  385. .eq-text {
  386. background: rgba(255,255,255,0.09);
  387. border: 1px solid rgba(255,255,255,0.12);
  388. border-radius: 14px;
  389. padding: 12px 14px;
  390. font-size: 18px;
  391. font-weight: 850;
  392. }
  393. .panel {
  394. background: #f8fafc;
  395. border: 1px solid var(--line);
  396. border-radius: 22px;
  397. padding: 26px;
  398. min-height: 440px;
  399. }
  400. .chain {
  401. display: grid;
  402. grid-template-columns: repeat(5, 1fr);
  403. gap: 12px;
  404. align-items: stretch;
  405. margin-top: 20px;
  406. }
  407. .chain-card {
  408. border-radius: 18px;
  409. background: #fff;
  410. border: 1px solid var(--line);
  411. padding: 16px 14px;
  412. min-height: 155px;
  413. position: relative;
  414. overflow: hidden;
  415. transition: transform 240ms ease, box-shadow 240ms ease;
  416. }
  417. .chain-card.active-pulse {
  418. animation: pulseCard 2.4s ease-in-out infinite;
  419. }
  420. @keyframes pulseCard {
  421. 0%, 100% { transform: translateY(0); box-shadow: none; }
  422. 50% { transform: translateY(-5px); box-shadow: 0 14px 30px rgba(37, 99, 235, 0.16); }
  423. }
  424. .chain-card .num {
  425. display: inline-flex;
  426. width: 30px;
  427. height: 30px;
  428. border-radius: 10px;
  429. align-items: center;
  430. justify-content: center;
  431. background: #111827;
  432. color: #fff;
  433. font-weight: 900;
  434. margin-bottom: 10px;
  435. }
  436. .chain-card h3 {
  437. margin: 0 0 8px;
  438. font-size: 18px;
  439. line-height: 1.22;
  440. }
  441. .chain-card p {
  442. margin: 0;
  443. color: #667085;
  444. font-size: 15px;
  445. line-height: 1.45;
  446. font-weight: 650;
  447. }
  448. .compare-wrap {
  449. display: grid;
  450. grid-template-columns: 1fr 1fr;
  451. gap: 22px;
  452. margin-top: 18px;
  453. }
  454. .route {
  455. border-radius: 22px;
  456. padding: 22px;
  457. border: 2px solid;
  458. min-height: 420px;
  459. position: relative;
  460. }
  461. .route.bad {
  462. background: var(--warn-soft);
  463. border-color: #ffc3bc;
  464. }
  465. .route.good {
  466. background: var(--hospital-soft);
  467. border-color: #a9e9ce;
  468. }
  469. .route h2 {
  470. margin: 0 0 18px;
  471. font-size: 29px;
  472. display: flex;
  473. align-items: center;
  474. gap: 10px;
  475. }
  476. .badge {
  477. display: inline-flex;
  478. align-items: center;
  479. justify-content: center;
  480. min-width: 36px;
  481. height: 36px;
  482. border-radius: 999px;
  483. background: #111827;
  484. color: #fff;
  485. font-weight: 900;
  486. font-size: 18px;
  487. }
  488. .route-line {
  489. display: grid;
  490. gap: 10px;
  491. }
  492. .route-step {
  493. display: flex;
  494. align-items: center;
  495. gap: 12px;
  496. border-radius: 15px;
  497. padding: 12px 13px;
  498. background: rgba(255,255,255,0.72);
  499. border: 1px solid rgba(17,24,39,0.08);
  500. font-size: 17px;
  501. font-weight: 800;
  502. min-height: 48px;
  503. }
  504. .route-step strong { color: #0f172a; }
  505. .route-note {
  506. margin-top: 16px;
  507. border-radius: 16px;
  508. padding: 14px 15px;
  509. font-size: 17px;
  510. line-height: 1.48;
  511. font-weight: 850;
  512. }
  513. .route.bad .route-note { background: #fff; color: var(--warn); }
  514. .route.good .route-note { background: #fff; color: var(--hospital); }
  515. .boundary-grid {
  516. display: grid;
  517. grid-template-columns: repeat(3, 1fr);
  518. gap: 18px;
  519. margin-top: 20px;
  520. }
  521. .boundary-card {
  522. border-radius: 22px;
  523. padding: 22px;
  524. min-height: 400px;
  525. background: #fff;
  526. border: 1px solid var(--line);
  527. position: relative;
  528. overflow: hidden;
  529. }
  530. .boundary-card:nth-child(1) { border-top: 7px solid var(--sxf); }
  531. .boundary-card:nth-child(2) { border-top: 7px solid var(--emoon); }
  532. .boundary-card:nth-child(3) { border-top: 7px solid var(--hospital); }
  533. .boundary-card h2 {
  534. margin: 0 0 10px;
  535. font-size: 26px;
  536. line-height: 1.15;
  537. }
  538. .boundary-card .owner {
  539. display: inline-flex;
  540. margin-bottom: 18px;
  541. padding: 7px 11px;
  542. border-radius: 999px;
  543. color: #fff;
  544. background: #111827;
  545. font-size: 14px;
  546. font-weight: 900;
  547. }
  548. .mini-list {
  549. list-style: none;
  550. margin: 0;
  551. padding: 0;
  552. display: grid;
  553. gap: 9px;
  554. }
  555. .mini-list li {
  556. font-size: 16px;
  557. line-height: 1.4;
  558. padding: 10px 12px;
  559. background: #f8fafc;
  560. border-radius: 13px;
  561. border: 1px solid #edf2f7;
  562. font-weight: 750;
  563. }
  564. .value-layout {
  565. display: grid;
  566. grid-template-columns: 390px 1fr;
  567. gap: 22px;
  568. margin-top: 18px;
  569. align-items: stretch;
  570. }
  571. .value-menu {
  572. display: grid;
  573. grid-template-columns: 1fr 1fr;
  574. gap: 10px;
  575. }
  576. .value-btn {
  577. border: 1px solid var(--line);
  578. background: #fff;
  579. border-radius: 16px;
  580. padding: 13px 12px;
  581. text-align: left;
  582. min-height: 90px;
  583. cursor: pointer;
  584. transition: transform 180ms ease, border 180ms ease, box-shadow 180ms ease;
  585. }
  586. .value-btn:hover { transform: translateY(-2px); }
  587. .value-btn.active {
  588. border-color: var(--emoon);
  589. box-shadow: 0 16px 30px rgba(199, 90, 31, 0.16);
  590. background: var(--emoon-soft);
  591. }
  592. .value-index {
  593. display: inline-flex;
  594. width: 28px;
  595. height: 28px;
  596. border-radius: 9px;
  597. align-items: center;
  598. justify-content: center;
  599. background: #111827;
  600. color: #fff;
  601. font-weight: 900;
  602. margin-bottom: 7px;
  603. }
  604. .value-btn strong {
  605. display: block;
  606. font-size: 15px;
  607. line-height: 1.28;
  608. color: #1f2937;
  609. }
  610. .value-detail {
  611. border-radius: 24px;
  612. background: #101f38;
  613. color: #fff;
  614. padding: 30px;
  615. min-height: 470px;
  616. position: relative;
  617. overflow: hidden;
  618. }
  619. .value-detail::after {
  620. content: "";
  621. position: absolute;
  622. right: -76px;
  623. bottom: -96px;
  624. width: 240px;
  625. height: 240px;
  626. border-radius: 50%;
  627. background: rgba(255,255,255,0.06);
  628. }
  629. .value-detail h2 {
  630. margin: 0 0 12px;
  631. font-size: 34px;
  632. line-height: 1.15;
  633. max-width: 760px;
  634. position: relative;
  635. z-index: 1;
  636. }
  637. .value-detail p {
  638. margin: 0 0 22px;
  639. font-size: 19px;
  640. line-height: 1.58;
  641. color: rgba(255,255,255,0.82);
  642. font-weight: 700;
  643. position: relative;
  644. z-index: 1;
  645. }
  646. .value-points {
  647. display: grid;
  648. grid-template-columns: 1fr 1fr;
  649. gap: 12px;
  650. position: relative;
  651. z-index: 1;
  652. }
  653. .value-point {
  654. min-height: 86px;
  655. background: rgba(255,255,255,0.09);
  656. border: 1px solid rgba(255,255,255,0.14);
  657. border-radius: 16px;
  658. padding: 14px;
  659. font-size: 17px;
  660. line-height: 1.4;
  661. font-weight: 800;
  662. }
  663. .guard-grid {
  664. display: grid;
  665. grid-template-columns: repeat(3, 1fr);
  666. gap: 18px;
  667. margin-top: 20px;
  668. }
  669. .guard {
  670. border-radius: 22px;
  671. background: #fff;
  672. border: 1px solid var(--line);
  673. padding: 24px;
  674. min-height: 420px;
  675. position: relative;
  676. }
  677. .guard h2 {
  678. margin: 0 0 14px;
  679. font-size: 28px;
  680. color: #0f172a;
  681. }
  682. .guard .big-lock {
  683. width: 70px;
  684. height: 70px;
  685. border-radius: 22px;
  686. background: #111827;
  687. color: #fff;
  688. display: grid;
  689. place-items: center;
  690. font-size: 34px;
  691. font-weight: 900;
  692. margin-bottom: 18px;
  693. }
  694. .guard:nth-child(1) .big-lock { background: var(--sxf); }
  695. .guard:nth-child(2) .big-lock { background: var(--emoon); }
  696. .guard:nth-child(3) .big-lock { background: var(--hospital); }
  697. .guard-quote {
  698. margin-top: 18px;
  699. border-radius: 16px;
  700. padding: 14px;
  701. background: #f8fafc;
  702. border: 1px solid #edf2f7;
  703. color: #344054;
  704. font-size: 17px;
  705. line-height: 1.45;
  706. font-weight: 850;
  707. }
  708. .final-layout {
  709. display: grid;
  710. grid-template-columns: 1fr 1fr;
  711. gap: 22px;
  712. margin-top: 22px;
  713. }
  714. .final-card {
  715. border-radius: 24px;
  716. padding: 28px;
  717. min-height: 445px;
  718. border: 2px solid;
  719. }
  720. .final-card.must {
  721. background: #fff6eb;
  722. border-color: #ffd0a6;
  723. }
  724. .final-card.give {
  725. background: #edf6ff;
  726. border-color: #bed3ff;
  727. }
  728. .final-card h2 {
  729. margin: 0 0 18px;
  730. font-size: 34px;
  731. color: #111827;
  732. }
  733. .final-card.must h2 { color: var(--emoon); }
  734. .final-card.give h2 { color: var(--sxf); }
  735. .bottom-line {
  736. margin-top: 24px;
  737. border-radius: 20px;
  738. background: #111827;
  739. color: #fff;
  740. padding: 20px 24px;
  741. display: flex;
  742. align-items: center;
  743. justify-content: space-between;
  744. gap: 22px;
  745. }
  746. .bottom-line strong {
  747. font-size: 24px;
  748. line-height: 1.3;
  749. }
  750. .bottom-line span {
  751. color: rgba(255,255,255,0.76);
  752. font-size: 17px;
  753. line-height: 1.45;
  754. font-weight: 700;
  755. max-width: 430px;
  756. }
  757. /* Apple-like visual refresh: restrained color, lighter type, soft cards. */
  758. :root {
  759. --ink: #1d1d1f;
  760. --muted: #6e6e73;
  761. --line: #e5e5ea;
  762. --paper: rgba(255, 255, 255, 0.92);
  763. --bg: #f5f5f7;
  764. --deep: #f5f5f7;
  765. --emoon: #b75a24;
  766. --emoon-soft: #fff7f0;
  767. --sxf: #0a84ff;
  768. --sxf-soft: #f3f8ff;
  769. --hospital: #30a46c;
  770. --hospital-soft: #f3fbf7;
  771. --warn: #d84f3f;
  772. --warn-soft: #fff5f4;
  773. --gold: #d99a2b;
  774. --black: #1d1d1f;
  775. --shadow: 0 24px 60px rgba(0, 0, 0, 0.08);
  776. }
  777. html, body {
  778. background:
  779. radial-gradient(circle at 18% 8%, rgba(10, 132, 255, 0.08), transparent 28%),
  780. radial-gradient(circle at 86% 12%, rgba(183, 90, 36, 0.08), transparent 28%),
  781. linear-gradient(135deg, #f5f5f7 0%, #fbfbfd 52%, #f5f5f7 100%);
  782. color: var(--ink);
  783. -webkit-font-smoothing: antialiased;
  784. text-rendering: optimizeLegibility;
  785. }
  786. .stage {
  787. border-radius: 30px;
  788. border: 1px solid rgba(0, 0, 0, 0.06);
  789. backdrop-filter: blur(18px);
  790. }
  791. .stage::before {
  792. width: 4px;
  793. background: linear-gradient(180deg, rgba(183, 90, 36, 0.9), rgba(10, 132, 255, 0.85));
  794. }
  795. .kicker {
  796. font-weight: 500;
  797. color: #7a7a80;
  798. }
  799. .dot {
  800. width: 7px;
  801. height: 7px;
  802. opacity: 0.72;
  803. box-shadow: 14px 0 0 rgba(10, 132, 255, 0.72), 28px 0 0 rgba(48, 164, 108, 0.72);
  804. margin-right: 28px;
  805. }
  806. h1 {
  807. font-weight: 650;
  808. letter-spacing: 0;
  809. color: #1d1d1f;
  810. }
  811. .term {
  812. background: rgba(255, 255, 255, 0.82);
  813. color: #1d1d1f;
  814. border: 1px solid rgba(0, 0, 0, 0.12);
  815. box-shadow: inset 0 -1px 0 rgba(0,0,0,0.04);
  816. font-weight: 650;
  817. font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Helvetica Neue", sans-serif;
  818. padding: 4px 13px 6px;
  819. }
  820. .meeting-card {
  821. background: rgba(245, 245, 247, 0.88);
  822. color: #1d1d1f;
  823. border: 1px solid rgba(0,0,0,0.08);
  824. box-shadow: 0 14px 35px rgba(0,0,0,0.05);
  825. border-radius: 22px;
  826. }
  827. .meeting-card::after {
  828. background: rgba(10, 132, 255, 0.08);
  829. }
  830. .meeting-card strong {
  831. font-weight: 650;
  832. color: #1d1d1f;
  833. }
  834. .meeting-card span {
  835. color: #6e6e73;
  836. font-weight: 450;
  837. }
  838. .tab {
  839. background: rgba(255, 255, 255, 0.72);
  840. color: #515154;
  841. border-color: rgba(0,0,0,0.08);
  842. border-radius: 999px;
  843. font-weight: 550;
  844. box-shadow: 0 4px 14px rgba(0,0,0,0.03);
  845. }
  846. .tab.active {
  847. background: rgba(10, 132, 255, 0.10);
  848. border-color: rgba(10, 132, 255, 0.30);
  849. color: #075ca8;
  850. box-shadow: 0 10px 24px rgba(10,132,255,0.10);
  851. }
  852. .quote {
  853. font-weight: 650;
  854. color: #1d1d1f;
  855. letter-spacing: 0;
  856. }
  857. .actor,
  858. .route,
  859. .boundary-card,
  860. .guard,
  861. .final-card,
  862. .panel,
  863. .chain-card,
  864. .value-btn {
  865. border-radius: 24px;
  866. box-shadow: 0 10px 28px rgba(0,0,0,0.04);
  867. }
  868. .actor {
  869. border-width: 1px;
  870. }
  871. .actor.sxf {
  872. background: linear-gradient(180deg, #f8fbff 0%, #eef6ff 100%);
  873. border-color: rgba(10,132,255,0.20);
  874. }
  875. .actor.emoon {
  876. background: linear-gradient(180deg, #fffaf6 0%, #fff1e7 100%);
  877. border-color: rgba(183,90,36,0.22);
  878. }
  879. .actor-name {
  880. font-weight: 650;
  881. letter-spacing: 0;
  882. }
  883. .actor-tag,
  884. .owner {
  885. background: rgba(255,255,255,0.68);
  886. color: #515154;
  887. border: 1px solid rgba(0,0,0,0.08);
  888. font-weight: 550;
  889. }
  890. .actor-sub,
  891. .chain-card p,
  892. .route-note,
  893. .guard-quote {
  894. font-weight: 450;
  895. color: #6e6e73;
  896. }
  897. .items li,
  898. .mini-list li,
  899. .route-step {
  900. font-weight: 520;
  901. color: #2c2c2e;
  902. }
  903. .check,
  904. .cross,
  905. .lock,
  906. .badge,
  907. .big-lock,
  908. .eq-icon,
  909. .value-index,
  910. .chain-card .num {
  911. box-shadow: none;
  912. font-weight: 650;
  913. }
  914. .lock,
  915. .badge,
  916. .chain-card .num,
  917. .value-index {
  918. background: #e8e8ed;
  919. color: #3a3a3c;
  920. }
  921. .cross {
  922. background: #f2d7d3;
  923. color: #9f3228;
  924. }
  925. .check {
  926. background: #dff3e8;
  927. color: #227a4d;
  928. }
  929. .pill {
  930. background: rgba(255,255,255,0.85) !important;
  931. color: #3a3a3c;
  932. border: 1px solid rgba(0,0,0,0.10);
  933. box-shadow: 0 8px 20px rgba(0,0,0,0.04);
  934. font-weight: 550;
  935. font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Helvetica Neue", sans-serif;
  936. }
  937. .route.bad {
  938. background: #fff8f7;
  939. border-color: rgba(216,79,63,0.18);
  940. }
  941. .route.good {
  942. background: #f7fcfa;
  943. border-color: rgba(48,164,108,0.18);
  944. }
  945. .route h2,
  946. .boundary-card h2,
  947. .guard h2,
  948. .final-card h2,
  949. .dark-panel h2,
  950. .panel h2 {
  951. font-weight: 650;
  952. letter-spacing: 0;
  953. color: #1d1d1f;
  954. }
  955. .boundary-card:nth-child(1),
  956. .boundary-card:nth-child(2),
  957. .boundary-card:nth-child(3) {
  958. border-top-width: 1px;
  959. }
  960. .dark-panel,
  961. .value-detail,
  962. .bottom-line {
  963. background: rgba(255,255,255,0.82);
  964. color: #1d1d1f;
  965. border: 1px solid rgba(0,0,0,0.08);
  966. box-shadow: 0 14px 36px rgba(0,0,0,0.06);
  967. }
  968. .dark-panel::after,
  969. .value-detail::after {
  970. background: rgba(10,132,255,0.07);
  971. border-color: rgba(10,132,255,0.06);
  972. }
  973. .dark-panel p,
  974. .value-detail p,
  975. .bottom-line span {
  976. color: #6e6e73;
  977. font-weight: 450;
  978. }
  979. .value-detail h2 {
  980. color: #1d1d1f;
  981. font-weight: 650;
  982. }
  983. .value-point,
  984. .eq-text {
  985. background: #f5f5f7;
  986. color: #2c2c2e;
  987. border-color: rgba(0,0,0,0.08);
  988. font-weight: 520;
  989. }
  990. .value-btn.active {
  991. background: rgba(183, 90, 36, 0.08);
  992. border-color: rgba(183, 90, 36, 0.22);
  993. box-shadow: 0 12px 26px rgba(183,90,36,0.08);
  994. }
  995. .value-btn strong {
  996. font-weight: 520;
  997. }
  998. .guard .big-lock,
  999. .guard:nth-child(1) .big-lock,
  1000. .guard:nth-child(2) .big-lock,
  1001. .guard:nth-child(3) .big-lock {
  1002. background: #f0f0f3;
  1003. color: #1d1d1f;
  1004. }
  1005. .final-card.must,
  1006. .final-card.give {
  1007. background: rgba(255,255,255,0.78);
  1008. border-color: rgba(0,0,0,0.08);
  1009. }
  1010. .final-card.must h2 {
  1011. color: var(--emoon);
  1012. }
  1013. .final-card.give h2 {
  1014. color: var(--sxf);
  1015. }
  1016. .bottom-line strong {
  1017. color: #1d1d1f;
  1018. font-weight: 650;
  1019. }
  1020. /* Claude / Anthropic-inspired warm technical palette. */
  1021. :root {
  1022. --ink: #2b2118;
  1023. --muted: #7b6b5d;
  1024. --line: #ead8c5;
  1025. --paper: rgba(255, 252, 246, 0.94);
  1026. --bg: #f7efe3;
  1027. --deep: #3a2a20;
  1028. --emoon: #b85c38;
  1029. --emoon-soft: #fff0e6;
  1030. --sxf: #8a5a3b;
  1031. --sxf-soft: #fff7dc;
  1032. --hospital: #8f6b2f;
  1033. --hospital-soft: #fff8e9;
  1034. --warn: #c95f4b;
  1035. --warn-soft: #fff0ec;
  1036. --gold: #d0933d;
  1037. --black: #2b2118;
  1038. --shadow: 0 26px 70px rgba(92, 54, 28, 0.14);
  1039. }
  1040. html, body {
  1041. background:
  1042. radial-gradient(circle at 14% 12%, rgba(216, 147, 61, 0.18), transparent 30%),
  1043. radial-gradient(circle at 88% 10%, rgba(201, 95, 75, 0.15), transparent 28%),
  1044. linear-gradient(135deg, #f7efe3 0%, #fff8ed 48%, #f4e7d7 100%);
  1045. }
  1046. .stage {
  1047. background:
  1048. linear-gradient(180deg, rgba(255,252,246,0.96), rgba(255,248,237,0.94)),
  1049. var(--paper);
  1050. border-color: rgba(122, 89, 58, 0.18);
  1051. box-shadow: var(--shadow);
  1052. }
  1053. .stage::before {
  1054. width: 5px;
  1055. background: linear-gradient(180deg, #c7683f 0%, #d7a14c 46%, #b67a52 100%);
  1056. }
  1057. .kicker {
  1058. color: #8a7461;
  1059. }
  1060. .dot {
  1061. background: #b85c38;
  1062. box-shadow: 14px 0 0 #d0933d, 28px 0 0 #c95f4b;
  1063. opacity: 0.9;
  1064. }
  1065. h1,
  1066. .quote,
  1067. .meeting-card strong,
  1068. .route h2,
  1069. .boundary-card h2,
  1070. .guard h2,
  1071. .final-card h2,
  1072. .dark-panel h2,
  1073. .panel h2,
  1074. .value-detail h2,
  1075. .bottom-line strong {
  1076. color: #2b2118;
  1077. }
  1078. .term {
  1079. background: #fff7e8;
  1080. color: #2b2118;
  1081. border-color: rgba(142, 92, 50, 0.22);
  1082. box-shadow: inset 0 -1px 0 rgba(142,92,50,0.08);
  1083. }
  1084. .headline-emoon,
  1085. .actor.emoon .actor-name,
  1086. .final-card.must h2 {
  1087. color: #b85c38;
  1088. }
  1089. .headline-sxf,
  1090. .actor.sxf .actor-name,
  1091. .final-card.give h2,
  1092. .quote .left-word {
  1093. color: #9a673d;
  1094. }
  1095. .quote .right-word {
  1096. color: #b85c38;
  1097. }
  1098. .quote .sep {
  1099. color: #b9a28d;
  1100. }
  1101. .meeting-card {
  1102. background: linear-gradient(145deg, #fff8ea 0%, #fff1e7 100%);
  1103. border-color: rgba(184, 92, 56, 0.20);
  1104. box-shadow: 0 18px 42px rgba(122, 76, 40, 0.10);
  1105. }
  1106. .meeting-card::after {
  1107. background: rgba(201, 95, 75, 0.12);
  1108. }
  1109. .meeting-card span,
  1110. .actor-sub,
  1111. .chain-card p,
  1112. .route-note,
  1113. .guard-quote,
  1114. .dark-panel p,
  1115. .value-detail p,
  1116. .bottom-line span {
  1117. color: #7b6b5d;
  1118. }
  1119. .tab {
  1120. background: rgba(255, 250, 241, 0.84);
  1121. color: #6f5847;
  1122. border-color: rgba(145, 105, 71, 0.18);
  1123. box-shadow: 0 5px 16px rgba(122, 76, 40, 0.05);
  1124. }
  1125. .tab.active {
  1126. background: #fff0df;
  1127. border-color: rgba(184, 92, 56, 0.34);
  1128. color: #a44f31;
  1129. box-shadow: 0 12px 28px rgba(184,92,56,0.12);
  1130. }
  1131. .actor.sxf {
  1132. background:
  1133. linear-gradient(180deg, rgba(255,249,229,0.96) 0%, rgba(255,243,205,0.88) 100%);
  1134. border-color: rgba(208, 147, 61, 0.32);
  1135. }
  1136. .actor.emoon {
  1137. background:
  1138. linear-gradient(180deg, rgba(255,246,237,0.98) 0%, rgba(255,231,218,0.86) 100%);
  1139. border-color: rgba(184, 92, 56, 0.30);
  1140. }
  1141. .actor-tag,
  1142. .owner,
  1143. .pill {
  1144. background: rgba(255, 249, 238, 0.88);
  1145. color: #6f5847;
  1146. border-color: rgba(145, 105, 71, 0.20);
  1147. }
  1148. .check {
  1149. background: #f6dfb6;
  1150. color: #79551d;
  1151. }
  1152. .cross {
  1153. background: #f6d6cd;
  1154. color: #9a4434;
  1155. }
  1156. .lock,
  1157. .badge,
  1158. .chain-card .num,
  1159. .value-index {
  1160. background: #f0ddc7;
  1161. color: #6f4f35;
  1162. }
  1163. .route.bad {
  1164. background: linear-gradient(180deg, #fff7f2 0%, #ffede8 100%);
  1165. border-color: rgba(201, 95, 75, 0.25);
  1166. }
  1167. .route.good {
  1168. background: linear-gradient(180deg, #fff9eb 0%, #fff1d1 100%);
  1169. border-color: rgba(208, 147, 61, 0.30);
  1170. }
  1171. .route-step,
  1172. .mini-list li,
  1173. .value-point,
  1174. .eq-text {
  1175. background: rgba(255, 252, 246, 0.72);
  1176. border-color: rgba(145, 105, 71, 0.16);
  1177. color: #3a2a20;
  1178. }
  1179. .route.bad .route-note,
  1180. .route.good .route-note,
  1181. .guard-quote {
  1182. background: rgba(255, 252, 246, 0.72);
  1183. color: #7b5d45;
  1184. border: 1px solid rgba(145, 105, 71, 0.14);
  1185. }
  1186. .boundary-card,
  1187. .guard,
  1188. .final-card,
  1189. .panel,
  1190. .chain-card,
  1191. .value-btn {
  1192. background: rgba(255, 252, 246, 0.84);
  1193. border-color: rgba(145, 105, 71, 0.16);
  1194. box-shadow: 0 14px 34px rgba(122, 76, 40, 0.08);
  1195. }
  1196. .boundary-card:nth-child(1) {
  1197. background: linear-gradient(180deg, #fff9e8 0%, rgba(255,252,246,0.88) 100%);
  1198. }
  1199. .boundary-card:nth-child(2) {
  1200. background: linear-gradient(180deg, #fff0e7 0%, rgba(255,252,246,0.88) 100%);
  1201. }
  1202. .boundary-card:nth-child(3) {
  1203. background: linear-gradient(180deg, #fff6df 0%, rgba(255,252,246,0.88) 100%);
  1204. }
  1205. .value-detail {
  1206. background:
  1207. radial-gradient(circle at 94% 90%, rgba(201, 95, 75, 0.14), transparent 26%),
  1208. linear-gradient(145deg, #fff7e8 0%, #fff0e7 54%, #fffaf4 100%);
  1209. border-color: rgba(184, 92, 56, 0.22);
  1210. box-shadow: 0 20px 48px rgba(122, 76, 40, 0.13);
  1211. }
  1212. .value-detail::after {
  1213. background: rgba(208,147,61,0.13);
  1214. }
  1215. .value-btn {
  1216. background: linear-gradient(180deg, rgba(255,252,246,0.96), rgba(255,247,235,0.86));
  1217. }
  1218. .value-btn:nth-child(3n + 1) {
  1219. background: linear-gradient(180deg, #fff2e8, #fffaf3);
  1220. }
  1221. .value-btn:nth-child(3n + 2) {
  1222. background: linear-gradient(180deg, #fff8e4, #fffbf4);
  1223. }
  1224. .value-btn:nth-child(3n) {
  1225. background: linear-gradient(180deg, #fff0ec, #fffaf5);
  1226. }
  1227. .value-btn.active {
  1228. background: linear-gradient(180deg, #fff0e2, #ffe6d7);
  1229. border-color: rgba(184, 92, 56, 0.36);
  1230. box-shadow: 0 14px 30px rgba(184,92,56,0.16);
  1231. }
  1232. .value-point {
  1233. background: rgba(255, 252, 246, 0.76);
  1234. }
  1235. .value-point:nth-child(1) { background: #fff6e8; }
  1236. .value-point:nth-child(2) { background: #fff1ea; }
  1237. .value-point:nth-child(3) { background: #fff9df; }
  1238. .value-point:nth-child(4) { background: #fff4ee; }
  1239. .guard .big-lock,
  1240. .guard:nth-child(1) .big-lock,
  1241. .guard:nth-child(2) .big-lock,
  1242. .guard:nth-child(3) .big-lock {
  1243. background: linear-gradient(145deg, #ffe7d8, #fff2d4);
  1244. color: #8f4b2d;
  1245. border: 1px solid rgba(184, 92, 56, 0.18);
  1246. }
  1247. .final-card.must {
  1248. background: linear-gradient(180deg, #fff3ea 0%, rgba(255,252,246,0.90) 100%);
  1249. border-color: rgba(184, 92, 56, 0.24);
  1250. }
  1251. .final-card.give {
  1252. background: linear-gradient(180deg, #fff8e5 0%, rgba(255,252,246,0.90) 100%);
  1253. border-color: rgba(208, 147, 61, 0.28);
  1254. }
  1255. .bottom-line {
  1256. background: linear-gradient(145deg, #fff4e8, #fff9ef);
  1257. border-color: rgba(184, 92, 56, 0.24);
  1258. box-shadow: 0 18px 42px rgba(122, 76, 40, 0.12);
  1259. }
  1260. .arrow-svg line {
  1261. opacity: 0.72;
  1262. }
  1263. .arrow-svg line[stroke="#2563eb"] {
  1264. stroke: #3ad4d8;
  1265. opacity: 0.78;
  1266. }
  1267. .arrow-svg line[stroke="#c75a1f"] {
  1268. stroke: #2b1f99;
  1269. opacity: 0.72;
  1270. }
  1271. .arrow-svg path[fill="#2563eb"] {
  1272. fill: #3ad4d8;
  1273. }
  1274. .arrow-svg path[fill="#c75a1f"] {
  1275. fill: #2b1f99;
  1276. }
  1277. /* Medical brand palette: cyan + indigo, preserving the same layered color system. */
  1278. :root {
  1279. --ink: #14152f;
  1280. --muted: #667085;
  1281. --line: #d8e7ee;
  1282. --paper: rgba(249, 253, 253, 0.94);
  1283. --bg: #eef8f9;
  1284. --deep: #2b1f99;
  1285. --emoon: #2b1f99;
  1286. --emoon-soft: #f0f1ff;
  1287. --sxf: #167e90;
  1288. --sxf-soft: #e9fbfb;
  1289. --hospital: #209d8f;
  1290. --hospital-soft: #edfbf7;
  1291. --warn: #d68a42;
  1292. --warn-soft: #fff6ec;
  1293. --gold: #3ad4d8;
  1294. --black: #14152f;
  1295. --shadow: 0 26px 70px rgba(43, 31, 153, 0.12);
  1296. }
  1297. html, body {
  1298. background:
  1299. radial-gradient(circle at 14% 12%, rgba(58, 212, 216, 0.20), transparent 30%),
  1300. radial-gradient(circle at 88% 10%, rgba(43, 31, 153, 0.13), transparent 28%),
  1301. linear-gradient(135deg, #effbfb 0%, #fbffff 48%, #eef3ff 100%);
  1302. }
  1303. .stage {
  1304. background:
  1305. linear-gradient(180deg, rgba(249,253,253,0.97), rgba(245,250,255,0.94)),
  1306. var(--paper);
  1307. border-color: rgba(43, 31, 153, 0.12);
  1308. box-shadow: var(--shadow);
  1309. }
  1310. .stage::before {
  1311. background: linear-gradient(180deg, #3ad4d8 0%, #209d8f 44%, #2b1f99 100%);
  1312. }
  1313. .kicker {
  1314. color: #6a7580;
  1315. }
  1316. .dot {
  1317. background: #3ad4d8;
  1318. box-shadow: 14px 0 0 #209d8f, 28px 0 0 #2b1f99;
  1319. }
  1320. h1,
  1321. .quote,
  1322. .meeting-card strong,
  1323. .route h2,
  1324. .boundary-card h2,
  1325. .guard h2,
  1326. .final-card h2,
  1327. .dark-panel h2,
  1328. .panel h2,
  1329. .value-detail h2,
  1330. .bottom-line strong {
  1331. color: #14152f;
  1332. }
  1333. .term {
  1334. background: rgba(255,255,255,0.78);
  1335. color: #14152f;
  1336. border-color: rgba(43, 31, 153, 0.16);
  1337. }
  1338. .headline-emoon,
  1339. .actor.emoon .actor-name,
  1340. .final-card.must h2,
  1341. .quote .right-word {
  1342. color: #2b1f99;
  1343. }
  1344. .headline-sxf,
  1345. .actor.sxf .actor-name,
  1346. .final-card.give h2,
  1347. .quote .left-word {
  1348. color: #167e90;
  1349. }
  1350. .quote .sep {
  1351. color: #97a6b1;
  1352. }
  1353. .meeting-card {
  1354. background: linear-gradient(145deg, #f0feff 0%, #f2f3ff 100%);
  1355. border-color: rgba(58, 212, 216, 0.28);
  1356. box-shadow: 0 18px 42px rgba(43, 31, 153, 0.08);
  1357. }
  1358. .meeting-card::after {
  1359. background: rgba(43, 31, 153, 0.08);
  1360. }
  1361. .meeting-card span,
  1362. .actor-sub,
  1363. .chain-card p,
  1364. .route-note,
  1365. .guard-quote,
  1366. .dark-panel p,
  1367. .value-detail p,
  1368. .bottom-line span {
  1369. color: #667085;
  1370. }
  1371. .tab {
  1372. background: rgba(255,255,255,0.82);
  1373. color: #4f5f6f;
  1374. border-color: rgba(43, 31, 153, 0.10);
  1375. box-shadow: 0 5px 16px rgba(43, 31, 153, 0.04);
  1376. }
  1377. .tab.active {
  1378. background: #e9fbfb;
  1379. border-color: rgba(58, 212, 216, 0.62);
  1380. color: #1b6f80;
  1381. box-shadow: 0 12px 28px rgba(58,212,216,0.15);
  1382. }
  1383. .actor.sxf {
  1384. background:
  1385. linear-gradient(180deg, rgba(238,254,254,0.98) 0%, rgba(226,249,250,0.90) 100%);
  1386. border-color: rgba(58, 212, 216, 0.42);
  1387. }
  1388. .actor.emoon {
  1389. background:
  1390. linear-gradient(180deg, rgba(247,247,255,0.98) 0%, rgba(237,239,255,0.90) 100%);
  1391. border-color: rgba(43, 31, 153, 0.22);
  1392. }
  1393. .actor-tag,
  1394. .owner,
  1395. .pill {
  1396. background: rgba(255,255,255,0.72);
  1397. color: #4f5f6f;
  1398. border-color: rgba(43, 31, 153, 0.12);
  1399. }
  1400. .check {
  1401. background: #dff7f1;
  1402. color: #167b70;
  1403. }
  1404. .cross {
  1405. background: #fff0d9;
  1406. color: #a86624;
  1407. }
  1408. .lock,
  1409. .badge,
  1410. .chain-card .num,
  1411. .value-index {
  1412. background: #e5fbfc;
  1413. color: #167e90;
  1414. }
  1415. .route.bad {
  1416. background: linear-gradient(180deg, #fffaf3 0%, #fff3e5 100%);
  1417. border-color: rgba(214, 138, 66, 0.22);
  1418. }
  1419. .route.good {
  1420. background: linear-gradient(180deg, #effefe 0%, #eaf5ff 100%);
  1421. border-color: rgba(58, 212, 216, 0.36);
  1422. }
  1423. .route-step,
  1424. .mini-list li,
  1425. .value-point,
  1426. .eq-text {
  1427. background: rgba(255,255,255,0.74);
  1428. border-color: rgba(43, 31, 153, 0.10);
  1429. color: #25264a;
  1430. }
  1431. .route.bad .route-note,
  1432. .route.good .route-note,
  1433. .guard-quote {
  1434. background: rgba(255,255,255,0.72);
  1435. color: #5f6a75;
  1436. border-color: rgba(43, 31, 153, 0.10);
  1437. }
  1438. .boundary-card,
  1439. .guard,
  1440. .final-card,
  1441. .panel,
  1442. .chain-card,
  1443. .value-btn {
  1444. background: rgba(255,255,255,0.84);
  1445. border-color: rgba(43, 31, 153, 0.10);
  1446. box-shadow: 0 14px 34px rgba(43, 31, 153, 0.07);
  1447. }
  1448. .boundary-card:nth-child(1) {
  1449. background: linear-gradient(180deg, #eafefe 0%, rgba(255,255,255,0.88) 100%);
  1450. }
  1451. .boundary-card:nth-child(2) {
  1452. background: linear-gradient(180deg, #f1f2ff 0%, rgba(255,255,255,0.88) 100%);
  1453. }
  1454. .boundary-card:nth-child(3) {
  1455. background: linear-gradient(180deg, #edfdf8 0%, rgba(255,255,255,0.88) 100%);
  1456. }
  1457. .value-detail {
  1458. background:
  1459. radial-gradient(circle at 94% 90%, rgba(43, 31, 153, 0.10), transparent 26%),
  1460. linear-gradient(145deg, #f0feff 0%, #f4f5ff 54%, #fbffff 100%);
  1461. border-color: rgba(58, 212, 216, 0.36);
  1462. box-shadow: 0 20px 48px rgba(43, 31, 153, 0.11);
  1463. }
  1464. .value-detail::after {
  1465. background: rgba(58, 212, 216, 0.16);
  1466. }
  1467. .value-btn {
  1468. background: linear-gradient(180deg, rgba(255,255,255,0.96), rgba(239,254,254,0.72));
  1469. }
  1470. .value-btn:nth-child(3n + 1) {
  1471. background: linear-gradient(180deg, #effefe, #fbffff);
  1472. }
  1473. .value-btn:nth-child(3n + 2) {
  1474. background: linear-gradient(180deg, #f3f4ff, #fbffff);
  1475. }
  1476. .value-btn:nth-child(3n) {
  1477. background: linear-gradient(180deg, #edfdf8, #fbffff);
  1478. }
  1479. .value-btn.active {
  1480. background: linear-gradient(180deg, #e8fcfd, #e4e7ff);
  1481. border-color: rgba(43, 31, 153, 0.30);
  1482. box-shadow: 0 14px 30px rgba(43,31,153,0.13);
  1483. }
  1484. .value-point:nth-child(1) { background: #eefefe; }
  1485. .value-point:nth-child(2) { background: #f1f3ff; }
  1486. .value-point:nth-child(3) { background: #eefbf6; }
  1487. .value-point:nth-child(4) { background: #f5f6ff; }
  1488. .guard .big-lock,
  1489. .guard:nth-child(1) .big-lock,
  1490. .guard:nth-child(2) .big-lock,
  1491. .guard:nth-child(3) .big-lock {
  1492. background: linear-gradient(145deg, #e5fbfc, #f0f2ff);
  1493. color: #2b1f99;
  1494. border-color: rgba(43, 31, 153, 0.14);
  1495. }
  1496. .final-card.must {
  1497. background: linear-gradient(180deg, #f3f4ff 0%, rgba(255,255,255,0.90) 100%);
  1498. border-color: rgba(43, 31, 153, 0.18);
  1499. }
  1500. .final-card.give {
  1501. background: linear-gradient(180deg, #eafefe 0%, rgba(255,255,255,0.90) 100%);
  1502. border-color: rgba(58, 212, 216, 0.32);
  1503. }
  1504. .bottom-line {
  1505. background: linear-gradient(145deg, #f1f3ff, #effefe);
  1506. border-color: rgba(43, 31, 153, 0.18);
  1507. box-shadow: 0 18px 42px rgba(43, 31, 153, 0.10);
  1508. }
  1509. h1 { font-weight: 580; }
  1510. h1 .term { font-weight: 600; }
  1511. .quote {
  1512. font-weight: 560;
  1513. }
  1514. .quote .term {
  1515. background: transparent;
  1516. border: 0;
  1517. box-shadow: none;
  1518. padding: 0;
  1519. border-radius: 0;
  1520. color: inherit;
  1521. font-size: 1em;
  1522. vertical-align: baseline;
  1523. font-weight: 580;
  1524. }
  1525. .actor-name,
  1526. .route h2,
  1527. .boundary-card h2,
  1528. .guard h2,
  1529. .final-card h2,
  1530. .dark-panel h2,
  1531. .panel h2,
  1532. .value-detail h2 {
  1533. font-weight: 560;
  1534. }
  1535. .items li,
  1536. .mini-list li,
  1537. .route-step,
  1538. .value-point,
  1539. .eq-text {
  1540. font-weight: 470;
  1541. }
  1542. .route-step strong,
  1543. .items strong,
  1544. strong {
  1545. font-weight: 580;
  1546. }
  1547. .actor-tag,
  1548. .owner,
  1549. .pill,
  1550. .tab,
  1551. .value-btn strong {
  1552. font-weight: 500;
  1553. }
  1554. .arrow-svg line {
  1555. opacity: 0.58;
  1556. stroke-width: 3;
  1557. }
  1558. /* Final flat medical style: no glow gradients, no AI-like purple-blue blends. */
  1559. html, body {
  1560. background: #f4f8f9;
  1561. }
  1562. .stage {
  1563. background: #fbfdfd;
  1564. box-shadow: 0 18px 48px rgba(43, 31, 153, 0.08);
  1565. }
  1566. .stage::before {
  1567. background: #3ad4d8;
  1568. }
  1569. .meeting-card,
  1570. .actor,
  1571. .route,
  1572. .boundary-card,
  1573. .guard,
  1574. .final-card,
  1575. .panel,
  1576. .chain-card,
  1577. .value-btn,
  1578. .value-detail,
  1579. .bottom-line {
  1580. box-shadow: 0 10px 28px rgba(20, 21, 47, 0.05);
  1581. }
  1582. .meeting-card {
  1583. background: #f3fbfc;
  1584. }
  1585. .meeting-card::after,
  1586. .value-detail::after {
  1587. display: none;
  1588. }
  1589. .actor.sxf {
  1590. background: #edfafa;
  1591. border-color: rgba(58, 212, 216, 0.42);
  1592. }
  1593. .actor.emoon {
  1594. background: #f2f3ff;
  1595. border-color: rgba(43, 31, 153, 0.20);
  1596. }
  1597. .route.bad {
  1598. background: #fff8ef;
  1599. border-color: rgba(214, 138, 66, 0.20);
  1600. }
  1601. .route.good {
  1602. background: #eefafa;
  1603. border-color: rgba(58, 212, 216, 0.34);
  1604. }
  1605. .boundary-card:nth-child(1),
  1606. .value-btn:nth-child(3n + 1),
  1607. .value-point:nth-child(1) {
  1608. background: #edfafa;
  1609. }
  1610. .boundary-card:nth-child(2),
  1611. .value-btn:nth-child(3n + 2),
  1612. .value-point:nth-child(2) {
  1613. background: #f2f3ff;
  1614. }
  1615. .boundary-card:nth-child(3),
  1616. .value-btn:nth-child(3n),
  1617. .value-point:nth-child(3) {
  1618. background: #eff9f5;
  1619. }
  1620. .value-detail {
  1621. background: #f2f8fb;
  1622. border-color: rgba(58, 212, 216, 0.36);
  1623. }
  1624. .value-point:nth-child(4) {
  1625. background: #f5f7fb;
  1626. }
  1627. .value-btn {
  1628. background: #ffffff;
  1629. }
  1630. .value-btn.active {
  1631. background: #e9fbfb;
  1632. border-color: rgba(58, 212, 216, 0.56);
  1633. box-shadow: 0 12px 28px rgba(58, 212, 216, 0.12);
  1634. }
  1635. .guard .big-lock,
  1636. .guard:nth-child(1) .big-lock,
  1637. .guard:nth-child(2) .big-lock,
  1638. .guard:nth-child(3) .big-lock {
  1639. background: #e9fbfb;
  1640. color: #2b1f99;
  1641. }
  1642. .final-card.must {
  1643. background: #f2f3ff;
  1644. border-color: rgba(43, 31, 153, 0.16);
  1645. }
  1646. .final-card.give {
  1647. background: #edfafa;
  1648. border-color: rgba(58, 212, 216, 0.34);
  1649. }
  1650. .bottom-line {
  1651. background: #f3fbfc;
  1652. border-color: rgba(58, 212, 216, 0.32);
  1653. }
  1654. .check {
  1655. background: #dff7f1;
  1656. color: #137a70;
  1657. }
  1658. .lock,
  1659. .badge,
  1660. .chain-card .num,
  1661. .value-index {
  1662. background: #e9fbfb;
  1663. color: #167e90;
  1664. }
  1665. .cross {
  1666. background: #eef0f4;
  1667. color: #6b7280;
  1668. }
  1669. .value-layout {
  1670. grid-template-columns: 390px 1fr;
  1671. }
  1672. .value-menu {
  1673. grid-template-columns: 1fr;
  1674. gap: 8px;
  1675. }
  1676. .value-btn {
  1677. min-height: 50px;
  1678. padding: 10px 12px;
  1679. grid-template-columns: 32px 1fr;
  1680. column-gap: 10px;
  1681. }
  1682. .value-btn,
  1683. .value-btn:nth-child(3n + 1),
  1684. .value-btn:nth-child(3n + 2),
  1685. .value-btn:nth-child(3n) {
  1686. background: #ffffff;
  1687. border-color: #e4e8f0;
  1688. }
  1689. .value-index {
  1690. width: 26px;
  1691. height: 26px;
  1692. }
  1693. .value-btn strong {
  1694. line-height: 1.25;
  1695. }
  1696. /* Strict final palette: brand cyan + brand indigo + neutrals only. */
  1697. html, body {
  1698. background: #f6f8fb;
  1699. }
  1700. .stage {
  1701. background: #ffffff;
  1702. border-color: #e5e7ef;
  1703. box-shadow: 0 18px 48px rgba(20, 21, 47, 0.08);
  1704. }
  1705. .stage::before {
  1706. background: #3ad4d8;
  1707. }
  1708. .dot {
  1709. background: #3ad4d8;
  1710. box-shadow: 14px 0 0 #2b1f99, 28px 0 0 #a9b0bd;
  1711. }
  1712. .meeting-card,
  1713. .actor,
  1714. .route,
  1715. .boundary-card,
  1716. .guard,
  1717. .final-card,
  1718. .panel,
  1719. .chain-card,
  1720. .value-btn,
  1721. .value-detail,
  1722. .bottom-line {
  1723. box-shadow: 0 10px 28px rgba(20, 21, 47, 0.045);
  1724. }
  1725. .meeting-card,
  1726. .actor.sxf,
  1727. .route.good,
  1728. .boundary-card:nth-child(1),
  1729. .value-btn:nth-child(3n + 1),
  1730. .value-point:nth-child(1),
  1731. .final-card.give,
  1732. .bottom-line {
  1733. background: #eefcfd;
  1734. border-color: rgba(58, 212, 216, 0.42);
  1735. }
  1736. .actor.emoon,
  1737. .boundary-card:nth-child(2),
  1738. .value-btn:nth-child(3n + 2),
  1739. .value-point:nth-child(2),
  1740. .final-card.must {
  1741. background: #f2f2fb;
  1742. border-color: rgba(43, 31, 153, 0.20);
  1743. }
  1744. .route.bad,
  1745. .boundary-card:nth-child(3),
  1746. .guard,
  1747. .value-btn:nth-child(3n),
  1748. .value-point:nth-child(3),
  1749. .value-point:nth-child(4) {
  1750. background: #f7f9fc;
  1751. border-color: #e4e8f0;
  1752. }
  1753. .value-detail {
  1754. background: #f3fbfc;
  1755. border-color: rgba(58, 212, 216, 0.42);
  1756. }
  1757. .value-btn {
  1758. display: grid;
  1759. grid-template-columns: 34px 1fr;
  1760. align-items: start;
  1761. column-gap: 10px;
  1762. background: #ffffff;
  1763. border-color: #e4e8f0;
  1764. }
  1765. .value-btn.active {
  1766. background: #eefcfd;
  1767. border-color: rgba(43, 31, 153, 0.30);
  1768. box-shadow: 0 12px 28px rgba(43, 31, 153, 0.10);
  1769. }
  1770. .value-index {
  1771. margin: 0;
  1772. width: 28px;
  1773. height: 28px;
  1774. background: #e9fbfb;
  1775. color: #2b1f99;
  1776. }
  1777. .value-btn strong {
  1778. padding-top: 1px;
  1779. min-width: 0;
  1780. }
  1781. .check,
  1782. .lock,
  1783. .badge,
  1784. .chain-card .num {
  1785. background: #e9fbfb;
  1786. color: #2b1f99;
  1787. }
  1788. .cross {
  1789. background: #eef0f4;
  1790. color: #6b7280;
  1791. }
  1792. .guard .big-lock,
  1793. .guard:nth-child(1) .big-lock,
  1794. .guard:nth-child(2) .big-lock,
  1795. .guard:nth-child(3) .big-lock {
  1796. background: #e9fbfb;
  1797. color: #2b1f99;
  1798. border-color: rgba(58, 212, 216, 0.42);
  1799. }
  1800. .route.bad .route-note,
  1801. .route.good .route-note,
  1802. .guard-quote,
  1803. .route-step,
  1804. .mini-list li,
  1805. .value-point,
  1806. .eq-text {
  1807. background: #ffffff;
  1808. border-color: #e4e8f0;
  1809. color: #25264a;
  1810. }
  1811. .tab.active {
  1812. background: #eefcfd;
  1813. color: #2b1f99;
  1814. border-color: rgba(58, 212, 216, 0.55);
  1815. }
  1816. .value-menu .value-btn:not(.active),
  1817. .value-menu .value-btn:not(.active):nth-child(3n + 1),
  1818. .value-menu .value-btn:not(.active):nth-child(3n + 2),
  1819. .value-menu .value-btn:not(.active):nth-child(3n) {
  1820. background: #ffffff;
  1821. border-color: #e4e8f0;
  1822. }
  1823. .value-menu .value-btn.active {
  1824. background: #eefcfd;
  1825. border-color: rgba(58, 212, 216, 0.55);
  1826. }
  1827. @media (max-width: 980px) {
  1828. body { padding: 18px; }
  1829. .stage { width: calc(100vw - 36px); }
  1830. .topbar { flex-direction: column; padding: 28px 28px 0 36px; }
  1831. .meeting-card { flex-basis: auto; width: 100%; }
  1832. .tabs { grid-template-columns: repeat(2, 1fr); padding: 20px 28px 0 36px; }
  1833. .content { padding: 24px 28px 34px 36px; }
  1834. .split, .summary-grid, .compare-wrap, .boundary-grid, .value-layout, .guard-grid, .final-layout {
  1835. grid-template-columns: 1fr;
  1836. }
  1837. .protocol { min-height: 140px; }
  1838. .chain { grid-template-columns: 1fr; }
  1839. .value-menu { grid-template-columns: 1fr; }
  1840. .value-points { grid-template-columns: 1fr; }
  1841. .bottom-line { flex-direction: column; align-items: flex-start; }
  1842. }
  1843. </style>
  1844. </head>
  1845. <body>
  1846. <main class="stage">
  1847. <header class="topbar">
  1848. <div>
  1849. <div class="kicker"><span class="dot"></span>对外会议展示版 · 面向深信服技术与商务团队</div>
  1850. <h1><span class="term">FastGPT</span> 做 AI 底座,<span class="headline-emoon">医梦</span> 做医疗闭环</h1>
  1851. </div>
  1852. <aside class="meeting-card">
  1853. <strong>联合方案核心</strong>
  1854. <span>FastGPT 的平台能力,与医梦的医疗场景、系统接口、医生确认和运营闭环结合,才能形成医院可上线、可验收、可复制的方案。</span>
  1855. </aside>
  1856. </header>
  1857. <nav class="tabs" aria-label="展示场景">
  1858. <button class="tab active" data-scene="scene-1">合作模式</button>
  1859. <button class="tab" data-scene="scene-2">医疗落地难点</button>
  1860. <button class="tab" data-scene="scene-3">技术分工</button>
  1861. <button class="tab" data-scene="scene-4">医梦价值</button>
  1862. <button class="tab" data-scene="scene-5">边界共识</button>
  1863. <button class="tab" data-scene="scene-6">落地路径</button>
  1864. </nav>
  1865. <section class="content">
  1866. <article id="scene-1" class="scene active">
  1867. <div class="quote">
  1868. <span class="left-word">深信服</span>提供 AI 底座<span class="sep">,</span><span class="right-word">医梦</span>补齐医疗闭环
  1869. </div>
  1870. <div class="split">
  1871. <div class="actor sxf">
  1872. <div class="actor-title">
  1873. <span class="actor-name">深信服 FastGPT</span>
  1874. <span class="actor-tag">AI 底座</span>
  1875. </div>
  1876. <div class="actor-sub">负责通用 AI 能力运行、部署和平台化支撑</div>
  1877. <ul class="items">
  1878. <li><span class="check">✓</span><span>智能体构建、Workflow 编排、RAG 运行</span></li>
  1879. <li><span class="check">✓</span><span>模型接入、OCR、多模态、Embedding、Rerank</span></li>
  1880. <li><span class="check">✓</span><span>算力、GPU、超融合、私有化部署和平台运维</span></li>
  1881. <li><span class="lock">边</span><span>医疗业务系统由医梦控制层统一封装</span></li>
  1882. <li><span class="lock">边</span><span>医疗写操作经医生 / 患者确认后执行</span></li>
  1883. </ul>
  1884. </div>
  1885. <div class="protocol">
  1886. <span class="pill sxf">AI 子流程</span>
  1887. <svg class="arrow-svg" viewBox="0 0 205 105" aria-hidden="true">
  1888. <defs>
  1889. <marker id="arrR1" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto">
  1890. <path d="M0,0 L12,6 L0,12 Z" fill="#2563eb"></path>
  1891. </marker>
  1892. <marker id="arrL1" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto">
  1893. <path d="M12,0 L0,6 L12,12 Z" fill="#c75a1f"></path>
  1894. </marker>
  1895. </defs>
  1896. <line class="arrow-flow" x1="20" y1="30" x2="178" y2="30" stroke="#2563eb" stroke-width="4" marker-end="url(#arrR1)"></line>
  1897. <line class="arrow-flow" x1="178" y1="74" x2="28" y2="74" stroke="#c75a1f" stroke-width="4" marker-end="url(#arrL1)"></line>
  1898. </svg>
  1899. <span class="pill emoon">医疗主流程</span>
  1900. </div>
  1901. <div class="actor emoon">
  1902. <div class="actor-title">
  1903. <span class="actor-name">医梦控制层</span>
  1904. <span class="actor-tag">医疗闭环</span>
  1905. </div>
  1906. <div class="actor-sub">负责把 AI 能力转成医院可上线、可验收的场景</div>
  1907. <ul class="items">
  1908. <li><span class="check">✓</span><span>统一入口、身份权限、医疗场景路由</span></li>
  1909. <li><span class="check">✓</span><span>MCP Gateway 封装 HIS / LIS / EMR / 慢病</span></li>
  1910. <li><span class="check">✓</span><span>Card Runtime 承接医生确认、患者确认和幂等审计</span></li>
  1911. <li><span class="check">✓</span><span>知识库源资产、医生反馈、医疗安全规则</span></li>
  1912. <li><span class="check">✓</span><span>能力值、场景计量、运营和商业闭环</span></li>
  1913. </ul>
  1914. </div>
  1915. </div>
  1916. </article>
  1917. <article id="scene-2" class="scene">
  1918. <div class="quote">医疗项目不是<span class="term">问答 Demo</span><span class="sep">,</span>而是可确认、可审计的业务闭环</div>
  1919. <div class="compare-wrap">
  1920. <div class="route bad">
  1921. <h2><span class="badge">!</span> 通用平台单独落地的难点</h2>
  1922. <div class="route-line">
  1923. <div class="route-step"><span class="cross">!</span><strong>用户入口</strong> 需要身份、权限和端侧场景治理</div>
  1924. <div class="route-step"><span class="cross">!</span><strong>院内接口</strong> 需要厂商差异适配和安全控制</div>
  1925. <div class="route-step"><span class="cross">!</span><strong>模型输出</strong> 需要医疗安全校验和端侧表达转换</div>
  1926. <div class="route-step"><span class="cross">!</span><strong>业务写操作</strong> 需要确认、审计、幂等和补偿</div>
  1927. <div class="route-step"><span class="cross">!</span><strong>知识与反馈</strong> 需要医学审核和持续运营</div>
  1928. </div>
  1929. <div class="route-note">结论:FastGPT 能力很强,但医疗落地还需要行业控制层承接真实业务复杂度。</div>
  1930. </div>
  1931. <div class="route good">
  1932. <h2><span class="badge">✓</span> FastGPT + 医梦后的闭环</h2>
  1933. <div class="route-line">
  1934. <div class="route-step"><span class="check">✓</span><strong>统一入口</strong> 承接患者端、医生端和终端设备</div>
  1935. <div class="route-step"><span class="check">✓</span><strong>MCP Gateway</strong> 受控封装医院系统接口</div>
  1936. <div class="route-step"><span class="check">✓</span><strong>FastGPT</strong> 只处理标准化后的 AI 子任务</div>
  1937. <div class="route-step"><span class="check">✓</span><strong>Card Runtime</strong> 承接确认、幂等、审计和状态</div>
  1938. <div class="route-step"><span class="check">✓</span><strong>反馈与计量</strong> 回到医梦,形成可复制场景包</div>
  1939. </div>
  1940. <div class="route-note">结论:深信服保持平台通用性,医梦承担医疗行业复杂度,联合方案更容易复制。</div>
  1941. </div>
  1942. </div>
  1943. </article>
  1944. <article id="scene-3" class="scene">
  1945. <div class="quote"><span class="term">边界清楚</span>,双方能力才能形成联合方案</div>
  1946. <div class="boundary-grid">
  1947. <div class="boundary-card">
  1948. <h2>AI 能力底座</h2>
  1949. <span class="owner">深信服主责</span>
  1950. <ul class="mini-list">
  1951. <li>FastGPT Agent Builder</li>
  1952. <li>Workflow 引擎与节点运行</li>
  1953. <li>RAG、Embedding、Rerank</li>
  1954. <li>LLM、OCR、多模态能力</li>
  1955. <li>GPU、私有化部署、平台日志</li>
  1956. </ul>
  1957. </div>
  1958. <div class="boundary-card">
  1959. <h2>医疗控制层</h2>
  1960. <span class="owner">医梦主责</span>
  1961. <ul class="mini-list">
  1962. <li>统一入口与身份权限</li>
  1963. <li>医疗场景路由与任务状态机</li>
  1964. <li>MCP Gateway 医疗工具语义</li>
  1965. <li>Card Runtime 医疗关键动作</li>
  1966. <li>医生反馈、知识源资产、计量账本</li>
  1967. </ul>
  1968. </div>
  1969. <div class="boundary-card">
  1970. <h2>联合交付场景包</h2>
  1971. <span class="owner">双方协同</span>
  1972. <ul class="mini-list">
  1973. <li>报告解读智能体</li>
  1974. <li>慢病任务生成智能体</li>
  1975. <li>挂号与导诊智能体</li>
  1976. <li>知识库运行副本同步</li>
  1977. <li>PoC 验证、场景验收、联合复制</li>
  1978. </ul>
  1979. </div>
  1980. </div>
  1981. <div class="chain">
  1982. <div class="chain-card active-pulse">
  1983. <span class="num">1</span>
  1984. <h3>用户入口</h3>
  1985. <p>患者端、医生端、设备端先进入医梦统一入口。</p>
  1986. </div>
  1987. <div class="chain-card active-pulse">
  1988. <span class="num">2</span>
  1989. <h3>医疗控制</h3>
  1990. <p>身份、权限、场景、任务状态由医梦判断。</p>
  1991. </div>
  1992. <div class="chain-card active-pulse">
  1993. <span class="num">3</span>
  1994. <h3>AI 子流程</h3>
  1995. <p>FastGPT 执行 LLM、RAG、Workflow、OCR。</p>
  1996. </div>
  1997. <div class="chain-card active-pulse">
  1998. <span class="num">4</span>
  1999. <h3>卡片确认</h3>
  2000. <p>医生或患者确认后,关键动作才继续。</p>
  2001. </div>
  2002. <div class="chain-card active-pulse">
  2003. <span class="num">5</span>
  2004. <h3>医院系统</h3>
  2005. <p>写操作经医梦 MCP Gateway 进入院内系统。</p>
  2006. </div>
  2007. </div>
  2008. </article>
  2009. <article id="scene-4" class="scene">
  2010. <div class="quote">医梦让 FastGPT 进入医疗项目的<span class="term">八大价值</span></div>
  2011. <div class="value-layout">
  2012. <div class="value-menu" id="valueMenu"></div>
  2013. <div class="value-detail">
  2014. <h2 id="valueTitle"></h2>
  2015. <p id="valueText"></p>
  2016. <div class="value-points" id="valuePoints"></div>
  2017. </div>
  2018. </div>
  2019. </article>
  2020. <article id="scene-5" class="scene">
  2021. <div class="quote">三类共识:<span class="headline-emoon">入口</span>、<span class="headline-emoon">系统</span>、<span class="headline-emoon">医疗资产</span>需要医梦承接</div>
  2022. <div class="guard-grid">
  2023. <div class="guard">
  2024. <div class="big-lock">1</div>
  2025. <h2>用户入口统一进医梦</h2>
  2026. <ul class="items">
  2027. <li><span class="lock">边</span><span>患者端、医生端、门户、小程序、设备端统一进医梦入口</span></li>
  2028. <li><span class="check">✓</span><span>FastGPT 输出经医梦做安全校验和卡片封装</span></li>
  2029. <li><span class="check">✓</span><span>医梦负责端侧表达、卡片封装和风险提示</span></li>
  2030. </ul>
  2031. <div class="guard-quote">这样能保证不同终端体验一致,也方便医院验收。</div>
  2032. </div>
  2033. <div class="guard">
  2034. <div class="big-lock">2</div>
  2035. <h2>医院系统通过医梦封装</h2>
  2036. <ul class="items">
  2037. <li><span class="lock">边</span><span>HIS / LIS / EMR / 慢病 / 支付接口由医梦封装</span></li>
  2038. <li><span class="check">✓</span><span>FastGPT 调用医梦提供的标准受控工具</span></li>
  2039. <li><span class="check">✓</span><span>医梦处理权限、脱敏、幂等、审计和补偿</span></li>
  2040. </ul>
  2041. <div class="guard-quote">这样深信服不用陷入每家医院接口差异。</div>
  2042. </div>
  2043. <div class="guard">
  2044. <div class="big-lock">3</div>
  2045. <h2>医疗资产由医梦主控</h2>
  2046. <ul class="items">
  2047. <li><span class="lock">边</span><span>知识库源文件、医疗模板、医生反馈由医梦主控</span></li>
  2048. <li><span class="check">✓</span><span>FastGPT 承载知识库运行副本和检索能力</span></li>
  2049. <li><span class="check">✓</span><span>场景包、验收指标、能力值计量支撑商业闭环</span></li>
  2050. </ul>
  2051. <div class="guard-quote">这样平台能力才能沉淀为可复制的医疗场景包。</div>
  2052. </div>
  2053. </div>
  2054. </article>
  2055. <article id="scene-6" class="scene">
  2056. <div class="quote">落地路径:先做<span class="term">报告解读 PoC</span>,再复制场景包</div>
  2057. <div class="final-layout">
  2058. <div class="final-card must">
  2059. <h2>联合方案共识</h2>
  2060. <ul class="items">
  2061. <li><span class="check">✓</span><span>FastGPT 作为后方 AI 能力底座接入医梦控制层</span></li>
  2062. <li><span class="check">✓</span><span>医院系统由医梦 MCP Gateway 统一封装</span></li>
  2063. <li><span class="check">✓</span><span>医疗写操作经过医生 / 患者确认和审计</span></li>
  2064. <li><span class="check">✓</span><span>医生反馈、知识源资产、医疗模板持续迭代</span></li>
  2065. <li><span class="check">✓</span><span>双方共同形成可采购、可验收、可复制的场景包</span></li>
  2066. </ul>
  2067. </div>
  2068. <div class="final-card give">
  2069. <h2>第一阶段建议</h2>
  2070. <ul class="items">
  2071. <li><span class="check">✓</span><span>验证 FastGPT 外部 API / Tool / MCP 调用能力</span></li>
  2072. <li><span class="check">✓</span><span>验证 RAG、OCR、Workflow 和结构化 JSON 输出</span></li>
  2073. <li><span class="check">✓</span><span>打通 report.searchReports 和 report.getReportDetail</span></li>
  2074. <li><span class="check">✓</span><span>医梦封装医生端摘要卡和患者端通俗解读卡</span></li>
  2075. <li><span class="check">✓</span><span>形成 PoC 评估报告和下一阶段慢病任务方案</span></li>
  2076. </ul>
  2077. </div>
  2078. </div>
  2079. <div class="bottom-line">
  2080. <strong>一句话结论:FastGPT 提供平台能力,医梦让平台能力进入医疗真实场景。</strong>
  2081. <span>双方不是替代关系,而是“AI 底座 + 医疗控制层”的联合解决方案。</span>
  2082. </div>
  2083. </article>
  2084. </section>
  2085. </main>
  2086. <script>
  2087. const tabs = Array.from(document.querySelectorAll('.tab'));
  2088. const scenes = Array.from(document.querySelectorAll('.scene'));
  2089. let current = 0;
  2090. let autoTimer = null;
  2091. function showScene(index) {
  2092. current = index;
  2093. tabs.forEach((tab, i) => tab.classList.toggle('active', i === index));
  2094. scenes.forEach((scene, i) => scene.classList.toggle('active', i === index));
  2095. }
  2096. tabs.forEach((tab, index) => {
  2097. tab.addEventListener('click', () => {
  2098. showScene(index);
  2099. });
  2100. });
  2101. document.addEventListener('keydown', (event) => {
  2102. if (event.key === 'ArrowRight') showScene((current + 1) % scenes.length);
  2103. if (event.key === 'ArrowLeft') showScene((current - 1 + scenes.length) % scenes.length);
  2104. });
  2105. const values = [
  2106. {
  2107. title: '1. 从通用 Agent 平台变成医疗可交付系统',
  2108. text: 'FastGPT 已经具备智能体、Workflow、RAG、模型调用等平台能力。医梦的价值是把这些平台能力组织成医院能上线、医生愿意用、患者看得懂、甲方能验收的医疗场景包。',
  2109. points: ['定义报告解读、慢病任务、挂号导诊等医疗场景', '设计医疗任务状态机和关键确认点', '区分医生端专业摘要与患者端通俗表达', '补齐场景验收指标、样例数据和上线标准']
  2110. },
  2111. {
  2112. title: '2. 掌握医疗业务接口语义',
  2113. text: 'HIS、LIS、EMR、慢病平台不是普通 API。一个查报告、锁号或发任务动作背后包含权限、业务状态、厂商差异、补偿和审计责任,必须由医疗工具语义层统一封装。',
  2114. points: ['报告查询要判断最终审核、作废、危急值和查看权限', '挂号锁号要处理身份确认、重复锁号、超时释放', '慢病任务要区分草案、医生确认、居民下发', '医梦 MCP Gateway 把复杂院内接口变成受控标准工具']
  2115. },
  2116. {
  2117. title: '3. 负责医疗安全边界',
  2118. text: '医疗 AI 输出不能只追求流畅。模型原始输出不能直接给患者或直接形成医疗事实,必须经过风险分层、禁止表达、患者端通俗化、医生确认和高风险转人工。',
  2119. points: ['禁止自动诊断、自动处方和越权建议', '患者端避免恐慌表达,医生端保留专业结构', '危急值、高风险、用药相关内容进入确认或转人工', '所有关键输出经过 Schema 校验和审计留痕']
  2120. },
  2121. {
  2122. title: '4. 拥有医疗知识库工程能力',
  2123. text: 'FastGPT 可以承载知识库运行副本,但医疗知识库不是简单上传几份指南。医梦负责医学知识怎么拆、怎么写、怎么审核、怎么版本化,以及如何根据医生反馈持续迭代。',
  2124. points: ['血常规拆成指标解释、异常组合、风险分层、趋势分析', '慢病拆成饮食、运动、用药提醒、复诊随访规则', '维护患者端表达、医生端模板和禁止表达库', '医学审核后发布版本,再同步到 FastGPT 运行副本']
  2125. },
  2126. {
  2127. title: '5. 设计医生反馈闭环',
  2128. text: '通用平台反馈通常是点赞、点踩和调用日志。医疗智能体需要知道医生是否采纳、改了哪里、哪个指标解释不准确、是否漏掉关键异常,并把这些反馈反哺知识库和 Workflow。',
  2129. points: ['记录采纳率、修改率、错误类型和风险标注', '反馈关联指标、文本段落、知识条目和模型版本', '医生修正文案进入知识库源资产和 Prompt 优化池', '形成医疗场景 Benchmark,支撑持续运营和专病优化']
  2130. },
  2131. {
  2132. title: '6. 用 Card Runtime 承接关键动作',
  2133. text: '医疗场景不能只靠聊天输出。挂号、报告解读、慢病任务、随访计划都需要可确认、可审计、可过期、可回滚的医疗卡片,避免 AI 直接越权执行。',
  2134. points: ['报告异常摘要卡、患者通俗解读卡、医生反馈卡', '慢病任务草案卡、医生审核卡、随访风险提醒卡', '卡片动作绑定幂等、过期、审计和状态流转', '医生或患者确认后,才进入受控工具调用链路']
  2135. },
  2136. {
  2137. title: '7. 包装成甲方可采购的场景包',
  2138. text: '医院不会单独验收“有没有 Workflow、有没有 RAG”。医院验收的是报告解读是否准确、慢病任务是否可审核、挂号导诊是否能闭环、业务系统是否真正打通。',
  2139. points: ['每个场景包包含业务流程、工具清单、知识库结构', '提供 Prompt 模板、Card Schema、风险规则和测试用例', '定义结构化解析成功率、医生采纳率、严重错误率', '把平台能力转成可试点、可采购、可复制的交付物']
  2140. },
  2141. {
  2142. title: '8. 补齐医疗商业化计量',
  2143. text: 'FastGPT 的 usage 统计适合核算 AI 成本,但医疗商业化还需要按医院、科室、医生、设备、报告类型、场景包、采纳率和质量评分做运营计量。',
  2144. points: ['按医院、科室、医生、患者端和医生端统计', '按智能体、设备、报告类型、任务类型归因', '结合采纳率、修改率、任务生成量和服务包转化', '支撑能力值、场景包授权、知识库建设和运营服务费']
  2145. }
  2146. ];
  2147. const valueMenu = document.getElementById('valueMenu');
  2148. const valueTitle = document.getElementById('valueTitle');
  2149. const valueText = document.getElementById('valueText');
  2150. const valuePoints = document.getElementById('valuePoints');
  2151. let valueIndex = 0;
  2152. let valueTimer = null;
  2153. function renderValueButtons() {
  2154. valueMenu.innerHTML = values.map((item, index) => `
  2155. <button class="value-btn ${index === 0 ? 'active' : ''}" data-value="${index}">
  2156. <span class="value-index">${index + 1}</span>
  2157. <strong>${item.title.replace(/^[0-9]+\\.\\s*/, '')}</strong>
  2158. </button>
  2159. `).join('');
  2160. Array.from(document.querySelectorAll('.value-btn')).forEach((btn) => {
  2161. btn.addEventListener('click', () => {
  2162. setValue(Number(btn.dataset.value));
  2163. });
  2164. });
  2165. }
  2166. function setValue(index) {
  2167. valueIndex = index;
  2168. const item = values[index];
  2169. Array.from(document.querySelectorAll('.value-btn')).forEach((btn, i) => {
  2170. btn.classList.toggle('active', i === index);
  2171. });
  2172. valueTitle.textContent = item.title;
  2173. valueText.textContent = item.text;
  2174. valuePoints.innerHTML = item.points.map(point => `<div class="value-point">${point}</div>`).join('');
  2175. }
  2176. function restartAutoValues() {}
  2177. renderValueButtons();
  2178. setValue(0);
  2179. </script>
  2180. </body>
  2181. </html>