globals.css 56 KB

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