style.css 86 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237
  1. :root {
  2. --bg: #f3f6fa;
  3. --sidebar: #ffffff;
  4. --panel: #ffffff;
  5. --panel-strong: #f6f9fd;
  6. --line: #e1e8f0;
  7. --text: #10213a;
  8. --muted: #6b7b91;
  9. --blue: #146ce5;
  10. --cyan: #009fbe;
  11. font-family: "Bahnschrift", "Microsoft YaHei UI", sans-serif;
  12. color: var(--text);
  13. background: var(--bg);
  14. }
  15. * { box-sizing: border-box; }
  16. body { margin: 0; background: var(--bg); }
  17. button, input { font: inherit; }
  18. .admin-shell { display: grid; grid-template-columns: 246px 1fr; min-height: 100vh; }
  19. .admin-sidebar {
  20. position: sticky;
  21. top: 0;
  22. display: flex;
  23. flex-direction: column;
  24. height: 100vh;
  25. padding: 30px 22px 22px;
  26. background: #ffffff;
  27. border-right: 1px solid var(--line);
  28. box-shadow: 8px 0 32px #224b7610;
  29. z-index: 5;
  30. }
  31. .logo {
  32. display: flex;
  33. gap: 12px;
  34. align-items: center;
  35. font-size: 16px;
  36. font-weight: 650;
  37. letter-spacing: .08em;
  38. }
  39. .logo b {
  40. display: grid;
  41. place-items: center;
  42. width: 36px;
  43. height: 36px;
  44. color: var(--cyan);
  45. border: 1px solid var(--blue);
  46. background: #146ce50a;
  47. font: 18px "Cascadia Code", monospace;
  48. }
  49. .logo small {
  50. color: #8290a2;
  51. font: 8px "Cascadia Code", monospace;
  52. letter-spacing: .22em;
  53. }
  54. .admin-nav { display: grid; gap: 6px; margin-top: 46px; }
  55. .admin-nav > p {
  56. margin: 20px 12px 8px;
  57. color: #a3afbd;
  58. font: 9px "Cascadia Code", monospace;
  59. letter-spacing: .15em;
  60. text-transform: uppercase;
  61. }
  62. .admin-nav button {
  63. position: relative;
  64. display: flex;
  65. align-items: center;
  66. gap: 11px;
  67. min-height: 46px;
  68. padding: 0 13px;
  69. color: #687b91;
  70. border: 0;
  71. border-radius: 10px;
  72. background: transparent;
  73. text-align: left;
  74. font-size: 13px;
  75. cursor: pointer;
  76. transition: color .2s, background .2s, transform .2s;
  77. }
  78. .admin-nav button:hover { color: #174e8b; background: #f3f7fc; transform: translateX(2px); }
  79. .admin-nav button.active {
  80. color: #0e5fc5;
  81. background: linear-gradient(100deg, #edf5ff, #f5f9fe);
  82. box-shadow: inset 0 0 0 1px #dceafb;
  83. font-weight: 650;
  84. }
  85. .admin-nav button svg {
  86. flex: none;
  87. width: 19px;
  88. fill: none;
  89. stroke: currentColor;
  90. stroke-width: 1.6;
  91. stroke-linecap: round;
  92. stroke-linejoin: round;
  93. }
  94. .admin-nav button small {
  95. margin-left: auto;
  96. min-width: 22px;
  97. padding: 3px 6px;
  98. border-radius: 12px;
  99. color: #99a7b8;
  100. background: #eef2f7;
  101. text-align: center;
  102. font: 8px "Cascadia Code", monospace;
  103. }
  104. .admin-nav button.active small { color: #1165ca; background: #dfeeff; }
  105. .sidebar-profile {
  106. display: flex;
  107. align-items: center;
  108. gap: 11px;
  109. margin-top: auto;
  110. padding: 14px 12px;
  111. border: 1px solid #e2e9f1;
  112. border-radius: 12px;
  113. background: #f8fafc;
  114. }
  115. .sidebar-profile > span {
  116. display: grid;
  117. place-items: center;
  118. flex: none;
  119. width: 34px;
  120. height: 34px;
  121. color: #ffffff;
  122. border-radius: 9px;
  123. background: linear-gradient(145deg, #176ede, #0b8daa);
  124. box-shadow: 0 7px 14px #176ede26;
  125. font-weight: 700;
  126. }
  127. .sidebar-profile div { min-width: 0; display: grid; gap: 3px; }
  128. .sidebar-profile strong { overflow: hidden; color: #263b53; font-size: 12px; text-overflow: ellipsis; }
  129. .sidebar-profile small { overflow: hidden; color: #8a99a9; font: 8px "Cascadia Code", monospace; text-overflow: ellipsis; }
  130. .workspace {
  131. min-width: 0;
  132. padding: 0 38px 52px;
  133. background:
  134. radial-gradient(circle at 82% 4%, #e7f1ff 0, transparent 26%),
  135. var(--bg);
  136. }
  137. .topbar {
  138. position: sticky;
  139. top: 0;
  140. z-index: 4;
  141. display: flex;
  142. align-items: center;
  143. justify-content: space-between;
  144. min-height: 72px;
  145. padding: 0;
  146. border-bottom: 1px solid var(--line);
  147. background: #f3f6fae8;
  148. backdrop-filter: blur(16px);
  149. }
  150. .breadcrumb {
  151. display: flex;
  152. align-items: center;
  153. gap: 9px;
  154. color: #8998aa;
  155. font-size: 12px;
  156. }
  157. .breadcrumb i { color: #c1cad4; font-style: normal; }
  158. .breadcrumb strong { color: #22384f; font-weight: 650; }
  159. .header-actions { display: flex; align-items: center; gap: 18px; }
  160. .system-status {
  161. display: inline-flex;
  162. align-items: center;
  163. color: #64768b;
  164. font-size: 10px;
  165. }
  166. .system-status i {
  167. width: 7px;
  168. height: 7px;
  169. margin-right: 7px;
  170. border-radius: 50%;
  171. background: #24a77b;
  172. box-shadow: 0 0 0 4px #24a77b12;
  173. }
  174. .logout-button {
  175. display: flex;
  176. align-items: center;
  177. gap: 7px;
  178. padding: 8px 11px;
  179. color: #627489;
  180. border: 1px solid #dce4ed;
  181. border-radius: 8px;
  182. background: #ffffff;
  183. cursor: pointer;
  184. font-size: 11px;
  185. }
  186. .logout-button svg {
  187. width: 15px;
  188. fill: none;
  189. stroke: currentColor;
  190. stroke-width: 1.7;
  191. stroke-linecap: round;
  192. stroke-linejoin: round;
  193. }
  194. .kicker {
  195. color: var(--blue);
  196. font: 10px "Cascadia Code", monospace;
  197. letter-spacing: .16em;
  198. }
  199. h1 {
  200. margin: 12px 0;
  201. font-size: 40px;
  202. font-weight: 560;
  203. line-height: 1.12;
  204. letter-spacing: -.045em;
  205. }
  206. .auth-shell {
  207. position: relative;
  208. display: grid;
  209. grid-template-columns: minmax(430px, 1.05fr) minmax(500px, .95fr);
  210. min-height: 100vh;
  211. overflow: hidden;
  212. background: #f6f8fb;
  213. }
  214. .auth-brand-panel {
  215. position: relative;
  216. display: flex;
  217. flex-direction: column;
  218. min-height: 100vh;
  219. padding: clamp(34px, 5vw, 72px);
  220. overflow: hidden;
  221. color: #ffffff;
  222. background:
  223. radial-gradient(circle at 76% 17%, #43c8ea35 0 4%, transparent 23%),
  224. linear-gradient(138deg, #0b3766 0%, #0c5d96 58%, #087e9c 100%);
  225. }
  226. .auth-brand-panel::before {
  227. position: absolute;
  228. top: 14%;
  229. right: -19%;
  230. width: min(46vw, 620px);
  231. aspect-ratio: 1;
  232. border: 1px solid #ffffff1f;
  233. border-radius: 50%;
  234. box-shadow:
  235. 0 0 0 62px #ffffff08,
  236. 0 0 0 124px #ffffff05;
  237. content: "";
  238. }
  239. .auth-brand-panel::after {
  240. position: absolute;
  241. inset: 0;
  242. opacity: .24;
  243. background-image:
  244. linear-gradient(#ffffff13 1px, transparent 1px),
  245. linear-gradient(90deg, #ffffff13 1px, transparent 1px);
  246. background-size: 46px 46px;
  247. mask-image: linear-gradient(135deg, #000, transparent 72%);
  248. content: "";
  249. }
  250. .auth-brand, .auth-brand-copy, .auth-copyright {
  251. position: relative;
  252. z-index: 1;
  253. }
  254. .auth-brand {
  255. display: flex;
  256. align-items: center;
  257. gap: 13px;
  258. width: fit-content;
  259. }
  260. .auth-brand b {
  261. display: grid;
  262. place-items: center;
  263. width: 42px;
  264. height: 42px;
  265. color: #d8f7ff;
  266. border: 1px solid #9ae5f5;
  267. background: #ffffff0f;
  268. box-shadow: inset 0 0 20px #6ce6ff1f;
  269. font: 20px "Cascadia Code", monospace;
  270. }
  271. .auth-brand > span {
  272. display: grid;
  273. gap: 3px;
  274. font-size: 17px;
  275. font-weight: 700;
  276. letter-spacing: .08em;
  277. }
  278. .auth-brand small {
  279. color: #c1e8f2;
  280. font: 8px "Cascadia Code", monospace;
  281. letter-spacing: .2em;
  282. }
  283. .auth-brand-copy {
  284. width: min(590px, 92%);
  285. margin: auto 0;
  286. }
  287. .auth-brand-copy .kicker { color: #8eeaff; }
  288. .auth-brand-copy h1 {
  289. margin: 18px 0 22px;
  290. font-size: clamp(44px, 5vw, 72px);
  291. font-weight: 540;
  292. line-height: 1.08;
  293. letter-spacing: -.055em;
  294. }
  295. .auth-brand-copy h1 em {
  296. color: #9aedf5;
  297. font-style: normal;
  298. }
  299. .auth-brand-copy > p:not(.kicker) {
  300. max-width: 500px;
  301. color: #d1e6f1;
  302. font-size: 14px;
  303. line-height: 1.9;
  304. }
  305. .capability-tags {
  306. display: flex;
  307. flex-wrap: wrap;
  308. gap: 8px;
  309. margin-top: 28px;
  310. }
  311. .capability-tags span {
  312. padding: 8px 12px;
  313. color: #d8f6fb;
  314. background: #ffffff0c;
  315. border: 1px solid #ffffff27;
  316. font-size: 11px;
  317. }
  318. .auth-copyright {
  319. margin: 0;
  320. color: #a9d4e2;
  321. font: 9px "Cascadia Code", monospace;
  322. letter-spacing: .16em;
  323. }
  324. .auth-form-panel {
  325. position: relative;
  326. display: grid;
  327. place-items: center;
  328. min-height: 100vh;
  329. padding: clamp(30px, 6vw, 90px);
  330. background:
  331. radial-gradient(circle at 90% 4%, #d6eaff 0, transparent 31%),
  332. #f7f9fc;
  333. }
  334. .auth-form-panel::before {
  335. position: absolute;
  336. top: 54px;
  337. right: 62px;
  338. width: 12px;
  339. height: 12px;
  340. border-top: 1px solid #90a9c0;
  341. border-right: 1px solid #90a9c0;
  342. content: "";
  343. }
  344. .login-card, .session-card {
  345. width: min(430px, 100%);
  346. animation: auth-enter .46s ease-out both;
  347. }
  348. .login-heading { margin-bottom: 36px; }
  349. .login-heading h2, .session-card h2 {
  350. margin: 10px 0;
  351. color: #122b45;
  352. font-size: 32px;
  353. font-weight: 620;
  354. letter-spacing: -.035em;
  355. }
  356. .login-heading > p:last-child, .session-card > p:last-child {
  357. margin: 0;
  358. color: #7a899c;
  359. font-size: 13px;
  360. }
  361. .login-card form {
  362. padding: 28px;
  363. background: #ffffff;
  364. border: 1px solid #d9e3ed;
  365. box-shadow: 0 28px 70px #264b7718;
  366. }
  367. .login-card label {
  368. display: block;
  369. color: #52657b;
  370. font-size: 12px;
  371. }
  372. .login-card label + label { margin-top: 20px; }
  373. .login-card label > span {
  374. display: block;
  375. margin-bottom: 8px;
  376. font-weight: 650;
  377. }
  378. .input-control {
  379. position: relative;
  380. display: flex;
  381. align-items: center;
  382. background: #f7f9fc;
  383. border: 1px solid #d8e2ec;
  384. transition: border-color .2s, box-shadow .2s, background .2s;
  385. }
  386. .input-control:focus-within {
  387. background: #ffffff;
  388. border-color: var(--blue);
  389. box-shadow: 0 0 0 3px #146ce512;
  390. }
  391. .input-control > svg {
  392. flex: none;
  393. width: 18px;
  394. margin-left: 13px;
  395. fill: none;
  396. stroke: #7890a8;
  397. stroke-width: 1.5;
  398. stroke-linecap: round;
  399. stroke-linejoin: round;
  400. }
  401. .input-control input {
  402. min-width: 0;
  403. width: 100%;
  404. padding: 14px 12px;
  405. color: #17324d;
  406. background: transparent;
  407. border: 0;
  408. outline: 0;
  409. font-family: "Cascadia Code", "Microsoft YaHei UI", monospace;
  410. }
  411. .input-control input::placeholder { color: #a0adbb; }
  412. .password-toggle {
  413. flex: none;
  414. margin-right: 10px;
  415. padding: 5px 7px;
  416. color: #70849a;
  417. background: transparent;
  418. border: 0;
  419. cursor: pointer;
  420. font-size: 10px;
  421. }
  422. .login-submit {
  423. display: flex;
  424. align-items: center;
  425. justify-content: space-between;
  426. width: 100%;
  427. margin-top: 28px;
  428. padding: 14px 16px;
  429. color: #ffffff;
  430. background: linear-gradient(100deg, #1265d8, #1685b7);
  431. border: 0;
  432. box-shadow: 0 12px 26px #146ce52b;
  433. cursor: pointer;
  434. font-weight: 680;
  435. transition: transform .2s, box-shadow .2s, filter .2s;
  436. }
  437. .login-submit svg {
  438. width: 19px;
  439. fill: none;
  440. stroke: currentColor;
  441. stroke-width: 1.7;
  442. stroke-linecap: round;
  443. stroke-linejoin: round;
  444. }
  445. .login-submit:hover:not(:disabled) {
  446. filter: brightness(.96);
  447. box-shadow: 0 16px 32px #146ce53a;
  448. transform: translateY(-1px);
  449. }
  450. .login-submit:disabled { opacity: .48; cursor: not-allowed; box-shadow: none; }
  451. .login-error {
  452. display: flex;
  453. align-items: center;
  454. gap: 8px;
  455. margin: 14px 0 0;
  456. padding: 10px 11px;
  457. color: #a33145;
  458. background: #fff3f5;
  459. border: 1px solid #f0c7cf;
  460. font-size: 11px;
  461. }
  462. .login-error span {
  463. display: grid;
  464. place-items: center;
  465. flex: none;
  466. width: 18px;
  467. height: 18px;
  468. color: #ffffff;
  469. background: #c9475d;
  470. border-radius: 50%;
  471. font: 10px "Cascadia Code", monospace;
  472. }
  473. .security-note {
  474. display: grid;
  475. grid-template-columns: 24px 1fr;
  476. gap: 10px;
  477. margin-top: 18px;
  478. padding: 0 6px;
  479. color: #7a899c;
  480. }
  481. .security-note > span { color: var(--blue); font-size: 17px; }
  482. .security-note p { margin: 0; font-size: 10px; line-height: 1.7; }
  483. .session-card {
  484. padding: 38px;
  485. background: #ffffff;
  486. border: 1px solid #d9e3ed;
  487. box-shadow: 0 28px 70px #264b7718;
  488. }
  489. .session-symbol {
  490. display: grid;
  491. place-items: center;
  492. width: 54px;
  493. height: 54px;
  494. margin-bottom: 24px;
  495. background: #edf5ff;
  496. border: 1px solid #cfe0f2;
  497. border-radius: 50%;
  498. }
  499. .session-symbol i {
  500. width: 18px;
  501. height: 18px;
  502. border: 2px solid #bfd4e9;
  503. border-top-color: var(--blue);
  504. border-radius: 50%;
  505. animation: spin .8s linear infinite;
  506. }
  507. .dashboard,
  508. .page-view {
  509. width: min(1480px, 100%);
  510. margin: 0 auto;
  511. padding-top: 32px;
  512. }
  513. .view-enter { animation: enter .42s cubic-bezier(.2, .7, .2, 1) both; }
  514. .eyebrow {
  515. margin: 0;
  516. color: #49739f;
  517. font: 9px "Cascadia Code", monospace;
  518. letter-spacing: .16em;
  519. }
  520. .command-hero {
  521. position: relative;
  522. min-height: 312px;
  523. overflow: hidden;
  524. border: 1px solid #dbe5ef;
  525. border-radius: 22px;
  526. background: #ffffff;
  527. box-shadow: 0 22px 60px #1e497616;
  528. }
  529. .command-hero::after {
  530. position: absolute;
  531. inset: 0;
  532. pointer-events: none;
  533. background:
  534. linear-gradient(90deg, #ffffff 0%, #ffffffed 39%, transparent 70%),
  535. linear-gradient(120deg, #0c63d008 1px, transparent 1px);
  536. background-size: auto, 28px 28px;
  537. content: "";
  538. }
  539. .command-hero > img {
  540. position: absolute;
  541. inset: 0 0 0 auto;
  542. width: 76%;
  543. height: 100%;
  544. object-fit: cover;
  545. object-position: 60% center;
  546. }
  547. .hero-copy {
  548. position: relative;
  549. z-index: 2;
  550. width: 52%;
  551. padding: 52px 0 44px 48px;
  552. }
  553. .hero-copy .eyebrow { display: flex; align-items: center; color: #0d6a96; }
  554. .hero-copy .eyebrow span {
  555. width: 24px;
  556. height: 1px;
  557. margin-right: 9px;
  558. background: #0b84b7;
  559. }
  560. .hero-copy h1 {
  561. margin: 18px 0 12px;
  562. color: #122d4b;
  563. font-size: clamp(32px, 3vw, 47px);
  564. font-weight: 650;
  565. letter-spacing: -.055em;
  566. }
  567. .hero-copy > p:not(.eyebrow) {
  568. max-width: 490px;
  569. margin: 0;
  570. color: #60748b;
  571. font-size: 13px;
  572. line-height: 1.8;
  573. }
  574. .hero-actions { display: flex; gap: 10px; margin-top: 28px; }
  575. .hero-actions button {
  576. padding: 10px 17px;
  577. color: #ffffff;
  578. border: 1px solid #146ce5;
  579. border-radius: 8px;
  580. background: #146ce5;
  581. box-shadow: 0 10px 24px #146ce526;
  582. cursor: pointer;
  583. font-size: 12px;
  584. font-weight: 650;
  585. transition: transform .2s, box-shadow .2s;
  586. }
  587. .hero-actions button:hover { transform: translateY(-2px); box-shadow: 0 14px 28px #146ce535; }
  588. .hero-actions button.ghost {
  589. color: #305b88;
  590. border-color: #d5e1ec;
  591. background: #ffffffdd;
  592. box-shadow: none;
  593. }
  594. .hero-scope {
  595. position: absolute;
  596. right: 24px;
  597. bottom: 22px;
  598. z-index: 3;
  599. display: grid;
  600. min-width: 150px;
  601. padding: 14px 16px;
  602. border: 1px solid #ffffffc7;
  603. border-radius: 12px;
  604. background: #fffffff0;
  605. box-shadow: 0 12px 28px #16457318;
  606. backdrop-filter: blur(12px);
  607. }
  608. .hero-scope small { color: #7d8ea1; font: 8px "Cascadia Code", monospace; letter-spacing: .14em; }
  609. .hero-scope strong { margin-top: 4px; color: #1165ca; font: 18px "Cascadia Code", monospace; }
  610. .hero-scope span { margin-top: 3px; color: #8492a2; font-size: 9px; }
  611. .metric-grid {
  612. display: grid;
  613. grid-template-columns: repeat(4, minmax(0, 1fr));
  614. gap: 14px;
  615. margin-top: 16px;
  616. }
  617. .metric-grid article {
  618. display: grid;
  619. grid-template-columns: 48px 1fr;
  620. gap: 16px;
  621. align-items: start;
  622. min-height: 150px;
  623. padding: 24px;
  624. border: 1px solid #e0e7ef;
  625. border-radius: 16px;
  626. background: #ffffff;
  627. box-shadow: 0 10px 32px #21466e0b;
  628. transition: transform .22s, box-shadow .22s, border-color .22s;
  629. }
  630. .metric-grid article:hover {
  631. border-color: #cad9e8;
  632. box-shadow: 0 16px 36px #21466e13;
  633. transform: translateY(-3px);
  634. }
  635. .metric-icon {
  636. display: grid;
  637. place-items: center;
  638. width: 46px;
  639. height: 46px;
  640. border-radius: 13px;
  641. }
  642. .metric-icon svg {
  643. width: 22px;
  644. fill: none;
  645. stroke: currentColor;
  646. stroke-width: 1.6;
  647. stroke-linecap: round;
  648. stroke-linejoin: round;
  649. }
  650. .metric-icon.blue { color: #146ce5; background: #edf5ff; }
  651. .metric-icon.cyan { color: #008dab; background: #eaf9fb; }
  652. .metric-icon.gold { color: #a66a0b; background: #fff7e8; }
  653. .metric-icon.violet { color: #6755b8; background: #f2efff; }
  654. .metric-grid article > div:last-child { min-width: 0; }
  655. .metric-grid small { color: #718296; font-size: 11px; }
  656. .metric-grid strong {
  657. display: block;
  658. overflow: hidden;
  659. margin-top: 12px;
  660. color: #18324d;
  661. font: 29px "Bahnschrift", "Microsoft YaHei UI", sans-serif;
  662. font-variant-numeric: tabular-nums;
  663. text-overflow: ellipsis;
  664. white-space: nowrap;
  665. }
  666. .metric-grid p {
  667. overflow: hidden;
  668. margin: 8px 0 0;
  669. color: #8a99aa;
  670. font-size: 9px;
  671. text-overflow: ellipsis;
  672. white-space: nowrap;
  673. }
  674. .metric-grid p i {
  675. display: inline-block;
  676. width: 6px;
  677. height: 6px;
  678. margin-right: 5px;
  679. border-radius: 50%;
  680. background: #21a77b;
  681. }
  682. .overview-grid {
  683. display: grid;
  684. grid-template-columns: minmax(0, 1.35fr) minmax(340px, .65fr);
  685. gap: 16px;
  686. margin-top: 16px;
  687. }
  688. .overview-card,
  689. .data-panel,
  690. .permission-panel,
  691. .identity-card {
  692. border: 1px solid #e0e7ef;
  693. border-radius: 18px;
  694. background: #ffffff;
  695. box-shadow: 0 12px 38px #21466e0c;
  696. }
  697. .overview-card { min-height: 384px; padding: 28px; }
  698. .card-heading,
  699. .panel-heading {
  700. display: flex;
  701. align-items: flex-start;
  702. justify-content: space-between;
  703. gap: 20px;
  704. }
  705. .card-heading h2,
  706. .panel-heading h2 {
  707. margin: 8px 0 0;
  708. color: #1d354e;
  709. font-size: 21px;
  710. font-weight: 650;
  711. letter-spacing: -.025em;
  712. }
  713. .card-heading button {
  714. padding: 7px 0;
  715. color: #49739e;
  716. border: 0;
  717. background: transparent;
  718. cursor: pointer;
  719. font-size: 10px;
  720. }
  721. .card-heading button span { margin-left: 4px; color: #146ce5; font-size: 15px; }
  722. .compact-table { margin-top: 18px; }
  723. .compact-row {
  724. display: grid;
  725. grid-template-columns: 36px minmax(0, 1fr) auto auto;
  726. gap: 13px;
  727. align-items: center;
  728. min-height: 57px;
  729. border-top: 1px solid #edf1f5;
  730. }
  731. .row-symbol {
  732. display: grid;
  733. place-items: center;
  734. width: 28px;
  735. height: 28px;
  736. color: #146ce5;
  737. border-radius: 8px;
  738. background: #edf5ff;
  739. font-size: 10px;
  740. }
  741. .compact-row > div { min-width: 0; display: grid; gap: 3px; }
  742. .compact-row > div strong { overflow: hidden; color: #2b4259; font-size: 11px; text-overflow: ellipsis; }
  743. .compact-row > div small { overflow: hidden; color: #9aa7b5; font: 8px "Cascadia Code", monospace; text-overflow: ellipsis; }
  744. .compact-row > b { min-width: 78px; color: #274968; text-align: right; font-size: 11px; }
  745. .status-pill {
  746. display: inline-flex;
  747. align-items: center;
  748. justify-content: center;
  749. width: fit-content;
  750. min-width: 58px;
  751. padding: 5px 8px;
  752. border-radius: 14px;
  753. font-size: 9px;
  754. font-weight: 650;
  755. }
  756. .status-pill.success { color: #087a60; background: #e9f8f3; }
  757. .status-pill.pending { color: #9a6410; background: #fff6df; }
  758. .status-pill.muted { color: #778696; background: #eef2f5; }
  759. .live-badge,
  760. .sync-label {
  761. display: inline-flex;
  762. align-items: center;
  763. gap: 6px;
  764. color: #168262;
  765. font: 9px "Cascadia Code", monospace;
  766. }
  767. .live-badge i,
  768. .sync-label i {
  769. width: 6px;
  770. height: 6px;
  771. border-radius: 50%;
  772. background: #24a77b;
  773. box-shadow: 0 0 0 4px #24a77b12;
  774. }
  775. .health-content {
  776. display: grid;
  777. grid-template-columns: 140px 1fr;
  778. gap: 22px;
  779. align-items: center;
  780. margin-top: 26px;
  781. }
  782. .rate-ring {
  783. display: grid;
  784. place-items: center;
  785. width: 132px;
  786. height: 132px;
  787. border-radius: 50%;
  788. }
  789. .rate-ring > div {
  790. display: grid;
  791. place-items: center;
  792. width: 104px;
  793. height: 104px;
  794. border-radius: 50%;
  795. background: #ffffff;
  796. box-shadow: inset 0 0 0 1px #edf1f6;
  797. }
  798. .rate-ring strong { color: #153b61; font: 26px "Cascadia Code", monospace; }
  799. .rate-ring span { margin-top: -20px; color: #8796a8; font-size: 9px; }
  800. .health-details { display: grid; }
  801. .health-details div {
  802. display: flex;
  803. justify-content: space-between;
  804. gap: 12px;
  805. padding: 10px 0;
  806. border-bottom: 1px solid #edf1f5;
  807. }
  808. .health-details span { color: #8291a2; font-size: 10px; }
  809. .health-details b { color: #294967; font-size: 10px; }
  810. .status-bars { display: grid; gap: 9px; margin-top: 24px; }
  811. .status-bars > div { display: grid; grid-template-columns: 52px 1fr 18px; gap: 8px; align-items: center; }
  812. .status-bars span { color: #8493a4; font-size: 9px; }
  813. .status-bars > div > i { height: 5px; overflow: hidden; border-radius: 6px; background: #edf1f6; }
  814. .status-bars > div > i b { display: block; height: 100%; border-radius: inherit; background: linear-gradient(90deg, #146ce5, #16a2bb); }
  815. .status-bars strong { color: #526b84; text-align: right; font-size: 9px; }
  816. .empty-state {
  817. display: grid;
  818. place-items: center;
  819. min-height: 180px;
  820. color: #8b9aaa;
  821. font-size: 12px;
  822. }
  823. .page-view { padding-bottom: 30px; }
  824. .agent-security {
  825. display: inline-flex;
  826. align-items: center;
  827. gap: 8px;
  828. border: 1px solid #c9dfd6;
  829. border-radius: 999px;
  830. background: #f4fbf7;
  831. color: #327258;
  832. padding: 9px 14px;
  833. font-size: 12px;
  834. font-weight: 700;
  835. }
  836. .agent-security i,
  837. .agent-conversation > header small i {
  838. width: 7px;
  839. height: 7px;
  840. border-radius: 50%;
  841. background: #29a66f;
  842. box-shadow: 0 0 0 4px #29a66f1f;
  843. }
  844. .operation-agent-panel {
  845. display: grid;
  846. grid-template-columns: 260px minmax(0, 1fr);
  847. height: auto;
  848. min-height: 650px;
  849. overflow: hidden;
  850. border: 1px solid #dce5ef;
  851. border-radius: 20px;
  852. background: #fff;
  853. box-shadow: 0 18px 50px #31547312;
  854. }
  855. .agent-suggestions {
  856. display: flex;
  857. flex-direction: column;
  858. gap: 10px;
  859. border-right: 1px solid #e5ebf2;
  860. background: linear-gradient(180deg, #f8fbff, #f5f8fb);
  861. padding: 26px 18px;
  862. min-height: 0;
  863. overflow-y: auto;
  864. }
  865. .agent-suggestions > div:first-child { margin-bottom: 8px; }
  866. .agent-suggestions h2 { margin: 4px 0 0; color: #1d334d; font-size: 20px; }
  867. .agent-suggestions > button {
  868. display: grid;
  869. gap: 5px;
  870. width: 100%;
  871. border: 1px solid #dbe5ef;
  872. border-radius: 12px;
  873. background: #fff;
  874. color: #28445f;
  875. padding: 14px;
  876. text-align: left;
  877. cursor: pointer;
  878. transition: .2s ease;
  879. }
  880. .agent-suggestions > button:hover {
  881. transform: translateY(-1px);
  882. border-color: #91bae7;
  883. box-shadow: 0 10px 24px #346da116;
  884. }
  885. .agent-suggestions > button span { font-weight: 750; }
  886. .agent-suggestions > button small { color: #8494a5; }
  887. .agent-boundary-note {
  888. margin-top: auto;
  889. border: 1px solid #d9e7f4;
  890. border-radius: 12px;
  891. background: #eef6ff;
  892. padding: 14px;
  893. }
  894. .agent-boundary-note strong { color: #245883; font-size: 12px; }
  895. .agent-boundary-note p { margin: 6px 0 0; color: #698096; font-size: 11px; line-height: 1.6; }
  896. .agent-conversation {
  897. display: grid;
  898. grid-template-rows: auto auto auto;
  899. min-width: 0;
  900. min-height: 0;
  901. overflow: visible;
  902. }
  903. .agent-conversation > header {
  904. display: flex;
  905. align-items: center;
  906. gap: 12px;
  907. border-bottom: 1px solid #e8edf3;
  908. padding: 17px 22px;
  909. }
  910. .agent-avatar {
  911. display: grid;
  912. width: 38px;
  913. height: 38px;
  914. place-items: center;
  915. border-radius: 11px;
  916. background: linear-gradient(145deg, #1f76cf, #4b9be8);
  917. color: #fff;
  918. font: 700 11px "Cascadia Code", monospace;
  919. box-shadow: 0 8px 18px #1f76cf35;
  920. }
  921. .agent-conversation > header div { display: grid; gap: 4px; }
  922. .agent-conversation > header strong { color: #20384f; font-size: 13px; }
  923. .agent-conversation > header small { display: flex; align-items: center; gap: 7px; color: #7d8d9e; font-size: 10px; }
  924. .operation-messages {
  925. display: flex;
  926. flex-direction: column;
  927. gap: 16px;
  928. min-height: 480px;
  929. overflow: visible;
  930. max-height: none;
  931. padding: 24px;
  932. background: #fbfcfe;
  933. }
  934. .agent-suggestions::-webkit-scrollbar {
  935. width: 8px;
  936. }
  937. .agent-suggestions::-webkit-scrollbar-track {
  938. background: transparent;
  939. }
  940. .agent-suggestions::-webkit-scrollbar-thumb {
  941. border: 2px solid transparent;
  942. border-radius: 999px;
  943. background: #b9c8d7;
  944. background-clip: padding-box;
  945. }
  946. .agent-suggestions::-webkit-scrollbar-thumb:hover {
  947. background: #8eabc5;
  948. background-clip: padding-box;
  949. }
  950. .agent-empty { margin: auto; max-width: 430px; color: #7d8b99; text-align: center; }
  951. .agent-empty > span { display: block; color: #5597d7; font-size: 34px; }
  952. .agent-empty h2 { margin: 12px 0 8px; color: #2d455d; font-size: 19px; }
  953. .agent-empty p { margin: 0; font-size: 12px; line-height: 1.75; }
  954. .operation-message {
  955. width: min(760px, 90%);
  956. border: 1px solid #dde6ef;
  957. border-radius: 15px;
  958. background: #fff;
  959. padding: 15px 17px;
  960. box-shadow: 0 8px 22px #304d6810;
  961. }
  962. .operation-message.user {
  963. align-self: flex-end;
  964. width: auto;
  965. max-width: 72%;
  966. border-color: #cfe1f6;
  967. background: #edf5ff;
  968. }
  969. .message-label { margin-bottom: 7px; color: #7c8d9e; font-size: 10px; font-weight: 700; }
  970. .operation-message > p { margin: 0; color: #354d64; font-size: 13px; line-height: 1.8; }
  971. .agent-metrics {
  972. display: grid;
  973. grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
  974. gap: 9px;
  975. margin-top: 13px;
  976. }
  977. .agent-metrics article { border-radius: 10px; background: #f5f8fc; padding: 12px; }
  978. .agent-metrics small { color: #7d8e9f; font-size: 9px; }
  979. .agent-metrics strong { display: block; margin-top: 7px; color: #1e4f7e; font-size: 19px; }
  980. .agent-metrics em { margin-left: 3px; color: #8293a4; font-size: 9px; font-style: normal; }
  981. .agent-business-list {
  982. overflow: hidden;
  983. margin-top: 13px;
  984. border: 1px solid #e2e8ef;
  985. border-radius: 10px;
  986. }
  987. .agent-business-list header,
  988. .agent-business-list > div {
  989. display: grid;
  990. grid-template-columns: 1.2fr 1fr .7fr;
  991. gap: 10px;
  992. align-items: center;
  993. padding: 10px 12px;
  994. }
  995. .agent-business-list header { background: #f4f7fb; color: #536b82; }
  996. .agent-business-list header small { text-align: right; }
  997. .agent-business-list > div + div { border-top: 1px solid #edf1f5; }
  998. .agent-business-list > div strong { color: #28445e; font-size: 11px; }
  999. .agent-business-list > div span,
  1000. .agent-business-list > div small { overflow: hidden; color: #78899a; font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
  1001. .operation-actions { display: flex; gap: 8px; margin-top: 12px; }
  1002. .operation-actions button {
  1003. border: 1px solid #bdd6f1;
  1004. border-radius: 8px;
  1005. background: #f2f8ff;
  1006. color: #1f68ad;
  1007. padding: 8px 11px;
  1008. font-size: 10px;
  1009. font-weight: 700;
  1010. cursor: pointer;
  1011. }
  1012. .operation-message footer {
  1013. display: flex;
  1014. justify-content: space-between;
  1015. gap: 12px;
  1016. margin-top: 12px;
  1017. border-top: 1px solid #edf1f5;
  1018. padding-top: 9px;
  1019. color: #8a98a7;
  1020. font: 9px "Cascadia Code", monospace;
  1021. }
  1022. .operation-message footer a { color: #2d75bb; text-decoration: none; }
  1023. .agent-thinking { display: flex; align-items: center; gap: 5px; color: #74879a; font-size: 11px; }
  1024. .agent-thinking i {
  1025. width: 6px;
  1026. height: 6px;
  1027. border-radius: 50%;
  1028. background: #438bd1;
  1029. animation: pulse 1s infinite alternate;
  1030. }
  1031. .agent-thinking i:nth-child(2) { animation-delay: .2s; }
  1032. .agent-thinking i:nth-child(3) { animation-delay: .4s; }
  1033. .agent-thinking span { margin-left: 6px; }
  1034. .operation-composer {
  1035. display: grid;
  1036. grid-template-columns: 1fr auto;
  1037. gap: 12px;
  1038. border-top: 1px solid #e6ecf2;
  1039. padding: 16px 20px;
  1040. }
  1041. .operation-composer textarea {
  1042. resize: none;
  1043. border: 1px solid #d7e0e9;
  1044. border-radius: 10px;
  1045. outline: none;
  1046. padding: 11px 13px;
  1047. color: #344c63;
  1048. font: inherit;
  1049. }
  1050. .operation-composer textarea:focus { border-color: #6ba4dc; box-shadow: 0 0 0 3px #2e81d514; }
  1051. .operation-composer button {
  1052. align-self: stretch;
  1053. border: 0;
  1054. border-radius: 10px;
  1055. background: #1768b7;
  1056. color: #fff;
  1057. padding: 0 18px;
  1058. font-weight: 700;
  1059. cursor: pointer;
  1060. }
  1061. .operation-composer button:disabled { opacity: .5; cursor: not-allowed; }
  1062. .product-admin-grid {
  1063. display: grid;
  1064. grid-template-columns: repeat(2, minmax(0, 1fr));
  1065. gap: 18px;
  1066. }
  1067. .product-admin-grid > article {
  1068. display: flex;
  1069. flex-direction: column;
  1070. min-height: 330px;
  1071. border: 1px solid #dce5ee;
  1072. border-radius: 18px;
  1073. background: #fff;
  1074. padding: 22px;
  1075. box-shadow: 0 14px 38px #3154730e;
  1076. }
  1077. .product-admin-grid header,
  1078. .product-admin-grid footer {
  1079. display: flex;
  1080. align-items: center;
  1081. justify-content: space-between;
  1082. gap: 12px;
  1083. }
  1084. .product-admin-grid header > span {
  1085. color: #5f84a8;
  1086. font-size: 10px;
  1087. font-weight: 750;
  1088. letter-spacing: .08em;
  1089. }
  1090. .product-admin-grid header em {
  1091. border-radius: 999px;
  1092. background: #e9f7ef;
  1093. color: #2d805b;
  1094. padding: 5px 9px;
  1095. font-size: 9px;
  1096. font-style: normal;
  1097. font-weight: 700;
  1098. }
  1099. .product-admin-grid header em.inactive { background: #f0f2f5; color: #7b8793; }
  1100. .product-admin-grid h2 { margin: 18px 0 8px; color: #203a53; font-size: 19px; }
  1101. .product-admin-grid > article > p { margin: 0; color: #75889a; font-size: 11px; line-height: 1.75; }
  1102. .product-version-list { display: grid; gap: 8px; margin: 18px 0; }
  1103. .product-version-list > div {
  1104. display: grid;
  1105. grid-template-columns: 70px 1fr auto;
  1106. align-items: center;
  1107. gap: 10px;
  1108. border-radius: 9px;
  1109. background: #f6f8fb;
  1110. padding: 10px 12px;
  1111. }
  1112. .product-version-list strong { color: #2b618f; font: 700 10px "Cascadia Code", monospace; }
  1113. .product-version-list span,
  1114. .product-version-list small { color: #778899; font-size: 9px; }
  1115. .product-admin-grid footer { margin-top: auto; border-top: 1px solid #edf1f5; padding-top: 14px; }
  1116. .product-admin-grid footer small { color: #9aa6b2; font: 9px "Cascadia Code", monospace; }
  1117. .product-admin-grid footer > div { display: flex; align-items: center; gap: 8px; }
  1118. .product-admin-grid footer button {
  1119. border: 1px solid #bad3eb;
  1120. border-radius: 8px;
  1121. background: #f4f9ff;
  1122. color: #28699f;
  1123. padding: 8px 12px;
  1124. font-size: 10px;
  1125. font-weight: 700;
  1126. cursor: pointer;
  1127. }
  1128. .product-admin-grid footer .product-manage-button {
  1129. color: #fff;
  1130. border-color: #146ce5;
  1131. background: #146ce5;
  1132. box-shadow: 0 7px 18px #146ce522;
  1133. }
  1134. .product-admin-grid footer button:disabled { opacity: .45; cursor: not-allowed; }
  1135. .product-heading-actions { display: flex; align-items: center; gap: 12px; }
  1136. .product-heading-actions > button {
  1137. padding: 10px 15px;
  1138. color: #fff;
  1139. border: 0;
  1140. border-radius: 9px;
  1141. background: linear-gradient(120deg, #1263b7, #168fb1);
  1142. box-shadow: 0 10px 24px #146b9e24;
  1143. cursor: pointer;
  1144. font-size: 10px;
  1145. font-weight: 700;
  1146. }
  1147. .product-creator {
  1148. width: min(780px, 96vw);
  1149. height: 100vh;
  1150. overflow-y: auto;
  1151. padding: 0 38px 42px;
  1152. background:
  1153. linear-gradient(135deg, #e8f5ff66 0%, transparent 32%),
  1154. #f7f9fc;
  1155. box-shadow: -24px 0 80px #102b4938;
  1156. animation: drawer-in .32s cubic-bezier(.2, .7, .2, 1) both;
  1157. }
  1158. .creator-intro {
  1159. display: flex;
  1160. align-items: center;
  1161. gap: 22px;
  1162. margin-top: 24px;
  1163. padding: 22px 25px;
  1164. overflow: hidden;
  1165. color: #fff;
  1166. border-radius: 16px;
  1167. background:
  1168. radial-gradient(circle at 90% -30%, #70e4f45c, transparent 40%),
  1169. linear-gradient(125deg, #0b457a, #087d99);
  1170. }
  1171. .creator-orbit {
  1172. position: relative;
  1173. display: grid;
  1174. place-items: center;
  1175. flex: none;
  1176. width: 62px;
  1177. height: 62px;
  1178. border: 1px solid #ffffff42;
  1179. border-radius: 50%;
  1180. }
  1181. .creator-orbit::before,
  1182. .creator-orbit::after {
  1183. position: absolute;
  1184. inset: 8px;
  1185. border: 1px solid #ffffff24;
  1186. border-radius: 50%;
  1187. content: "";
  1188. }
  1189. .creator-orbit::after { inset: -8px; border-style: dashed; animation: orbit-spin 14s linear infinite; }
  1190. .creator-orbit i { position: absolute; top: 4px; right: 8px; width: 6px; height: 6px; border-radius: 50%; background: #60f0c6; box-shadow: 0 0 12px #60f0c6; }
  1191. .creator-orbit span { z-index: 1; font: 700 10px "Cascadia Code", monospace; letter-spacing: .12em; }
  1192. .creator-intro > div:last-child { min-width: 0; }
  1193. .creator-intro small { color: #b7e8f4; font: 8px "Cascadia Code", monospace; letter-spacing: .15em; }
  1194. .creator-intro h3 { margin: 8px 0 6px; font-size: 20px; }
  1195. .creator-intro p { margin: 0; color: #cce6ef; font-size: 9px; line-height: 1.6; }
  1196. .creator-steps {
  1197. display: grid;
  1198. grid-template-columns: 1fr 30px 1fr 30px 1fr;
  1199. align-items: center;
  1200. margin: 22px 0 15px;
  1201. padding: 15px 17px;
  1202. border: 1px solid #dfe7ef;
  1203. border-radius: 13px;
  1204. background: #fff;
  1205. }
  1206. .creator-steps > i { height: 1px; background: #dce5ed; }
  1207. .creator-steps button {
  1208. display: flex;
  1209. align-items: center;
  1210. gap: 9px;
  1211. padding: 5px;
  1212. color: #8d9aa7;
  1213. border: 0;
  1214. background: transparent;
  1215. cursor: pointer;
  1216. text-align: left;
  1217. }
  1218. .creator-steps button:disabled { cursor: not-allowed; opacity: .55; }
  1219. .creator-steps button > span {
  1220. display: grid;
  1221. place-items: center;
  1222. flex: none;
  1223. width: 30px;
  1224. height: 30px;
  1225. border: 1px solid #dce5ed;
  1226. border-radius: 9px;
  1227. background: #f6f8fa;
  1228. font: 700 8px "Cascadia Code", monospace;
  1229. }
  1230. .creator-steps button > div { display: grid; gap: 3px; }
  1231. .creator-steps strong { color: #60768a; font-size: 9px; }
  1232. .creator-steps small { font-size: 7px; }
  1233. .creator-steps button.active > span { color: #fff; border-color: #146ce5; background: #146ce5; box-shadow: 0 7px 17px #146ce52e; }
  1234. .creator-steps button.active strong { color: #1b5e98; }
  1235. .creator-steps button.complete > span { color: #14795e; border-color: #cce8de; background: #eaf8f3; }
  1236. .creator-form {
  1237. overflow: hidden;
  1238. border: 1px solid #dfe7ef;
  1239. border-radius: 16px;
  1240. background: #fff;
  1241. box-shadow: 0 12px 36px #2a4d650c;
  1242. }
  1243. .creator-step-panel { padding: 25px; animation: view-enter .28s ease both; }
  1244. .creator-step-panel > .product-section-heading { padding-bottom: 18px; border-bottom: 1px solid #edf1f5; }
  1245. .creator-step-panel > .product-section-heading > button {
  1246. padding: 7px 10px;
  1247. color: #176cad;
  1248. border: 1px solid #cfe0ed;
  1249. border-radius: 7px;
  1250. background: #f5faff;
  1251. cursor: pointer;
  1252. font-size: 8px;
  1253. }
  1254. .creator-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin-top: 20px; }
  1255. .creator-grid label { display: grid; gap: 7px; color: #526a80; font-size: 9px; }
  1256. .creator-grid label.wide { grid-column: 1 / -1; }
  1257. .creator-grid input,
  1258. .creator-grid select,
  1259. .creator-grid textarea {
  1260. width: 100%;
  1261. padding: 11px 12px;
  1262. color: #294861;
  1263. border: 1px solid #d9e3ed;
  1264. border-radius: 8px;
  1265. outline: 0;
  1266. background: #f8fafc;
  1267. font-size: 10px;
  1268. transition: border-color .18s ease, box-shadow .18s ease, background .18s ease;
  1269. }
  1270. .creator-grid textarea { resize: vertical; line-height: 1.65; }
  1271. .creator-grid input:focus,
  1272. .creator-grid select:focus,
  1273. .creator-grid textarea:focus { border-color: #1680cf; background: #fff; box-shadow: 0 0 0 3px #1680cf10; }
  1274. .creator-grid label > small { color: #98a5b1; font-size: 8px; line-height: 1.5; }
  1275. .creator-grid label.wide > small { text-align: right; }
  1276. .creator-plan-list { display: grid; gap: 12px; margin-top: 18px; }
  1277. .creator-plan-list > article { padding: 17px; border: 1px solid #e1e8ef; border-radius: 12px; background: #fbfcfd; }
  1278. .creator-plan-list > article > header { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding-bottom: 13px; border-bottom: 1px solid #edf1f5; }
  1279. .creator-plan-list > article > header > div { display: flex; align-items: center; gap: 9px; }
  1280. .creator-plan-list > article > header span { display: grid; place-items: center; width: 26px; height: 26px; color: #126dab; border-radius: 7px; background: #eaf5fd; font: 700 8px "Cascadia Code", monospace; }
  1281. .creator-plan-list > article > header strong { color: #3a566f; font-size: 10px; }
  1282. .creator-plan-list > article > header button { color: #a65656; border: 0; background: transparent; cursor: pointer; font-size: 8px; }
  1283. .creator-plan-list .creator-grid { margin-top: 15px; }
  1284. .creator-error { margin: 0 25px 16px; padding: 10px 12px; color: #a64747; border: 1px solid #f0d2d2; border-radius: 8px; background: #fff4f4; font-size: 9px; }
  1285. .creator-footer { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 16px 25px; border-top: 1px solid #e7edf2; background: #f9fbfd; }
  1286. .creator-footer > span { color: #8d9ba8; font-size: 8px; }
  1287. .creator-footer button {
  1288. padding: 9px 15px;
  1289. color: #61778b;
  1290. border: 1px solid #d7e1ea;
  1291. border-radius: 8px;
  1292. background: #fff;
  1293. cursor: pointer;
  1294. font-size: 9px;
  1295. }
  1296. .creator-footer button.primary { margin-left: auto; color: #fff; border-color: #146ce5; background: linear-gradient(120deg, #1263b7, #168fb1); box-shadow: 0 8px 20px #146b9e22; }
  1297. .creator-footer button:disabled { opacity: .45; cursor: not-allowed; box-shadow: none; }
  1298. @keyframes orbit-spin { to { transform: rotate(360deg); } }
  1299. .product-editor {
  1300. width: min(940px, 97vw);
  1301. height: 100vh;
  1302. overflow-y: auto;
  1303. padding: 0 36px 50px;
  1304. background:
  1305. linear-gradient(90deg, #eef6ff 1px, transparent 1px) 0 0 / 44px 44px,
  1306. #f7f9fc;
  1307. box-shadow: -24px 0 80px #102b4938;
  1308. animation: drawer-in .32s cubic-bezier(.2, .7, .2, 1) both;
  1309. }
  1310. .product-editor-hero {
  1311. position: relative;
  1312. display: flex;
  1313. align-items: flex-end;
  1314. justify-content: space-between;
  1315. gap: 24px;
  1316. margin-top: 26px;
  1317. padding: 28px 30px;
  1318. overflow: hidden;
  1319. color: #fff;
  1320. border-radius: 17px;
  1321. background:
  1322. radial-gradient(circle at 82% 18%, #82e3ff52, transparent 27%),
  1323. linear-gradient(125deg, #0a3d72 0%, #0b6b98 63%, #1493a5 100%);
  1324. box-shadow: 0 18px 42px #0a56832b;
  1325. }
  1326. .product-editor-hero::after {
  1327. position: absolute;
  1328. right: 100px;
  1329. bottom: -74px;
  1330. width: 210px;
  1331. height: 210px;
  1332. border: 1px solid #ffffff26;
  1333. border-radius: 50%;
  1334. box-shadow: 0 0 0 28px #ffffff0a, 0 0 0 58px #ffffff08;
  1335. content: "";
  1336. }
  1337. .product-editor-hero > div,
  1338. .product-editor-hero > em { position: relative; z-index: 1; }
  1339. .product-editor-hero span { color: #bfeaff; font-size: 9px; letter-spacing: .12em; }
  1340. .product-editor-hero h3 { margin: 13px 0 7px; font-size: 25px; letter-spacing: -.02em; }
  1341. .product-editor-hero p { margin: 0; color: #c9e5f1; font: 9px "Cascadia Code", monospace; }
  1342. .product-editor-hero > em {
  1343. display: inline-flex;
  1344. align-items: center;
  1345. gap: 8px;
  1346. padding: 8px 12px;
  1347. color: #d8fff2;
  1348. border: 1px solid #ffffff2b;
  1349. border-radius: 18px;
  1350. background: #ffffff14;
  1351. font-size: 10px;
  1352. font-style: normal;
  1353. }
  1354. .product-editor-hero > em i { width: 7px; height: 7px; border-radius: 50%; background: #4ce6af; box-shadow: 0 0 0 5px #4ce6af1f; }
  1355. .product-editor-hero > em.inactive { color: #dbe5ed; }
  1356. .product-editor-hero > em.inactive i { background: #aab8c4; box-shadow: none; }
  1357. .product-editor-tabs {
  1358. display: flex;
  1359. gap: 5px;
  1360. margin: 22px 0 16px;
  1361. padding: 5px;
  1362. border: 1px solid #dfe7ef;
  1363. border-radius: 12px;
  1364. background: #fff;
  1365. box-shadow: 0 8px 24px #2f536b0a;
  1366. }
  1367. .product-editor-tabs button {
  1368. flex: 1;
  1369. padding: 10px 14px;
  1370. color: #7b8c9d;
  1371. border: 0;
  1372. border-radius: 8px;
  1373. background: transparent;
  1374. cursor: pointer;
  1375. font-size: 10px;
  1376. }
  1377. .product-editor-tabs button.active { color: #165f9f; background: #edf6ff; box-shadow: inset 0 0 0 1px #d9ebfb; font-weight: 700; }
  1378. .product-editor-message {
  1379. margin: 0 0 14px;
  1380. padding: 10px 13px;
  1381. color: #17654f;
  1382. border: 1px solid #cde9df;
  1383. border-radius: 9px;
  1384. background: #f0faf7;
  1385. font-size: 10px;
  1386. }
  1387. .product-profile-form,
  1388. .product-log-panel,
  1389. .product-version-workspace {
  1390. border: 1px solid #dfe7ef;
  1391. border-radius: 16px;
  1392. background: #fff;
  1393. box-shadow: 0 12px 36px #2a4d650c;
  1394. }
  1395. .product-profile-form {
  1396. display: grid;
  1397. grid-template-columns: 1fr 1fr;
  1398. gap: 18px;
  1399. padding: 25px;
  1400. }
  1401. .product-section-heading {
  1402. display: flex;
  1403. align-items: center;
  1404. justify-content: space-between;
  1405. gap: 20px;
  1406. }
  1407. .product-profile-form > .product-section-heading { grid-column: 1 / -1; padding-bottom: 18px; border-bottom: 1px solid #edf1f5; }
  1408. .product-section-heading small { color: #1684ba; font: 8px "Cascadia Code", monospace; letter-spacing: .16em; }
  1409. .product-section-heading h3 { margin: 5px 0 0; color: #27445f; font-size: 17px; }
  1410. .product-section-heading > span { color: #93a0ad; font-size: 9px; }
  1411. .product-profile-form label,
  1412. .version-form-grid label,
  1413. .plan-form-grid label {
  1414. display: grid;
  1415. gap: 7px;
  1416. color: #526a80;
  1417. font-size: 9px;
  1418. }
  1419. .product-profile-form label.wide,
  1420. .version-form-grid label.wide,
  1421. .plan-form-grid label.wide { grid-column: 1 / -1; }
  1422. .product-profile-form input,
  1423. .product-profile-form select,
  1424. .product-profile-form textarea,
  1425. .version-form-grid input,
  1426. .version-form-grid select,
  1427. .version-form-grid textarea,
  1428. .plan-form-grid input,
  1429. .plan-form-grid select,
  1430. .plan-form-grid textarea {
  1431. width: 100%;
  1432. padding: 10px 11px;
  1433. color: #294861;
  1434. border: 1px solid #d9e3ed;
  1435. border-radius: 8px;
  1436. outline: 0;
  1437. background: #f8fafc;
  1438. font-size: 10px;
  1439. transition: border-color .18s ease, box-shadow .18s ease, background .18s ease;
  1440. }
  1441. .product-profile-form textarea,
  1442. .version-form-grid textarea,
  1443. .plan-form-grid textarea { resize: vertical; line-height: 1.65; }
  1444. .product-profile-form input:focus,
  1445. .product-profile-form select:focus,
  1446. .product-profile-form textarea:focus,
  1447. .version-form-grid input:focus,
  1448. .version-form-grid select:focus,
  1449. .version-form-grid textarea:focus,
  1450. .plan-form-grid input:focus,
  1451. .plan-form-grid select:focus,
  1452. .plan-form-grid textarea:focus { border-color: #1680cf; background: #fff; box-shadow: 0 0 0 3px #1680cf10; }
  1453. .product-profile-form input:disabled,
  1454. .product-profile-form select:disabled,
  1455. .product-profile-form textarea:disabled,
  1456. .version-form-grid input:disabled,
  1457. .version-form-grid textarea:disabled,
  1458. .plan-form-grid input:disabled,
  1459. .plan-form-grid select:disabled,
  1460. .plan-form-grid textarea:disabled { color: #73879a; background: #f0f3f6; cursor: not-allowed; }
  1461. .product-profile-form label > small { color: #9aa7b3; font-size: 8px; text-align: right; }
  1462. .product-profile-form > footer { grid-column: 1 / -1; display: flex; justify-content: flex-end; padding-top: 4px; }
  1463. .product-profile-form > footer button,
  1464. .primary-action,
  1465. .version-save-footer button {
  1466. padding: 10px 17px;
  1467. color: #fff;
  1468. border: 0;
  1469. border-radius: 8px;
  1470. background: linear-gradient(120deg, #1263b7, #168fb1);
  1471. box-shadow: 0 9px 24px #146b9e24;
  1472. cursor: pointer;
  1473. font-size: 10px;
  1474. font-weight: 700;
  1475. }
  1476. .product-profile-form button:disabled,
  1477. .primary-action:disabled,
  1478. .version-save-footer button:disabled { opacity: .5; cursor: not-allowed; }
  1479. .product-version-workspace {
  1480. display: grid;
  1481. grid-template-columns: 210px minmax(0, 1fr);
  1482. min-height: 560px;
  1483. overflow: hidden;
  1484. }
  1485. .product-version-rail {
  1486. padding: 20px 14px;
  1487. border-right: 1px solid #e3eaf1;
  1488. background: #f8fafc;
  1489. }
  1490. .product-version-rail .product-section-heading { padding: 0 5px 15px; }
  1491. .product-version-rail .product-section-heading > button {
  1492. display: grid;
  1493. place-items: center;
  1494. width: 28px;
  1495. height: 28px;
  1496. color: #fff;
  1497. border: 0;
  1498. border-radius: 8px;
  1499. background: #146ce5;
  1500. cursor: pointer;
  1501. font-size: 17px;
  1502. }
  1503. .product-version-rail > button {
  1504. display: grid;
  1505. gap: 7px;
  1506. width: 100%;
  1507. margin-bottom: 7px;
  1508. padding: 12px;
  1509. color: #516a81;
  1510. border: 1px solid transparent;
  1511. border-radius: 10px;
  1512. background: transparent;
  1513. cursor: pointer;
  1514. text-align: left;
  1515. }
  1516. .product-version-rail > button:hover { background: #fff; }
  1517. .product-version-rail > button.active { border-color: #cfe2f3; background: #fff; box-shadow: 0 8px 22px #2d5a760d; }
  1518. .product-version-rail > button > span { display: flex; align-items: center; justify-content: space-between; gap: 6px; }
  1519. .product-version-rail strong { color: #274761; font: 700 11px "Cascadia Code", monospace; }
  1520. .product-version-rail em,
  1521. .version-status {
  1522. padding: 4px 6px;
  1523. color: #497189;
  1524. border-radius: 10px;
  1525. background: #e9f1f7;
  1526. font-size: 7px;
  1527. font-style: normal;
  1528. }
  1529. .product-version-rail em.published,
  1530. .version-status.published { color: #14785f; background: #e5f6f0; }
  1531. .product-version-rail em.draft,
  1532. .version-status.draft { color: #a16616; background: #fff2dc; }
  1533. .product-version-rail em.retired,
  1534. .version-status.retired { color: #7c8792; background: #edf0f3; }
  1535. .product-version-rail > button > small { color: #97a4b0; font-size: 8px; }
  1536. .product-version-editor { min-width: 0; padding: 24px; }
  1537. .new-version-card { padding: 24px; border: 1px dashed #bcd6e9; border-radius: 14px; background: #f7fbff; }
  1538. .new-version-card .product-section-heading > button { color: #71879a; border: 0; background: transparent; cursor: pointer; font-size: 9px; }
  1539. .new-version-card .version-form-grid { margin: 22px 0 16px; }
  1540. .version-control-bar { display: flex; align-items: center; justify-content: space-between; gap: 18px; padding-bottom: 18px; border-bottom: 1px solid #edf1f5; }
  1541. .version-control-bar small { color: #1684ba; font: 8px "Cascadia Code", monospace; letter-spacing: .14em; }
  1542. .version-control-bar h3 { display: inline-block; margin: 7px 10px 0 0; color: #21425e; font: 700 22px "Cascadia Code", monospace; }
  1543. .version-actions { display: flex; gap: 7px; }
  1544. .version-actions button,
  1545. .plan-editor-heading button {
  1546. padding: 8px 11px;
  1547. color: #60778c;
  1548. border: 1px solid #d8e2eb;
  1549. border-radius: 7px;
  1550. background: #fff;
  1551. cursor: pointer;
  1552. font-size: 8px;
  1553. }
  1554. .version-actions button.primary { color: #fff; border-color: #146ce5; background: #146ce5; }
  1555. .immutable-notice {
  1556. display: flex;
  1557. align-items: center;
  1558. gap: 11px;
  1559. margin: 18px 0;
  1560. padding: 12px 14px;
  1561. color: #536b7e;
  1562. border: 1px solid #dbe5ed;
  1563. border-radius: 10px;
  1564. background: #f5f7f9;
  1565. }
  1566. .immutable-notice.editable { border-color: #d5e9df; background: #f1faf6; }
  1567. .immutable-notice > i { display: grid; place-items: center; width: 28px; height: 28px; color: #198463; border-radius: 8px; background: #fff; font-style: normal; }
  1568. .immutable-notice > span { display: grid; gap: 3px; }
  1569. .immutable-notice strong { font-size: 9px; }
  1570. .immutable-notice small { color: #8a99a7; font-size: 8px; }
  1571. .version-form-grid,
  1572. .plan-form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 13px; }
  1573. .plan-editor-heading { display: flex; align-items: flex-end; justify-content: space-between; gap: 18px; margin: 26px 0 12px; }
  1574. .plan-editor-heading small { color: #1684ba; font: 8px "Cascadia Code", monospace; letter-spacing: .14em; }
  1575. .plan-editor-heading h3 { margin: 5px 0 0; color: #27445f; font-size: 16px; }
  1576. .plan-editor-heading button { color: #176cad; border-color: #cee0ee; background: #f5faff; }
  1577. .plan-editor-list { display: grid; gap: 11px; }
  1578. .plan-editor-list > article { padding: 16px; border: 1px solid #e0e7ee; border-radius: 12px; background: #fbfcfd; }
  1579. .plan-editor-list > article > header { display: flex; align-items: center; gap: 8px; margin-bottom: 14px; }
  1580. .plan-editor-list > article > header > span { margin-right: auto; color: #1684ba; font: 8px "Cascadia Code", monospace; letter-spacing: .13em; }
  1581. .plan-editor-list > article > header select { padding: 5px 7px; color: #567085; border: 1px solid #d9e3eb; border-radius: 6px; background: #fff; font-size: 8px; }
  1582. .plan-editor-list > article > header button { color: #a65656; border: 0; background: transparent; cursor: pointer; font-size: 8px; }
  1583. .version-save-footer { display: flex; align-items: center; justify-content: space-between; gap: 18px; margin-top: 18px; padding: 16px 0 0; border-top: 1px solid #edf1f5; }
  1584. .version-save-footer span { color: #8d9ba8; font-size: 8px; }
  1585. .product-log-panel { padding: 25px; }
  1586. .product-log-panel > .product-section-heading { padding-bottom: 18px; border-bottom: 1px solid #edf1f5; }
  1587. .product-log-list { position: relative; display: grid; padding: 18px 0 0 7px; }
  1588. .product-log-list::before { position: absolute; top: 18px; bottom: 15px; left: 12px; width: 1px; background: #dce6ee; content: ""; }
  1589. .product-log-list article { position: relative; display: grid; grid-template-columns: 12px 1fr auto; gap: 15px; align-items: start; padding: 0 6px 20px 0; }
  1590. .product-log-list article > i { z-index: 1; width: 11px; height: 11px; margin-top: 4px; border: 3px solid #eef7fd; border-radius: 50%; background: #1684ba; box-sizing: border-box; }
  1591. .product-log-list article > div { display: grid; gap: 5px; }
  1592. .product-log-list strong { color: #31506a; font-size: 10px; }
  1593. .product-log-list p { margin: 0; color: #91a0ad; font-size: 8px; }
  1594. .product-log-list code { color: #4b7795; font: 8px "Cascadia Code", monospace; }
  1595. .product-log-empty { padding: 46px 20px; color: #91a0ad; text-align: center; font-size: 10px; }
  1596. @media (max-width: 760px) {
  1597. .product-heading-actions { align-items: flex-end; flex-direction: column-reverse; }
  1598. .product-creator { width: 100vw; padding: 0 18px 34px; }
  1599. .creator-intro { align-items: flex-start; }
  1600. .creator-steps { grid-template-columns: 1fr 12px 1fr 12px 1fr; padding: 12px 8px; }
  1601. .creator-steps button { align-items: flex-start; flex-direction: column; gap: 5px; }
  1602. .creator-steps small { display: none; }
  1603. .creator-grid { grid-template-columns: 1fr; }
  1604. .creator-grid label.wide { grid-column: auto; }
  1605. .product-editor { width: 100vw; padding: 0 18px 34px; }
  1606. .product-editor-hero { align-items: flex-start; flex-direction: column; padding: 23px; }
  1607. .product-version-workspace { grid-template-columns: 1fr; }
  1608. .product-version-rail { border-right: 0; border-bottom: 1px solid #e3eaf1; }
  1609. .product-version-rail > button { display: inline-grid; width: calc(50% - 4px); margin-right: 4px; vertical-align: top; }
  1610. .product-version-editor { padding: 18px; }
  1611. .product-profile-form,
  1612. .version-form-grid,
  1613. .plan-form-grid { grid-template-columns: 1fr; }
  1614. .product-profile-form label.wide,
  1615. .version-form-grid label.wide,
  1616. .plan-form-grid label.wide { grid-column: auto; }
  1617. .version-control-bar,
  1618. .version-save-footer { align-items: flex-start; flex-direction: column; }
  1619. }
  1620. .attribution-metrics {
  1621. display: grid;
  1622. grid-template-columns: repeat(4, minmax(0, 1fr));
  1623. gap: 14px;
  1624. margin-bottom: 18px;
  1625. }
  1626. .attribution-metrics article {
  1627. border: 1px solid #dce5ee;
  1628. border-radius: 15px;
  1629. background: #fff;
  1630. padding: 18px;
  1631. }
  1632. .attribution-metrics small { color: #7c8e9f; font-size: 10px; }
  1633. .attribution-metrics strong { display: block; margin: 8px 0 5px; color: #1f527e; font-size: 25px; }
  1634. .attribution-metrics span { color: #94a0ac; font-size: 9px; }
  1635. .attribution-layout {
  1636. display: grid;
  1637. grid-template-columns: minmax(0, 1fr) 310px;
  1638. gap: 18px;
  1639. }
  1640. .attribution-ranking { margin: 0; }
  1641. .attribution-table .table-head,
  1642. .attribution-table .table-row {
  1643. display: grid;
  1644. grid-template-columns: 1.2fr .9fr .7fr .9fr;
  1645. gap: 14px;
  1646. align-items: center;
  1647. }
  1648. .attribution-table .table-head {
  1649. border-bottom: 1px solid #e5ebf1;
  1650. background: #f6f8fb;
  1651. color: #76899b;
  1652. padding: 11px 15px;
  1653. font-size: 9px;
  1654. }
  1655. .attribution-table .table-row { border-bottom: 1px solid #edf1f5; padding: 14px 15px; }
  1656. .attribution-table .table-row > span { display: grid; gap: 4px; }
  1657. .attribution-table .table-row strong,
  1658. .attribution-table .table-row b { color: #304a62; font-size: 11px; }
  1659. .attribution-table .table-row small { color: #8e9ba8; font-size: 9px; }
  1660. .promotion-code-panel {
  1661. display: flex;
  1662. flex-direction: column;
  1663. gap: 12px;
  1664. border: 1px solid #dce5ee;
  1665. border-radius: 16px;
  1666. background: #f7fafe;
  1667. padding: 19px;
  1668. }
  1669. .promotion-code-panel h2 { margin: 4px 0 0; color: #233d55; font-size: 18px; }
  1670. .promotion-code-panel article {
  1671. border: 1px solid #d7e5f2;
  1672. border-radius: 12px;
  1673. background: #fff;
  1674. padding: 14px;
  1675. }
  1676. .promotion-code-panel article span { color: #7890a6; font-size: 9px; }
  1677. .promotion-code-panel article strong { display: block; margin: 7px 0; color: #215f95; font: 700 13px "Cascadia Code", monospace; }
  1678. .promotion-code-panel article p { margin: 0 0 9px; color: #74899d; font-size: 10px; }
  1679. .promotion-code-panel article code {
  1680. display: block;
  1681. overflow: hidden;
  1682. border-radius: 7px;
  1683. background: #eef4fa;
  1684. color: #607b93;
  1685. padding: 8px;
  1686. font-size: 8px;
  1687. text-overflow: ellipsis;
  1688. white-space: nowrap;
  1689. }
  1690. .page-heading {
  1691. display: flex;
  1692. align-items: flex-end;
  1693. justify-content: space-between;
  1694. gap: 28px;
  1695. padding: 18px 4px 28px;
  1696. }
  1697. .page-heading h1 {
  1698. margin: 10px 0 9px;
  1699. color: #17314c;
  1700. font-size: 38px;
  1701. font-weight: 650;
  1702. }
  1703. .page-heading > div > p:last-child { margin: 0; color: #74869a; font-size: 12px; }
  1704. .page-count {
  1705. display: grid;
  1706. min-width: 132px;
  1707. padding-left: 22px;
  1708. border-left: 1px solid #d5dee8;
  1709. color: #146ce5;
  1710. font: 34px "Cascadia Code", monospace;
  1711. }
  1712. .page-count small { margin-top: 2px; color: #8796a7; font: 9px "Microsoft YaHei UI", sans-serif; }
  1713. .data-panel { overflow: hidden; padding: 28px; }
  1714. .panel-heading { align-items: center; padding-bottom: 22px; }
  1715. .panel-heading h2 { margin: 0; }
  1716. .panel-heading p { margin: 6px 0 0; color: #8997a7; font-size: 10px; }
  1717. .data-table { border-top: 1px solid #e6ecf2; }
  1718. .table-head,
  1719. .table-row {
  1720. display: grid;
  1721. grid-template-columns: minmax(210px, 1.1fr) minmax(240px, 1.5fr) 110px 120px;
  1722. gap: 18px;
  1723. align-items: center;
  1724. min-height: 62px;
  1725. }
  1726. .table-head {
  1727. min-height: 44px;
  1728. color: #8a99a9;
  1729. background: #f8fafc;
  1730. border-bottom: 1px solid #e6ecf2;
  1731. font-size: 9px;
  1732. }
  1733. .table-head span:first-child,
  1734. .table-row > :first-child { padding-left: 14px; }
  1735. .table-row { border-bottom: 1px solid #edf1f5; }
  1736. .table-row:last-child { border-bottom: 0; }
  1737. .table-row strong { color: #28425c; font: 10px "Cascadia Code", monospace; }
  1738. .table-row small { overflow: hidden; color: #8998a8; font: 9px "Cascadia Code", monospace; text-overflow: ellipsis; }
  1739. .table-row > b { color: #174a7c; font-size: 11px; }
  1740. .data-table button.table-row {
  1741. width: 100%;
  1742. padding: 0;
  1743. color: inherit;
  1744. border-top: 0;
  1745. border-right: 0;
  1746. border-left: 0;
  1747. background: #ffffff;
  1748. text-align: left;
  1749. cursor: pointer;
  1750. transition: background .18s, transform .18s;
  1751. }
  1752. .data-table button.table-row:hover {
  1753. position: relative;
  1754. z-index: 1;
  1755. background: #f7faff;
  1756. box-shadow: inset 3px 0 #146ce5;
  1757. }
  1758. .orders-table .table-head,
  1759. .orders-table .table-row,
  1760. .policies-table .table-head,
  1761. .policies-table .table-row {
  1762. grid-template-columns:
  1763. minmax(230px, 1.35fr) minmax(140px, .75fr) minmax(150px, .75fr)
  1764. 84px 110px 86px;
  1765. }
  1766. .primary-cell,
  1767. .person-cell {
  1768. display: grid;
  1769. min-width: 0;
  1770. gap: 5px;
  1771. }
  1772. .primary-cell strong,
  1773. .person-cell strong,
  1774. .primary-cell small,
  1775. .person-cell small {
  1776. overflow: hidden;
  1777. text-overflow: ellipsis;
  1778. white-space: nowrap;
  1779. }
  1780. .primary-cell strong { color: #1e4265; font: 10px "Cascadia Code", monospace; }
  1781. .primary-cell small { color: #6d8298; font-family: "Microsoft YaHei UI", sans-serif; }
  1782. .person-cell strong { color: #344d65; font-family: "Microsoft YaHei UI", sans-serif; }
  1783. .table-row time { color: #72859a; font-size: 9px; line-height: 1.5; }
  1784. .detail-link { color: #146ce5; font-size: 9px; font-weight: 650; }
  1785. .user-toolbar {
  1786. display: flex;
  1787. align-items: center;
  1788. justify-content: space-between;
  1789. gap: 20px;
  1790. margin-bottom: 16px;
  1791. }
  1792. .user-tabs {
  1793. display: inline-flex;
  1794. gap: 4px;
  1795. padding: 4px;
  1796. border: 1px solid #dfe6ee;
  1797. border-radius: 10px;
  1798. background: #eaf0f6;
  1799. }
  1800. .user-tabs button {
  1801. display: flex;
  1802. align-items: center;
  1803. gap: 8px;
  1804. padding: 9px 13px;
  1805. color: #718398;
  1806. border: 0;
  1807. border-radius: 7px;
  1808. background: transparent;
  1809. cursor: pointer;
  1810. font-size: 10px;
  1811. }
  1812. .user-tabs button.active { color: #174d83; background: #ffffff; box-shadow: 0 5px 14px #274c7412; font-weight: 650; }
  1813. .user-tabs span {
  1814. display: grid;
  1815. place-items: center;
  1816. min-width: 20px;
  1817. height: 18px;
  1818. padding: 0 5px;
  1819. border-radius: 9px;
  1820. background: #dfe7ef;
  1821. font: 8px "Cascadia Code", monospace;
  1822. }
  1823. .user-tabs button.active span { color: #146ce5; background: #e8f2ff; }
  1824. .create-account-button {
  1825. display: inline-flex;
  1826. align-items: center;
  1827. gap: 7px;
  1828. padding: 10px 15px;
  1829. color: #ffffff;
  1830. border: 0;
  1831. border-radius: 9px;
  1832. background: #146ce5;
  1833. box-shadow: 0 9px 22px #146ce526;
  1834. cursor: pointer;
  1835. font-size: 10px;
  1836. font-weight: 650;
  1837. }
  1838. .create-account-button span { font-size: 15px; font-weight: 400; }
  1839. .user-panel { min-height: 420px; }
  1840. .user-table { margin-top: 4px; border-top: 1px solid #e6ecf2; }
  1841. .user-table-head,
  1842. .user-table-row {
  1843. display: grid;
  1844. grid-template-columns: minmax(220px, 1.3fr) minmax(130px, .75fr) 120px 90px 70px;
  1845. gap: 18px;
  1846. align-items: center;
  1847. min-height: 66px;
  1848. }
  1849. .user-table-head {
  1850. min-height: 44px;
  1851. color: #8a99a9;
  1852. background: #f8fafc;
  1853. border-bottom: 1px solid #e6ecf2;
  1854. font-size: 9px;
  1855. }
  1856. .user-table-head > span:first-child,
  1857. .user-table-row > :first-child { padding-left: 14px; }
  1858. .user-table-row { border-bottom: 1px solid #edf1f5; }
  1859. .user-table-row:last-child { border-bottom: 0; }
  1860. .user-identity { display: flex; align-items: center; gap: 11px; min-width: 0; }
  1861. .user-identity > span {
  1862. display: grid;
  1863. place-items: center;
  1864. flex: none;
  1865. width: 34px;
  1866. height: 34px;
  1867. color: #146ce5;
  1868. border-radius: 10px;
  1869. background: #edf5ff;
  1870. font-weight: 700;
  1871. }
  1872. .user-identity > div { min-width: 0; display: grid; gap: 3px; }
  1873. .user-identity strong { color: #2a445e; font-size: 11px; }
  1874. .user-identity small { overflow: hidden; color: #94a1af; font: 8px "Cascadia Code", monospace; text-overflow: ellipsis; }
  1875. .role-chip {
  1876. width: fit-content;
  1877. padding: 5px 8px;
  1878. color: #5e579d;
  1879. border-radius: 12px;
  1880. background: #f0edfb;
  1881. font: 8px "Cascadia Code", monospace;
  1882. }
  1883. .user-table-row code { color: #4d6d8d; font: 9px "Cascadia Code", monospace; }
  1884. .user-table-row time { color: #6f8296; font-size: 9px; }
  1885. .account-status { display: inline-flex; align-items: center; gap: 6px; color: #147a5f; font-size: 9px; }
  1886. .account-status i { width: 6px; height: 6px; border-radius: 50%; background: #20a478; box-shadow: 0 0 0 4px #20a47810; }
  1887. .account-status.disabled { color: #8a96a3; }
  1888. .account-status.disabled i { background: #9ba6b1; box-shadow: none; }
  1889. .maintain-button {
  1890. width: fit-content;
  1891. padding: 6px 9px;
  1892. color: #1462b8;
  1893. border: 1px solid #d6e4f2;
  1894. border-radius: 7px;
  1895. background: #f6faff;
  1896. cursor: pointer;
  1897. font-size: 9px;
  1898. }
  1899. .maintain-button:disabled { color: #a0aab5; background: #f1f3f5; cursor: not-allowed; }
  1900. .account-editor {
  1901. width: min(520px, 94vw);
  1902. height: 100vh;
  1903. overflow-y: auto;
  1904. padding: 0 34px 38px;
  1905. background: #f7f9fc;
  1906. box-shadow: -20px 0 70px #102b492e;
  1907. animation: drawer-in .32s cubic-bezier(.2, .7, .2, 1) both;
  1908. }
  1909. .account-form {
  1910. display: grid;
  1911. gap: 18px;
  1912. margin-top: 26px;
  1913. padding: 26px;
  1914. border: 1px solid #e0e7ef;
  1915. border-radius: 15px;
  1916. background: #ffffff;
  1917. }
  1918. .account-form label { display: grid; gap: 8px; color: #52677d; font-size: 10px; }
  1919. .account-form input,
  1920. .account-form select,
  1921. .password-reset-panel input {
  1922. width: 100%;
  1923. padding: 11px 12px;
  1924. color: #2c4965;
  1925. border: 1px solid #d9e3ed;
  1926. border-radius: 8px;
  1927. outline: 0;
  1928. background: #f8fafc;
  1929. font-size: 11px;
  1930. }
  1931. .account-form input:focus,
  1932. .account-form select:focus,
  1933. .password-reset-panel input:focus { border-color: #146ce5; box-shadow: 0 0 0 3px #146ce512; background: #ffffff; }
  1934. .account-form input:disabled,
  1935. .account-form select:disabled { color: #8d99a6; cursor: not-allowed; }
  1936. .account-form label > small { color: #a07b45; font-size: 8px; }
  1937. .account-primary {
  1938. padding: 12px 15px;
  1939. color: #ffffff;
  1940. border: 0;
  1941. border-radius: 8px;
  1942. background: #146ce5;
  1943. box-shadow: 0 9px 22px #146ce526;
  1944. cursor: pointer;
  1945. font-size: 11px;
  1946. font-weight: 650;
  1947. }
  1948. .account-primary:disabled { color: #a0aab4; background: #e7ecf1; box-shadow: none; cursor: not-allowed; }
  1949. .form-message { margin: 0; color: #168060; font-size: 9px; }
  1950. .form-message.error { padding: 9px 10px; color: #a64452; border-radius: 7px; background: #fff1f3; }
  1951. .password-reset-panel {
  1952. display: grid;
  1953. grid-template-columns: 1fr auto;
  1954. gap: 12px;
  1955. margin-top: 16px;
  1956. padding: 24px;
  1957. border: 1px solid #e0e7ef;
  1958. border-radius: 15px;
  1959. background: #ffffff;
  1960. }
  1961. .password-reset-panel > div { grid-column: 1 / -1; }
  1962. .password-reset-panel strong { color: #304b66; font-size: 11px; }
  1963. .password-reset-panel p { margin: 5px 0 0; color: #8b98a6; font-size: 8px; }
  1964. .password-reset-panel button {
  1965. padding: 0 14px;
  1966. color: #1462b8;
  1967. border: 1px solid #cfe0f1;
  1968. border-radius: 8px;
  1969. background: #f2f8ff;
  1970. cursor: pointer;
  1971. font-size: 9px;
  1972. }
  1973. .password-reset-panel button:disabled { color: #a1abb5; border-color: #e1e6eb; background: #f1f3f5; cursor: not-allowed; }
  1974. .password-reset-panel > .form-message { grid-column: 1 / -1; }
  1975. .confirm-backdrop {
  1976. position: fixed;
  1977. inset: 0;
  1978. z-index: 30;
  1979. display: grid;
  1980. place-items: center;
  1981. padding: 20px;
  1982. background: #0b203a52;
  1983. backdrop-filter: blur(4px);
  1984. animation: fade-in .2s ease both;
  1985. }
  1986. .confirm-dialog {
  1987. width: min(410px, 100%);
  1988. padding: 32px;
  1989. border: 1px solid #dfe7ef;
  1990. border-radius: 17px;
  1991. background: #ffffff;
  1992. box-shadow: 0 28px 80px #0f2c4a30;
  1993. }
  1994. .confirm-symbol {
  1995. display: grid;
  1996. place-items: center;
  1997. width: 42px;
  1998. height: 42px;
  1999. margin-bottom: 20px;
  2000. color: #a66b18;
  2001. border-radius: 12px;
  2002. background: #fff4df;
  2003. font-weight: 700;
  2004. }
  2005. .confirm-dialog h2 { margin: 10px 0; color: #263f58; font-size: 22px; }
  2006. .confirm-dialog > p:not(.eyebrow) { margin: 0; color: #748598; font-size: 11px; line-height: 1.8; }
  2007. .confirm-dialog > div { display: flex; justify-content: flex-end; gap: 9px; margin-top: 26px; }
  2008. .confirm-dialog button {
  2009. padding: 9px 15px;
  2010. color: #61758a;
  2011. border: 1px solid #d8e1ea;
  2012. border-radius: 8px;
  2013. background: #ffffff;
  2014. cursor: pointer;
  2015. font-size: 10px;
  2016. }
  2017. .confirm-dialog button.danger { color: #ffffff; border-color: #b44b58; background: #b44b58; }
  2018. .role-summary {
  2019. display: grid;
  2020. grid-template-columns: repeat(3, 1fr);
  2021. gap: 14px;
  2022. margin-bottom: 16px;
  2023. }
  2024. .role-summary article {
  2025. display: grid;
  2026. grid-template-columns: 1fr auto;
  2027. gap: 5px 18px;
  2028. padding: 20px 22px;
  2029. border: 1px solid #e0e7ef;
  2030. border-radius: 14px;
  2031. background: #ffffff;
  2032. }
  2033. .role-summary small { color: #74869a; font-size: 10px; }
  2034. .role-summary strong { grid-row: span 2; color: #146ce5; font: 28px "Cascadia Code", monospace; }
  2035. .role-summary span { color: #9aa7b5; font-size: 9px; }
  2036. .role-manager {
  2037. display: grid;
  2038. grid-template-columns: 280px minmax(0, 1fr);
  2039. min-height: 610px;
  2040. overflow: hidden;
  2041. border: 1px solid #e0e7ef;
  2042. border-radius: 18px;
  2043. background: #ffffff;
  2044. box-shadow: 0 12px 38px #21466e0c;
  2045. }
  2046. .role-list {
  2047. padding: 26px 18px;
  2048. border-right: 1px solid #e8edf3;
  2049. background: #f9fbfd;
  2050. }
  2051. .role-list-heading { padding: 0 10px 18px; }
  2052. .role-list-heading h2 { margin: 8px 0 0; color: #243e58; font-size: 20px; }
  2053. .role-list > button {
  2054. display: grid;
  2055. grid-template-columns: 40px minmax(0, 1fr) auto;
  2056. gap: 11px;
  2057. align-items: center;
  2058. width: 100%;
  2059. min-height: 68px;
  2060. margin-top: 7px;
  2061. padding: 10px 12px;
  2062. color: #536a82;
  2063. border: 1px solid transparent;
  2064. border-radius: 11px;
  2065. background: transparent;
  2066. text-align: left;
  2067. cursor: pointer;
  2068. }
  2069. .role-list > button:hover { background: #ffffff; }
  2070. .role-list > button.active {
  2071. color: #174f87;
  2072. border-color: #d8e6f5;
  2073. background: #ffffff;
  2074. box-shadow: 0 9px 24px #21466e0c;
  2075. }
  2076. .role-list > button > span {
  2077. display: grid;
  2078. place-items: center;
  2079. width: 38px;
  2080. height: 38px;
  2081. color: #146ce5;
  2082. border-radius: 10px;
  2083. background: #edf5ff;
  2084. font-weight: 700;
  2085. }
  2086. .role-list > button > div { min-width: 0; display: grid; gap: 4px; }
  2087. .role-list > button strong { font-size: 12px; }
  2088. .role-list > button small { color: #98a5b4; font: 8px "Cascadia Code", monospace; }
  2089. .role-list > button i,
  2090. .role-list > button b {
  2091. padding: 4px 7px;
  2092. color: #7c8b9b;
  2093. border-radius: 10px;
  2094. background: #eef2f6;
  2095. font: normal 8px "Microsoft YaHei UI", sans-serif;
  2096. }
  2097. .role-list > button b { min-width: 24px; text-align: center; }
  2098. .role-editor { display: flex; min-width: 0; flex-direction: column; padding: 34px; }
  2099. .role-editor-heading {
  2100. display: flex;
  2101. justify-content: space-between;
  2102. gap: 20px;
  2103. padding-bottom: 24px;
  2104. border-bottom: 1px solid #e8edf3;
  2105. }
  2106. .role-editor-heading h2 { margin: 9px 0 4px; color: #203b57; font-size: 26px; }
  2107. .role-editor-heading > div > p:last-child { margin: 0; color: #8795a5; font: 9px "Cascadia Code", monospace; }
  2108. .protected-badge,
  2109. .editable-badge {
  2110. display: inline-flex;
  2111. align-items: center;
  2112. align-self: flex-start;
  2113. gap: 6px;
  2114. padding: 7px 10px;
  2115. border-radius: 14px;
  2116. font-size: 9px;
  2117. }
  2118. .protected-badge { color: #78684e; background: #f7f2e9; }
  2119. .editable-badge { color: #0b7b5c; background: #eaf8f3; }
  2120. .editable-badge i { width: 6px; height: 6px; border-radius: 50%; background: #22a77a; }
  2121. .scope-editor {
  2122. display: flex;
  2123. align-items: center;
  2124. justify-content: space-between;
  2125. gap: 24px;
  2126. padding: 25px 0;
  2127. border-bottom: 1px solid #e8edf3;
  2128. }
  2129. .scope-editor strong,
  2130. .permission-editor-heading strong { color: #314a62; font-size: 12px; }
  2131. .scope-editor p,
  2132. .permission-editor-heading p { margin: 5px 0 0; color: #8a98a8; font-size: 9px; }
  2133. .scope-editor select {
  2134. min-width: 220px;
  2135. padding: 10px 34px 10px 12px;
  2136. color: #31516f;
  2137. border: 1px solid #d7e1eb;
  2138. border-radius: 8px;
  2139. outline: 0;
  2140. background: #f8fafc;
  2141. font-size: 10px;
  2142. }
  2143. .scope-editor select:focus { border-color: #146ce5; box-shadow: 0 0 0 3px #146ce512; }
  2144. .scope-editor select:disabled { color: #8a98a8; cursor: not-allowed; }
  2145. .permission-editor { padding-top: 24px; }
  2146. .permission-editor-heading { display: flex; justify-content: space-between; align-items: flex-start; }
  2147. .permission-editor-heading > span { color: #146ce5; font: 10px "Cascadia Code", monospace; }
  2148. .permission-matrix {
  2149. display: grid;
  2150. grid-template-columns: repeat(2, minmax(0, 1fr));
  2151. gap: 10px;
  2152. margin-top: 18px;
  2153. }
  2154. .permission-matrix button {
  2155. display: grid;
  2156. grid-template-columns: 24px minmax(0, 1fr);
  2157. gap: 10px;
  2158. align-items: center;
  2159. min-height: 62px;
  2160. padding: 10px 12px;
  2161. color: #526980;
  2162. border: 1px solid #e1e8ef;
  2163. border-radius: 10px;
  2164. background: #fafbfd;
  2165. text-align: left;
  2166. cursor: pointer;
  2167. }
  2168. .permission-matrix button:hover:not(:disabled) { border-color: #bed5ef; background: #f5f9fe; }
  2169. .permission-matrix button.selected { border-color: #bdd7f4; background: #f0f7ff; }
  2170. .permission-matrix button:disabled { cursor: not-allowed; opacity: .74; }
  2171. .permission-matrix button > i {
  2172. display: grid;
  2173. place-items: center;
  2174. width: 22px;
  2175. height: 22px;
  2176. color: transparent;
  2177. border: 1px solid #cdd8e3;
  2178. border-radius: 6px;
  2179. background: #ffffff;
  2180. font: normal 10px sans-serif;
  2181. }
  2182. .permission-matrix button.selected > i { color: #ffffff; border-color: #146ce5; background: #146ce5; }
  2183. .permission-matrix button > span { min-width: 0; display: grid; gap: 5px; }
  2184. .permission-matrix strong { color: #39516a; font-size: 10px; }
  2185. .permission-matrix small { overflow: hidden; color: #8997a7; font: 8px "Cascadia Code", monospace; text-overflow: ellipsis; }
  2186. .role-editor-footer {
  2187. display: flex;
  2188. align-items: center;
  2189. justify-content: space-between;
  2190. gap: 20px;
  2191. margin-top: auto;
  2192. padding-top: 28px;
  2193. }
  2194. .role-editor-footer p { margin: 0; color: #8795a5; font-size: 9px; }
  2195. .role-editor-footer p.success { color: #0b805f; }
  2196. .role-editor-footer button {
  2197. min-width: 150px;
  2198. padding: 11px 16px;
  2199. color: #ffffff;
  2200. border: 0;
  2201. border-radius: 8px;
  2202. background: #146ce5;
  2203. box-shadow: 0 9px 22px #146ce526;
  2204. cursor: pointer;
  2205. font-size: 11px;
  2206. font-weight: 650;
  2207. }
  2208. .role-editor-footer button:disabled { color: #9ba8b5; background: #e8edf2; box-shadow: none; cursor: not-allowed; }
  2209. .detail-backdrop {
  2210. position: fixed;
  2211. inset: 0;
  2212. z-index: 20;
  2213. display: flex;
  2214. justify-content: flex-end;
  2215. background: #0b203a52;
  2216. backdrop-filter: blur(3px);
  2217. animation: fade-in .2s ease both;
  2218. }
  2219. .detail-drawer {
  2220. width: min(640px, 94vw);
  2221. height: 100vh;
  2222. overflow-y: auto;
  2223. padding: 0 34px 38px;
  2224. background: #f7f9fc;
  2225. box-shadow: -20px 0 70px #102b492e;
  2226. animation: drawer-in .32s cubic-bezier(.2, .7, .2, 1) both;
  2227. }
  2228. .detail-header {
  2229. position: sticky;
  2230. top: 0;
  2231. z-index: 2;
  2232. display: flex;
  2233. align-items: center;
  2234. justify-content: space-between;
  2235. min-height: 92px;
  2236. padding: 0;
  2237. border-bottom: 1px solid #dfe6ee;
  2238. background: #f7f9fcf2;
  2239. backdrop-filter: blur(14px);
  2240. }
  2241. .detail-header h2 { margin: 7px 0 0; color: #1c3956; font-size: 24px; }
  2242. .detail-header > button {
  2243. display: grid;
  2244. place-items: center;
  2245. width: 36px;
  2246. height: 36px;
  2247. color: #60758a;
  2248. border: 1px solid #d8e1ea;
  2249. border-radius: 50%;
  2250. background: #ffffff;
  2251. cursor: pointer;
  2252. font-size: 23px;
  2253. font-weight: 300;
  2254. }
  2255. .detail-hero {
  2256. display: flex;
  2257. align-items: flex-end;
  2258. justify-content: space-between;
  2259. gap: 24px;
  2260. margin-top: 26px;
  2261. padding: 28px;
  2262. overflow: hidden;
  2263. border-radius: 16px;
  2264. background:
  2265. radial-gradient(circle at 90% 20%, #80d5ee38, transparent 32%),
  2266. linear-gradient(135deg, #0d4e91, #0b7f9d);
  2267. color: #ffffff;
  2268. }
  2269. .detail-hero h3 { margin: 18px 0 5px; font-size: 23px; }
  2270. .detail-hero p { margin: 0; color: #cde6f3; font-size: 11px; }
  2271. .detail-hero > strong { flex: none; color: #ffffff; font-size: 24px; }
  2272. .detail-hero .status-pill { color: #d7fff2; background: #ffffff18; border: 1px solid #ffffff2b; }
  2273. .detail-section {
  2274. margin-top: 16px;
  2275. padding: 24px;
  2276. border: 1px solid #e0e7ef;
  2277. border-radius: 14px;
  2278. background: #ffffff;
  2279. }
  2280. .detail-section-title {
  2281. margin: 0 0 18px;
  2282. color: #25435f;
  2283. font-size: 12px;
  2284. font-weight: 700;
  2285. }
  2286. .detail-grid {
  2287. display: grid;
  2288. grid-template-columns: repeat(2, minmax(0, 1fr));
  2289. gap: 17px 24px;
  2290. margin: 0;
  2291. }
  2292. .detail-grid div { min-width: 0; }
  2293. .detail-grid dt { color: #8b98a8; font-size: 9px; }
  2294. .detail-grid dd {
  2295. overflow: hidden;
  2296. margin: 6px 0 0;
  2297. color: #314b64;
  2298. font: 10px "Cascadia Code", "Microsoft YaHei UI", monospace;
  2299. line-height: 1.5;
  2300. overflow-wrap: anywhere;
  2301. }
  2302. .detail-empty { padding: 14px; color: #8795a5; border-radius: 8px; background: #f7f9fb; font-size: 10px; }
  2303. .order-timeline {
  2304. display: grid;
  2305. grid-template-columns: repeat(3, 1fr);
  2306. margin-top: 16px;
  2307. padding: 24px;
  2308. border: 1px solid #e0e7ef;
  2309. border-radius: 14px;
  2310. background: #ffffff;
  2311. }
  2312. .order-timeline > div { position: relative; display: flex; gap: 9px; }
  2313. .order-timeline > div:not(:last-child)::after {
  2314. position: absolute;
  2315. top: 11px;
  2316. left: 23px;
  2317. right: -4px;
  2318. height: 1px;
  2319. background: #dce4ec;
  2320. content: "";
  2321. }
  2322. .order-timeline i {
  2323. position: relative;
  2324. z-index: 1;
  2325. display: grid;
  2326. place-items: center;
  2327. flex: none;
  2328. width: 22px;
  2329. height: 22px;
  2330. color: #a0acb8;
  2331. border-radius: 50%;
  2332. background: #edf1f5;
  2333. font: normal 9px sans-serif;
  2334. }
  2335. .order-timeline .complete i { color: #ffffff; background: #178c6c; }
  2336. .order-timeline span { position: relative; z-index: 1; display: grid; gap: 4px; padding-right: 8px; background: #ffffff; }
  2337. .order-timeline strong { color: #496078; font-size: 9px; }
  2338. .order-timeline small { color: #94a0ad; font-size: 8px; }
  2339. .policy-certificate {
  2340. position: relative;
  2341. min-height: 230px;
  2342. margin-top: 26px;
  2343. padding: 34px;
  2344. overflow: hidden;
  2345. color: #ffffff;
  2346. border-radius: 17px;
  2347. background:
  2348. linear-gradient(115deg, #0a477e 0%, #116ec1 58%, #10a0ae 100%);
  2349. box-shadow: 0 20px 42px #1264a929;
  2350. }
  2351. .policy-certificate::after {
  2352. position: absolute;
  2353. right: -55px;
  2354. bottom: -95px;
  2355. width: 260px;
  2356. height: 260px;
  2357. border: 1px solid #ffffff36;
  2358. border-radius: 50%;
  2359. box-shadow: 0 0 0 32px #ffffff0b, 0 0 0 64px #ffffff08;
  2360. content: "";
  2361. }
  2362. .certificate-mark {
  2363. position: relative;
  2364. z-index: 1;
  2365. display: grid;
  2366. place-items: center;
  2367. width: 38px;
  2368. height: 38px;
  2369. border: 1px solid #aee6f4;
  2370. font: 17px "Cascadia Code", monospace;
  2371. }
  2372. .policy-certificate p { position: relative; z-index: 1; margin: 17px 0 0; color: #bde6f3; font: 8px "Cascadia Code", monospace; letter-spacing: .16em; }
  2373. .policy-certificate h3 { position: relative; z-index: 1; margin: 15px 0 5px; font-size: 24px; }
  2374. .policy-certificate > span { position: relative; z-index: 1; color: #d3edf6; font-size: 11px; }
  2375. .policy-certificate > strong { position: relative; z-index: 1; display: block; margin-top: 24px; font: 11px "Cascadia Code", monospace; letter-spacing: .07em; }
  2376. .certificate-footer {
  2377. display: flex;
  2378. align-items: center;
  2379. justify-content: space-between;
  2380. gap: 18px;
  2381. margin-top: 16px;
  2382. padding: 18px 22px;
  2383. color: #18795f;
  2384. border: 1px solid #d9eae4;
  2385. border-radius: 12px;
  2386. background: #f2faf7;
  2387. }
  2388. .certificate-footer span { font-size: 10px; font-weight: 650; }
  2389. .certificate-footer i { display: inline-grid; place-items: center; width: 19px; height: 19px; margin-right: 6px; color: #ffffff; border-radius: 50%; background: #1c9a74; font: normal 8px sans-serif; }
  2390. .certificate-footer small { color: #789288; font-size: 8px; }
  2391. .access-grid {
  2392. display: grid;
  2393. grid-template-columns: 310px minmax(0, 1fr);
  2394. gap: 16px;
  2395. }
  2396. .identity-card { position: relative; overflow: hidden; padding: 34px; }
  2397. .identity-card::after {
  2398. position: absolute;
  2399. right: -40px;
  2400. bottom: -60px;
  2401. width: 170px;
  2402. height: 170px;
  2403. border: 24px solid #edf5ff;
  2404. border-radius: 50%;
  2405. content: "";
  2406. }
  2407. .identity-avatar {
  2408. position: relative;
  2409. z-index: 1;
  2410. display: grid;
  2411. place-items: center;
  2412. width: 62px;
  2413. height: 62px;
  2414. margin-bottom: 26px;
  2415. color: #ffffff;
  2416. border-radius: 18px;
  2417. background: linear-gradient(145deg, #146ce5, #0896ad);
  2418. box-shadow: 0 14px 28px #146ce52b;
  2419. font-size: 23px;
  2420. font-weight: 700;
  2421. }
  2422. .identity-card h2 { position: relative; z-index: 1; margin: 9px 0 5px; color: #1d3955; font-size: 24px; }
  2423. .identity-card > p:not(.eyebrow) { position: relative; z-index: 1; color: #74869a; font: 9px "Cascadia Code", monospace; }
  2424. .identity-card > div:last-child {
  2425. position: relative;
  2426. z-index: 1;
  2427. display: grid;
  2428. gap: 4px;
  2429. margin-top: 48px;
  2430. }
  2431. .identity-card > div:last-child span { color: #8796a6; font-size: 9px; }
  2432. .identity-card > div:last-child strong { color: #146ce5; font: 16px "Cascadia Code", monospace; }
  2433. .permission-panel { padding: 30px; }
  2434. .shield-mark {
  2435. display: grid;
  2436. place-items: center;
  2437. width: 36px;
  2438. height: 36px;
  2439. color: #14815f;
  2440. border-radius: 50%;
  2441. background: #eaf8f3;
  2442. font-weight: 700;
  2443. }
  2444. .permission-list {
  2445. display: grid;
  2446. grid-template-columns: repeat(2, minmax(0, 1fr));
  2447. gap: 10px;
  2448. margin-top: 28px;
  2449. }
  2450. .permission-list > span {
  2451. display: flex;
  2452. align-items: center;
  2453. gap: 10px;
  2454. min-height: 48px;
  2455. padding: 0 14px;
  2456. color: #476078;
  2457. border: 1px solid #e5ebf1;
  2458. border-radius: 10px;
  2459. background: #fafbfd;
  2460. font: 10px "Cascadia Code", monospace;
  2461. }
  2462. .permission-list i {
  2463. display: grid;
  2464. place-items: center;
  2465. flex: none;
  2466. width: 20px;
  2467. height: 20px;
  2468. color: #14815f;
  2469. border-radius: 50%;
  2470. background: #e9f7f2;
  2471. font: normal 9px sans-serif;
  2472. }
  2473. @keyframes enter {
  2474. from { opacity: 0; transform: translateY(14px); }
  2475. }
  2476. @keyframes auth-enter {
  2477. from { opacity: 0; transform: translateY(12px); }
  2478. }
  2479. @keyframes spin {
  2480. to { transform: rotate(360deg); }
  2481. }
  2482. @keyframes fade-in {
  2483. from { opacity: 0; }
  2484. }
  2485. @keyframes drawer-in {
  2486. from { opacity: 0; transform: translateX(28px); }
  2487. }
  2488. @media (max-width: 1280px) {
  2489. .admin-shell { grid-template-columns: 224px 1fr; }
  2490. .workspace { padding-right: 28px; padding-left: 28px; }
  2491. .metric-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  2492. .overview-grid { grid-template-columns: 1fr; }
  2493. .health-content { grid-template-columns: 160px 1fr; }
  2494. }
  2495. @media (max-width: 1040px) {
  2496. .auth-shell { grid-template-columns: minmax(350px, .85fr) minmax(460px, 1.15fr); }
  2497. .auth-brand-copy h1 { font-size: 46px; }
  2498. .auth-brand-panel { padding: 40px; }
  2499. .auth-form-panel { padding: 48px; }
  2500. .command-hero > img { width: 82%; opacity: .8; }
  2501. .hero-copy { width: 66%; }
  2502. .access-grid { grid-template-columns: 1fr; }
  2503. .table-head,
  2504. .table-row { grid-template-columns: minmax(180px, 1fr) minmax(180px, 1fr) 90px 100px; }
  2505. .orders-table,
  2506. .policies-table { min-width: 980px; }
  2507. .orders-table .table-head,
  2508. .orders-table .table-row,
  2509. .policies-table .table-head,
  2510. .policies-table .table-row {
  2511. grid-template-columns: 240px 150px 160px 84px 110px 86px;
  2512. }
  2513. .role-manager { grid-template-columns: 240px minmax(0, 1fr); }
  2514. .permission-matrix { grid-template-columns: 1fr; }
  2515. .user-panel { overflow-x: auto; }
  2516. .user-table { min-width: 780px; }
  2517. }
  2518. @media (max-width: 760px) {
  2519. .auth-shell { display: block; }
  2520. .auth-brand-panel { display: none; }
  2521. .auth-form-panel { min-height: 100vh; padding: 28px 20px; }
  2522. .login-card form, .session-card { padding: 22px; }
  2523. .login-heading h2, .session-card h2 { font-size: 28px; }
  2524. .admin-shell { grid-template-columns: 1fr; }
  2525. .admin-sidebar { display: none; }
  2526. .workspace { padding: 0 18px 30px; }
  2527. .topbar { min-height: 62px; }
  2528. .system-status { display: none; }
  2529. .dashboard,
  2530. .page-view { padding-top: 20px; }
  2531. .command-hero { min-height: 390px; }
  2532. .command-hero > img { inset: auto 0 0; width: 100%; height: 48%; opacity: .7; }
  2533. .command-hero::after { background: linear-gradient(#ffffff 0%, #fffffff5 52%, transparent 84%); }
  2534. .hero-copy { width: 100%; padding: 34px 28px; }
  2535. .hero-scope { display: none; }
  2536. .metric-grid { grid-template-columns: 1fr; }
  2537. .overview-card { padding: 22px; }
  2538. .compact-row { grid-template-columns: 32px minmax(0, 1fr) auto; }
  2539. .compact-row > b { display: none; }
  2540. .health-content { grid-template-columns: 1fr; justify-items: center; }
  2541. .health-details { width: 100%; }
  2542. .page-heading { align-items: flex-start; }
  2543. .page-count { display: none; }
  2544. .data-panel { padding: 20px; overflow-x: auto; }
  2545. .data-table { min-width: 720px; }
  2546. .permission-list { grid-template-columns: 1fr; }
  2547. .role-summary { grid-template-columns: 1fr; }
  2548. .role-manager { grid-template-columns: 1fr; }
  2549. .role-list { border-right: 0; border-bottom: 1px solid #e8edf3; }
  2550. .role-editor { padding: 24px; }
  2551. .scope-editor { align-items: flex-start; flex-direction: column; }
  2552. .scope-editor select { width: 100%; }
  2553. .role-editor-footer { align-items: stretch; flex-direction: column; }
  2554. .role-editor-footer button { width: 100%; }
  2555. .detail-drawer { width: 100vw; padding: 0 20px 28px; }
  2556. .detail-grid { grid-template-columns: 1fr; }
  2557. .order-timeline { grid-template-columns: 1fr; gap: 16px; }
  2558. .order-timeline > div:not(:last-child)::after { top: 20px; bottom: -18px; left: 11px; right: auto; width: 1px; height: auto; }
  2559. .certificate-footer { align-items: flex-start; flex-direction: column; }
  2560. .user-toolbar { align-items: stretch; flex-direction: column; }
  2561. .create-account-button { justify-content: center; }
  2562. .account-editor { width: 100vw; padding: 0 20px 28px; }
  2563. .password-reset-panel { grid-template-columns: 1fr; }
  2564. .password-reset-panel button { min-height: 40px; }
  2565. }
  2566. .agent-run-center {
  2567. margin-top: 22px;
  2568. padding: 24px;
  2569. border: 1px solid #e4eaf2;
  2570. border-radius: 22px;
  2571. background: #fff;
  2572. }
  2573. .agent-run-list {
  2574. display: grid;
  2575. gap: 10px;
  2576. margin-top: 18px;
  2577. }
  2578. .agent-run-list article {
  2579. display: grid;
  2580. grid-template-columns: minmax(240px, 1.5fr) auto minmax(220px, 1fr) auto;
  2581. align-items: center;
  2582. gap: 16px;
  2583. padding: 14px 16px;
  2584. border-radius: 14px;
  2585. background: #f7f9fc;
  2586. }
  2587. .agent-run-list article div,
  2588. .agent-run-list article small {
  2589. display: block;
  2590. }
  2591. .agent-run-list code {
  2592. overflow: hidden;
  2593. color: #596579;
  2594. text-overflow: ellipsis;
  2595. }
  2596. .agent-run-list a {
  2597. color: #146ce5;
  2598. font-weight: 700;
  2599. text-decoration: none;
  2600. }
  2601. @media (max-width: 900px) {
  2602. .agent-run-list article {
  2603. grid-template-columns: 1fr auto;
  2604. }
  2605. }
  2606. .agent-workspace-tabs {
  2607. display: flex;
  2608. gap: 6px;
  2609. width: fit-content;
  2610. margin: 4px 0 16px;
  2611. border: 1px solid #dce5ee;
  2612. border-radius: 15px;
  2613. background: #eaf0f6;
  2614. padding: 5px;
  2615. }
  2616. .agent-workspace-tabs button {
  2617. position: relative;
  2618. display: grid;
  2619. grid-template-columns: 34px auto auto;
  2620. align-items: center;
  2621. gap: 10px;
  2622. min-width: 218px;
  2623. border: 0;
  2624. border-radius: 11px;
  2625. background: transparent;
  2626. color: #66798c;
  2627. padding: 9px 12px;
  2628. text-align: left;
  2629. cursor: pointer;
  2630. transition:
  2631. color 0.2s ease,
  2632. background 0.2s ease,
  2633. box-shadow 0.2s ease,
  2634. transform 0.2s ease;
  2635. }
  2636. .agent-workspace-tabs button:hover {
  2637. color: #315d85;
  2638. }
  2639. .agent-workspace-tabs button.active {
  2640. background: #fff;
  2641. color: #174f7c;
  2642. box-shadow:
  2643. 0 7px 18px rgb(37 74 109 / 10%),
  2644. inset 0 0 0 1px rgb(173 198 221 / 55%);
  2645. }
  2646. .agent-workspace-tabs button.active::after {
  2647. position: absolute;
  2648. right: 18px;
  2649. bottom: -5px;
  2650. left: 18px;
  2651. height: 2px;
  2652. border-radius: 2px;
  2653. background: #2580cd;
  2654. content: "";
  2655. }
  2656. .agent-tab-icon {
  2657. display: grid;
  2658. width: 32px;
  2659. height: 32px;
  2660. place-items: center;
  2661. border: 1px solid #d4e0eb;
  2662. border-radius: 9px;
  2663. background: rgb(255 255 255 / 64%);
  2664. color: #4f779b;
  2665. font: 13px "Cascadia Code", monospace;
  2666. }
  2667. .agent-workspace-tabs button.active .agent-tab-icon {
  2668. border-color: #bfdaef;
  2669. background: #eef7ff;
  2670. color: #176eb7;
  2671. }
  2672. .agent-workspace-tabs button > span:nth-child(2) {
  2673. display: grid;
  2674. gap: 2px;
  2675. }
  2676. .agent-workspace-tabs strong {
  2677. font-size: 12px;
  2678. font-weight: 750;
  2679. }
  2680. .agent-workspace-tabs small {
  2681. color: #8a99a8;
  2682. font-size: 9px;
  2683. }
  2684. .agent-workspace-tabs button > b {
  2685. min-width: 24px;
  2686. border-radius: 999px;
  2687. background: #dfe7ef;
  2688. color: #62778a;
  2689. padding: 4px 7px;
  2690. text-align: center;
  2691. font: 700 9px "Cascadia Code", monospace;
  2692. }
  2693. .agent-workspace-tabs button.active > b {
  2694. background: #deeffd;
  2695. color: #176eb7;
  2696. }
  2697. .agent-run-workspace {
  2698. min-height: 620px;
  2699. margin-top: 0;
  2700. animation: agent-tab-enter 0.28s ease-out both;
  2701. }
  2702. .agent-run-summary {
  2703. display: grid;
  2704. grid-template-columns: repeat(3, minmax(0, 1fr));
  2705. gap: 12px;
  2706. margin: 22px 0 24px;
  2707. }
  2708. .agent-run-summary article {
  2709. position: relative;
  2710. overflow: hidden;
  2711. min-height: 118px;
  2712. border: 1px solid #e0e8f0;
  2713. border-radius: 15px;
  2714. background:
  2715. radial-gradient(circle at 88% 14%, rgb(37 128 205 / 10%), transparent 34%),
  2716. #f8fafc;
  2717. padding: 17px 18px;
  2718. }
  2719. .agent-run-summary article::after {
  2720. position: absolute;
  2721. right: -18px;
  2722. bottom: -28px;
  2723. width: 86px;
  2724. height: 86px;
  2725. border: 1px solid rgb(41 121 188 / 12%);
  2726. border-radius: 50%;
  2727. content: "";
  2728. }
  2729. .agent-run-summary small {
  2730. display: block;
  2731. color: #71879b;
  2732. font: 8px "Cascadia Code", monospace;
  2733. letter-spacing: 0.14em;
  2734. }
  2735. .agent-run-summary strong {
  2736. display: block;
  2737. margin-top: 10px;
  2738. color: #174f7c;
  2739. font-size: 28px;
  2740. letter-spacing: -0.04em;
  2741. }
  2742. .agent-run-summary span {
  2743. color: #8191a0;
  2744. font-size: 10px;
  2745. }
  2746. .agent-run-workspace .agent-run-list article {
  2747. grid-template-columns: 64px minmax(260px, 1.5fr) auto minmax(190px, 1fr) auto;
  2748. border: 1px solid transparent;
  2749. transition:
  2750. border-color 0.18s ease,
  2751. background 0.18s ease,
  2752. transform 0.18s ease;
  2753. }
  2754. .agent-run-workspace .agent-run-list article:hover {
  2755. border-color: #dce7f1;
  2756. background: #fff;
  2757. transform: translateY(-1px);
  2758. }
  2759. .agent-run-index {
  2760. color: #8a9aaa;
  2761. font: 700 9px "Cascadia Code", monospace;
  2762. letter-spacing: 0.08em;
  2763. }
  2764. @keyframes agent-tab-enter {
  2765. from {
  2766. opacity: 0;
  2767. transform: translateY(6px);
  2768. }
  2769. to {
  2770. opacity: 1;
  2771. transform: translateY(0);
  2772. }
  2773. }
  2774. @media (max-width: 900px) {
  2775. .agent-workspace-tabs {
  2776. width: 100%;
  2777. }
  2778. .agent-workspace-tabs button {
  2779. min-width: 0;
  2780. flex: 1;
  2781. }
  2782. .agent-run-summary {
  2783. grid-template-columns: 1fr;
  2784. }
  2785. .agent-run-workspace .agent-run-list article {
  2786. grid-template-columns: auto minmax(0, 1fr) auto;
  2787. }
  2788. .agent-run-workspace .agent-run-list code {
  2789. grid-column: 2 / -1;
  2790. }
  2791. }
  2792. @media (max-width: 560px) {
  2793. .agent-workspace-tabs button {
  2794. grid-template-columns: 30px 1fr;
  2795. }
  2796. .agent-workspace-tabs button > b,
  2797. .agent-workspace-tabs small {
  2798. display: none;
  2799. }
  2800. }
  2801. /* 运营智能体回答:白色运营简报 */
  2802. .operation-message.assistant {
  2803. width: min(840px, 97%);
  2804. overflow: hidden;
  2805. border-color: #dce5ef;
  2806. border-radius: 20px;
  2807. padding: 0;
  2808. box-shadow:
  2809. 0 18px 45px rgb(35 66 96 / 8%),
  2810. 0 2px 8px rgb(35 66 96 / 4%);
  2811. animation: agent-report-enter 0.36s ease-out both;
  2812. }
  2813. .operation-message.assistant > .message-label {
  2814. margin: 0;
  2815. border-bottom: 1px solid #edf1f5;
  2816. background:
  2817. linear-gradient(90deg, rgb(27 112 196 / 7%), transparent 45%),
  2818. #fff;
  2819. padding: 12px 22px;
  2820. color: #577089;
  2821. font-size: 10px;
  2822. letter-spacing: 0.08em;
  2823. }
  2824. .agent-report {
  2825. padding: 20px 22px 6px;
  2826. }
  2827. .agent-report-heading,
  2828. .agent-evidence-label {
  2829. display: flex;
  2830. align-items: center;
  2831. justify-content: space-between;
  2832. gap: 16px;
  2833. }
  2834. .agent-report-heading {
  2835. margin-bottom: 18px;
  2836. }
  2837. .agent-report-heading > span,
  2838. .agent-evidence-label > span {
  2839. color: #256fae;
  2840. font: 700 9px/1 "Cascadia Code", monospace;
  2841. letter-spacing: 0.16em;
  2842. }
  2843. .agent-report-heading small,
  2844. .agent-evidence-label small {
  2845. display: flex;
  2846. align-items: center;
  2847. gap: 7px;
  2848. color: #8a99a8;
  2849. font-size: 10px;
  2850. }
  2851. .agent-report-heading i {
  2852. width: 6px;
  2853. height: 6px;
  2854. border-radius: 50%;
  2855. background: #28a674;
  2856. box-shadow: 0 0 0 4px rgb(40 166 116 / 10%);
  2857. }
  2858. .report-heading {
  2859. position: relative;
  2860. margin: 21px 0 10px;
  2861. color: #173651;
  2862. font-weight: 720;
  2863. letter-spacing: -0.02em;
  2864. }
  2865. .report-heading.level-1 {
  2866. font-size: 20px;
  2867. }
  2868. .report-heading.level-2 {
  2869. padding-left: 12px;
  2870. font-size: 15px;
  2871. }
  2872. .report-heading.level-2::before {
  2873. position: absolute;
  2874. top: 3px;
  2875. bottom: 3px;
  2876. left: 0;
  2877. width: 3px;
  2878. border-radius: 4px;
  2879. background: #2b83d5;
  2880. content: "";
  2881. }
  2882. .report-heading.level-3 {
  2883. color: #31516e;
  2884. font-size: 13px;
  2885. }
  2886. .report-paragraph {
  2887. margin: 0 0 12px;
  2888. color: #425a70;
  2889. font-size: 13px;
  2890. line-height: 1.85;
  2891. }
  2892. .report-paragraph strong,
  2893. .report-list strong,
  2894. .report-table strong {
  2895. color: #153f64;
  2896. font-weight: 750;
  2897. }
  2898. .report-paragraph code,
  2899. .report-list code {
  2900. border: 1px solid #dae7f3;
  2901. border-radius: 5px;
  2902. background: #f4f8fc;
  2903. color: #256da9;
  2904. padding: 1px 5px;
  2905. font: 10px "Cascadia Code", monospace;
  2906. }
  2907. .report-paragraph.emphasized {
  2908. position: relative;
  2909. margin: 6px 0 18px;
  2910. border: 1px solid #d8e8f7;
  2911. border-radius: 13px;
  2912. background: linear-gradient(135deg, #f4f9ff, #fbfdff);
  2913. padding: 13px 15px 13px 42px;
  2914. color: #244966;
  2915. }
  2916. .report-paragraph.emphasized::before {
  2917. position: absolute;
  2918. top: 13px;
  2919. left: 14px;
  2920. display: grid;
  2921. width: 19px;
  2922. height: 19px;
  2923. place-items: center;
  2924. border-radius: 6px;
  2925. background: #2b7fc8;
  2926. color: #fff;
  2927. content: "↗";
  2928. font-size: 10px;
  2929. }
  2930. .report-list {
  2931. display: grid;
  2932. gap: 9px;
  2933. margin: 4px 0 17px;
  2934. padding-left: 22px;
  2935. color: #425a70;
  2936. font-size: 12px;
  2937. line-height: 1.75;
  2938. }
  2939. .report-list li {
  2940. padding-left: 4px;
  2941. }
  2942. .report-list li::marker {
  2943. color: #3183c9;
  2944. font-weight: 800;
  2945. }
  2946. .report-table-wrap {
  2947. overflow-x: auto;
  2948. margin: 12px 0 18px;
  2949. border: 1px solid #dfe7ef;
  2950. border-radius: 13px;
  2951. }
  2952. .report-table {
  2953. width: 100%;
  2954. border-collapse: collapse;
  2955. color: #405a71;
  2956. font-size: 11px;
  2957. }
  2958. .report-table th,
  2959. .report-table td {
  2960. min-width: 110px;
  2961. border-bottom: 1px solid #edf1f5;
  2962. padding: 11px 13px;
  2963. text-align: left;
  2964. }
  2965. .report-table th {
  2966. background: #f5f8fb;
  2967. color: #526b82;
  2968. font-size: 10px;
  2969. font-weight: 750;
  2970. }
  2971. .report-table tbody tr:last-child td {
  2972. border-bottom: 0;
  2973. }
  2974. .report-table tbody tr:hover {
  2975. background: #f9fbfd;
  2976. }
  2977. .report-divider {
  2978. height: 1px;
  2979. margin: 18px 0;
  2980. border: 0;
  2981. background: linear-gradient(90deg, transparent, #dfe7ef 12%, #dfe7ef 88%, transparent);
  2982. }
  2983. .agent-evidence-label {
  2984. margin: 16px 22px 0;
  2985. border-top: 1px solid #edf1f5;
  2986. padding-top: 17px;
  2987. }
  2988. .operation-message.assistant > div:not(.agent-report, .agent-evidence-label, .operation-actions, .agent-tool-chips) {
  2989. margin-right: 22px;
  2990. margin-left: 22px;
  2991. }
  2992. .operation-message.assistant .agent-metrics {
  2993. gap: 10px;
  2994. margin-top: 12px;
  2995. }
  2996. .operation-message.assistant .agent-metrics article {
  2997. position: relative;
  2998. overflow: hidden;
  2999. border: 1px solid #e2eaf2;
  3000. border-radius: 13px;
  3001. background: #f8fafc;
  3002. padding: 14px;
  3003. }
  3004. .operation-message.assistant .agent-metrics article::after {
  3005. position: absolute;
  3006. top: 0;
  3007. right: 0;
  3008. width: 42px;
  3009. height: 42px;
  3010. border-radius: 0 0 0 42px;
  3011. background: rgb(38 123 198 / 7%);
  3012. content: "";
  3013. }
  3014. .operation-message.assistant .agent-metrics small {
  3015. color: #71859a;
  3016. font-size: 10px;
  3017. }
  3018. .operation-message.assistant .agent-metrics strong {
  3019. margin-top: 9px;
  3020. color: #174f7c;
  3021. font-size: 23px;
  3022. letter-spacing: -0.04em;
  3023. }
  3024. .operation-message.assistant .agent-business-list {
  3025. margin-top: 12px;
  3026. border-radius: 13px;
  3027. }
  3028. .operation-message.assistant .agent-business-list header {
  3029. background: #f5f8fb;
  3030. }
  3031. .operation-message.assistant .operation-actions {
  3032. margin: 17px 22px 0;
  3033. }
  3034. .operation-message.assistant .operation-actions button {
  3035. border-color: #bfd9f0;
  3036. border-radius: 9px;
  3037. background: #f6faff;
  3038. padding: 9px 13px;
  3039. transition: transform 0.18s ease, background 0.18s ease;
  3040. }
  3041. .operation-message.assistant .operation-actions button:hover {
  3042. background: #eaf4ff;
  3043. transform: translateY(-1px);
  3044. }
  3045. .agent-tool-chips {
  3046. display: flex;
  3047. flex-wrap: wrap;
  3048. align-items: center;
  3049. gap: 7px;
  3050. margin: 16px 22px 0;
  3051. border-top: 1px solid #edf1f5;
  3052. padding-top: 13px;
  3053. }
  3054. .agent-tool-chips span {
  3055. margin-right: 3px;
  3056. color: #8494a3;
  3057. font-size: 9px;
  3058. }
  3059. .agent-tool-chips b {
  3060. border: 1px solid #dce7f1;
  3061. border-radius: 999px;
  3062. background: #f7fafc;
  3063. color: #547089;
  3064. padding: 4px 8px;
  3065. font-size: 9px;
  3066. font-weight: 650;
  3067. }
  3068. .operation-message.assistant .agent-proof {
  3069. justify-content: flex-end;
  3070. margin: 11px 22px 0;
  3071. padding: 11px 0 16px;
  3072. }
  3073. .agent-proof > span {
  3074. display: none;
  3075. }
  3076. .operation-message.assistant .agent-proof a {
  3077. border-radius: 7px;
  3078. color: #2474b8;
  3079. padding: 5px 7px;
  3080. font-family: inherit;
  3081. font-size: 10px;
  3082. font-weight: 700;
  3083. }
  3084. .operation-message.assistant .agent-proof a:hover {
  3085. background: #eef6fd;
  3086. }
  3087. @keyframes agent-report-enter {
  3088. from {
  3089. opacity: 0;
  3090. transform: translateY(8px);
  3091. }
  3092. to {
  3093. opacity: 1;
  3094. transform: translateY(0);
  3095. }
  3096. }
  3097. @media (max-width: 760px) {
  3098. .operation-message.assistant {
  3099. width: 100%;
  3100. }
  3101. .agent-report {
  3102. padding: 17px 16px 4px;
  3103. }
  3104. .agent-evidence-label,
  3105. .operation-message.assistant .operation-actions,
  3106. .agent-tool-chips,
  3107. .operation-message.assistant .agent-proof {
  3108. margin-right: 16px;
  3109. margin-left: 16px;
  3110. }
  3111. .operation-message.assistant > div:not(.agent-report, .agent-evidence-label, .operation-actions, .agent-tool-chips) {
  3112. margin-right: 16px;
  3113. margin-left: 16px;
  3114. }
  3115. }