globals.css 55 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189
  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-groups {
  1407. display: grid;
  1408. gap: 20px;
  1409. }
  1410. .reader-catalog__section {
  1411. display: grid;
  1412. gap: 12px;
  1413. }
  1414. .reader-catalog__section-title {
  1415. display: flex;
  1416. align-items: center;
  1417. gap: 10px;
  1418. color: #4f433a;
  1419. }
  1420. .reader-catalog__section-title strong {
  1421. font-size: 1.02rem;
  1422. font-weight: 700;
  1423. }
  1424. .reader-catalog__kind {
  1425. display: inline-flex;
  1426. align-items: center;
  1427. justify-content: center;
  1428. min-width: 46px;
  1429. padding: 4px 10px;
  1430. border-radius: 999px;
  1431. font-size: 0.82rem;
  1432. font-weight: 700;
  1433. }
  1434. .reader-catalog__kind--lore {
  1435. background: rgba(108, 126, 164, 0.12);
  1436. color: #55698c;
  1437. }
  1438. .reader-catalog__kind--novel {
  1439. background: rgba(186, 95, 57, 0.12);
  1440. color: #ba5f39;
  1441. }
  1442. .reader-entry-badges {
  1443. display: flex;
  1444. flex-wrap: wrap;
  1445. gap: 10px;
  1446. margin-bottom: 14px;
  1447. }
  1448. .reader-entry-badge {
  1449. display: inline-flex;
  1450. align-items: center;
  1451. justify-content: center;
  1452. min-height: 32px;
  1453. padding: 0 14px;
  1454. border-radius: 999px;
  1455. font-size: 0.88rem;
  1456. font-weight: 700;
  1457. }
  1458. .reader-entry-badge--lore {
  1459. background: rgba(92, 117, 168, 0.12);
  1460. color: #5870a1;
  1461. }
  1462. .reader-entry-badge--novel {
  1463. background: rgba(186, 95, 57, 0.12);
  1464. color: #ba5f39;
  1465. }
  1466. .reader-entry-badge--section {
  1467. background: rgba(91, 71, 56, 0.08);
  1468. color: #66584d;
  1469. }
  1470. .reader-qq-header--lore h1 {
  1471. font-size: clamp(2.25rem, 4vw, 3.2rem);
  1472. }
  1473. .reader-qq-content--lore p {
  1474. max-width: 56em;
  1475. margin-bottom: 1.1em;
  1476. }
  1477. .reader-catalog__item {
  1478. display: grid;
  1479. gap: 8px;
  1480. padding: 14px 0;
  1481. border-bottom: 1px solid rgba(91, 71, 56, 0.08);
  1482. }
  1483. .reader-catalog__item span {
  1484. color: var(--muted);
  1485. font-size: 0.9rem;
  1486. }
  1487. .reader-catalog__item strong {
  1488. font-size: 1.06rem;
  1489. font-weight: 600;
  1490. }
  1491. .reader-catalog__item--active {
  1492. color: #ba5f39;
  1493. font-weight: 700;
  1494. }
  1495. .reader-qq-footer {
  1496. display: grid;
  1497. grid-template-columns: 180px 1fr 1fr;
  1498. gap: 18px;
  1499. padding: 0 72px 48px;
  1500. margin-top: auto;
  1501. }
  1502. .reader-qq-footer__ghost,
  1503. .reader-qq-footer__button {
  1504. min-height: 54px;
  1505. border-radius: 999px;
  1506. display: inline-flex;
  1507. align-items: center;
  1508. justify-content: center;
  1509. border: 0;
  1510. }
  1511. .reader-qq-footer__ghost {
  1512. background: rgba(198, 141, 108, 0.14);
  1513. color: #9a5e3d;
  1514. }
  1515. .reader-qq-footer__button {
  1516. background: linear-gradient(180deg, #6ab1ff, #4f8adb);
  1517. color: white;
  1518. }
  1519. .reader-qq-footer__button--disabled {
  1520. background: rgba(129, 164, 205, 0.34);
  1521. color: rgba(255, 255, 255, 0.86);
  1522. }
  1523. .chip-row {
  1524. display: flex;
  1525. flex-wrap: wrap;
  1526. gap: 10px;
  1527. }
  1528. .chip {
  1529. padding: 8px 12px;
  1530. border-radius: 999px;
  1531. background: rgba(255, 250, 243, 0.92);
  1532. border: 1px solid var(--line);
  1533. color: var(--muted);
  1534. font-size: 0.9rem;
  1535. }
  1536. .chat-wechat-page {
  1537. min-height: calc(100vh - 74px);
  1538. height: calc(100vh - 74px);
  1539. padding: 0 0 24px;
  1540. overflow: hidden;
  1541. overscroll-behavior: none;
  1542. display: grid;
  1543. grid-template-rows: auto minmax(0, 1fr);
  1544. gap: 0;
  1545. }
  1546. .chat-wechat-page-title {
  1547. padding-bottom: 18px;
  1548. }
  1549. .chat-wechat-shell {
  1550. width: 100%;
  1551. margin-top: 44px;
  1552. min-height: 0;
  1553. min-height: calc(100vh - 210px);
  1554. height: calc(100vh - 210px);
  1555. border-radius: 30px;
  1556. overflow: hidden;
  1557. border: 1px solid rgba(255, 255, 255, 0.72);
  1558. background: rgba(255, 252, 248, 0.9);
  1559. box-shadow: var(--shadow);
  1560. display: grid;
  1561. grid-template-columns: 280px minmax(0, 1fr);
  1562. }
  1563. .chat-wechat-sidebar {
  1564. padding: 22px 18px;
  1565. border-right: 1px solid var(--line);
  1566. background: rgba(255, 248, 240, 0.92);
  1567. display: grid;
  1568. grid-template-rows: auto auto minmax(0, 1fr);
  1569. gap: 8px;
  1570. }
  1571. .chat-wechat-sidebar__title {
  1572. font-size: 1.12rem;
  1573. font-weight: 700;
  1574. }
  1575. .chat-wechat-sidebar__meta {
  1576. color: var(--muted);
  1577. font-size: 0.9rem;
  1578. }
  1579. .chat-wechat-member-list {
  1580. display: grid;
  1581. gap: 10px;
  1582. align-content: start;
  1583. overflow: auto;
  1584. padding-right: 4px;
  1585. }
  1586. .chat-wechat-member {
  1587. display: flex;
  1588. align-items: center;
  1589. gap: 12px;
  1590. padding: 12px;
  1591. border-radius: 18px;
  1592. border: 1px solid rgba(91, 71, 56, 0.08);
  1593. background: rgba(255, 255, 255, 0.76);
  1594. }
  1595. .chat-wechat-member--self {
  1596. background: rgba(184, 92, 56, 0.12);
  1597. border-color: rgba(184, 92, 56, 0.18);
  1598. }
  1599. .chat-wechat-member__body {
  1600. min-width: 0;
  1601. display: grid;
  1602. gap: 4px;
  1603. }
  1604. .chat-wechat-member__body strong {
  1605. font-size: 0.96rem;
  1606. white-space: nowrap;
  1607. overflow: hidden;
  1608. text-overflow: ellipsis;
  1609. }
  1610. .chat-wechat-member__body span {
  1611. color: var(--muted);
  1612. font-size: 0.84rem;
  1613. }
  1614. .chat-wechat-main {
  1615. min-width: 0;
  1616. min-height: 0;
  1617. overflow: hidden;
  1618. display: grid;
  1619. grid-template-rows: auto minmax(0, 1fr) auto;
  1620. }
  1621. .chat-wechat-header {
  1622. padding: 22px 24px 18px;
  1623. border-bottom: 1px solid var(--line);
  1624. background: rgba(255, 248, 240, 0.92);
  1625. }
  1626. .chat-wechat-header__row {
  1627. display: flex;
  1628. align-items: center;
  1629. justify-content: space-between;
  1630. gap: 16px;
  1631. }
  1632. .chat-wechat-header__title {
  1633. font-size: 1.5rem;
  1634. font-weight: 700;
  1635. }
  1636. .chat-wechat-header__meta {
  1637. margin-top: 6px;
  1638. color: var(--muted);
  1639. }
  1640. .chat-wechat-header__presence {
  1641. display: none;
  1642. }
  1643. .chat-wechat-header__avatars {
  1644. display: flex;
  1645. align-items: center;
  1646. gap: 6px;
  1647. }
  1648. .chat-wechat-header__avatar {
  1649. width: 28px;
  1650. height: 28px;
  1651. border-radius: 10px;
  1652. border: 2px solid rgba(255, 248, 240, 0.96);
  1653. background: rgba(184, 92, 56, 0.16);
  1654. color: #9a583a;
  1655. display: inline-flex;
  1656. align-items: center;
  1657. justify-content: center;
  1658. font-size: 0.7rem;
  1659. font-weight: 700;
  1660. }
  1661. .chat-wechat-header__presence-text {
  1662. color: var(--muted);
  1663. font-size: 0.84rem;
  1664. }
  1665. .chat-wechat-status {
  1666. display: inline-flex;
  1667. align-items: center;
  1668. gap: 10px;
  1669. flex: 0 0 auto;
  1670. }
  1671. .chat-wechat-status__text {
  1672. color: var(--muted);
  1673. font-size: 0.92rem;
  1674. white-space: nowrap;
  1675. }
  1676. .chat-wechat-status__icon {
  1677. min-width: 34px;
  1678. height: 34px;
  1679. padding: 0 10px;
  1680. border-radius: 12px;
  1681. display: inline-flex;
  1682. align-items: center;
  1683. justify-content: center;
  1684. background: rgba(184, 92, 56, 0.12);
  1685. color: #9a583a;
  1686. font-size: 0.72rem;
  1687. font-weight: 700;
  1688. }
  1689. .chat-wechat-member__avatar,
  1690. .chat-wechat-avatar {
  1691. width: 38px;
  1692. height: 38px;
  1693. border-radius: 14px;
  1694. display: grid;
  1695. place-items: center;
  1696. background: rgba(184, 92, 56, 0.16);
  1697. color: #9a583a;
  1698. font-size: 0.88rem;
  1699. font-weight: 700;
  1700. }
  1701. .chat-wechat-messages {
  1702. padding: 22px 24px;
  1703. display: grid;
  1704. gap: 16px;
  1705. align-content: start;
  1706. overflow: auto;
  1707. min-height: 0;
  1708. background:
  1709. linear-gradient(180deg, rgba(255, 252, 248, 0.94), rgba(250, 245, 238, 0.98));
  1710. }
  1711. .chat-wechat-empty {
  1712. padding: 18px;
  1713. border-radius: 18px;
  1714. text-align: center;
  1715. color: var(--muted);
  1716. background: rgba(255, 255, 255, 0.72);
  1717. }
  1718. .chat-wechat-message {
  1719. display: flex;
  1720. align-items: flex-start;
  1721. gap: 12px;
  1722. }
  1723. .chat-wechat-message--self {
  1724. justify-content: flex-end;
  1725. }
  1726. .chat-wechat-avatar--self {
  1727. background: rgba(110, 154, 90, 0.18);
  1728. color: #4f7740;
  1729. }
  1730. .chat-wechat-message__body {
  1731. max-width: min(620px, 100%);
  1732. display: inline-flex;
  1733. flex-direction: column;
  1734. align-items: flex-start;
  1735. }
  1736. .chat-wechat-message__body--image {
  1737. max-width: min(320px, 100%);
  1738. }
  1739. .chat-wechat-message__name,
  1740. .chat-wechat-message__time {
  1741. color: var(--muted);
  1742. font-size: 0.82rem;
  1743. }
  1744. .chat-wechat-message__name {
  1745. margin-bottom: 6px;
  1746. }
  1747. .chat-wechat-message__time {
  1748. margin-top: 6px;
  1749. }
  1750. .chat-wechat-message--self .chat-wechat-message__time {
  1751. text-align: right;
  1752. width: 100%;
  1753. }
  1754. .chat-wechat-bubble {
  1755. display: inline-block;
  1756. width: fit-content;
  1757. max-width: 100%;
  1758. padding: 14px 16px;
  1759. border-radius: 8px 18px 18px 18px;
  1760. background: #ffffff;
  1761. border: 1px solid rgba(91, 71, 56, 0.08);
  1762. box-shadow: 0 8px 18px rgba(45, 31, 22, 0.04);
  1763. }
  1764. .chat-wechat-message--self .chat-wechat-bubble {
  1765. border-radius: 18px 8px 18px 18px;
  1766. background: #dff2d8;
  1767. }
  1768. .chat-wechat-bubble__text {
  1769. line-height: 1.75;
  1770. overflow-wrap: anywhere;
  1771. }
  1772. .chat-wechat-bubble--attachment-only {
  1773. padding: 10px;
  1774. }
  1775. .chat-wechat-bubble--image {
  1776. padding: 10px;
  1777. max-width: min(320px, 100%);
  1778. }
  1779. .chat-wechat-file {
  1780. margin-top: 10px;
  1781. padding: 12px;
  1782. border-radius: 14px;
  1783. background: rgba(255, 255, 255, 0.8);
  1784. }
  1785. .chat-wechat-file--image {
  1786. margin-top: 0;
  1787. padding: 0;
  1788. background: transparent;
  1789. display: inline-grid;
  1790. width: fit-content;
  1791. max-width: 100%;
  1792. }
  1793. .chat-wechat-file--download {
  1794. min-width: 260px;
  1795. }
  1796. .chat-wechat-file__image-button {
  1797. display: inline-block;
  1798. padding: 0;
  1799. border: 0;
  1800. background: transparent;
  1801. cursor: pointer;
  1802. }
  1803. .chat-wechat-file__image {
  1804. width: min(280px, 100%);
  1805. display: block;
  1806. margin-bottom: 10px;
  1807. border-radius: 12px;
  1808. object-fit: cover;
  1809. }
  1810. .chat-wechat-file__meta {
  1811. margin-top: 6px;
  1812. color: var(--muted);
  1813. font-size: 0.86rem;
  1814. }
  1815. .chat-wechat-file__link {
  1816. color: inherit;
  1817. text-decoration: none;
  1818. border: 0;
  1819. background: transparent;
  1820. padding: 0;
  1821. text-align: left;
  1822. cursor: pointer;
  1823. }
  1824. .chat-wechat-file__link strong {
  1825. display: inline-block;
  1826. }
  1827. .chat-wechat-file__download {
  1828. width: 100%;
  1829. display: grid;
  1830. grid-template-columns: 38px minmax(0, 1fr);
  1831. gap: 10px;
  1832. align-items: center;
  1833. padding: 10px 12px;
  1834. border: 0;
  1835. border-radius: 14px;
  1836. background: rgba(255, 255, 255, 0.78);
  1837. cursor: pointer;
  1838. text-align: left;
  1839. }
  1840. .chat-wechat-file__icon {
  1841. width: 38px;
  1842. height: 38px;
  1843. border-radius: 12px;
  1844. background: rgba(184, 92, 56, 0.14);
  1845. color: #9a583a;
  1846. display: inline-flex;
  1847. align-items: center;
  1848. justify-content: center;
  1849. font-size: 0.88rem;
  1850. font-weight: 700;
  1851. }
  1852. .chat-wechat-file__info {
  1853. display: grid;
  1854. gap: 4px;
  1855. }
  1856. .chat-wechat-file__info span {
  1857. color: var(--muted);
  1858. font-size: 0.82rem;
  1859. }
  1860. .chat-wechat-composer {
  1861. padding: 16px 18px 18px;
  1862. border-top: 1px solid var(--line);
  1863. background: rgba(249, 244, 236, 0.98);
  1864. }
  1865. .chat-wechat-composer__tools {
  1866. display: flex;
  1867. align-items: center;
  1868. justify-content: space-between;
  1869. gap: 10px;
  1870. margin-bottom: 10px;
  1871. }
  1872. .chat-wechat-tools-left {
  1873. display: flex;
  1874. align-items: center;
  1875. gap: 8px;
  1876. }
  1877. .chat-wechat-composer__row {
  1878. display: grid;
  1879. grid-template-columns: minmax(0, 1fr) 74px;
  1880. gap: 10px;
  1881. align-items: stretch;
  1882. }
  1883. .chat-wechat-tool,
  1884. .chat-wechat-send {
  1885. min-height: 44px;
  1886. border: 0;
  1887. border-radius: 14px;
  1888. }
  1889. .chat-wechat-tool {
  1890. background: rgba(255, 255, 255, 0.88);
  1891. cursor: pointer;
  1892. width: 44px;
  1893. min-width: 44px;
  1894. display: inline-flex;
  1895. align-items: center;
  1896. justify-content: center;
  1897. font-size: 1.1rem;
  1898. }
  1899. .chat-wechat-tool__icon {
  1900. width: 18px;
  1901. height: 18px;
  1902. display: block;
  1903. }
  1904. .chat-wechat-send {
  1905. background: #7bb463;
  1906. color: white;
  1907. cursor: pointer;
  1908. }
  1909. .chat-wechat-input {
  1910. min-height: 44px;
  1911. height: 44px;
  1912. max-height: 120px;
  1913. width: 100%;
  1914. resize: none;
  1915. border: 0;
  1916. border-radius: 16px;
  1917. background: rgba(255, 255, 255, 0.96);
  1918. padding: 12px 14px;
  1919. }
  1920. .chat-wechat-tool.is-active {
  1921. background: rgba(123, 180, 99, 0.16);
  1922. color: #467536;
  1923. }
  1924. .chat-wechat-tool--danger {
  1925. color: #b24a2f;
  1926. background: rgba(214, 108, 77, 0.12);
  1927. font-size: 0;
  1928. position: relative;
  1929. }
  1930. .chat-wechat-tool--danger::before {
  1931. content: "";
  1932. width: 18px;
  1933. height: 18px;
  1934. display: block;
  1935. background-repeat: no-repeat;
  1936. background-position: center;
  1937. background-size: 18px 18px;
  1938. 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");
  1939. }
  1940. .chat-wechat-emoji-panel {
  1941. display: flex;
  1942. flex-wrap: wrap;
  1943. gap: 8px;
  1944. padding: 10px;
  1945. margin-bottom: 10px;
  1946. border-radius: 18px;
  1947. background: rgba(255, 255, 255, 0.76);
  1948. }
  1949. .chat-wechat-emoji-panel button {
  1950. width: 40px;
  1951. height: 40px;
  1952. border: 0;
  1953. border-radius: 12px;
  1954. background: rgba(245, 239, 231, 0.96);
  1955. cursor: pointer;
  1956. }
  1957. .chat-wechat-error {
  1958. color: #b24a2f;
  1959. font-size: 0.86rem;
  1960. }
  1961. .chat-wechat-attachment {
  1962. display: grid;
  1963. grid-template-columns: auto minmax(0, 1fr) 36px;
  1964. gap: 10px;
  1965. align-items: center;
  1966. padding: 10px 12px;
  1967. margin-bottom: 10px;
  1968. border-radius: 16px;
  1969. background: rgba(255, 255, 255, 0.78);
  1970. }
  1971. .chat-wechat-attachment__image {
  1972. width: 44px;
  1973. height: 44px;
  1974. border-radius: 10px;
  1975. object-fit: cover;
  1976. }
  1977. .chat-wechat-attachment__meta {
  1978. display: grid;
  1979. gap: 4px;
  1980. }
  1981. .chat-wechat-attachment__meta span {
  1982. color: var(--muted);
  1983. font-size: 0.84rem;
  1984. }
  1985. .chat-wechat-attachment button {
  1986. width: 36px;
  1987. height: 36px;
  1988. border: 0;
  1989. border-radius: 10px;
  1990. background: rgba(184, 92, 56, 0.12);
  1991. color: #9a583a;
  1992. cursor: pointer;
  1993. }
  1994. .chat-wechat-send:disabled {
  1995. opacity: 0.72;
  1996. cursor: default;
  1997. }
  1998. .chat-wechat-image-viewer {
  1999. position: fixed;
  2000. inset: 0;
  2001. z-index: 60;
  2002. display: grid;
  2003. place-items: center;
  2004. padding: 20px;
  2005. background: rgba(14, 12, 10, 0.88);
  2006. }
  2007. .chat-wechat-image-viewer__image {
  2008. max-width: min(92vw, 980px);
  2009. max-height: 92vh;
  2010. object-fit: contain;
  2011. border-radius: 16px;
  2012. }
  2013. @media (max-width: 960px) {
  2014. .site-nav {
  2015. display: none;
  2016. }
  2017. .site-menu-button {
  2018. display: inline-flex;
  2019. flex-direction: column;
  2020. }
  2021. .site-drawer,
  2022. .site-drawer-backdrop {
  2023. display: block;
  2024. }
  2025. body.reader-body {
  2026. overflow: hidden;
  2027. }
  2028. .hero,
  2029. .home-sections,
  2030. .chat-layout,
  2031. .reader-layout {
  2032. grid-template-columns: 1fr;
  2033. }
  2034. .chat-sidebar,
  2035. .reader-sidebar {
  2036. border-right: 0;
  2037. border-bottom: 1px solid var(--line);
  2038. }
  2039. .library-grid {
  2040. grid-template-columns: repeat(2, minmax(0, 1fr));
  2041. }
  2042. .agents-grid {
  2043. grid-template-columns: repeat(2, minmax(0, 1fr));
  2044. }
  2045. .agent-stats {
  2046. grid-template-columns: repeat(2, minmax(0, 1fr));
  2047. }
  2048. .agents-intro,
  2049. .agent-detail-grid {
  2050. grid-template-columns: 1fr;
  2051. }
  2052. .agents-monitor-top {
  2053. flex-direction: column;
  2054. align-items: stretch;
  2055. }
  2056. .agents-monitor-controls {
  2057. justify-items: stretch;
  2058. }
  2059. .agents-monitor-summary {
  2060. grid-template-columns: repeat(5, minmax(0, 1fr));
  2061. }
  2062. .agents-worklist {
  2063. grid-template-columns: repeat(2, minmax(0, 1fr));
  2064. }
  2065. .agents-workitem__head {
  2066. flex-direction: column;
  2067. align-items: stretch;
  2068. }
  2069. .agents-workitem__metrics {
  2070. justify-content: flex-start;
  2071. }
  2072. .reader-stage {
  2073. height: 100dvh;
  2074. padding: 72px 0 86px;
  2075. overflow: auto;
  2076. display: block;
  2077. background: var(--reader-page) !important;
  2078. }
  2079. .reader-desktop-layout {
  2080. display: block;
  2081. width: auto;
  2082. max-width: none;
  2083. }
  2084. .reader-qq-shell {
  2085. width: 100% !important;
  2086. min-height: calc(100dvh - 158px);
  2087. overflow: visible;
  2088. background: var(--reader-page);
  2089. }
  2090. .reader-float {
  2091. display: none;
  2092. }
  2093. .reader-progress-rail {
  2094. display: none;
  2095. }
  2096. .reader-catalog__grid,
  2097. .reader-qq-footer {
  2098. grid-template-columns: 1fr;
  2099. }
  2100. .reader-mobile-bar {
  2101. position: fixed;
  2102. left: 0;
  2103. right: 0;
  2104. z-index: 28;
  2105. display: grid;
  2106. gap: 0;
  2107. padding: 10px 14px;
  2108. background: var(--reader-page);
  2109. backdrop-filter: blur(14px);
  2110. }
  2111. .reader-mobile-bar--top {
  2112. top: 0;
  2113. grid-template-columns: 1fr 56px 56px;
  2114. align-items: center;
  2115. border-bottom: 1px solid rgba(91, 71, 56, 0.08);
  2116. }
  2117. .reader-mobile-bar--bottom {
  2118. bottom: 0;
  2119. grid-template-columns: repeat(3, minmax(0, 1fr));
  2120. border-top: 1px solid rgba(91, 71, 56, 0.08);
  2121. }
  2122. .reader-mobile-bar__icon,
  2123. .reader-mobile-bar__action {
  2124. min-height: 42px;
  2125. padding: 0 12px;
  2126. border: 0;
  2127. border-radius: 0;
  2128. background: transparent;
  2129. box-shadow: none;
  2130. display: flex;
  2131. align-items: center;
  2132. justify-content: center;
  2133. color: #54483f;
  2134. }
  2135. .reader-mobile-bar__icon {
  2136. font-size: 0.92rem;
  2137. font-weight: 600;
  2138. white-space: nowrap;
  2139. }
  2140. .reader-mobile-bar__icon--back,
  2141. .reader-mobile-bar__icon:first-child {
  2142. justify-content: flex-start;
  2143. padding-left: 4px;
  2144. }
  2145. .reader-mobile-bar__action {
  2146. font-size: 0.9rem;
  2147. border-right: 1px solid rgba(91, 71, 56, 0.08);
  2148. }
  2149. .reader-mobile-bar__action:last-child {
  2150. border-right: 0;
  2151. }
  2152. .reader-mobile-bar__action--disabled {
  2153. color: #a99a8d;
  2154. }
  2155. .reader-qq-paper,
  2156. .reader-catalog-inline {
  2157. min-height: calc(100dvh - 158px);
  2158. }
  2159. .reader-qq-paper--desktop-hidden {
  2160. display: flex;
  2161. }
  2162. .reader-qq-paper {
  2163. box-shadow: none;
  2164. background: var(--reader-page) !important;
  2165. }
  2166. .reader-qq-header {
  2167. padding: 28px 20px 18px;
  2168. background: var(--reader-page);
  2169. }
  2170. .reader-qq-content {
  2171. padding: 20px 20px 28px;
  2172. background: var(--reader-page);
  2173. }
  2174. .reader-qq-content p {
  2175. margin-bottom: 1.35em;
  2176. font-size: clamp(1rem, 4vw, 1.12rem);
  2177. line-height: 2.08;
  2178. }
  2179. .reader-catalog-inline {
  2180. padding: 22px 20px 28px;
  2181. }
  2182. .reader-catalog-mobile-mask {
  2183. position: fixed;
  2184. inset: 0;
  2185. display: block;
  2186. background: rgba(28, 21, 16, 0.38);
  2187. z-index: 26;
  2188. }
  2189. .reader-catalog-mobile-mask[hidden] {
  2190. display: none;
  2191. }
  2192. .reader-catalog-mobile-sheet {
  2193. position: fixed;
  2194. left: 0;
  2195. right: 0;
  2196. bottom: calc(76px + env(safe-area-inset-bottom));
  2197. display: block;
  2198. max-height: min(calc(74dvh - env(safe-area-inset-bottom)), 620px);
  2199. padding: 18px 18px 18px;
  2200. border-radius: 26px 26px 0 0;
  2201. box-shadow: 0 -20px 40px rgba(28, 21, 16, 0.2);
  2202. transform: translateY(102%);
  2203. transition: transform 0.22s ease;
  2204. z-index: 27;
  2205. overflow: auto;
  2206. pointer-events: none;
  2207. }
  2208. .reader-catalog-mobile-sheet.is-open {
  2209. transform: translateY(0);
  2210. pointer-events: auto;
  2211. }
  2212. .reader-catalog-mobile-sheet .reader-catalog__header {
  2213. position: sticky;
  2214. top: 0;
  2215. z-index: 1;
  2216. background: inherit;
  2217. }
  2218. .reader-catalog-mobile-sheet .reader-catalog__grid {
  2219. padding-bottom: 12px;
  2220. }
  2221. .reader-catalog-inline {
  2222. display: none;
  2223. }
  2224. .reader-catalog__header {
  2225. position: sticky;
  2226. top: 0;
  2227. padding-bottom: 14px;
  2228. background: inherit;
  2229. z-index: 1;
  2230. }
  2231. .reader-qq-footer {
  2232. padding: 0 20px 22px;
  2233. gap: 12px;
  2234. }
  2235. .reader-qq-footer {
  2236. display: none;
  2237. }
  2238. .reader-qq-footer__ghost,
  2239. .reader-qq-footer__button {
  2240. min-height: 48px;
  2241. }
  2242. .agent-quick-grid {
  2243. grid-template-columns: repeat(3, minmax(0, 1fr));
  2244. }
  2245. }
  2246. @media (max-width: 640px) {
  2247. body.chat-body {
  2248. overflow: hidden;
  2249. position: static;
  2250. width: auto;
  2251. min-height: 100svh;
  2252. }
  2253. .chat-wechat-page {
  2254. padding: 0;
  2255. height: calc(100svh - 74px);
  2256. min-height: calc(100svh - 74px);
  2257. overflow: hidden;
  2258. width: 100%;
  2259. max-width: 100%;
  2260. min-width: 0;
  2261. margin: 0;
  2262. display: grid;
  2263. grid-template-rows: minmax(0, 1fr);
  2264. gap: 0;
  2265. background: #efeae2;
  2266. }
  2267. .chat-wechat-page-title {
  2268. display: none;
  2269. }
  2270. .chat-wechat-shell {
  2271. width: 100%;
  2272. margin-top: 0;
  2273. min-height: 0;
  2274. height: 100%;
  2275. border-radius: 0;
  2276. border: 0;
  2277. box-shadow: none;
  2278. background: #efeae2;
  2279. display: grid;
  2280. grid-template-columns: 1fr;
  2281. grid-template-rows: minmax(0, 1fr);
  2282. }
  2283. .chat-wechat-main {
  2284. height: 100%;
  2285. min-height: 0;
  2286. }
  2287. .chat-wechat-sidebar {
  2288. display: none;
  2289. }
  2290. .chat-wechat-header {
  2291. padding: 14px 16px 10px;
  2292. background: #f6efe6;
  2293. }
  2294. .chat-wechat-header__row {
  2295. align-items: center;
  2296. justify-content: space-between;
  2297. gap: 10px;
  2298. }
  2299. .chat-wechat-header__main {
  2300. min-width: 0;
  2301. flex: 1 1 auto;
  2302. display: flex;
  2303. align-items: baseline;
  2304. justify-content: space-between;
  2305. gap: 10px;
  2306. }
  2307. .chat-wechat-header__title {
  2308. font-size: 1.15rem;
  2309. white-space: nowrap;
  2310. }
  2311. .chat-wechat-header__meta {
  2312. margin-top: 0;
  2313. font-size: 0.78rem;
  2314. white-space: nowrap;
  2315. text-align: right;
  2316. overflow: hidden;
  2317. text-overflow: ellipsis;
  2318. }
  2319. .chat-wechat-status {
  2320. display: none;
  2321. }
  2322. .chat-wechat-status__text {
  2323. font-size: 0.84rem;
  2324. }
  2325. .chat-wechat-status__icon {
  2326. min-width: 30px;
  2327. height: 30px;
  2328. padding: 0 8px;
  2329. border-radius: 10px;
  2330. }
  2331. .chat-wechat-messages {
  2332. padding: 14px 12px 18px;
  2333. gap: 12px;
  2334. background: #efeae2;
  2335. overflow: auto;
  2336. min-height: 0;
  2337. padding-bottom: 18px;
  2338. }
  2339. .chat-wechat-header__presence {
  2340. margin-top: 10px;
  2341. display: flex;
  2342. align-items: center;
  2343. justify-content: space-between;
  2344. gap: 12px;
  2345. }
  2346. .chat-wechat-header__avatars {
  2347. gap: 8px;
  2348. }
  2349. .chat-wechat-message {
  2350. gap: 8px;
  2351. }
  2352. .chat-wechat-avatar {
  2353. width: 34px;
  2354. height: 34px;
  2355. border-radius: 12px;
  2356. }
  2357. .chat-wechat-message__body {
  2358. max-width: calc(100% - 48px);
  2359. }
  2360. .chat-wechat-bubble {
  2361. padding: 12px 13px;
  2362. border-radius: 6px 16px 16px 16px;
  2363. box-shadow: none;
  2364. }
  2365. .chat-wechat-message--self .chat-wechat-bubble {
  2366. border-radius: 16px 6px 16px 16px;
  2367. }
  2368. .chat-wechat-composer {
  2369. padding: 10px 12px calc(12px + env(safe-area-inset-bottom));
  2370. background: rgba(245, 239, 231, 0.98);
  2371. backdrop-filter: blur(12px);
  2372. z-index: 6;
  2373. margin-top: 0;
  2374. position: relative;
  2375. box-shadow: 0 -10px 26px rgba(49, 34, 22, 0.06);
  2376. }
  2377. .chat-wechat-composer::after {
  2378. content: "";
  2379. position: absolute;
  2380. left: 0;
  2381. right: 0;
  2382. bottom: calc(-1 * env(safe-area-inset-bottom));
  2383. height: env(safe-area-inset-bottom);
  2384. background: rgba(245, 239, 231, 0.98);
  2385. }
  2386. .chat-wechat-composer__tools {
  2387. margin-bottom: 8px;
  2388. }
  2389. .chat-wechat-tool,
  2390. .chat-wechat-send {
  2391. min-height: 42px;
  2392. }
  2393. .chat-wechat-tool {
  2394. width: 42px;
  2395. min-width: 42px;
  2396. border-radius: 12px;
  2397. }
  2398. .chat-wechat-composer__row {
  2399. grid-template-columns: minmax(0, 1fr) 72px;
  2400. gap: 8px;
  2401. }
  2402. .chat-wechat-input {
  2403. min-height: 42px;
  2404. height: 42px;
  2405. padding: 10px 12px;
  2406. border-radius: 14px;
  2407. }
  2408. .chat-wechat-emoji-panel {
  2409. padding: 8px;
  2410. border-radius: 16px;
  2411. }
  2412. .chat-wechat-emoji-panel button {
  2413. width: 38px;
  2414. height: 38px;
  2415. border-radius: 10px;
  2416. }
  2417. .chat-wechat-attachment {
  2418. grid-template-columns: auto minmax(0, 1fr) 32px;
  2419. padding: 9px 10px;
  2420. }
  2421. .chat-wechat-attachment__image {
  2422. width: 40px;
  2423. height: 40px;
  2424. }
  2425. .chat-wechat-attachment button {
  2426. width: 32px;
  2427. height: 32px;
  2428. }
  2429. .chat-wechat-image-viewer {
  2430. padding: 14px;
  2431. }
  2432. .chat-wechat-image-viewer__image {
  2433. max-width: calc(100vw - 28px);
  2434. max-height: calc(100svh - 28px);
  2435. }
  2436. .site-header {
  2437. position: sticky;
  2438. top: 0;
  2439. background: #fbf6ef;
  2440. backdrop-filter: none;
  2441. }
  2442. .page-shell {
  2443. width: min(100vw - 20px, 100%);
  2444. }
  2445. .site-header__inner {
  2446. padding: 10px 0;
  2447. }
  2448. .site-drawer,
  2449. .site-drawer-backdrop {
  2450. display: block;
  2451. }
  2452. .site-drawer {
  2453. background: transparent;
  2454. }
  2455. .site-drawer__panel {
  2456. margin-left: 0;
  2457. width: 100vw;
  2458. min-width: 0;
  2459. min-height: 100dvh;
  2460. height: 100dvh;
  2461. padding-top: 88px;
  2462. background: #fbf6ef;
  2463. box-shadow: none;
  2464. }
  2465. .site-brand__name {
  2466. color: #241c16;
  2467. }
  2468. .site-brand__tag {
  2469. display: none;
  2470. }
  2471. .site-menu-button {
  2472. border-color: rgba(60, 42, 27, 0.14);
  2473. background: #fff8f0;
  2474. width: 58px;
  2475. height: 58px;
  2476. }
  2477. .hero {
  2478. padding-top: 18px;
  2479. gap: 16px;
  2480. }
  2481. .library-shell,
  2482. .agents-shell--compact,
  2483. .chat-wechat-shell {
  2484. margin-top: 18px;
  2485. }
  2486. .hero__main,
  2487. .section-card,
  2488. .library-shell,
  2489. .agents-shell,
  2490. .chat-sidebar,
  2491. .chat-toolbar,
  2492. .chat-messages,
  2493. .chat-composer,
  2494. .reader-sidebar,
  2495. .reader-topbar,
  2496. .reader-footer,
  2497. .reader-content {
  2498. padding-left: 16px;
  2499. padding-right: 16px;
  2500. }
  2501. .library-grid {
  2502. grid-template-columns: 1fr;
  2503. }
  2504. .book-card {
  2505. display: grid;
  2506. grid-template-columns: 112px minmax(0, 1fr);
  2507. }
  2508. .book-cover {
  2509. aspect-ratio: auto;
  2510. min-height: 100%;
  2511. padding: 16px;
  2512. }
  2513. .book-cover__title {
  2514. font-size: 1.1rem;
  2515. }
  2516. .agents-grid {
  2517. grid-template-columns: 1fr;
  2518. }
  2519. .agent-stats {
  2520. grid-template-columns: 1fr;
  2521. }
  2522. .agents-monitor-summary {
  2523. grid-template-columns: repeat(2, minmax(0, 1fr));
  2524. }
  2525. .agents-monitor-summary__item:first-child {
  2526. grid-column: span 2;
  2527. }
  2528. .agents-worklist {
  2529. grid-template-columns: 1fr;
  2530. }
  2531. .agents-workitem {
  2532. padding: 14px 14px 16px;
  2533. border-radius: 18px;
  2534. }
  2535. .agents-workitem__identity {
  2536. align-items: flex-start;
  2537. }
  2538. .agents-workitem__name-row {
  2539. gap: 8px;
  2540. }
  2541. .agents-workitem__metrics,
  2542. .agents-workitem__meta {
  2543. gap: 8px 10px;
  2544. }
  2545. .reader-qq-header {
  2546. padding: 24px 16px 16px;
  2547. }
  2548. .reader-qq-header h1 {
  2549. font-size: clamp(1.6rem, 8vw, 2.1rem);
  2550. }
  2551. .reader-qq-meta {
  2552. justify-content: flex-start;
  2553. gap: 8px 14px;
  2554. font-size: 0.84rem;
  2555. }
  2556. .reader-catalog-inline {
  2557. padding: 18px 16px 24px;
  2558. }
  2559. .reader-catalog__header h2 {
  2560. font-size: 1.5rem;
  2561. }
  2562. .reader-qq-footer {
  2563. padding-left: 16px;
  2564. padding-right: 16px;
  2565. }
  2566. .agent-quick-grid {
  2567. grid-template-columns: 1fr;
  2568. }
  2569. .agents-toolbar,
  2570. .agent-detail-hero {
  2571. flex-direction: column;
  2572. align-items: stretch;
  2573. }
  2574. .agent-row {
  2575. grid-template-columns: 1fr;
  2576. gap: 6px;
  2577. }
  2578. .composer-grid {
  2579. grid-template-columns: 1fr;
  2580. }
  2581. .chat-layout {
  2582. border-radius: 24px;
  2583. overflow: hidden;
  2584. background: rgba(255, 250, 243, 0.92);
  2585. margin-bottom: 18px;
  2586. }
  2587. .page-title--compact-mobile {
  2588. padding: 14px 0 10px;
  2589. }
  2590. .page-title--compact-mobile h1 {
  2591. font-size: 2rem;
  2592. }
  2593. .page-title--compact-mobile p {
  2594. display: none;
  2595. }
  2596. .chat-sidebar {
  2597. padding-top: 14px;
  2598. padding-bottom: 12px;
  2599. background: rgba(255, 247, 239, 0.96);
  2600. }
  2601. .presence-list {
  2602. grid-auto-flow: column;
  2603. grid-auto-columns: minmax(180px, 78%);
  2604. overflow-x: auto;
  2605. padding-bottom: 4px;
  2606. scroll-snap-type: x proximity;
  2607. }
  2608. .presence-item {
  2609. min-height: 100%;
  2610. scroll-snap-align: start;
  2611. }
  2612. .chat-main {
  2613. min-height: auto;
  2614. grid-template-rows: auto minmax(0, 1fr) auto;
  2615. background: rgba(255, 250, 243, 0.84);
  2616. }
  2617. .chat-toolbar strong {
  2618. display: block;
  2619. font-size: 1.05rem;
  2620. }
  2621. .chat-toolbar__hint,
  2622. .chat-sidebar__hint {
  2623. display: none;
  2624. }
  2625. .chat-messages {
  2626. padding-top: 14px;
  2627. padding-bottom: 16px;
  2628. max-height: 44vh;
  2629. overflow: auto;
  2630. }
  2631. .message {
  2632. max-width: 100%;
  2633. padding: 12px 14px;
  2634. border-radius: 18px;
  2635. }
  2636. .composer-input-hint {
  2637. font-size: 0.86rem;
  2638. line-height: 1.5;
  2639. }
  2640. .composer-input--drop {
  2641. min-height: 64px;
  2642. border-radius: 18px;
  2643. resize: none;
  2644. padding: 14px 16px;
  2645. }
  2646. .composer-actions--stacked {
  2647. width: 100%;
  2648. height: auto;
  2649. grid-template-columns: minmax(0, 1fr) 92px;
  2650. grid-template-rows: none;
  2651. align-items: stretch;
  2652. gap: 10px;
  2653. }
  2654. .composer-actions--stacked .button {
  2655. min-height: 46px;
  2656. white-space: nowrap;
  2657. }
  2658. .chat-composer {
  2659. position: sticky;
  2660. bottom: 0;
  2661. background: rgba(251, 246, 239, 0.96);
  2662. backdrop-filter: blur(12px);
  2663. box-shadow: 0 -12px 30px rgba(49, 34, 22, 0.08);
  2664. }
  2665. .button {
  2666. width: 100%;
  2667. }
  2668. .hero__actions {
  2669. display: grid;
  2670. }
  2671. .home-sections {
  2672. gap: 16px;
  2673. padding-bottom: 28px;
  2674. }
  2675. .reader-paper {
  2676. padding: 22px 18px;
  2677. border-radius: 22px;
  2678. }
  2679. .site-brand__tag {
  2680. display: none;
  2681. }
  2682. .reader-mobile-bar--top {
  2683. grid-template-columns: 1fr 92px 92px;
  2684. }
  2685. .reader-mobile-bar__icon,
  2686. .reader-mobile-bar__action {
  2687. min-height: 42px;
  2688. }
  2689. .reader-catalog-mobile-sheet {
  2690. bottom: calc(74px + env(safe-area-inset-bottom));
  2691. max-height: calc(76dvh - env(safe-area-inset-bottom));
  2692. padding: 16px 16px 16px;
  2693. }
  2694. }
  2695. @media (max-width: 640px) {
  2696. .chat-wechat-page {
  2697. width: 100vw;
  2698. max-width: 100vw;
  2699. }
  2700. .chat-wechat-shell {
  2701. margin-top: 0 !important;
  2702. }
  2703. }