globals.css 53 KB

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