globals.css 56 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235
  1. :root {
  2. --bg: #f4efe7;
  3. --panel: rgba(255, 252, 247, 0.88);
  4. --panel-strong: #fffaf3;
  5. --text: #241c16;
  6. --muted: #6c6258;
  7. --line: rgba(60, 42, 27, 0.12);
  8. --brand: #b85c38;
  9. --brand-soft: #e8c8b6;
  10. --shadow: 0 20px 60px rgba(58, 35, 18, 0.12);
  11. --radius-lg: 28px;
  12. --radius-md: 18px;
  13. --radius-sm: 12px;
  14. }
  15. * {
  16. box-sizing: border-box;
  17. }
  18. html {
  19. scroll-behavior: smooth;
  20. scrollbar-gutter: stable;
  21. background: var(--bg);
  22. }
  23. body {
  24. margin: 0;
  25. min-width: 320px;
  26. color: var(--text);
  27. background:
  28. radial-gradient(circle at top left, rgba(232, 200, 182, 0.7), transparent 30%),
  29. radial-gradient(circle at bottom right, rgba(184, 92, 56, 0.12), transparent 28%),
  30. linear-gradient(180deg, #f8f4ed 0%, var(--bg) 100%);
  31. font-family: "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
  32. }
  33. body.reader-body {
  34. overflow: hidden;
  35. }
  36. body.chat-body {
  37. overflow: hidden;
  38. overscroll-behavior: none;
  39. background: var(--bg);
  40. }
  41. a {
  42. color: inherit;
  43. text-decoration: none;
  44. }
  45. button,
  46. input,
  47. textarea {
  48. font: inherit;
  49. }
  50. .page-shell {
  51. width: min(1200px, calc(100vw - 32px));
  52. margin: 0 auto;
  53. }
  54. .site-header {
  55. position: sticky;
  56. top: 0;
  57. z-index: 20;
  58. backdrop-filter: blur(12px);
  59. background: rgba(248, 244, 237, 0.72);
  60. border-bottom: 1px solid var(--line);
  61. }
  62. .site-header--menu-open {
  63. z-index: 40;
  64. }
  65. .site-header__inner {
  66. display: flex;
  67. align-items: center;
  68. justify-content: space-between;
  69. gap: 20px;
  70. padding: 16px 0;
  71. }
  72. .site-brand {
  73. display: flex;
  74. align-items: center;
  75. gap: 12px;
  76. }
  77. .site-brand__mark {
  78. width: 42px;
  79. height: 42px;
  80. border-radius: 14px;
  81. background: linear-gradient(135deg, #c26a46, #8d4529);
  82. color: white;
  83. display: grid;
  84. place-items: center;
  85. font-weight: 700;
  86. box-shadow: var(--shadow);
  87. }
  88. .site-brand__name {
  89. font-size: 1rem;
  90. font-weight: 700;
  91. }
  92. .site-brand__tag {
  93. margin-top: 2px;
  94. color: var(--muted);
  95. font-size: 0.88rem;
  96. }
  97. .site-nav {
  98. display: flex;
  99. flex-wrap: wrap;
  100. align-items: center;
  101. justify-content: flex-end;
  102. gap: 10px;
  103. }
  104. .site-nav a {
  105. padding: 10px 14px;
  106. border-radius: 999px;
  107. color: var(--muted);
  108. }
  109. .site-nav a.is-active {
  110. background: rgba(184, 92, 56, 0.1);
  111. color: #8f4b2f;
  112. }
  113. .site-nav a:hover {
  114. background: rgba(255, 250, 243, 0.92);
  115. color: var(--text);
  116. }
  117. .site-menu-button,
  118. .site-drawer,
  119. .site-drawer-backdrop {
  120. display: none;
  121. }
  122. .site-menu-button {
  123. width: 46px;
  124. height: 46px;
  125. padding: 0;
  126. border: 1px solid var(--line);
  127. border-radius: 14px;
  128. background: rgba(255, 250, 243, 0.92);
  129. align-items: center;
  130. justify-content: center;
  131. gap: 4px;
  132. cursor: pointer;
  133. }
  134. .site-menu-button span {
  135. width: 18px;
  136. height: 2px;
  137. border-radius: 999px;
  138. background: #6a5a4e;
  139. transition: transform 0.2s ease, opacity 0.2s ease;
  140. }
  141. .site-menu-button.is-open span:nth-child(1) {
  142. transform: translateY(6px) rotate(45deg);
  143. }
  144. .site-menu-button.is-open span:nth-child(2) {
  145. opacity: 0;
  146. }
  147. .site-menu-button.is-open span:nth-child(3) {
  148. transform: translateY(-6px) rotate(-45deg);
  149. }
  150. .site-drawer-backdrop {
  151. position: fixed;
  152. inset: 0;
  153. background: rgba(24, 18, 13, 0.36);
  154. opacity: 0;
  155. pointer-events: none;
  156. transition: opacity 0.2s ease;
  157. z-index: 44;
  158. }
  159. .site-drawer-backdrop.is-open {
  160. opacity: 1;
  161. pointer-events: auto;
  162. }
  163. .site-drawer {
  164. position: fixed;
  165. inset: 0;
  166. display: block;
  167. pointer-events: none;
  168. z-index: 45;
  169. background: transparent;
  170. opacity: 0;
  171. visibility: hidden;
  172. transition: opacity 0.2s ease, visibility 0.2s ease;
  173. }
  174. .site-drawer__panel {
  175. margin-left: auto;
  176. width: min(360px, 100vw);
  177. height: 100%;
  178. padding: 22px 18px 28px;
  179. background: linear-gradient(180deg, #fbf6ef 0%, #f1e8dc 100%);
  180. box-shadow: -24px 0 60px rgba(45, 31, 22, 0.18);
  181. transform: translateX(100%);
  182. transition: transform 0.22s ease;
  183. isolation: isolate;
  184. }
  185. .site-drawer.is-open {
  186. pointer-events: auto;
  187. opacity: 1;
  188. visibility: visible;
  189. }
  190. .site-drawer.is-open .site-drawer__panel {
  191. transform: translateX(0);
  192. }
  193. .site-drawer__top {
  194. display: flex;
  195. align-items: flex-start;
  196. justify-content: space-between;
  197. gap: 12px;
  198. margin-bottom: 18px;
  199. }
  200. .site-drawer__title {
  201. font-size: 1.2rem;
  202. font-weight: 700;
  203. }
  204. .site-drawer__hint {
  205. margin-top: 6px;
  206. color: var(--muted);
  207. line-height: 1.6;
  208. font-size: 0.92rem;
  209. }
  210. .site-drawer__close {
  211. min-height: 40px;
  212. padding: 0 14px;
  213. border: 1px solid var(--line);
  214. border-radius: 999px;
  215. background: rgba(255, 250, 243, 0.94);
  216. cursor: pointer;
  217. }
  218. .site-drawer__nav {
  219. display: grid;
  220. gap: 10px;
  221. }
  222. .site-drawer__nav a {
  223. min-height: 54px;
  224. padding: 0 16px;
  225. border-radius: 16px;
  226. display: flex;
  227. align-items: center;
  228. background: rgba(255, 250, 243, 0.86);
  229. border: 1px solid var(--line);
  230. }
  231. .site-drawer__nav a.is-active {
  232. background: rgba(184, 92, 56, 0.12);
  233. color: #8f4b2f;
  234. border-color: rgba(184, 92, 56, 0.24);
  235. }
  236. .hero {
  237. display: grid;
  238. grid-template-columns: 1.15fr 0.85fr;
  239. gap: 24px;
  240. padding: 28px 0 18px;
  241. }
  242. .card {
  243. background: var(--panel);
  244. border: 1px solid rgba(255, 255, 255, 0.7);
  245. box-shadow: var(--shadow);
  246. border-radius: var(--radius-lg);
  247. }
  248. .hero__main {
  249. padding: 28px;
  250. }
  251. .eyebrow {
  252. display: inline-flex;
  253. align-items: center;
  254. gap: 8px;
  255. padding: 8px 12px;
  256. border-radius: 999px;
  257. background: rgba(255, 250, 243, 0.88);
  258. color: var(--muted);
  259. font-size: 0.9rem;
  260. }
  261. .hero h1 {
  262. margin: 14px 0 12px;
  263. font-size: clamp(2.2rem, 5vw, 4.3rem);
  264. line-height: 1.05;
  265. }
  266. .hero p {
  267. margin: 0;
  268. color: var(--muted);
  269. font-size: 0.98rem;
  270. line-height: 1.68;
  271. }
  272. .hero__actions {
  273. display: flex;
  274. flex-wrap: wrap;
  275. gap: 12px;
  276. margin-top: 20px;
  277. }
  278. .button {
  279. display: inline-flex;
  280. align-items: center;
  281. justify-content: center;
  282. gap: 10px;
  283. min-height: 48px;
  284. padding: 0 18px;
  285. border-radius: 999px;
  286. border: 1px solid transparent;
  287. transition: transform 0.2s ease, background 0.2s ease;
  288. }
  289. .button:hover {
  290. transform: translateY(-1px);
  291. }
  292. .button--primary {
  293. background: var(--brand);
  294. color: white;
  295. }
  296. .button--secondary {
  297. background: rgba(255, 250, 243, 0.92);
  298. border-color: var(--line);
  299. }
  300. .hero__aside {
  301. display: grid;
  302. gap: 18px;
  303. }
  304. .stat-card,
  305. .feature-card,
  306. .section-card,
  307. .chat-layout,
  308. .reader-layout,
  309. .library-shell,
  310. .agents-shell {
  311. background: var(--panel);
  312. border: 1px solid rgba(255, 255, 255, 0.7);
  313. box-shadow: var(--shadow);
  314. }
  315. .stat-card {
  316. border-radius: 24px;
  317. padding: 24px;
  318. }
  319. .stat-card h3,
  320. .feature-card h3,
  321. .section-card h2 {
  322. margin: 0;
  323. }
  324. .stat-card p,
  325. .feature-card p,
  326. .section-card p {
  327. color: var(--muted);
  328. }
  329. .home-sections {
  330. display: grid;
  331. grid-template-columns: repeat(2, minmax(0, 1fr));
  332. gap: 24px;
  333. padding: 16px 0 48px;
  334. }
  335. .section-card {
  336. padding: 28px;
  337. border-radius: var(--radius-lg);
  338. }
  339. .section-card__list {
  340. display: grid;
  341. gap: 12px;
  342. margin: 24px 0;
  343. }
  344. .section-card__item {
  345. display: flex;
  346. gap: 12px;
  347. align-items: flex-start;
  348. padding: 14px 16px;
  349. border-radius: var(--radius-md);
  350. background: rgba(255, 250, 243, 0.75);
  351. border: 1px solid var(--line);
  352. }
  353. .section-card__index {
  354. flex: 0 0 auto;
  355. width: 28px;
  356. height: 28px;
  357. border-radius: 50%;
  358. background: var(--brand-soft);
  359. color: #6a341f;
  360. display: grid;
  361. place-items: center;
  362. font-weight: 700;
  363. font-size: 0.88rem;
  364. }
  365. .page-title {
  366. padding: 32px 0 18px;
  367. }
  368. .page-title h1 {
  369. margin: 0;
  370. font-size: clamp(2rem, 4vw, 3.2rem);
  371. }
  372. .page-title p {
  373. margin: 12px 0 0;
  374. max-width: 720px;
  375. color: var(--muted);
  376. line-height: 1.7;
  377. }
  378. .chat-layout {
  379. display: grid;
  380. grid-template-columns: 280px minmax(0, 1fr);
  381. gap: 0;
  382. border-radius: 32px;
  383. overflow: hidden;
  384. margin-bottom: 40px;
  385. }
  386. .chat-sidebar {
  387. padding: 22px;
  388. border-right: 1px solid var(--line);
  389. background: rgba(255, 248, 239, 0.96);
  390. }
  391. .chat-main {
  392. display: grid;
  393. grid-template-rows: auto 1fr auto;
  394. min-height: 72vh;
  395. }
  396. .chat-toolbar,
  397. .chat-composer {
  398. padding: 18px 22px;
  399. border-bottom: 1px solid var(--line);
  400. }
  401. .chat-composer {
  402. border-top: 1px solid var(--line);
  403. border-bottom: 0;
  404. }
  405. .chat-messages {
  406. padding: 22px;
  407. display: grid;
  408. gap: 16px;
  409. align-content: start;
  410. background:
  411. linear-gradient(180deg, rgba(255, 252, 247, 0.72), rgba(255, 248, 239, 0.85)),
  412. repeating-linear-gradient(
  413. 0deg,
  414. transparent,
  415. transparent 31px,
  416. rgba(153, 122, 96, 0.03) 32px
  417. );
  418. }
  419. .presence-list,
  420. .library-grid,
  421. .reader-meta,
  422. .reader-controls,
  423. .chapter-nav,
  424. .agents-grid,
  425. .agent-stats {
  426. display: grid;
  427. gap: 12px;
  428. }
  429. .presence-item,
  430. .message,
  431. .book-card,
  432. .chapter-card,
  433. .reader-panel,
  434. .agent-card,
  435. .agent-stat {
  436. border: 1px solid var(--line);
  437. border-radius: var(--radius-md);
  438. background: rgba(255, 250, 243, 0.88);
  439. }
  440. .presence-item {
  441. padding: 12px 14px;
  442. }
  443. .presence-item__meta,
  444. .chat-toolbar__hint,
  445. .message__file-meta,
  446. .chat-sidebar__hint {
  447. color: var(--muted);
  448. }
  449. .chat-sidebar__hint,
  450. .chat-toolbar__hint {
  451. margin-top: 8px;
  452. line-height: 1.6;
  453. font-size: 0.92rem;
  454. }
  455. .message {
  456. padding: 14px 16px;
  457. max-width: min(620px, 92%);
  458. overflow-wrap: anywhere;
  459. }
  460. .message--self {
  461. margin-left: auto;
  462. background: rgba(232, 200, 182, 0.62);
  463. }
  464. .message__meta {
  465. display: flex;
  466. justify-content: space-between;
  467. gap: 16px;
  468. color: var(--muted);
  469. font-size: 0.84rem;
  470. margin-bottom: 8px;
  471. }
  472. .message__file {
  473. margin-top: 10px;
  474. padding: 12px;
  475. background: rgba(255, 255, 255, 0.72);
  476. border-radius: 12px;
  477. }
  478. .message__content {
  479. line-height: 1.7;
  480. }
  481. .composer-grid {
  482. display: grid;
  483. grid-template-columns: 1fr auto;
  484. gap: 14px;
  485. align-items: stretch;
  486. }
  487. .composer-input-shell {
  488. display: grid;
  489. gap: 10px;
  490. min-height: 100%;
  491. }
  492. .composer-input-hint {
  493. color: var(--muted);
  494. font-size: 0.9rem;
  495. }
  496. .composer-input {
  497. min-height: 118px;
  498. width: 100%;
  499. resize: vertical;
  500. border: 1px solid var(--line);
  501. border-radius: 18px;
  502. background: rgba(255, 255, 255, 0.82);
  503. padding: 16px;
  504. }
  505. .composer-input--drop {
  506. min-height: 146px;
  507. border-style: dashed;
  508. border-width: 1.5px;
  509. }
  510. .composer-actions {
  511. display: grid;
  512. gap: 12px;
  513. align-content: stretch;
  514. }
  515. .composer-actions--stacked {
  516. width: 228px;
  517. height: 146px;
  518. grid-template-rows: 1fr 1fr;
  519. }
  520. .composer-actions--stacked .button {
  521. width: 100%;
  522. height: 100%;
  523. min-height: 0;
  524. border-radius: 18px;
  525. }
  526. .library-shell {
  527. margin-top: 44px;
  528. padding: 22px;
  529. border-radius: 32px;
  530. margin-bottom: 40px;
  531. }
  532. .agents-shell {
  533. padding: 22px;
  534. border-radius: 32px;
  535. margin-bottom: 40px;
  536. }
  537. .library-grid {
  538. grid-template-columns: repeat(3, minmax(0, 1fr));
  539. }
  540. .agents-grid {
  541. grid-template-columns: repeat(3, minmax(0, 1fr));
  542. }
  543. .agent-stats {
  544. grid-template-columns: repeat(4, minmax(0, 1fr));
  545. margin-bottom: 22px;
  546. }
  547. .agents-intro {
  548. display: grid;
  549. grid-template-columns: 1.2fr 0.8fr;
  550. gap: 18px;
  551. margin-bottom: 22px;
  552. }
  553. .agents-intro__main,
  554. .agents-intro__aside,
  555. .agent-summary-card {
  556. height: 100%;
  557. }
  558. .agents-intro__main {
  559. padding: 24px 26px;
  560. border-radius: 24px;
  561. border: 1px solid var(--line);
  562. background: linear-gradient(180deg, rgba(255, 251, 246, 0.98), rgba(255, 245, 235, 0.9));
  563. }
  564. .agents-intro__main h2 {
  565. margin: 14px 0 10px;
  566. font-size: clamp(1.5rem, 3vw, 2rem);
  567. }
  568. .agents-intro__main p {
  569. margin: 0;
  570. color: var(--muted);
  571. line-height: 1.75;
  572. }
  573. .agent-summary-card {
  574. padding: 24px;
  575. border-radius: 24px;
  576. border: 1px solid rgba(148, 84, 57, 0.14);
  577. background:
  578. radial-gradient(circle at top right, rgba(184, 92, 56, 0.18), transparent 35%),
  579. linear-gradient(180deg, rgba(255, 247, 240, 0.98), rgba(247, 236, 227, 0.94));
  580. }
  581. .agent-summary-card__label {
  582. color: var(--muted);
  583. font-size: 0.88rem;
  584. }
  585. .agent-summary-card strong {
  586. display: block;
  587. margin-top: 12px;
  588. font-size: 1.45rem;
  589. }
  590. .agent-summary-card p {
  591. margin: 12px 0 0;
  592. color: var(--muted);
  593. line-height: 1.7;
  594. }
  595. .agent-stat {
  596. padding: 18px;
  597. }
  598. .agent-stat strong {
  599. display: block;
  600. font-size: 1.5rem;
  601. margin-top: 8px;
  602. }
  603. .agent-card {
  604. padding: 20px;
  605. display: grid;
  606. gap: 16px;
  607. }
  608. .agent-card--dense {
  609. gap: 14px;
  610. padding: 18px;
  611. }
  612. .agent-card-link {
  613. display: block;
  614. }
  615. .agent-card--dashboard {
  616. min-height: 100%;
  617. transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
  618. }
  619. .agent-card--dashboard:hover {
  620. transform: translateY(-3px);
  621. box-shadow: 0 24px 44px rgba(76, 45, 25, 0.14);
  622. border-color: rgba(184, 92, 56, 0.24);
  623. }
  624. .agent-card__header {
  625. display: flex;
  626. align-items: center;
  627. gap: 14px;
  628. }
  629. .agent-card__name {
  630. font-size: 1.1rem;
  631. font-weight: 700;
  632. }
  633. .agent-card__role {
  634. color: var(--muted);
  635. font-size: 0.92rem;
  636. margin-top: 4px;
  637. }
  638. .status-pill {
  639. display: inline-flex;
  640. align-items: center;
  641. gap: 8px;
  642. width: fit-content;
  643. padding: 8px 12px;
  644. border-radius: 999px;
  645. font-size: 0.9rem;
  646. font-weight: 600;
  647. }
  648. .status-pill::before {
  649. content: "";
  650. width: 8px;
  651. height: 8px;
  652. border-radius: 50%;
  653. background: currentColor;
  654. }
  655. .status-pill--working {
  656. background: rgba(74, 145, 88, 0.14);
  657. color: #2f7c46;
  658. }
  659. .status-pill--idle {
  660. background: rgba(88, 108, 132, 0.12);
  661. color: #526579;
  662. }
  663. .status-pill--warning {
  664. background: rgba(201, 140, 53, 0.14);
  665. color: #9f6117;
  666. }
  667. .status-pill--offline {
  668. background: rgba(144, 109, 101, 0.14);
  669. color: #8a645e;
  670. }
  671. .agent-card__status-line {
  672. display: flex;
  673. align-items: center;
  674. justify-content: space-between;
  675. gap: 12px;
  676. }
  677. .agent-card__updated {
  678. color: var(--muted);
  679. font-size: 0.88rem;
  680. }
  681. .agent-avatar {
  682. --avatar-face: #f6dcc7;
  683. --avatar-hair: #4d362c;
  684. --avatar-accent: #ca764c;
  685. --avatar-cloth: #d7b39c;
  686. --avatar-shadow: #6f4838;
  687. width: 62px;
  688. height: 62px;
  689. flex: 0 0 auto;
  690. position: relative;
  691. border-radius: 20px;
  692. display: grid;
  693. place-items: center;
  694. background: linear-gradient(180deg, rgba(255, 248, 242, 0.96), rgba(242, 225, 210, 0.92));
  695. box-shadow: 0 14px 30px rgba(89, 55, 35, 0.16);
  696. border: 1px solid rgba(145, 91, 63, 0.16);
  697. }
  698. .agent-avatar--large {
  699. width: 82px;
  700. height: 82px;
  701. border-radius: 24px;
  702. }
  703. .agent-avatar__hair {
  704. position: absolute;
  705. top: 12px;
  706. left: 50%;
  707. width: 42px;
  708. height: 22px;
  709. transform: translateX(-50%);
  710. border-radius: 18px 18px 10px 10px;
  711. background: var(--avatar-hair);
  712. z-index: 2;
  713. }
  714. .agent-avatar__head {
  715. width: 34px;
  716. height: 36px;
  717. position: relative;
  718. z-index: 3;
  719. border-radius: 14px 14px 16px 16px;
  720. background: var(--avatar-face);
  721. border: 3px solid var(--avatar-shadow);
  722. }
  723. .agent-avatar--large .agent-avatar__head {
  724. width: 44px;
  725. height: 46px;
  726. border-radius: 16px;
  727. }
  728. .agent-avatar__brows {
  729. position: absolute;
  730. left: 8px;
  731. right: 8px;
  732. top: 8px;
  733. display: flex;
  734. justify-content: space-between;
  735. }
  736. .agent-avatar__brows span {
  737. width: 8px;
  738. height: 2px;
  739. border-radius: 999px;
  740. background: var(--avatar-shadow);
  741. }
  742. .agent-avatar__eyes {
  743. position: absolute;
  744. left: 7px;
  745. right: 7px;
  746. top: 14px;
  747. display: flex;
  748. justify-content: space-between;
  749. }
  750. .agent-avatar__eyes span {
  751. width: 6px;
  752. height: 8px;
  753. border-radius: 6px;
  754. background: var(--avatar-shadow);
  755. }
  756. .agent-avatar__nose {
  757. position: absolute;
  758. left: 50%;
  759. top: 22px;
  760. width: 7px;
  761. height: 5px;
  762. transform: translateX(-50%);
  763. border-radius: 8px;
  764. background: var(--avatar-accent);
  765. }
  766. .agent-avatar__mouth {
  767. position: absolute;
  768. left: 50%;
  769. bottom: 7px;
  770. width: 12px;
  771. height: 6px;
  772. transform: translateX(-50%);
  773. border-bottom: 3px solid var(--avatar-shadow);
  774. border-radius: 0 0 10px 10px;
  775. }
  776. .agent-avatar__body {
  777. position: absolute;
  778. bottom: 6px;
  779. left: 50%;
  780. width: 34px;
  781. height: 14px;
  782. transform: translateX(-50%);
  783. border-radius: 12px 12px 6px 6px;
  784. background: var(--avatar-cloth);
  785. z-index: 1;
  786. }
  787. .agent-avatar__accent {
  788. position: absolute;
  789. bottom: 10px;
  790. right: 10px;
  791. width: 10px;
  792. height: 10px;
  793. border-radius: 50%;
  794. background: var(--avatar-accent);
  795. border: 2px solid rgba(255, 255, 255, 0.9);
  796. z-index: 4;
  797. }
  798. .agent-avatar--female-analyst {
  799. --avatar-face: #f4d8c8;
  800. --avatar-hair: #4b2f2f;
  801. --avatar-accent: #d76d5a;
  802. --avatar-cloth: #c9d5ee;
  803. --avatar-shadow: #6d4540;
  804. }
  805. .agent-avatar--female-analyst .agent-avatar__hair {
  806. width: 44px;
  807. height: 24px;
  808. border-radius: 18px 18px 12px 12px;
  809. }
  810. .agent-avatar--male-ops {
  811. --avatar-face: #efcfb9;
  812. --avatar-hair: #2f2b2d;
  813. --avatar-accent: #5a87c8;
  814. --avatar-cloth: #cdd5df;
  815. --avatar-shadow: #5b4a42;
  816. }
  817. .agent-avatar--male-ops .agent-avatar__hair {
  818. width: 36px;
  819. height: 16px;
  820. top: 13px;
  821. border-radius: 12px 12px 8px 8px;
  822. }
  823. .agent-avatar--female-researcher {
  824. --avatar-face: #f0d0ba;
  825. --avatar-hair: #5b3c30;
  826. --avatar-accent: #d9885b;
  827. --avatar-cloth: #d8c5e6;
  828. --avatar-shadow: #714f46;
  829. }
  830. .agent-avatar--female-researcher .agent-avatar__hair {
  831. width: 46px;
  832. height: 26px;
  833. top: 11px;
  834. }
  835. .agent-avatar--male-dispatcher {
  836. --avatar-face: #e8c6ad;
  837. --avatar-hair: #3d3533;
  838. --avatar-accent: #c78153;
  839. --avatar-cloth: #d7c3b6;
  840. --avatar-shadow: #5c4a42;
  841. }
  842. .agent-avatar--male-dispatcher .agent-avatar__hair {
  843. width: 38px;
  844. height: 17px;
  845. top: 12px;
  846. }
  847. .agent-avatar--female-observer {
  848. --avatar-face: #f5dcca;
  849. --avatar-hair: #2d313d;
  850. --avatar-accent: #d46c8b;
  851. --avatar-cloth: #c8d6d1;
  852. --avatar-shadow: #57535a;
  853. }
  854. .agent-avatar--female-observer .agent-avatar__hair {
  855. width: 44px;
  856. height: 24px;
  857. }
  858. .agent-avatar--male-maintainer {
  859. --avatar-face: #d9b89c;
  860. --avatar-hair: #43362d;
  861. --avatar-accent: #7c9b54;
  862. --avatar-cloth: #d7d2bb;
  863. --avatar-shadow: #634c40;
  864. }
  865. .agent-avatar--male-maintainer .agent-avatar__hair {
  866. width: 36px;
  867. height: 16px;
  868. top: 13px;
  869. }
  870. .agent-card__meta {
  871. display: grid;
  872. gap: 12px;
  873. }
  874. .agent-quick-grid {
  875. display: grid;
  876. grid-template-columns: repeat(3, minmax(0, 1fr));
  877. gap: 10px;
  878. }
  879. .agent-mini-stat {
  880. padding: 12px;
  881. border-radius: 14px;
  882. border: 1px solid rgba(114, 80, 60, 0.12);
  883. background: rgba(255, 248, 241, 0.92);
  884. }
  885. .agent-mini-stat span {
  886. display: block;
  887. color: var(--muted);
  888. font-size: 0.82rem;
  889. }
  890. .agent-mini-stat strong {
  891. display: block;
  892. margin-top: 8px;
  893. font-size: 1rem;
  894. }
  895. .agent-row {
  896. display: grid;
  897. grid-template-columns: 88px minmax(0, 1fr);
  898. gap: 10px;
  899. align-items: start;
  900. }
  901. .agent-row__label {
  902. color: var(--muted);
  903. font-size: 0.88rem;
  904. }
  905. .agent-row__value {
  906. line-height: 1.65;
  907. }
  908. .agent-row__value--strong {
  909. font-weight: 700;
  910. }
  911. .agent-card__footer {
  912. padding-top: 6px;
  913. color: #8c5435;
  914. font-weight: 600;
  915. }
  916. .agents-toolbar {
  917. display: flex;
  918. align-items: center;
  919. justify-content: space-between;
  920. gap: 16px;
  921. padding: 0 2px 22px;
  922. }
  923. .agents-toolbar__hint {
  924. color: var(--muted);
  925. font-size: 0.92rem;
  926. }
  927. .agents-shell--compact {
  928. margin-top: 44px;
  929. padding: 20px 22px 24px;
  930. }
  931. .agents-monitor-top {
  932. display: flex;
  933. align-items: flex-start;
  934. justify-content: space-between;
  935. gap: 16px;
  936. margin-bottom: 14px;
  937. }
  938. .agents-monitor-controls {
  939. display: grid;
  940. justify-items: end;
  941. gap: 12px;
  942. }
  943. .agents-monitor-source {
  944. display: grid;
  945. gap: 6px;
  946. }
  947. .agents-monitor-source strong {
  948. font-size: 1.02rem;
  949. }
  950. .agents-monitor-source span {
  951. color: var(--muted);
  952. font-size: 0.92rem;
  953. }
  954. .agents-monitor-summary {
  955. display: grid;
  956. grid-template-columns: repeat(5, minmax(72px, auto));
  957. gap: 10px;
  958. }
  959. .agents-monitor-summary__item {
  960. min-height: 58px;
  961. min-width: 84px;
  962. padding: 8px 14px;
  963. border: 1px solid var(--line);
  964. border-radius: 16px;
  965. background: rgba(255, 250, 243, 0.82);
  966. display: grid;
  967. align-content: center;
  968. justify-items: center;
  969. gap: 4px;
  970. color: #6d6056;
  971. }
  972. .agents-monitor-summary__item strong {
  973. font-size: 1.08rem;
  974. line-height: 1;
  975. color: #2d241f;
  976. }
  977. .agents-monitor-summary__item span {
  978. font-size: 0.82rem;
  979. }
  980. .agents-monitor-summary__item--working strong {
  981. color: #4f8552;
  982. }
  983. .agents-monitor-summary__item--idle strong {
  984. color: #8a6f39;
  985. }
  986. .agents-monitor-summary__item--warning strong {
  987. color: #b26f20;
  988. }
  989. .agents-monitor-summary__item--offline strong {
  990. color: #b45a49;
  991. }
  992. .agents-worklist {
  993. display: grid;
  994. grid-template-columns: repeat(4, minmax(0, 1fr));
  995. gap: 14px;
  996. }
  997. .agents-worklist__link {
  998. display: block;
  999. }
  1000. .agents-workitem {
  1001. padding: 14px 14px 15px;
  1002. border: 1px solid var(--line);
  1003. border-radius: 20px;
  1004. background: rgba(255, 250, 243, 0.88);
  1005. transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
  1006. min-height: 100%;
  1007. }
  1008. .agents-workitem:hover {
  1009. transform: translateY(-2px);
  1010. box-shadow: 0 22px 40px rgba(76, 45, 25, 0.1);
  1011. border-color: rgba(184, 92, 56, 0.22);
  1012. }
  1013. .agents-workitem__head {
  1014. display: flex;
  1015. align-items: flex-start;
  1016. justify-content: space-between;
  1017. gap: 12px;
  1018. }
  1019. .agents-workitem__identity {
  1020. display: flex;
  1021. align-items: flex-start;
  1022. gap: 12px;
  1023. min-width: 0;
  1024. }
  1025. .agents-workitem__name-row {
  1026. display: flex;
  1027. align-items: center;
  1028. gap: 10px;
  1029. flex-wrap: wrap;
  1030. }
  1031. .agents-workitem__name-row strong {
  1032. font-size: 1rem;
  1033. }
  1034. .agents-workitem__role {
  1035. margin-top: 3px;
  1036. color: var(--muted);
  1037. font-size: 0.88rem;
  1038. }
  1039. .agents-workitem__metrics {
  1040. display: grid;
  1041. gap: 4px;
  1042. flex-wrap: wrap;
  1043. justify-items: end;
  1044. color: var(--muted);
  1045. font-size: 0.82rem;
  1046. text-align: right;
  1047. }
  1048. .agents-workitem__task,
  1049. .agents-workitem__output {
  1050. margin-top: 12px;
  1051. padding-top: 12px;
  1052. border-top: 1px solid rgba(93, 68, 53, 0.08);
  1053. }
  1054. .agents-workitem__label {
  1055. color: var(--muted);
  1056. font-size: 0.8rem;
  1057. margin-bottom: 5px;
  1058. }
  1059. .agents-workitem__value {
  1060. line-height: 1.6;
  1061. font-size: 0.95rem;
  1062. display: -webkit-box;
  1063. -webkit-line-clamp: 3;
  1064. -webkit-box-orient: vertical;
  1065. overflow: hidden;
  1066. }
  1067. .agents-workitem__meta {
  1068. display: flex;
  1069. align-items: center;
  1070. flex-wrap: wrap;
  1071. gap: 6px 10px;
  1072. margin-top: 10px;
  1073. color: var(--muted);
  1074. font-size: 0.8rem;
  1075. }
  1076. .agents-workitem__error {
  1077. margin-top: 7px;
  1078. color: #9f6117;
  1079. font-size: 0.82rem;
  1080. }
  1081. .filter-chip {
  1082. display: inline-flex;
  1083. align-items: center;
  1084. justify-content: center;
  1085. min-height: 40px;
  1086. padding: 0 16px;
  1087. border-radius: 999px;
  1088. border: 1px solid var(--line);
  1089. background: rgba(255, 250, 243, 0.9);
  1090. color: var(--muted);
  1091. transition: transform 0.2s ease, border-color 0.2s ease, background 0.2s ease;
  1092. cursor: pointer;
  1093. }
  1094. .filter-chip:hover {
  1095. transform: translateY(-1px);
  1096. border-color: rgba(184, 92, 56, 0.26);
  1097. }
  1098. .filter-chip--active {
  1099. background: rgba(184, 92, 56, 0.12);
  1100. border-color: rgba(184, 92, 56, 0.32);
  1101. color: #8a472d;
  1102. font-weight: 700;
  1103. }
  1104. .agent-detail-hero {
  1105. display: flex;
  1106. align-items: flex-start;
  1107. justify-content: space-between;
  1108. gap: 18px;
  1109. padding: 24px 26px;
  1110. border-radius: 24px;
  1111. border: 1px solid var(--line);
  1112. background: linear-gradient(180deg, rgba(255, 252, 247, 0.96), rgba(247, 238, 230, 0.92));
  1113. margin-bottom: 22px;
  1114. }
  1115. .agent-detail-hero__main {
  1116. min-width: 0;
  1117. }
  1118. .agent-detail-hero__actions {
  1119. flex: 0 0 auto;
  1120. }
  1121. .agent-detail-grid {
  1122. display: grid;
  1123. grid-template-columns: repeat(2, minmax(0, 1fr));
  1124. gap: 18px;
  1125. }
  1126. .agent-detail-section__title {
  1127. margin-bottom: 14px;
  1128. font-size: 1rem;
  1129. font-weight: 700;
  1130. }
  1131. .agent-detail-list {
  1132. display: grid;
  1133. gap: 12px;
  1134. }
  1135. .agent-detail-highlight {
  1136. padding: 16px 18px;
  1137. border-radius: 18px;
  1138. background: rgba(184, 92, 56, 0.08);
  1139. border: 1px solid rgba(184, 92, 56, 0.16);
  1140. font-weight: 600;
  1141. }
  1142. .agent-detail-note,
  1143. .agent-detail-paragraph {
  1144. margin-top: 14px;
  1145. color: var(--muted);
  1146. line-height: 1.75;
  1147. }
  1148. .book-card {
  1149. overflow: hidden;
  1150. display: flex;
  1151. flex-direction: column;
  1152. }
  1153. .book-cover {
  1154. aspect-ratio: 3 / 4.3;
  1155. background:
  1156. linear-gradient(180deg, rgba(19, 15, 12, 0.1), rgba(19, 15, 12, 0.36)),
  1157. var(--cover, linear-gradient(135deg, #c06b49, #7c3c26));
  1158. padding: 22px;
  1159. color: white;
  1160. display: flex;
  1161. flex-direction: column;
  1162. justify-content: flex-end;
  1163. }
  1164. .book-cover__chip {
  1165. align-self: flex-start;
  1166. margin-bottom: auto;
  1167. padding: 8px 10px;
  1168. border-radius: 999px;
  1169. background: rgba(255, 255, 255, 0.16);
  1170. border: 1px solid rgba(255, 255, 255, 0.18);
  1171. font-size: 0.84rem;
  1172. }
  1173. .book-cover__title {
  1174. margin: 0;
  1175. font-size: 1.45rem;
  1176. }
  1177. .book-cover__author {
  1178. margin: 8px 0 0;
  1179. color: rgba(255, 255, 255, 0.85);
  1180. }
  1181. .book-body {
  1182. flex: 1;
  1183. padding: 18px;
  1184. display: flex;
  1185. flex-direction: column;
  1186. }
  1187. .book-body p {
  1188. flex: 1;
  1189. color: var(--muted);
  1190. line-height: 1.7;
  1191. }
  1192. .reader-layout {
  1193. display: grid;
  1194. grid-template-columns: 280px minmax(0, 1fr);
  1195. gap: 0;
  1196. border-radius: 32px;
  1197. overflow: hidden;
  1198. min-height: 76vh;
  1199. margin-bottom: 44px;
  1200. }
  1201. .reader-sidebar {
  1202. padding: 24px;
  1203. border-right: 1px solid var(--line);
  1204. background: rgba(255, 248, 239, 0.96);
  1205. }
  1206. .reader-main {
  1207. padding: 0;
  1208. display: grid;
  1209. grid-template-rows: auto 1fr auto;
  1210. }
  1211. .reader-topbar,
  1212. .reader-footer {
  1213. display: flex;
  1214. align-items: center;
  1215. justify-content: space-between;
  1216. gap: 14px;
  1217. padding: 18px 22px;
  1218. border-bottom: 1px solid var(--line);
  1219. }
  1220. .reader-footer {
  1221. border-top: 1px solid var(--line);
  1222. border-bottom: 0;
  1223. }
  1224. .reader-content {
  1225. padding: 0 24px 28px;
  1226. }
  1227. .reader-paper {
  1228. width: min(860px, 100%);
  1229. margin: 24px auto 0;
  1230. padding: clamp(24px, 4vw, 54px);
  1231. border-radius: 28px;
  1232. background: #fffdf8;
  1233. border: 1px solid rgba(112, 86, 62, 0.09);
  1234. box-shadow: 0 20px 60px rgba(54, 33, 21, 0.08);
  1235. }
  1236. .reader-paper h1 {
  1237. margin: 0 0 10px;
  1238. font-size: clamp(1.9rem, 3.5vw, 2.8rem);
  1239. }
  1240. .reader-paper h2 {
  1241. margin: 0 0 20px;
  1242. color: var(--muted);
  1243. font-size: 1rem;
  1244. font-weight: 500;
  1245. }
  1246. .reader-paper p {
  1247. margin: 0 0 1.3em;
  1248. font-size: clamp(1.02rem, 2vw, 1.14rem);
  1249. line-height: 2;
  1250. text-indent: 2em;
  1251. }
  1252. .reader-stage {
  1253. height: 100vh;
  1254. padding: 0 24px;
  1255. background:
  1256. radial-gradient(circle at top left, rgba(255, 240, 220, 0.3), transparent 28%),
  1257. linear-gradient(180deg, #dcd6ce 0%, #d4cec5 100%);
  1258. overflow: auto;
  1259. scrollbar-width: none;
  1260. -ms-overflow-style: none;
  1261. display: flex;
  1262. align-items: stretch;
  1263. justify-content: center;
  1264. position: relative;
  1265. }
  1266. .reader-stage::-webkit-scrollbar {
  1267. display: none;
  1268. }
  1269. .reader-desktop-layout {
  1270. width: fit-content;
  1271. max-width: 100%;
  1272. margin: 0 auto;
  1273. display: grid;
  1274. grid-template-columns: 78px var(--reader-shell-width, min(980px, calc(100vw - 280px))) 78px;
  1275. gap: 18px;
  1276. align-items: start;
  1277. }
  1278. .reader-qq-shell {
  1279. grid-column: 2;
  1280. width: var(--reader-shell-width, min(980px, calc(100vw - 280px)));
  1281. min-height: 100vh;
  1282. overflow: visible;
  1283. }
  1284. .reader-mobile-bar,
  1285. .reader-catalog-mobile-mask,
  1286. .reader-catalog-mobile-sheet {
  1287. display: none;
  1288. }
  1289. .reader-qq-paper {
  1290. min-height: 100vh;
  1291. background: #f7f0e4;
  1292. box-shadow: 0 22px 60px rgba(54, 33, 21, 0.08);
  1293. display: flex;
  1294. flex-direction: column;
  1295. border-radius: 0;
  1296. }
  1297. .reader-qq-paper--desktop-hidden {
  1298. display: none;
  1299. }
  1300. .reader-qq-header {
  1301. padding: 44px 72px 26px;
  1302. border-bottom: 1px solid rgba(53, 44, 38, 0.1);
  1303. text-align: center;
  1304. }
  1305. .reader-qq-header h1 {
  1306. margin: 0;
  1307. font-size: clamp(2rem, 4vw, 3rem);
  1308. line-height: 1.25;
  1309. }
  1310. .reader-qq-meta {
  1311. display: flex;
  1312. flex-wrap: wrap;
  1313. justify-content: center;
  1314. gap: 18px 26px;
  1315. margin-top: 18px;
  1316. color: #9c9288;
  1317. font-size: 0.92rem;
  1318. }
  1319. .reader-qq-content {
  1320. padding: 28px 72px 80px;
  1321. flex: 1 1 auto;
  1322. }
  1323. .reader-qq-content p {
  1324. margin: 0 0 1.6em;
  1325. color: #2d2621;
  1326. font-size: clamp(1.14rem, 2vw, 1.28rem);
  1327. line-height: 2.35;
  1328. text-indent: 2em;
  1329. }
  1330. .reader-float {
  1331. position: fixed;
  1332. top: 160px;
  1333. z-index: 15;
  1334. display: grid;
  1335. gap: 10px;
  1336. width: 78px;
  1337. }
  1338. .reader-float--left {
  1339. grid-column: 1;
  1340. left: max(8px, calc(50vw - var(--reader-shell-width, min(980px, calc(100vw - 280px))) / 2 - 96px));
  1341. }
  1342. .reader-float--right {
  1343. grid-column: 3;
  1344. right: max(20px, calc(50vw - var(--reader-shell-width, min(980px, calc(100vw - 280px))) / 2 - 96px));
  1345. }
  1346. .reader-progress-rail {
  1347. position: fixed;
  1348. top: 0;
  1349. right: 0;
  1350. width: 12px;
  1351. height: 100vh;
  1352. z-index: 16;
  1353. pointer-events: none;
  1354. }
  1355. .reader-progress-rail__track {
  1356. width: 4px;
  1357. height: calc(100vh - 24px);
  1358. margin: 12px 4px 12px auto;
  1359. border-radius: 999px;
  1360. background: rgba(86, 70, 56, 0.16);
  1361. overflow: hidden;
  1362. }
  1363. .reader-progress-rail__fill {
  1364. width: 100%;
  1365. height: 0;
  1366. margin-top: auto;
  1367. background: linear-gradient(180deg, #c78255, #a45834);
  1368. }
  1369. .reader-float__button {
  1370. width: 78px;
  1371. min-height: 78px;
  1372. padding: 12px 10px;
  1373. border: 0;
  1374. border-radius: 12px;
  1375. background: rgba(255, 255, 255, 0.92);
  1376. box-shadow: 0 10px 26px rgba(40, 28, 20, 0.08);
  1377. display: grid;
  1378. align-content: center;
  1379. justify-items: center;
  1380. gap: 6px;
  1381. color: #5f544b;
  1382. cursor: pointer;
  1383. transition: transform 0.18s ease, background 0.18s ease;
  1384. }
  1385. .reader-float__button:hover {
  1386. transform: translateY(-1px);
  1387. background: rgba(255, 250, 243, 0.98);
  1388. }
  1389. .reader-float__button strong {
  1390. font-size: 1rem;
  1391. }
  1392. .reader-float__button span {
  1393. font-size: 0.82rem;
  1394. }
  1395. .reader-catalog-inline {
  1396. min-height: 100vh;
  1397. background: #e1d6c8;
  1398. padding: 28px 40px 36px;
  1399. box-shadow: 0 22px 60px rgba(54, 33, 21, 0.08);
  1400. border-radius: 0;
  1401. }
  1402. .reader-catalog__header {
  1403. display: flex;
  1404. align-items: center;
  1405. justify-content: space-between;
  1406. gap: 16px;
  1407. margin-bottom: 18px;
  1408. }
  1409. .reader-catalog__header h2 {
  1410. margin: 0;
  1411. font-size: 2rem;
  1412. }
  1413. .reader-catalog__close {
  1414. border: 0;
  1415. background: transparent;
  1416. color: var(--muted);
  1417. cursor: pointer;
  1418. }
  1419. .reader-catalog__grid {
  1420. display: grid;
  1421. grid-template-columns: repeat(2, minmax(0, 1fr));
  1422. gap: 12px 26px;
  1423. }
  1424. .reader-catalog-groups {
  1425. display: grid;
  1426. gap: 20px;
  1427. }
  1428. .reader-catalog__section {
  1429. display: grid;
  1430. gap: 12px;
  1431. }
  1432. .reader-catalog__section-title {
  1433. display: flex;
  1434. align-items: center;
  1435. gap: 10px;
  1436. color: #4f433a;
  1437. }
  1438. .reader-catalog__section-title strong {
  1439. font-size: 1.25rem;
  1440. font-weight: 700;
  1441. }
  1442. .reader-catalog__kind {
  1443. display: inline-flex;
  1444. align-items: center;
  1445. justify-content: center;
  1446. min-width: 46px;
  1447. padding: 4px 10px;
  1448. border-radius: 999px;
  1449. font-size: 0.82rem;
  1450. font-weight: 700;
  1451. }
  1452. .reader-catalog__kind--lore {
  1453. background: rgba(108, 126, 164, 0.12);
  1454. color: #55698c;
  1455. }
  1456. .reader-catalog__kind--novel {
  1457. background: rgba(186, 95, 57, 0.12);
  1458. color: #ba5f39;
  1459. }
  1460. .reader-entry-badges {
  1461. display: flex;
  1462. flex-wrap: wrap;
  1463. gap: 10px;
  1464. margin-bottom: 14px;
  1465. }
  1466. .reader-entry-badge {
  1467. display: inline-flex;
  1468. align-items: center;
  1469. justify-content: center;
  1470. min-height: 32px;
  1471. padding: 0 14px;
  1472. border-radius: 999px;
  1473. font-size: 0.88rem;
  1474. font-weight: 700;
  1475. }
  1476. .reader-entry-badge--lore {
  1477. background: rgba(92, 117, 168, 0.12);
  1478. color: #5870a1;
  1479. }
  1480. .reader-entry-badge--novel {
  1481. background: rgba(186, 95, 57, 0.12);
  1482. color: #ba5f39;
  1483. }
  1484. .reader-entry-badge--section {
  1485. background: rgba(91, 71, 56, 0.08);
  1486. color: #66584d;
  1487. }
  1488. .reader-qq-header--lore h1 {
  1489. font-size: clamp(2.25rem, 4vw, 3.2rem);
  1490. }
  1491. .reader-qq-content--lore p {
  1492. max-width: 56em;
  1493. margin-bottom: 1.1em;
  1494. }
  1495. .reader-catalog__item {
  1496. display: grid;
  1497. gap: 8px;
  1498. padding: 14px 0;
  1499. border-bottom: 1px solid rgba(91, 71, 56, 0.08);
  1500. }
  1501. .reader-catalog__item span {
  1502. color: var(--muted);
  1503. font-size: 0.9rem;
  1504. }
  1505. .reader-catalog__item strong {
  1506. font-size: 1.06rem;
  1507. font-weight: 600;
  1508. }
  1509. .reader-catalog__item--active {
  1510. color: #ba5f39;
  1511. font-weight: 700;
  1512. }
  1513. .reader-qq-footer {
  1514. display: grid;
  1515. grid-template-columns: 180px 1fr 1fr;
  1516. gap: 18px;
  1517. padding: 0 72px 48px;
  1518. margin-top: auto;
  1519. }
  1520. .reader-qq-footer__ghost,
  1521. .reader-qq-footer__button {
  1522. min-height: 54px;
  1523. border-radius: 999px;
  1524. display: inline-flex;
  1525. align-items: center;
  1526. justify-content: center;
  1527. border: 0;
  1528. }
  1529. .reader-qq-footer__ghost {
  1530. background: rgba(198, 141, 108, 0.14);
  1531. color: #9a5e3d;
  1532. }
  1533. .reader-qq-footer__button {
  1534. background: linear-gradient(180deg, #6ab1ff, #4f8adb);
  1535. color: white;
  1536. }
  1537. .reader-qq-footer__button--disabled {
  1538. background: rgba(129, 164, 205, 0.34);
  1539. color: rgba(255, 255, 255, 0.86);
  1540. }
  1541. .chip-row {
  1542. display: flex;
  1543. flex-wrap: wrap;
  1544. gap: 10px;
  1545. }
  1546. .chip {
  1547. padding: 8px 12px;
  1548. border-radius: 999px;
  1549. background: rgba(255, 250, 243, 0.92);
  1550. border: 1px solid var(--line);
  1551. color: var(--muted);
  1552. font-size: 0.9rem;
  1553. }
  1554. .chat-wechat-page {
  1555. min-height: calc(100vh - 74px);
  1556. height: calc(100vh - 74px);
  1557. padding: 24px 0;
  1558. overflow: hidden;
  1559. overscroll-behavior: none;
  1560. display: grid;
  1561. grid-template-rows: auto minmax(0, 1fr);
  1562. gap: 0;
  1563. }
  1564. .chat-wechat-page-title {
  1565. padding-bottom: 18px;
  1566. }
  1567. .chat-wechat-shell {
  1568. width: 100%;
  1569. margin-top: 0;
  1570. min-height: 0;
  1571. height: calc(100vh - 74px - 48px);
  1572. border-radius: 30px;
  1573. overflow: hidden;
  1574. border: 1px solid rgba(255, 255, 255, 0.72);
  1575. background: rgba(255, 252, 248, 0.9);
  1576. box-shadow: var(--shadow);
  1577. display: grid;
  1578. grid-template-columns: 280px minmax(0, 1fr);
  1579. }
  1580. .chat-wechat-sidebar {
  1581. padding: 22px 18px;
  1582. border-right: 1px solid var(--line);
  1583. background: rgba(255, 248, 240, 0.92);
  1584. display: grid;
  1585. grid-template-rows: auto auto minmax(0, 1fr);
  1586. gap: 8px;
  1587. }
  1588. .chat-wechat-sidebar__title {
  1589. font-size: 1.12rem;
  1590. font-weight: 700;
  1591. }
  1592. .chat-wechat-sidebar__meta {
  1593. color: var(--muted);
  1594. font-size: 0.9rem;
  1595. }
  1596. .chat-wechat-member-list {
  1597. display: grid;
  1598. gap: 10px;
  1599. align-content: start;
  1600. overflow: auto;
  1601. padding-right: 4px;
  1602. }
  1603. .chat-wechat-member {
  1604. display: flex;
  1605. align-items: center;
  1606. gap: 12px;
  1607. padding: 12px;
  1608. border-radius: 18px;
  1609. border: 1px solid rgba(91, 71, 56, 0.08);
  1610. background: rgba(255, 255, 255, 0.76);
  1611. }
  1612. .chat-wechat-member--self {
  1613. background: rgba(184, 92, 56, 0.12);
  1614. border-color: rgba(184, 92, 56, 0.18);
  1615. }
  1616. .chat-wechat-member__body {
  1617. min-width: 0;
  1618. display: grid;
  1619. gap: 4px;
  1620. }
  1621. .chat-wechat-member__body strong {
  1622. font-size: 0.96rem;
  1623. white-space: nowrap;
  1624. overflow: hidden;
  1625. text-overflow: ellipsis;
  1626. }
  1627. .chat-wechat-member__body span {
  1628. color: var(--muted);
  1629. font-size: 0.84rem;
  1630. }
  1631. .chat-wechat-main {
  1632. min-width: 0;
  1633. min-height: 0;
  1634. overflow: hidden;
  1635. display: grid;
  1636. grid-template-rows: auto minmax(0, 1fr) auto;
  1637. }
  1638. .chat-wechat-header {
  1639. padding: 22px 24px 18px;
  1640. border-bottom: 1px solid var(--line);
  1641. background: rgba(255, 248, 240, 0.92);
  1642. }
  1643. .chat-wechat-header__row {
  1644. display: flex;
  1645. align-items: center;
  1646. justify-content: space-between;
  1647. gap: 16px;
  1648. }
  1649. .chat-wechat-header__title {
  1650. font-size: 1.5rem;
  1651. font-weight: 700;
  1652. }
  1653. .chat-wechat-header__meta {
  1654. margin-top: 6px;
  1655. color: var(--muted);
  1656. }
  1657. .chat-wechat-header__presence {
  1658. display: none;
  1659. }
  1660. .chat-wechat-header__avatars {
  1661. display: flex;
  1662. align-items: center;
  1663. gap: 6px;
  1664. }
  1665. .chat-wechat-header__avatar {
  1666. width: 28px;
  1667. height: 28px;
  1668. border-radius: 10px;
  1669. border: 2px solid rgba(255, 248, 240, 0.96);
  1670. background: rgba(184, 92, 56, 0.16);
  1671. color: #9a583a;
  1672. display: inline-flex;
  1673. align-items: center;
  1674. justify-content: center;
  1675. font-size: 0.7rem;
  1676. font-weight: 700;
  1677. }
  1678. .chat-wechat-header__presence-text {
  1679. color: var(--muted);
  1680. font-size: 0.84rem;
  1681. }
  1682. .chat-wechat-status {
  1683. display: inline-flex;
  1684. align-items: center;
  1685. gap: 10px;
  1686. flex: 0 0 auto;
  1687. }
  1688. .chat-wechat-status__text {
  1689. color: var(--muted);
  1690. font-size: 0.92rem;
  1691. white-space: nowrap;
  1692. }
  1693. .chat-wechat-status__icon {
  1694. min-width: 34px;
  1695. height: 34px;
  1696. padding: 0 10px;
  1697. border-radius: 12px;
  1698. display: inline-flex;
  1699. align-items: center;
  1700. justify-content: center;
  1701. background: rgba(184, 92, 56, 0.12);
  1702. color: #9a583a;
  1703. font-size: 0.72rem;
  1704. font-weight: 700;
  1705. }
  1706. .chat-wechat-member__avatar,
  1707. .chat-wechat-avatar {
  1708. width: 38px;
  1709. height: 38px;
  1710. border-radius: 14px;
  1711. display: grid;
  1712. place-items: center;
  1713. background: rgba(184, 92, 56, 0.16);
  1714. color: #9a583a;
  1715. font-size: 0.88rem;
  1716. font-weight: 700;
  1717. }
  1718. .chat-wechat-messages {
  1719. padding: 22px 24px;
  1720. display: grid;
  1721. gap: 16px;
  1722. align-content: start;
  1723. overflow: auto;
  1724. min-height: 0;
  1725. background:
  1726. linear-gradient(180deg, rgba(255, 252, 248, 0.94), rgba(250, 245, 238, 0.98));
  1727. }
  1728. .chat-wechat-empty {
  1729. padding: 18px;
  1730. border-radius: 18px;
  1731. text-align: center;
  1732. color: var(--muted);
  1733. background: rgba(255, 255, 255, 0.72);
  1734. }
  1735. .chat-wechat-message {
  1736. display: flex;
  1737. align-items: flex-start;
  1738. gap: 12px;
  1739. }
  1740. .chat-wechat-message--self {
  1741. justify-content: flex-end;
  1742. }
  1743. .chat-wechat-avatar--self {
  1744. background: rgba(110, 154, 90, 0.18);
  1745. color: #4f7740;
  1746. }
  1747. .chat-wechat-message__body {
  1748. max-width: min(620px, 100%);
  1749. display: inline-flex;
  1750. flex-direction: column;
  1751. align-items: flex-start;
  1752. }
  1753. .chat-wechat-message__body--image {
  1754. max-width: min(320px, 100%);
  1755. }
  1756. .chat-wechat-message__name,
  1757. .chat-wechat-message__time {
  1758. color: var(--muted);
  1759. font-size: 0.82rem;
  1760. }
  1761. .chat-wechat-message__name {
  1762. margin-bottom: 6px;
  1763. }
  1764. .chat-wechat-message__time {
  1765. margin-top: 6px;
  1766. }
  1767. .chat-wechat-message--self .chat-wechat-message__time {
  1768. text-align: right;
  1769. width: 100%;
  1770. }
  1771. .chat-wechat-bubble {
  1772. display: inline-block;
  1773. width: fit-content;
  1774. max-width: 100%;
  1775. padding: 14px 16px;
  1776. border-radius: 8px 18px 18px 18px;
  1777. background: #ffffff;
  1778. border: 1px solid rgba(91, 71, 56, 0.08);
  1779. box-shadow: 0 8px 18px rgba(45, 31, 22, 0.04);
  1780. }
  1781. .chat-wechat-message--self .chat-wechat-bubble {
  1782. border-radius: 18px 8px 18px 18px;
  1783. background: #dff2d8;
  1784. }
  1785. .chat-wechat-bubble__text {
  1786. line-height: 1.75;
  1787. overflow-wrap: anywhere;
  1788. }
  1789. .chat-wechat-bubble--attachment-only {
  1790. padding: 10px;
  1791. }
  1792. .chat-wechat-bubble--image {
  1793. padding: 10px;
  1794. max-width: min(320px, 100%);
  1795. }
  1796. .chat-wechat-file {
  1797. margin-top: 10px;
  1798. padding: 12px;
  1799. border-radius: 14px;
  1800. background: rgba(255, 255, 255, 0.8);
  1801. }
  1802. .chat-wechat-file--image {
  1803. margin-top: 0;
  1804. padding: 0;
  1805. background: transparent;
  1806. display: inline-grid;
  1807. width: fit-content;
  1808. max-width: 100%;
  1809. }
  1810. .chat-wechat-file--download {
  1811. min-width: 260px;
  1812. }
  1813. .chat-wechat-file__image-button {
  1814. display: inline-block;
  1815. padding: 0;
  1816. border: 0;
  1817. background: transparent;
  1818. cursor: pointer;
  1819. }
  1820. .chat-wechat-file__image {
  1821. width: min(280px, 100%);
  1822. display: block;
  1823. margin-bottom: 10px;
  1824. border-radius: 12px;
  1825. object-fit: cover;
  1826. }
  1827. .chat-wechat-file__meta {
  1828. margin-top: 6px;
  1829. color: var(--muted);
  1830. font-size: 0.86rem;
  1831. }
  1832. .chat-wechat-file__link {
  1833. color: inherit;
  1834. text-decoration: none;
  1835. border: 0;
  1836. background: transparent;
  1837. padding: 0;
  1838. text-align: left;
  1839. cursor: pointer;
  1840. }
  1841. .chat-wechat-file__link strong {
  1842. display: inline-block;
  1843. }
  1844. .chat-wechat-file__download {
  1845. width: 100%;
  1846. display: grid;
  1847. grid-template-columns: 38px minmax(0, 1fr);
  1848. gap: 10px;
  1849. align-items: center;
  1850. padding: 10px 12px;
  1851. border: 0;
  1852. border-radius: 14px;
  1853. background: rgba(255, 255, 255, 0.78);
  1854. cursor: pointer;
  1855. text-align: left;
  1856. }
  1857. .chat-wechat-file__icon {
  1858. width: 38px;
  1859. height: 38px;
  1860. border-radius: 12px;
  1861. background: rgba(184, 92, 56, 0.14);
  1862. color: #9a583a;
  1863. display: inline-flex;
  1864. align-items: center;
  1865. justify-content: center;
  1866. font-size: 0.88rem;
  1867. font-weight: 700;
  1868. }
  1869. .chat-wechat-file__info {
  1870. display: grid;
  1871. gap: 4px;
  1872. }
  1873. .chat-wechat-file__info span {
  1874. color: var(--muted);
  1875. font-size: 0.82rem;
  1876. }
  1877. .chat-wechat-composer {
  1878. padding: 16px 18px 18px;
  1879. border-top: 1px solid var(--line);
  1880. background: rgba(249, 244, 236, 0.98);
  1881. }
  1882. .chat-wechat-composer__tools {
  1883. display: flex;
  1884. align-items: center;
  1885. justify-content: space-between;
  1886. gap: 10px;
  1887. margin-bottom: 10px;
  1888. }
  1889. .chat-wechat-tools-left {
  1890. display: flex;
  1891. align-items: center;
  1892. gap: 8px;
  1893. }
  1894. .chat-wechat-composer__row {
  1895. display: grid;
  1896. grid-template-columns: minmax(0, 1fr) 74px;
  1897. gap: 10px;
  1898. align-items: stretch;
  1899. }
  1900. .chat-wechat-tool,
  1901. .chat-wechat-send {
  1902. min-height: 44px;
  1903. border: 0;
  1904. border-radius: 14px;
  1905. }
  1906. .chat-wechat-tool {
  1907. background: rgba(255, 255, 255, 0.88);
  1908. cursor: pointer;
  1909. width: 44px;
  1910. min-width: 44px;
  1911. display: inline-flex;
  1912. align-items: center;
  1913. justify-content: center;
  1914. font-size: 1.1rem;
  1915. }
  1916. .chat-wechat-tool__icon {
  1917. width: 18px;
  1918. height: 18px;
  1919. display: block;
  1920. }
  1921. .chat-wechat-send {
  1922. background: #7bb463;
  1923. color: white;
  1924. cursor: pointer;
  1925. }
  1926. .chat-wechat-input {
  1927. min-height: 44px;
  1928. height: 44px;
  1929. max-height: 120px;
  1930. width: 100%;
  1931. resize: none;
  1932. border: 0;
  1933. border-radius: 16px;
  1934. background: rgba(255, 255, 255, 0.96);
  1935. padding: 12px 14px;
  1936. }
  1937. .chat-wechat-tool.is-active {
  1938. background: rgba(123, 180, 99, 0.16);
  1939. color: #467536;
  1940. }
  1941. .chat-wechat-tool--danger {
  1942. color: #b24a2f;
  1943. background: rgba(214, 108, 77, 0.12);
  1944. font-size: 0;
  1945. position: relative;
  1946. }
  1947. .chat-wechat-tool--danger::before {
  1948. content: "";
  1949. width: 18px;
  1950. height: 18px;
  1951. display: block;
  1952. background-repeat: no-repeat;
  1953. background-position: center;
  1954. background-size: 18px 18px;
  1955. background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23b24a2f' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 4.5h6m-8 3h10m-8.5 0 .6 10.2c.1 1 1 1.8 2 1.8h2.8c1 0 1.9-.8 2-1.8l.6-10.2M10 10.5v5.5M14 10.5v5.5'/%3E%3C/svg%3E");
  1956. }
  1957. .chat-wechat-emoji-panel {
  1958. display: flex;
  1959. flex-wrap: wrap;
  1960. gap: 8px;
  1961. padding: 10px;
  1962. margin-bottom: 10px;
  1963. border-radius: 18px;
  1964. background: rgba(255, 255, 255, 0.76);
  1965. }
  1966. .chat-wechat-emoji-panel button {
  1967. width: 40px;
  1968. height: 40px;
  1969. border: 0;
  1970. border-radius: 12px;
  1971. background: rgba(245, 239, 231, 0.96);
  1972. cursor: pointer;
  1973. }
  1974. .chat-wechat-error {
  1975. color: #b24a2f;
  1976. font-size: 0.86rem;
  1977. }
  1978. .chat-wechat-attachment {
  1979. display: grid;
  1980. grid-template-columns: auto minmax(0, 1fr) 36px;
  1981. gap: 10px;
  1982. align-items: center;
  1983. padding: 10px 12px;
  1984. margin-bottom: 10px;
  1985. border-radius: 16px;
  1986. background: rgba(255, 255, 255, 0.78);
  1987. }
  1988. .chat-wechat-attachment__image {
  1989. width: 44px;
  1990. height: 44px;
  1991. border-radius: 10px;
  1992. object-fit: cover;
  1993. }
  1994. .chat-wechat-attachment__meta {
  1995. display: grid;
  1996. gap: 4px;
  1997. }
  1998. .chat-wechat-attachment__meta span {
  1999. color: var(--muted);
  2000. font-size: 0.84rem;
  2001. }
  2002. .chat-wechat-attachment button {
  2003. width: 36px;
  2004. height: 36px;
  2005. border: 0;
  2006. border-radius: 10px;
  2007. background: rgba(184, 92, 56, 0.12);
  2008. color: #9a583a;
  2009. cursor: pointer;
  2010. }
  2011. .chat-wechat-send:disabled {
  2012. opacity: 0.72;
  2013. cursor: default;
  2014. }
  2015. .chat-wechat-image-viewer {
  2016. position: fixed;
  2017. inset: 0;
  2018. z-index: 60;
  2019. display: grid;
  2020. place-items: center;
  2021. padding: 20px;
  2022. background: rgba(14, 12, 10, 0.88);
  2023. }
  2024. .chat-wechat-image-viewer__image {
  2025. max-width: min(92vw, 980px);
  2026. max-height: 92vh;
  2027. object-fit: contain;
  2028. border-radius: 16px;
  2029. }
  2030. @media (max-width: 960px) {
  2031. .site-nav {
  2032. display: none;
  2033. }
  2034. .site-menu-button {
  2035. display: inline-flex;
  2036. flex-direction: column;
  2037. }
  2038. .site-drawer,
  2039. .site-drawer-backdrop {
  2040. display: block;
  2041. }
  2042. body.reader-body {
  2043. overflow: hidden;
  2044. }
  2045. .hero,
  2046. .home-sections,
  2047. .chat-layout,
  2048. .reader-layout {
  2049. grid-template-columns: 1fr;
  2050. }
  2051. .chat-sidebar,
  2052. .reader-sidebar {
  2053. border-right: 0;
  2054. border-bottom: 1px solid var(--line);
  2055. }
  2056. .library-grid {
  2057. grid-template-columns: repeat(2, minmax(0, 1fr));
  2058. }
  2059. .agents-grid {
  2060. grid-template-columns: repeat(2, minmax(0, 1fr));
  2061. }
  2062. .agent-stats {
  2063. grid-template-columns: repeat(2, minmax(0, 1fr));
  2064. }
  2065. .agents-intro,
  2066. .agent-detail-grid {
  2067. grid-template-columns: 1fr;
  2068. }
  2069. .agents-monitor-top {
  2070. flex-direction: column;
  2071. align-items: stretch;
  2072. }
  2073. .agents-monitor-controls {
  2074. justify-items: stretch;
  2075. }
  2076. .agents-monitor-summary {
  2077. grid-template-columns: repeat(5, minmax(0, 1fr));
  2078. }
  2079. .agents-worklist {
  2080. grid-template-columns: repeat(2, minmax(0, 1fr));
  2081. }
  2082. .agents-workitem__head {
  2083. flex-direction: column;
  2084. align-items: stretch;
  2085. }
  2086. .agents-workitem__metrics {
  2087. justify-content: flex-start;
  2088. }
  2089. .reader-stage {
  2090. height: 100dvh;
  2091. padding: 72px 0 86px;
  2092. overflow: auto;
  2093. display: block;
  2094. background: var(--reader-page) !important;
  2095. }
  2096. .reader-desktop-layout {
  2097. display: block;
  2098. width: auto;
  2099. max-width: none;
  2100. }
  2101. .reader-qq-shell {
  2102. width: 100% !important;
  2103. min-height: calc(100dvh - 158px);
  2104. overflow: visible;
  2105. background: var(--reader-page);
  2106. }
  2107. .reader-float {
  2108. display: none;
  2109. }
  2110. .reader-progress-rail {
  2111. display: none;
  2112. }
  2113. .reader-catalog__grid,
  2114. .reader-qq-footer {
  2115. grid-template-columns: 1fr;
  2116. }
  2117. .reader-mobile-bar {
  2118. position: fixed;
  2119. left: 0;
  2120. right: 0;
  2121. z-index: 28;
  2122. display: grid;
  2123. gap: 0;
  2124. padding: 10px 14px;
  2125. background: var(--reader-page, #f7f0e4);
  2126. }
  2127. .reader-mobile-bar--top {
  2128. top: 0;
  2129. grid-template-columns: 1fr 56px 56px;
  2130. align-items: center;
  2131. border-bottom: 1px solid rgba(91, 71, 56, 0.08);
  2132. }
  2133. .reader-mobile-bar--bottom {
  2134. bottom: 0;
  2135. grid-template-columns: repeat(3, minmax(0, 1fr));
  2136. border-top: 1px solid rgba(91, 71, 56, 0.08);
  2137. }
  2138. .reader-mobile-bar__icon,
  2139. .reader-mobile-bar__action {
  2140. min-height: 42px;
  2141. padding: 0 12px;
  2142. border: 0;
  2143. border-radius: 0;
  2144. background: transparent;
  2145. box-shadow: none;
  2146. display: flex;
  2147. align-items: center;
  2148. justify-content: center;
  2149. color: #54483f;
  2150. }
  2151. .reader-mobile-bar__icon {
  2152. font-size: 0.92rem;
  2153. font-weight: 600;
  2154. white-space: nowrap;
  2155. }
  2156. .reader-mobile-bar__icon--back,
  2157. .reader-mobile-bar__icon:first-child {
  2158. justify-content: flex-start;
  2159. padding-left: 4px;
  2160. }
  2161. .reader-mobile-bar__action {
  2162. font-size: 0.9rem;
  2163. border-right: 1px solid rgba(91, 71, 56, 0.08);
  2164. }
  2165. .reader-mobile-bar__action:last-child {
  2166. border-right: 0;
  2167. }
  2168. .reader-mobile-bar__action--disabled {
  2169. color: #a99a8d;
  2170. }
  2171. .reader-qq-paper,
  2172. .reader-catalog-inline {
  2173. min-height: calc(100dvh - 158px);
  2174. }
  2175. .reader-qq-paper--desktop-hidden {
  2176. display: flex;
  2177. }
  2178. .reader-qq-paper {
  2179. box-shadow: none;
  2180. background: var(--reader-page) !important;
  2181. }
  2182. .reader-qq-header {
  2183. padding: 28px 20px 18px;
  2184. background: var(--reader-page);
  2185. }
  2186. .reader-qq-content {
  2187. padding: 20px 20px 28px;
  2188. background: var(--reader-page);
  2189. }
  2190. .reader-qq-content p {
  2191. margin-bottom: 1.35em;
  2192. font-size: clamp(1rem, 4vw, 1.12rem);
  2193. line-height: 2.08;
  2194. }
  2195. .reader-catalog-inline {
  2196. padding: 22px 20px 28px;
  2197. }
  2198. .reader-catalog-mobile-mask {
  2199. position: fixed;
  2200. inset: 0;
  2201. display: block;
  2202. background: rgba(28, 21, 16, 0.38);
  2203. z-index: 26;
  2204. }
  2205. .reader-catalog-mobile-mask[hidden] {
  2206. display: none;
  2207. }
  2208. .reader-catalog-mobile-sheet {
  2209. position: fixed;
  2210. left: 0;
  2211. right: 0;
  2212. bottom: 0;
  2213. display: block;
  2214. max-height: min(74dvh, 620px);
  2215. padding: 0 0 calc(76px + env(safe-area-inset-bottom));
  2216. border-radius: 26px 26px 0 0;
  2217. box-shadow: 0 -20px 40px rgba(28, 21, 16, 0.2);
  2218. transform: translateY(102%);
  2219. transition: transform 0.22s ease;
  2220. z-index: 27;
  2221. overflow: auto;
  2222. pointer-events: none;
  2223. }
  2224. .reader-catalog-mobile-sheet.is-open {
  2225. transform: translateY(0);
  2226. pointer-events: auto;
  2227. }
  2228. .reader-catalog-mobile-sheet .reader-catalog__header {
  2229. position: sticky;
  2230. top: 0;
  2231. z-index: 10;
  2232. background: inherit;
  2233. padding: 18px 18px 10px;
  2234. }
  2235. .reader-catalog-mobile-sheet .reader-catalog-groups {
  2236. padding: 0 18px;
  2237. }
  2238. .reader-catalog-mobile-sheet .reader-catalog__grid {
  2239. padding-bottom: 12px;
  2240. }
  2241. .reader-catalog-inline {
  2242. display: none;
  2243. }
  2244. .reader-catalog__header {
  2245. position: sticky;
  2246. top: 0;
  2247. padding-bottom: 14px;
  2248. background: inherit;
  2249. z-index: 1;
  2250. }
  2251. .reader-qq-footer {
  2252. padding: 0 20px 22px;
  2253. gap: 12px;
  2254. }
  2255. .reader-qq-footer {
  2256. display: none;
  2257. }
  2258. .reader-qq-footer__ghost,
  2259. .reader-qq-footer__button {
  2260. min-height: 48px;
  2261. }
  2262. .agent-quick-grid {
  2263. grid-template-columns: repeat(3, minmax(0, 1fr));
  2264. }
  2265. }
  2266. @media (max-width: 640px) {
  2267. body.chat-body {
  2268. overflow: hidden;
  2269. position: static;
  2270. width: auto;
  2271. min-height: 100svh;
  2272. }
  2273. .chat-wechat-page {
  2274. padding: 0;
  2275. height: calc(100svh - 74px);
  2276. min-height: calc(100svh - 74px);
  2277. overflow: hidden;
  2278. width: 100%;
  2279. max-width: 100%;
  2280. min-width: 0;
  2281. margin: 0;
  2282. display: grid;
  2283. grid-template-rows: minmax(0, 1fr);
  2284. gap: 0;
  2285. background: #efeae2;
  2286. }
  2287. .chat-wechat-page-title {
  2288. display: none;
  2289. }
  2290. .chat-wechat-shell {
  2291. width: 100%;
  2292. margin-top: 0;
  2293. min-height: 0;
  2294. height: 100%;
  2295. border-radius: 0;
  2296. border: 0;
  2297. box-shadow: none;
  2298. background: #efeae2;
  2299. display: grid;
  2300. grid-template-columns: 1fr;
  2301. grid-template-rows: minmax(0, 1fr);
  2302. }
  2303. .chat-wechat-main {
  2304. height: 100%;
  2305. min-height: 0;
  2306. }
  2307. .chat-wechat-sidebar {
  2308. display: none;
  2309. }
  2310. .chat-wechat-header {
  2311. padding: 14px 16px 10px;
  2312. background: #f6efe6;
  2313. }
  2314. .chat-wechat-header__row {
  2315. align-items: center;
  2316. justify-content: space-between;
  2317. gap: 10px;
  2318. }
  2319. .chat-wechat-header__main {
  2320. min-width: 0;
  2321. flex: 1 1 auto;
  2322. display: flex;
  2323. align-items: baseline;
  2324. justify-content: space-between;
  2325. gap: 10px;
  2326. }
  2327. .chat-wechat-header__title {
  2328. font-size: 1.15rem;
  2329. white-space: nowrap;
  2330. }
  2331. .chat-wechat-header__meta {
  2332. margin-top: 0;
  2333. font-size: 0.78rem;
  2334. white-space: nowrap;
  2335. text-align: right;
  2336. overflow: hidden;
  2337. text-overflow: ellipsis;
  2338. }
  2339. .chat-wechat-status {
  2340. display: none;
  2341. }
  2342. .chat-wechat-status__text {
  2343. font-size: 0.84rem;
  2344. }
  2345. .chat-wechat-status__icon {
  2346. min-width: 30px;
  2347. height: 30px;
  2348. padding: 0 8px;
  2349. border-radius: 10px;
  2350. }
  2351. .chat-wechat-messages {
  2352. padding: 14px 12px 18px;
  2353. gap: 12px;
  2354. background: #efeae2;
  2355. overflow: auto;
  2356. min-height: 0;
  2357. padding-bottom: 18px;
  2358. }
  2359. .chat-wechat-header__presence {
  2360. margin-top: 10px;
  2361. display: flex;
  2362. align-items: center;
  2363. justify-content: space-between;
  2364. gap: 12px;
  2365. }
  2366. .chat-wechat-header__avatars {
  2367. gap: 8px;
  2368. }
  2369. .chat-wechat-message {
  2370. gap: 8px;
  2371. }
  2372. .chat-wechat-avatar {
  2373. width: 34px;
  2374. height: 34px;
  2375. border-radius: 12px;
  2376. }
  2377. .chat-wechat-message__body {
  2378. max-width: calc(100% - 48px);
  2379. }
  2380. .chat-wechat-bubble {
  2381. padding: 12px 13px;
  2382. border-radius: 6px 16px 16px 16px;
  2383. box-shadow: none;
  2384. }
  2385. .chat-wechat-message--self .chat-wechat-bubble {
  2386. border-radius: 16px 6px 16px 16px;
  2387. }
  2388. .chat-wechat-composer {
  2389. padding: 10px 12px calc(12px + env(safe-area-inset-bottom));
  2390. background: rgba(245, 239, 231, 0.98);
  2391. backdrop-filter: blur(12px);
  2392. z-index: 6;
  2393. margin-top: 0;
  2394. position: relative;
  2395. box-shadow: 0 -10px 26px rgba(49, 34, 22, 0.06);
  2396. }
  2397. .chat-wechat-composer::after {
  2398. content: "";
  2399. position: absolute;
  2400. left: 0;
  2401. right: 0;
  2402. bottom: calc(-1 * env(safe-area-inset-bottom));
  2403. height: env(safe-area-inset-bottom);
  2404. background: rgba(245, 239, 231, 0.98);
  2405. }
  2406. .chat-wechat-composer__tools {
  2407. margin-bottom: 8px;
  2408. }
  2409. .chat-wechat-tool,
  2410. .chat-wechat-send {
  2411. min-height: 42px;
  2412. }
  2413. .chat-wechat-tool {
  2414. width: 42px;
  2415. min-width: 42px;
  2416. border-radius: 12px;
  2417. }
  2418. .chat-wechat-composer__row {
  2419. grid-template-columns: minmax(0, 1fr) 72px;
  2420. gap: 8px;
  2421. }
  2422. .chat-wechat-input {
  2423. min-height: 42px;
  2424. height: 42px;
  2425. padding: 10px 12px;
  2426. border-radius: 14px;
  2427. }
  2428. .chat-wechat-emoji-panel {
  2429. padding: 8px;
  2430. border-radius: 16px;
  2431. }
  2432. .chat-wechat-emoji-panel button {
  2433. width: 38px;
  2434. height: 38px;
  2435. border-radius: 10px;
  2436. }
  2437. .chat-wechat-attachment {
  2438. grid-template-columns: auto minmax(0, 1fr) 32px;
  2439. padding: 9px 10px;
  2440. }
  2441. .chat-wechat-attachment__image {
  2442. width: 40px;
  2443. height: 40px;
  2444. }
  2445. .chat-wechat-attachment button {
  2446. width: 32px;
  2447. height: 32px;
  2448. }
  2449. .chat-wechat-image-viewer {
  2450. padding: 14px;
  2451. }
  2452. .chat-wechat-image-viewer__image {
  2453. max-width: calc(100vw - 28px);
  2454. max-height: calc(100svh - 28px);
  2455. }
  2456. .site-header {
  2457. position: sticky;
  2458. top: 0;
  2459. background: #fbf6ef;
  2460. backdrop-filter: none;
  2461. }
  2462. .page-shell {
  2463. width: min(100vw - 20px, 100%);
  2464. }
  2465. .site-header__inner {
  2466. padding: 10px 0;
  2467. }
  2468. .site-drawer,
  2469. .site-drawer-backdrop {
  2470. display: block;
  2471. }
  2472. .site-drawer {
  2473. background: transparent;
  2474. }
  2475. .site-drawer__panel {
  2476. margin-left: 0;
  2477. width: 100vw;
  2478. min-width: 0;
  2479. min-height: 100dvh;
  2480. height: 100dvh;
  2481. padding-top: 88px;
  2482. background: #fbf6ef;
  2483. box-shadow: none;
  2484. }
  2485. .site-brand__name {
  2486. color: #241c16;
  2487. }
  2488. .site-brand__tag {
  2489. display: none;
  2490. }
  2491. .site-menu-button {
  2492. border-color: rgba(60, 42, 27, 0.14);
  2493. background: #fff8f0;
  2494. width: 58px;
  2495. height: 58px;
  2496. }
  2497. .hero {
  2498. padding-top: 18px;
  2499. gap: 16px;
  2500. }
  2501. .library-shell,
  2502. .agents-shell--compact,
  2503. .chat-wechat-shell {
  2504. margin-top: 18px;
  2505. }
  2506. .hero__main,
  2507. .section-card,
  2508. .library-shell,
  2509. .agents-shell,
  2510. .chat-sidebar,
  2511. .chat-toolbar,
  2512. .chat-messages,
  2513. .chat-composer,
  2514. .reader-sidebar,
  2515. .reader-topbar,
  2516. .reader-footer,
  2517. .reader-content {
  2518. padding-left: 16px;
  2519. padding-right: 16px;
  2520. }
  2521. .library-grid {
  2522. grid-template-columns: 1fr;
  2523. }
  2524. .book-card {
  2525. display: grid;
  2526. grid-template-columns: 112px minmax(0, 1fr);
  2527. }
  2528. .book-cover {
  2529. aspect-ratio: auto;
  2530. min-height: 100%;
  2531. padding: 16px;
  2532. }
  2533. .book-cover__title {
  2534. font-size: 1.1rem;
  2535. }
  2536. .agents-grid {
  2537. grid-template-columns: 1fr;
  2538. }
  2539. .agent-stats {
  2540. grid-template-columns: 1fr;
  2541. }
  2542. .agents-monitor-summary {
  2543. grid-template-columns: repeat(5, minmax(0, 1fr));
  2544. gap: 6px;
  2545. }
  2546. .agents-monitor-summary__item:first-child {
  2547. grid-column: unset;
  2548. }
  2549. .agents-monitor-summary__item {
  2550. min-height: 48px;
  2551. min-width: 0;
  2552. padding: 6px 8px;
  2553. }
  2554. .agents-monitor-summary__item strong {
  2555. font-size: 1rem;
  2556. }
  2557. .agents-monitor-summary__item span {
  2558. font-size: 0.72rem;
  2559. }
  2560. .agents-worklist {
  2561. grid-template-columns: 1fr;
  2562. }
  2563. .agents-workitem {
  2564. padding: 14px 14px 16px;
  2565. border-radius: 18px;
  2566. }
  2567. .agents-workitem__identity {
  2568. align-items: flex-start;
  2569. }
  2570. .agents-workitem__name-row {
  2571. gap: 8px;
  2572. }
  2573. .agents-workitem__metrics,
  2574. .agents-workitem__meta {
  2575. gap: 8px 10px;
  2576. }
  2577. .reader-qq-header {
  2578. padding: 24px 16px 16px;
  2579. }
  2580. .reader-qq-header h1 {
  2581. font-size: clamp(1.6rem, 8vw, 2.1rem);
  2582. }
  2583. .reader-qq-meta {
  2584. justify-content: flex-start;
  2585. gap: 8px 14px;
  2586. font-size: 0.84rem;
  2587. }
  2588. .reader-catalog-inline {
  2589. padding: 18px 16px 24px;
  2590. }
  2591. .reader-catalog__header h2 {
  2592. font-size: 1.5rem;
  2593. }
  2594. .reader-qq-footer {
  2595. padding-left: 16px;
  2596. padding-right: 16px;
  2597. }
  2598. .agent-quick-grid {
  2599. grid-template-columns: 1fr;
  2600. }
  2601. .agents-toolbar,
  2602. .agent-detail-hero {
  2603. flex-direction: column;
  2604. align-items: stretch;
  2605. }
  2606. .agent-row {
  2607. grid-template-columns: 1fr;
  2608. gap: 6px;
  2609. }
  2610. .composer-grid {
  2611. grid-template-columns: 1fr;
  2612. }
  2613. .chat-layout {
  2614. border-radius: 24px;
  2615. overflow: hidden;
  2616. background: rgba(255, 250, 243, 0.92);
  2617. margin-bottom: 18px;
  2618. }
  2619. .page-title--compact-mobile {
  2620. padding: 14px 0 10px;
  2621. }
  2622. .page-title--compact-mobile h1 {
  2623. font-size: 2rem;
  2624. }
  2625. .page-title--compact-mobile p {
  2626. display: none;
  2627. }
  2628. .chat-sidebar {
  2629. padding-top: 14px;
  2630. padding-bottom: 12px;
  2631. background: rgba(255, 247, 239, 0.96);
  2632. }
  2633. .presence-list {
  2634. grid-auto-flow: column;
  2635. grid-auto-columns: minmax(180px, 78%);
  2636. overflow-x: auto;
  2637. padding-bottom: 4px;
  2638. scroll-snap-type: x proximity;
  2639. }
  2640. .presence-item {
  2641. min-height: 100%;
  2642. scroll-snap-align: start;
  2643. }
  2644. .chat-main {
  2645. min-height: auto;
  2646. grid-template-rows: auto minmax(0, 1fr) auto;
  2647. background: rgba(255, 250, 243, 0.84);
  2648. }
  2649. .chat-toolbar strong {
  2650. display: block;
  2651. font-size: 1.05rem;
  2652. }
  2653. .chat-toolbar__hint,
  2654. .chat-sidebar__hint {
  2655. display: none;
  2656. }
  2657. .chat-messages {
  2658. padding-top: 14px;
  2659. padding-bottom: 16px;
  2660. max-height: 44vh;
  2661. overflow: auto;
  2662. }
  2663. .message {
  2664. max-width: 100%;
  2665. padding: 12px 14px;
  2666. border-radius: 18px;
  2667. }
  2668. .composer-input-hint {
  2669. font-size: 0.86rem;
  2670. line-height: 1.5;
  2671. }
  2672. .composer-input--drop {
  2673. min-height: 64px;
  2674. border-radius: 18px;
  2675. resize: none;
  2676. padding: 14px 16px;
  2677. }
  2678. .composer-actions--stacked {
  2679. width: 100%;
  2680. height: auto;
  2681. grid-template-columns: minmax(0, 1fr) 92px;
  2682. grid-template-rows: none;
  2683. align-items: stretch;
  2684. gap: 10px;
  2685. }
  2686. .composer-actions--stacked .button {
  2687. min-height: 46px;
  2688. white-space: nowrap;
  2689. }
  2690. .chat-composer {
  2691. position: sticky;
  2692. bottom: 0;
  2693. background: rgba(251, 246, 239, 0.96);
  2694. backdrop-filter: blur(12px);
  2695. box-shadow: 0 -12px 30px rgba(49, 34, 22, 0.08);
  2696. }
  2697. .button {
  2698. width: 100%;
  2699. }
  2700. .hero__actions {
  2701. display: grid;
  2702. }
  2703. .home-sections {
  2704. gap: 16px;
  2705. padding-bottom: 28px;
  2706. }
  2707. .reader-paper {
  2708. padding: 22px 18px;
  2709. border-radius: 22px;
  2710. }
  2711. .site-brand__tag {
  2712. display: none;
  2713. }
  2714. .reader-mobile-bar--top {
  2715. grid-template-columns: 1fr 92px 92px;
  2716. }
  2717. .reader-mobile-bar__icon,
  2718. .reader-mobile-bar__action {
  2719. min-height: 42px;
  2720. }
  2721. .reader-catalog-mobile-sheet {
  2722. bottom: 0;
  2723. max-height: 76dvh;
  2724. padding: 0 0 calc(74px + env(safe-area-inset-bottom));
  2725. }
  2726. .reader-catalog-mobile-sheet .reader-catalog__header {
  2727. padding: 16px 16px 10px;
  2728. }
  2729. .reader-catalog-mobile-sheet .reader-catalog-groups {
  2730. padding: 0 16px;
  2731. }
  2732. }
  2733. @media (max-width: 640px) {
  2734. .chat-wechat-page {
  2735. width: 100vw;
  2736. max-width: 100vw;
  2737. }
  2738. .chat-wechat-shell {
  2739. margin-top: 0 !important;
  2740. }
  2741. }