styles.css 85 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999
  1. :root {
  2. color-scheme: light;
  3. --bg: #f5f5f7;
  4. --panel: rgba(255, 255, 255, 0.92);
  5. --panel-solid: #ffffff;
  6. --panel-soft: #f2f2f4;
  7. --text: #1d1d1f;
  8. --muted: #6e6e73;
  9. --line: #d8d8de;
  10. --line-soft: #ebecef;
  11. --accent: #0071e3;
  12. --accent-strong: #005bb5;
  13. --warning: #b25a00;
  14. --danger: #c52929;
  15. --success: #16833a;
  16. --shadow: 0 18px 44px rgba(0, 0, 0, 0.055);
  17. --shadow-soft: 0 8px 22px rgba(0, 0, 0, 0.045);
  18. }
  19. * {
  20. box-sizing: border-box;
  21. }
  22. body {
  23. margin: 0;
  24. min-width: 320px;
  25. min-height: 100vh;
  26. background: var(--bg);
  27. color: var(--text);
  28. font-family:
  29. -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", Inter, ui-sans-serif, system-ui, "Segoe UI",
  30. "PingFang SC", "Microsoft YaHei", sans-serif;
  31. letter-spacing: 0;
  32. -webkit-font-smoothing: antialiased;
  33. text-rendering: geometricPrecision;
  34. }
  35. [hidden] {
  36. display: none !important;
  37. }
  38. button,
  39. input,
  40. select,
  41. textarea {
  42. font: inherit;
  43. }
  44. .auth-screen {
  45. min-height: 100vh;
  46. padding: 30px clamp(18px, 4vw, 64px);
  47. background: #fff;
  48. color: var(--text);
  49. }
  50. .auth-brand {
  51. display: flex;
  52. align-items: center;
  53. gap: 14px;
  54. padding-bottom: 22px;
  55. border-bottom: 1px solid var(--line);
  56. }
  57. .auth-brand h1,
  58. .auth-brand p,
  59. .auth-card h2,
  60. .auth-preview {
  61. margin: 0;
  62. }
  63. .auth-brand h1 {
  64. font-size: 21px;
  65. font-weight: 760;
  66. }
  67. .auth-brand p {
  68. margin-top: 2px;
  69. color: var(--muted);
  70. font-size: 13px;
  71. }
  72. .auth-card {
  73. width: min(760px, 100%);
  74. margin: clamp(76px, 11vh, 132px) auto 0;
  75. text-align: center;
  76. }
  77. .auth-card h2 {
  78. margin-bottom: 64px;
  79. font-size: clamp(34px, 4vw, 48px);
  80. line-height: 1.08;
  81. font-weight: 780;
  82. }
  83. .auth-box {
  84. overflow: hidden;
  85. width: min(620px, 100%);
  86. margin: 0 auto;
  87. border: 1.5px solid #86868b;
  88. border-radius: 18px;
  89. background: #fff;
  90. text-align: left;
  91. transition: border-color 0.16s ease, box-shadow 0.16s ease;
  92. }
  93. .auth-box:focus-within {
  94. border-color: var(--accent);
  95. box-shadow: 0 0 0 3px rgba(0, 113, 227, 0.12);
  96. }
  97. .auth-field {
  98. position: relative;
  99. display: block;
  100. min-height: 82px;
  101. padding: 16px 58px 12px 26px;
  102. }
  103. .auth-field + .auth-field {
  104. border-top: 1px solid #86868b;
  105. }
  106. .auth-box:focus-within .auth-field + .auth-field {
  107. border-top-color: var(--accent);
  108. }
  109. .auth-field span {
  110. display: block;
  111. color: var(--muted);
  112. font-size: 17px;
  113. line-height: 1.2;
  114. }
  115. .auth-field input {
  116. width: 100%;
  117. padding: 4px 0 0;
  118. border: 0;
  119. outline: 0;
  120. background: transparent;
  121. color: #424245;
  122. font-size: 28px;
  123. line-height: 1.15;
  124. box-shadow: none;
  125. }
  126. .auth-field-password input {
  127. padding-right: 46px;
  128. }
  129. .auth-submit {
  130. position: absolute;
  131. right: 18px;
  132. bottom: 17px;
  133. display: inline-grid;
  134. place-items: center;
  135. width: 42px;
  136. height: 42px;
  137. min-height: 0;
  138. padding: 0;
  139. border-radius: 50%;
  140. border-color: #5f5f63;
  141. background: #fff;
  142. color: #424245;
  143. box-shadow: none;
  144. }
  145. .auth-submit svg {
  146. width: 26px;
  147. height: 26px;
  148. }
  149. .auth-submit svg * {
  150. fill: none;
  151. stroke: currentColor;
  152. stroke-width: 2.4;
  153. stroke-linecap: round;
  154. stroke-linejoin: round;
  155. }
  156. .auth-remember {
  157. display: inline-flex;
  158. align-items: center;
  159. gap: 12px;
  160. margin-top: 54px;
  161. color: var(--text);
  162. font-size: 25px;
  163. font-weight: 460;
  164. }
  165. .auth-remember input {
  166. width: 24px;
  167. height: 24px;
  168. accent-color: var(--accent);
  169. }
  170. .auth-preview {
  171. margin-top: 46px;
  172. color: var(--muted);
  173. font-size: 15px;
  174. }
  175. button,
  176. label.file-button {
  177. min-height: 34px;
  178. border: 1px solid var(--line);
  179. border-radius: 8px;
  180. cursor: pointer;
  181. font-weight: 650;
  182. transition:
  183. background 0.16s ease,
  184. border-color 0.16s ease,
  185. box-shadow 0.16s ease,
  186. transform 0.16s ease;
  187. }
  188. button:hover,
  189. label.file-button:hover {
  190. transform: translateY(-1px);
  191. box-shadow: var(--shadow-soft);
  192. }
  193. button:disabled {
  194. cursor: progress;
  195. opacity: 0.72;
  196. transform: none;
  197. }
  198. button:focus-visible,
  199. input:focus-visible,
  200. select:focus-visible,
  201. textarea:focus-visible,
  202. label.file-button:focus-within {
  203. outline: 3px solid rgba(0, 113, 227, 0.18);
  204. outline-offset: 2px;
  205. }
  206. .app-shell {
  207. display: grid;
  208. grid-template-columns: 268px minmax(0, 1fr);
  209. min-height: 100vh;
  210. }
  211. .sidebar {
  212. position: sticky;
  213. top: 0;
  214. height: 100vh;
  215. padding: 24px 16px 16px;
  216. border-right: 1px solid var(--line);
  217. background: rgba(251, 251, 253, 0.86);
  218. backdrop-filter: blur(22px);
  219. display: flex;
  220. flex-direction: column;
  221. gap: 26px;
  222. }
  223. .sidebar-account {
  224. margin-top: auto;
  225. padding-top: 16px;
  226. border-top: 1px solid var(--line-soft);
  227. }
  228. .sidebar-user {
  229. display: flex;
  230. align-items: center;
  231. gap: 10px;
  232. width: 100%;
  233. padding: 8px 10px;
  234. border: 1px solid transparent;
  235. border-radius: 12px;
  236. background: transparent;
  237. color: var(--text);
  238. box-shadow: none;
  239. text-align: left;
  240. }
  241. .sidebar-user:hover {
  242. background: var(--panel-solid);
  243. border-color: var(--line);
  244. transform: none;
  245. box-shadow: var(--shadow-soft);
  246. }
  247. .sidebar-user-avatar {
  248. flex: 0 0 auto;
  249. display: grid;
  250. place-items: center;
  251. width: 36px;
  252. height: 36px;
  253. border-radius: 50%;
  254. color: #fff;
  255. font-weight: 760;
  256. font-size: 14px;
  257. letter-spacing: 0.4px;
  258. background: linear-gradient(135deg, #4c8bf5 0%, #7d5fff 100%);
  259. box-shadow: 0 4px 10px rgba(76, 139, 245, 0.28);
  260. }
  261. .sidebar-user-avatar[data-tier="pro"] {
  262. background: linear-gradient(135deg, #f5c14b 0%, #e08818 60%, #b65a0a 100%);
  263. box-shadow: 0 4px 12px rgba(224, 136, 24, 0.32);
  264. }
  265. .sidebar-user-info {
  266. flex: 1;
  267. min-width: 0;
  268. display: grid;
  269. gap: 2px;
  270. }
  271. .sidebar-user-info strong {
  272. display: block;
  273. font-size: 13px;
  274. font-weight: 720;
  275. color: var(--text);
  276. overflow: hidden;
  277. text-overflow: ellipsis;
  278. white-space: nowrap;
  279. }
  280. .sidebar-user-info small {
  281. display: inline-flex;
  282. align-items: center;
  283. align-self: start;
  284. padding: 1px 7px;
  285. border-radius: 999px;
  286. background: #ececef;
  287. color: var(--muted);
  288. font-size: 11px;
  289. font-weight: 720;
  290. letter-spacing: 0.02em;
  291. }
  292. .sidebar-user-info small[data-tier="pro"] {
  293. background: linear-gradient(135deg, #fff3d4 0%, #f7d77a 100%);
  294. color: #8a5a09;
  295. }
  296. .sidebar-user-caret {
  297. flex: 0 0 auto;
  298. width: 14px;
  299. height: 14px;
  300. color: var(--muted);
  301. fill: none;
  302. stroke: currentColor;
  303. stroke-width: 2;
  304. stroke-linecap: round;
  305. stroke-linejoin: round;
  306. }
  307. .account-menu-up {
  308. top: auto !important;
  309. right: auto !important;
  310. bottom: calc(100% + 8px);
  311. left: 0;
  312. width: 240px;
  313. }
  314. .account-menu-license span[data-tier="pro"] {
  315. color: #b07300;
  316. }
  317. .brand {
  318. display: flex;
  319. gap: 12px;
  320. align-items: center;
  321. }
  322. .brand-mark {
  323. display: grid;
  324. place-items: center;
  325. width: 42px;
  326. height: 42px;
  327. border-radius: 8px;
  328. background: #1d1d1f;
  329. color: #fff;
  330. font-weight: 800;
  331. letter-spacing: 0.2px;
  332. }
  333. .brand h1,
  334. .brand p,
  335. .topbar h2,
  336. .topbar p,
  337. .card h3,
  338. .dialog h3,
  339. .empty h3 {
  340. margin: 0;
  341. }
  342. .brand h1 {
  343. font-size: 19px;
  344. font-weight: 760;
  345. }
  346. .brand p,
  347. .eyebrow,
  348. .backup-note,
  349. .muted,
  350. .field-hint {
  351. color: var(--muted);
  352. }
  353. .brand p {
  354. margin-top: 2px;
  355. font-size: 12px;
  356. font-weight: 520;
  357. }
  358. .nav {
  359. display: grid;
  360. gap: 4px;
  361. }
  362. .nav-group {
  363. margin: 14px 9px 5px;
  364. color: var(--muted);
  365. font-size: 11px;
  366. font-weight: 780;
  367. letter-spacing: 0.08em;
  368. text-transform: uppercase;
  369. }
  370. .nav-group:first-child {
  371. margin-top: 0;
  372. }
  373. .nav button {
  374. width: 100%;
  375. padding: 9px 11px;
  376. background: transparent;
  377. color: var(--text);
  378. text-align: left;
  379. border-color: transparent;
  380. box-shadow: none;
  381. font-size: 14px;
  382. display: flex;
  383. align-items: center;
  384. gap: 10px;
  385. }
  386. .nav button.active {
  387. background: var(--panel-solid);
  388. border-color: var(--line);
  389. color: var(--text);
  390. box-shadow: var(--shadow-soft);
  391. font-weight: 760;
  392. }
  393. .nav-icon {
  394. position: relative;
  395. display: inline-grid;
  396. place-items: center;
  397. flex: 0 0 auto;
  398. width: 25px;
  399. height: 25px;
  400. border-radius: 8px;
  401. background: #f1f2f5;
  402. color: #52545a;
  403. box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.045);
  404. }
  405. .nav button.active .nav-icon {
  406. background: #eef5ff;
  407. color: var(--accent);
  408. }
  409. .nav-icon::before,
  410. .nav-icon::after {
  411. content: "";
  412. position: absolute;
  413. box-sizing: border-box;
  414. }
  415. .nav-icon.grid::before {
  416. width: 13px;
  417. height: 13px;
  418. border: 2px solid currentColor;
  419. border-radius: 4px;
  420. box-shadow:
  421. -5px -5px 0 -3px currentColor,
  422. 5px -5px 0 -3px currentColor,
  423. -5px 5px 0 -3px currentColor,
  424. 5px 5px 0 -3px currentColor;
  425. }
  426. .nav-icon.phone::before {
  427. width: 9px;
  428. height: 15px;
  429. border: 2px solid currentColor;
  430. border-radius: 3px;
  431. }
  432. .nav-icon.phone::after {
  433. bottom: 5px;
  434. width: 3px;
  435. height: 3px;
  436. border-radius: 50%;
  437. background: currentColor;
  438. }
  439. .nav-icon.mail::before {
  440. width: 15px;
  441. height: 11px;
  442. border: 2px solid currentColor;
  443. border-radius: 3px;
  444. }
  445. .nav-icon.mail::after {
  446. width: 10px;
  447. height: 10px;
  448. border-right: 2px solid currentColor;
  449. border-bottom: 2px solid currentColor;
  450. transform: translateY(-2px) rotate(45deg);
  451. }
  452. .nav-icon.domain::before {
  453. width: 15px;
  454. height: 15px;
  455. border: 2px solid currentColor;
  456. border-radius: 50%;
  457. box-shadow: inset -7px 0 0 -6px currentColor, inset 7px 0 0 -6px currentColor;
  458. }
  459. .nav-icon.domain::after {
  460. width: 8px;
  461. height: 15px;
  462. border: 2px solid currentColor;
  463. border-radius: 50%;
  464. }
  465. .nav-icon.user::before {
  466. top: 5px;
  467. width: 7px;
  468. height: 7px;
  469. border: 2px solid currentColor;
  470. border-radius: 50%;
  471. }
  472. .nav-icon.user::after {
  473. bottom: 5px;
  474. width: 14px;
  475. height: 7px;
  476. border: 2px solid currentColor;
  477. border-radius: 9px 9px 4px 4px;
  478. }
  479. .nav-icon.link::before {
  480. width: 13px;
  481. height: 7px;
  482. border: 2px solid currentColor;
  483. border-radius: 999px;
  484. transform: rotate(-28deg);
  485. }
  486. .nav-icon.link::after {
  487. width: 13px;
  488. height: 7px;
  489. border: 2px solid currentColor;
  490. border-radius: 999px;
  491. transform: rotate(28deg);
  492. }
  493. .nav-icon.alert::before {
  494. width: 0;
  495. height: 0;
  496. border-left: 8px solid transparent;
  497. border-right: 8px solid transparent;
  498. border-bottom: 15px solid currentColor;
  499. }
  500. .nav-icon.alert::after {
  501. width: 2px;
  502. height: 7px;
  503. background: #fff;
  504. transform: translateY(3px);
  505. box-shadow: 0 5px 0 #fff;
  506. }
  507. .backup-note {
  508. margin-top: auto;
  509. padding: 13px;
  510. background: rgba(255, 255, 255, 0.72);
  511. border: 1px solid var(--line);
  512. border-radius: 8px;
  513. display: grid;
  514. gap: 6px;
  515. font-size: 13px;
  516. line-height: 1.45;
  517. }
  518. .main {
  519. min-width: 0;
  520. padding: 30px;
  521. }
  522. .topbar {
  523. display: flex;
  524. align-items: center;
  525. justify-content: space-between;
  526. gap: 18px;
  527. margin-bottom: 26px;
  528. }
  529. .topbar-heading {
  530. min-width: 0;
  531. }
  532. .eyebrow {
  533. font-size: 11px;
  534. font-weight: 760;
  535. text-transform: uppercase;
  536. letter-spacing: 0.08em;
  537. }
  538. .topbar h2 {
  539. margin-top: 4px;
  540. font-size: clamp(30px, 3vw, 42px);
  541. line-height: 1.05;
  542. font-weight: 780;
  543. }
  544. .topbar-actions,
  545. .toolbar,
  546. .filter-row,
  547. .inline-actions,
  548. .detail-meta {
  549. display: flex;
  550. gap: 10px;
  551. align-items: center;
  552. flex-wrap: wrap;
  553. }
  554. .global-search {
  555. display: flex;
  556. align-items: center;
  557. gap: 8px;
  558. padding: 0 14px;
  559. min-height: 40px;
  560. border: 1px solid var(--line);
  561. border-radius: 999px;
  562. background: var(--panel-solid);
  563. color: var(--muted);
  564. box-shadow: 0 1px 1px rgba(0, 0, 0, 0.025);
  565. }
  566. .global-search:focus-within {
  567. border-color: var(--accent);
  568. box-shadow: 0 0 0 4px rgba(0, 113, 227, 0.12);
  569. }
  570. .global-search .search-icon {
  571. width: 16px;
  572. height: 16px;
  573. flex: 0 0 auto;
  574. color: var(--muted);
  575. }
  576. .global-search .search-icon * {
  577. fill: none;
  578. stroke: currentColor;
  579. stroke-width: 2;
  580. stroke-linecap: round;
  581. stroke-linejoin: round;
  582. }
  583. .global-search input {
  584. width: min(32vw, 360px);
  585. min-width: 180px;
  586. border: 0;
  587. outline: 0;
  588. background: transparent;
  589. color: var(--text);
  590. font-size: 13.5px;
  591. }
  592. .global-search input::placeholder {
  593. color: var(--muted);
  594. }
  595. .language-select-wrap {
  596. display: inline-flex;
  597. align-items: center;
  598. min-height: 40px;
  599. }
  600. .language-select-wrap select {
  601. min-height: 40px;
  602. padding: 0 12px;
  603. border: 1px solid var(--line);
  604. border-radius: 999px;
  605. background: var(--panel-solid);
  606. color: var(--text);
  607. font-size: 13px;
  608. font-weight: 650;
  609. outline: 0;
  610. }
  611. .icon-pill {
  612. display: inline-grid;
  613. place-items: center;
  614. position: relative;
  615. width: 40px;
  616. height: 40px;
  617. padding: 0;
  618. border-radius: 50%;
  619. border: 1px solid var(--line);
  620. background: var(--panel-solid);
  621. color: var(--text);
  622. }
  623. .icon-pill svg {
  624. width: 18px;
  625. height: 18px;
  626. }
  627. .icon-pill svg * {
  628. fill: none;
  629. stroke: currentColor;
  630. stroke-width: 2;
  631. stroke-linecap: round;
  632. stroke-linejoin: round;
  633. }
  634. .icon-pill .bell-dot {
  635. position: absolute;
  636. top: 9px;
  637. right: 10px;
  638. width: 8px;
  639. height: 8px;
  640. border-radius: 50%;
  641. background: #ff4d4f;
  642. box-shadow: 0 0 0 2px var(--panel-solid);
  643. }
  644. .topbar-primary {
  645. display: inline-flex;
  646. align-items: center;
  647. gap: 6px;
  648. height: 40px;
  649. padding: 0 16px;
  650. border-radius: 999px;
  651. }
  652. .topbar-primary svg {
  653. width: 16px;
  654. height: 16px;
  655. }
  656. .topbar-primary svg * {
  657. fill: none;
  658. stroke: currentColor;
  659. stroke-width: 2.4;
  660. stroke-linecap: round;
  661. }
  662. .topbar-avatar {
  663. display: inline-grid;
  664. place-items: center;
  665. width: 40px;
  666. height: 40px;
  667. padding: 0;
  668. border-radius: 50%;
  669. background: linear-gradient(135deg, #4c8bf5 0%, #7d5fff 100%);
  670. border: 0;
  671. color: #fff;
  672. font-weight: 760;
  673. font-size: 15px;
  674. letter-spacing: 0.4px;
  675. box-shadow: 0 6px 14px rgba(76, 139, 245, 0.32);
  676. }
  677. .topbar-avatar:hover {
  678. transform: translateY(-1px);
  679. }
  680. .account-menu-wrap {
  681. position: relative;
  682. }
  683. .account-menu {
  684. position: absolute;
  685. top: calc(100% + 10px);
  686. right: 0;
  687. z-index: 30;
  688. width: 260px;
  689. padding: 6px;
  690. border: 1px solid var(--line);
  691. border-radius: 12px;
  692. background: rgba(255, 255, 255, 0.96);
  693. box-shadow: 0 18px 42px rgba(0, 0, 0, 0.14);
  694. backdrop-filter: blur(18px);
  695. }
  696. .account-menu-license {
  697. display: grid;
  698. gap: 4px;
  699. padding: 10px 10px 12px;
  700. margin-bottom: 4px;
  701. border-bottom: 1px solid var(--line-soft);
  702. }
  703. .account-menu-license span {
  704. color: var(--muted);
  705. font-size: 11px;
  706. font-weight: 780;
  707. text-transform: uppercase;
  708. letter-spacing: 0.08em;
  709. }
  710. .account-menu-license strong {
  711. color: var(--text);
  712. font-size: 13px;
  713. line-height: 1.35;
  714. overflow-wrap: anywhere;
  715. }
  716. .account-menu-license small {
  717. color: var(--muted);
  718. font-size: 12px;
  719. line-height: 1.35;
  720. }
  721. .account-menu button {
  722. width: 100%;
  723. min-height: 34px;
  724. padding: 8px 10px;
  725. border: 0;
  726. border-radius: 8px;
  727. background: transparent;
  728. box-shadow: none;
  729. color: var(--text);
  730. text-align: left;
  731. font-size: 13px;
  732. }
  733. .account-menu button:hover {
  734. background: #f5f5f7;
  735. transform: none;
  736. box-shadow: none;
  737. }
  738. .primary-button,
  739. .ghost-button,
  740. .danger-button,
  741. .file-button {
  742. padding: 7px 12px;
  743. }
  744. .primary-button {
  745. background: var(--accent);
  746. color: #fff;
  747. border-color: var(--accent);
  748. box-shadow: 0 8px 18px rgba(0, 113, 227, 0.18);
  749. }
  750. .ghost-button,
  751. .file-button {
  752. background: var(--panel-solid);
  753. color: var(--text);
  754. }
  755. .danger-button {
  756. background: #fff7f7;
  757. color: var(--danger);
  758. border-color: #f0caca;
  759. }
  760. .icon-button {
  761. width: 36px;
  762. height: 36px;
  763. padding: 0;
  764. background: var(--panel-solid);
  765. color: var(--text);
  766. font-size: 22px;
  767. line-height: 1;
  768. }
  769. .file-button input {
  770. display: none;
  771. }
  772. .utility-action {
  773. display: none;
  774. }
  775. .content {
  776. display: grid;
  777. gap: 16px;
  778. }
  779. .dashboard-setting-card,
  780. .dashboard-panel-card,
  781. .dashboard-hero-note {
  782. background: rgba(255, 255, 255, 0.9);
  783. border: 1px solid rgba(207, 210, 220, 0.72);
  784. border-radius: 24px;
  785. box-shadow:
  786. 0 18px 40px rgba(15, 23, 42, 0.05),
  787. 0 2px 5px rgba(15, 23, 42, 0.03);
  788. }
  789. .dashboard-side-label,
  790. .dashboard-card-label,
  791. .dashboard-note-label,
  792. .dashboard-subtitle {
  793. color: var(--muted);
  794. font-size: 12px;
  795. font-weight: 780;
  796. letter-spacing: 0.08em;
  797. text-transform: uppercase;
  798. }
  799. .dashboard-mainpanel {
  800. display: grid;
  801. gap: 12px;
  802. }
  803. .dashboard-hero {
  804. display: grid;
  805. grid-template-columns: minmax(0, 1.5fr) minmax(280px, 0.7fr);
  806. gap: 12px;
  807. align-items: end;
  808. }
  809. .dashboard-hero--full {
  810. grid-template-columns: minmax(0, 1.6fr) minmax(320px, 0.6fr);
  811. }
  812. .dashboard-hero h1 {
  813. margin: 6px 0 8px;
  814. font-size: clamp(30px, 3.2vw, 40px);
  815. line-height: 1;
  816. }
  817. .dashboard-hero p:not(.eyebrow) {
  818. max-width: 760px;
  819. margin: 0;
  820. color: var(--muted);
  821. font-size: 14px;
  822. line-height: 1.45;
  823. }
  824. .dashboard-hero-note {
  825. display: grid;
  826. gap: 6px;
  827. min-height: 112px;
  828. padding: 16px 18px;
  829. align-content: center;
  830. }
  831. .dashboard-hero-note strong {
  832. font-size: 22px;
  833. line-height: 1.08;
  834. }
  835. .dashboard-hero-note span:last-child {
  836. color: var(--muted);
  837. font-size: 13px;
  838. }
  839. .dashboard-settings-grid,
  840. .dashboard-insights-grid {
  841. display: grid;
  842. grid-template-columns: repeat(2, minmax(0, 1fr));
  843. gap: 12px;
  844. }
  845. .dashboard-setting-card,
  846. .dashboard-panel-card {
  847. padding: 16px 18px;
  848. }
  849. .dashboard-setting-card {
  850. display: grid;
  851. gap: 10px;
  852. min-height: 148px;
  853. }
  854. .dashboard-setting-head,
  855. .dashboard-panel-head,
  856. .dashboard-platform-row,
  857. .dashboard-platform-main,
  858. .dashboard-platform-meter,
  859. .dashboard-recent-main {
  860. display: flex;
  861. align-items: center;
  862. }
  863. .dashboard-setting-head,
  864. .dashboard-panel-head,
  865. .dashboard-platform-row {
  866. justify-content: space-between;
  867. }
  868. .dashboard-card-value {
  869. margin-top: 4px;
  870. font-size: 32px;
  871. font-weight: 780;
  872. line-height: 0.96;
  873. }
  874. .dashboard-card-icon {
  875. width: 40px;
  876. height: 40px;
  877. display: grid;
  878. place-items: center;
  879. border-radius: 13px;
  880. }
  881. .dashboard-card-icon svg {
  882. width: 18px;
  883. height: 18px;
  884. stroke: currentColor;
  885. fill: none;
  886. stroke-width: 1.8;
  887. stroke-linecap: round;
  888. stroke-linejoin: round;
  889. }
  890. .dashboard-card-icon.asset {
  891. background: rgba(0, 113, 227, 0.08);
  892. color: #0071e3;
  893. }
  894. .dashboard-card-icon.security {
  895. background: rgba(31, 128, 88, 0.1);
  896. color: #178148;
  897. }
  898. .dashboard-card-icon.recovery {
  899. background: rgba(125, 90, 255, 0.1);
  900. color: #6a4cff;
  901. }
  902. .dashboard-card-icon.risk {
  903. background: rgba(255, 149, 0, 0.12);
  904. color: #d97a00;
  905. }
  906. .dashboard-card-copy {
  907. display: grid;
  908. gap: 4px;
  909. }
  910. .dashboard-card-copy p,
  911. .dashboard-card-copy span {
  912. margin: 0;
  913. color: var(--muted);
  914. line-height: 1.55;
  915. }
  916. .dashboard-card-copy p {
  917. font-size: 13px;
  918. }
  919. .dashboard-card-copy span {
  920. font-size: 12px;
  921. }
  922. .dashboard-card-link {
  923. justify-self: start;
  924. border: 0;
  925. background: transparent;
  926. color: var(--accent);
  927. padding: 0;
  928. font-size: 13px;
  929. font-weight: 700;
  930. }
  931. .dashboard-card-link:hover {
  932. color: #0057b8;
  933. }
  934. .dashboard-panel-card {
  935. display: grid;
  936. gap: 12px;
  937. }
  938. .dashboard-panel-head h3 {
  939. margin-top: 4px;
  940. font-size: 20px;
  941. line-height: 1.08;
  942. }
  943. .dashboard-stack {
  944. display: grid;
  945. gap: 12px;
  946. }
  947. .dashboard-subsection {
  948. display: grid;
  949. gap: 8px;
  950. }
  951. .chart-list--soft .bar-row,
  952. .chart-list--soft .dashboard-platform-row {
  953. padding: 10px 12px;
  954. border-radius: 14px;
  955. background: linear-gradient(180deg, #fcfcfe 0%, #f5f6fa 100%);
  956. border: 1px solid rgba(228, 230, 236, 0.95);
  957. }
  958. .dashboard-platform-row {
  959. gap: 16px;
  960. }
  961. .dashboard-platform-main {
  962. gap: 12px;
  963. min-width: 0;
  964. }
  965. .dashboard-platform-main strong {
  966. font-size: 14px;
  967. white-space: nowrap;
  968. }
  969. .dashboard-platform-meter {
  970. gap: 10px;
  971. min-width: min(240px, 42%);
  972. }
  973. .dashboard-platform-track {
  974. flex: 1;
  975. height: 8px;
  976. border-radius: 999px;
  977. overflow: hidden;
  978. background: #e7e8eb;
  979. }
  980. .dashboard-platform-fill {
  981. height: 100%;
  982. border-radius: inherit;
  983. background: linear-gradient(90deg, #7ab7ff 0%, #0071e3 100%);
  984. }
  985. .dashboard-platform-meter span {
  986. color: var(--muted);
  987. font-size: 12px;
  988. font-weight: 700;
  989. }
  990. .dashboard-recent-list {
  991. display: grid;
  992. gap: 10px;
  993. }
  994. .dashboard-recent-item {
  995. display: flex;
  996. align-items: center;
  997. justify-content: space-between;
  998. gap: 14px;
  999. width: 100%;
  1000. padding: 10px 12px;
  1001. border: 1px solid rgba(228, 230, 236, 0.95);
  1002. border-radius: 14px;
  1003. background: linear-gradient(180deg, #fcfcfe 0%, #f5f6fa 100%);
  1004. text-align: left;
  1005. }
  1006. .dashboard-recent-main {
  1007. gap: 12px;
  1008. min-width: 0;
  1009. }
  1010. .dashboard-recent-main div {
  1011. min-width: 0;
  1012. }
  1013. .dashboard-recent-main strong,
  1014. .dashboard-recent-main span {
  1015. display: block;
  1016. }
  1017. .dashboard-recent-main strong {
  1018. font-size: 14px;
  1019. }
  1020. .dashboard-recent-main span {
  1021. color: var(--muted);
  1022. font-size: 12px;
  1023. overflow: hidden;
  1024. text-overflow: ellipsis;
  1025. }
  1026. .stats-grid {
  1027. display: grid;
  1028. grid-template-columns: repeat(4, minmax(160px, 1fr));
  1029. gap: 12px;
  1030. }
  1031. .card,
  1032. .table-wrap,
  1033. .detail-panel,
  1034. .empty {
  1035. background: var(--panel);
  1036. border: 1px solid var(--line);
  1037. border-radius: 8px;
  1038. box-shadow: var(--shadow);
  1039. backdrop-filter: blur(18px);
  1040. }
  1041. .card {
  1042. padding: 17px;
  1043. }
  1044. .card h3,
  1045. .detail-panel h3 {
  1046. font-weight: 740;
  1047. }
  1048. .stat-value {
  1049. margin: 12px 0 5px;
  1050. font-size: 36px;
  1051. font-weight: 780;
  1052. line-height: 1;
  1053. }
  1054. .dashboard-grid {
  1055. display: grid;
  1056. grid-template-columns: minmax(0, 1.3fr) minmax(320px, 0.7fr);
  1057. gap: 16px;
  1058. }
  1059. .chart-list,
  1060. .risk-list,
  1061. .bound-list {
  1062. display: grid;
  1063. gap: 10px;
  1064. margin-top: 14px;
  1065. }
  1066. .bar-row {
  1067. display: grid;
  1068. grid-template-columns: 120px minmax(80px, 1fr) 36px;
  1069. gap: 10px;
  1070. align-items: center;
  1071. font-size: 13px;
  1072. }
  1073. .empty-compact {
  1074. padding: 18px;
  1075. }
  1076. .empty-compact h3,
  1077. .empty-compact p {
  1078. margin: 0;
  1079. }
  1080. .bar-track {
  1081. height: 8px;
  1082. background: #e7e8eb;
  1083. border-radius: 999px;
  1084. overflow: hidden;
  1085. }
  1086. .bar-fill {
  1087. height: 100%;
  1088. background: var(--accent);
  1089. }
  1090. .toolbar {
  1091. justify-content: space-between;
  1092. }
  1093. .filter-row input,
  1094. .filter-row select,
  1095. .form-grid input,
  1096. .form-grid select,
  1097. .form-grid textarea {
  1098. min-height: 42px;
  1099. width: 100%;
  1100. border: 1px solid #cfd0d6;
  1101. border-radius: 8px;
  1102. background: var(--panel-solid);
  1103. color: var(--text);
  1104. padding: 9px 11px;
  1105. outline: 0;
  1106. box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.025);
  1107. transition:
  1108. border-color 0.16s ease,
  1109. box-shadow 0.16s ease,
  1110. background 0.16s ease;
  1111. }
  1112. .filter-row input:hover,
  1113. .filter-row select:hover,
  1114. .form-grid input:hover,
  1115. .form-grid select:hover,
  1116. .form-grid textarea:hover {
  1117. border-color: #b7b8bf;
  1118. }
  1119. .filter-row input:focus,
  1120. .filter-row select:focus,
  1121. .form-grid input:focus,
  1122. .form-grid select:focus,
  1123. .form-grid textarea:focus {
  1124. border-color: var(--accent);
  1125. background: #fff;
  1126. box-shadow:
  1127. 0 0 0 4px rgba(0, 113, 227, 0.12),
  1128. inset 0 1px 1px rgba(0, 0, 0, 0.02);
  1129. }
  1130. .form-grid.was-validated input:invalid,
  1131. .form-grid.was-validated textarea:invalid,
  1132. .form-grid.was-validated select:invalid {
  1133. border-color: var(--danger);
  1134. box-shadow: 0 0 0 4px rgba(197, 41, 41, 0.1);
  1135. }
  1136. .filter-row input,
  1137. .filter-row select {
  1138. width: 210px;
  1139. }
  1140. .table-wrap {
  1141. overflow: auto;
  1142. background: var(--panel-solid);
  1143. }
  1144. .topology-card {
  1145. background: var(--panel);
  1146. border: 1px solid var(--line);
  1147. border-radius: 8px;
  1148. box-shadow: var(--shadow);
  1149. padding: 18px;
  1150. display: grid;
  1151. gap: 14px;
  1152. overflow: hidden;
  1153. }
  1154. .topology-card h3 {
  1155. margin: 0;
  1156. font-size: 20px;
  1157. font-weight: 760;
  1158. }
  1159. .topology-legend {
  1160. display: flex;
  1161. align-items: center;
  1162. gap: 10px;
  1163. flex-wrap: wrap;
  1164. color: var(--muted);
  1165. font-size: 12px;
  1166. font-weight: 680;
  1167. }
  1168. .topology-legend span {
  1169. display: inline-flex;
  1170. align-items: center;
  1171. gap: 6px;
  1172. }
  1173. .topology-legend i {
  1174. width: 9px;
  1175. height: 9px;
  1176. border-radius: 50%;
  1177. background: #9b9da5;
  1178. }
  1179. .topology-legend i.phone {
  1180. background: #0071e3;
  1181. }
  1182. .topology-legend i.email {
  1183. background: #7d5fff;
  1184. }
  1185. .topology-legend i.domain {
  1186. background: #16a36a;
  1187. }
  1188. .topology-legend i.risk {
  1189. background: var(--danger);
  1190. }
  1191. .topology-legend i.role {
  1192. background: #a7afbd;
  1193. }
  1194. .relationship-board > .topology-legend {
  1195. margin-top: 12px;
  1196. padding: 10px 14px;
  1197. border: 1px solid var(--line-soft);
  1198. border-radius: 10px;
  1199. background: rgba(251, 251, 253, 0.7);
  1200. gap: 18px;
  1201. }
  1202. .relation-column {
  1203. fill: rgba(247, 250, 255, 0.55);
  1204. stroke: #e7ecf6;
  1205. stroke-width: 1.2;
  1206. }
  1207. .relation-column.account {
  1208. fill: rgba(238, 249, 242, 0.45);
  1209. stroke: #dceee3;
  1210. }
  1211. .relation-column.role {
  1212. fill: rgba(244, 240, 255, 0.45);
  1213. stroke: #e6dffa;
  1214. }
  1215. .topology-stage {
  1216. width: 100%;
  1217. overflow-x: auto;
  1218. padding: 4px;
  1219. border: 1px solid var(--line-soft);
  1220. border-radius: 8px;
  1221. background:
  1222. radial-gradient(circle at 24px 24px, rgba(0, 0, 0, 0.055) 1px, transparent 1px),
  1223. linear-gradient(180deg, #ffffff 0%, #fbfbfd 100%);
  1224. background-size: 24px 24px, 100% 100%;
  1225. }
  1226. .topology-stage svg {
  1227. display: block;
  1228. width: 100%;
  1229. min-width: 860px;
  1230. height: auto;
  1231. }
  1232. .topology-axis {
  1233. fill: var(--muted);
  1234. font-size: 13px;
  1235. font-weight: 760;
  1236. letter-spacing: 0.06em;
  1237. }
  1238. .topology-edge {
  1239. fill: none;
  1240. stroke: #b9c0ca;
  1241. stroke-width: 2;
  1242. opacity: 0.7;
  1243. }
  1244. .topology-edge.low {
  1245. stroke: #aeb6c2;
  1246. }
  1247. .topology-edge.medium {
  1248. stroke: var(--warning);
  1249. stroke-width: 2.5;
  1250. opacity: 0.85;
  1251. }
  1252. .topology-edge.high {
  1253. stroke: var(--danger);
  1254. stroke-width: 3;
  1255. opacity: 0.9;
  1256. }
  1257. .topology-edge-label {
  1258. fill: #76777e;
  1259. paint-order: stroke;
  1260. stroke: #fff;
  1261. stroke-width: 5px;
  1262. stroke-linejoin: round;
  1263. font-size: 11px;
  1264. font-weight: 720;
  1265. text-anchor: middle;
  1266. }
  1267. .topology-node rect {
  1268. fill: rgba(255, 255, 255, 0.96);
  1269. stroke: #dfe1e7;
  1270. }
  1271. .topology-node circle {
  1272. fill: #9b9da5;
  1273. }
  1274. .topology-node.phone circle {
  1275. fill: #0071e3;
  1276. }
  1277. .topology-node.email circle {
  1278. fill: #7d5fff;
  1279. }
  1280. .topology-node.domain circle {
  1281. fill: #16a36a;
  1282. }
  1283. .topology-node.account circle {
  1284. fill: #1d1d1f;
  1285. }
  1286. .topology-node circle.custom {
  1287. fill: #fff;
  1288. stroke: #dfe1e7;
  1289. }
  1290. .topology-node-title {
  1291. fill: var(--text);
  1292. font-size: 13px;
  1293. font-weight: 760;
  1294. }
  1295. .topology-node-meta {
  1296. fill: var(--muted);
  1297. font-size: 11px;
  1298. font-weight: 620;
  1299. }
  1300. .topology-empty {
  1301. display: grid;
  1302. place-items: center;
  1303. min-height: 180px;
  1304. border: 1px dashed var(--line);
  1305. border-radius: 8px;
  1306. color: var(--muted);
  1307. background: #fbfbfd;
  1308. font-weight: 680;
  1309. }
  1310. .relation-hero {
  1311. display: flex;
  1312. align-items: end;
  1313. justify-content: space-between;
  1314. gap: 18px;
  1315. padding: 4px 2px 2px;
  1316. }
  1317. .relation-hero h3 {
  1318. margin: 4px 0 4px;
  1319. font-size: 30px;
  1320. line-height: 1.08;
  1321. }
  1322. .relation-hero p {
  1323. margin: 0;
  1324. color: var(--muted);
  1325. }
  1326. .relation-filter {
  1327. justify-content: flex-end;
  1328. }
  1329. .relation-layout {
  1330. display: grid;
  1331. grid-template-columns: minmax(860px, 1fr) 300px;
  1332. gap: 16px;
  1333. align-items: start;
  1334. overflow-x: auto;
  1335. }
  1336. .relation-main {
  1337. min-width: 0;
  1338. display: grid;
  1339. gap: 16px;
  1340. }
  1341. .relation-stats {
  1342. display: grid;
  1343. grid-template-columns: repeat(4, minmax(150px, 1fr));
  1344. gap: 12px;
  1345. }
  1346. .relation-stat {
  1347. display: grid;
  1348. grid-template-columns: 44px minmax(0, 1fr);
  1349. gap: 14px;
  1350. align-items: center;
  1351. padding: 16px;
  1352. border: 1px solid var(--line);
  1353. border-radius: 12px;
  1354. background: var(--panel-solid);
  1355. box-shadow: var(--shadow-soft);
  1356. }
  1357. .relation-stat-icon {
  1358. display: grid;
  1359. place-items: center;
  1360. width: 44px;
  1361. height: 44px;
  1362. border-radius: 12px;
  1363. background: #eef5ff;
  1364. color: #0a84ff;
  1365. }
  1366. .relation-stat-icon svg {
  1367. width: 22px;
  1368. height: 22px;
  1369. }
  1370. .relation-stat-icon svg * {
  1371. fill: none;
  1372. stroke: currentColor;
  1373. stroke-width: 2;
  1374. stroke-linecap: round;
  1375. stroke-linejoin: round;
  1376. }
  1377. .relation-stat.account .relation-stat-icon {
  1378. background: #edf9f2;
  1379. color: var(--success);
  1380. }
  1381. .relation-stat.binding .relation-stat-icon {
  1382. background: #f3edff;
  1383. color: #7d5fff;
  1384. }
  1385. .relation-stat.risk .relation-stat-icon {
  1386. background: #fff0ee;
  1387. color: var(--danger);
  1388. }
  1389. .relation-stat span {
  1390. color: var(--muted);
  1391. font-size: 12px;
  1392. font-weight: 720;
  1393. }
  1394. .relation-stat strong {
  1395. display: block;
  1396. margin-top: 2px;
  1397. font-size: 26px;
  1398. line-height: 1;
  1399. }
  1400. .relation-stat p {
  1401. margin: 5px 0 0;
  1402. color: var(--muted);
  1403. font-size: 12px;
  1404. }
  1405. .relationship-board,
  1406. .relation-table-card,
  1407. .relation-inspector {
  1408. border: 1px solid var(--line);
  1409. border-radius: 8px;
  1410. background: var(--panel);
  1411. box-shadow: var(--shadow);
  1412. }
  1413. .relationship-board {
  1414. padding: 16px;
  1415. overflow: hidden;
  1416. }
  1417. .relationship-board-head {
  1418. display: flex;
  1419. justify-content: space-between;
  1420. align-items: start;
  1421. gap: 12px;
  1422. margin-bottom: 12px;
  1423. }
  1424. .relationship-board-head h3,
  1425. .relation-table-card h3 {
  1426. margin: 0;
  1427. font-size: 20px;
  1428. }
  1429. .relation-canvas {
  1430. overflow-x: auto;
  1431. border: 1px solid var(--line-soft);
  1432. border-radius: 8px;
  1433. background:
  1434. radial-gradient(circle at 24px 24px, rgba(0, 0, 0, 0.045) 1px, transparent 1px),
  1435. linear-gradient(180deg, #ffffff 0%, #fbfbfd 100%);
  1436. background-size: 24px 24px, 100% 100%;
  1437. }
  1438. .relation-canvas svg {
  1439. display: block;
  1440. width: 100%;
  1441. min-width: 980px;
  1442. height: auto;
  1443. }
  1444. .relation-axis {
  1445. fill: var(--accent);
  1446. font-size: 13px;
  1447. font-weight: 800;
  1448. }
  1449. .relation-axis.account {
  1450. fill: var(--success);
  1451. }
  1452. .relation-axis.role {
  1453. fill: #7d5fff;
  1454. }
  1455. .asset-group rect {
  1456. fill: rgba(247, 250, 255, 0.78);
  1457. stroke: #e7ecf6;
  1458. stroke-width: 1;
  1459. }
  1460. .asset-group.phone rect {
  1461. fill: rgba(239, 246, 255, 0.9);
  1462. }
  1463. .asset-group.email rect {
  1464. fill: rgba(246, 242, 255, 0.82);
  1465. }
  1466. .asset-group.domain rect {
  1467. fill: rgba(238, 249, 242, 0.86);
  1468. }
  1469. .asset-group-title {
  1470. fill: var(--accent);
  1471. font-size: 13px;
  1472. font-weight: 820;
  1473. }
  1474. .asset-group.email .asset-group-title {
  1475. fill: #7157e8;
  1476. }
  1477. .asset-group.domain .asset-group-title {
  1478. fill: var(--success);
  1479. }
  1480. .relation-line {
  1481. fill: none;
  1482. stroke-width: 2;
  1483. opacity: 0.72;
  1484. }
  1485. .relation-line.phone {
  1486. stroke: #4b91f1;
  1487. }
  1488. .relation-line.email {
  1489. stroke: #7d5fff;
  1490. }
  1491. .relation-line.domain {
  1492. stroke: #16a36a;
  1493. }
  1494. .relation-line.role {
  1495. stroke: #a7afbd;
  1496. stroke-dasharray: 6 5;
  1497. }
  1498. .relation-line.medium,
  1499. .relation-line.role.medium {
  1500. stroke: var(--warning);
  1501. stroke-width: 2.5;
  1502. opacity: 0.86;
  1503. }
  1504. .relation-line.high,
  1505. .relation-line.role.high {
  1506. stroke: var(--danger);
  1507. stroke-width: 3;
  1508. opacity: 0.95;
  1509. }
  1510. .relation-dot {
  1511. fill: #0a84ff;
  1512. }
  1513. .relation-dot.medium {
  1514. fill: var(--warning);
  1515. }
  1516. .relation-dot.high {
  1517. fill: var(--danger);
  1518. }
  1519. .relation-node rect {
  1520. fill: rgba(255, 255, 255, 0.98);
  1521. stroke: #dfe1e7;
  1522. stroke-width: 1.2;
  1523. transition:
  1524. stroke 0.16s ease,
  1525. stroke-width 0.16s ease,
  1526. fill 0.16s ease;
  1527. }
  1528. .relation-node {
  1529. cursor: pointer;
  1530. }
  1531. .relation-node:hover rect {
  1532. fill: #f8fbff;
  1533. stroke: rgba(0, 113, 227, 0.45);
  1534. stroke-width: 2;
  1535. }
  1536. .relation-node.selected rect {
  1537. stroke: var(--accent);
  1538. stroke-width: 2.4;
  1539. }
  1540. .relation-node .node-mark {
  1541. fill: #7a7d86;
  1542. }
  1543. .relation-node .node-mark.phone {
  1544. fill: #0071e3;
  1545. }
  1546. .relation-node .node-mark.email {
  1547. fill: #7d5fff;
  1548. }
  1549. .relation-node .node-mark.domain {
  1550. fill: #16a36a;
  1551. }
  1552. .relation-node .node-mark.account,
  1553. .relation-node .node-mark.apple {
  1554. fill: #1d1d1f;
  1555. }
  1556. .relation-node .node-mark.google {
  1557. fill: #4285f4;
  1558. }
  1559. .relation-node .node-mark.gemini {
  1560. fill: #7d5fff;
  1561. }
  1562. .relation-node .node-mark.chatgpt,
  1563. .relation-node .node-mark.openai {
  1564. fill: #10a37f;
  1565. }
  1566. .relation-node .node-mark.claude {
  1567. fill: #d97745;
  1568. }
  1569. .relation-node .node-mark.wechat {
  1570. fill: #07c160;
  1571. }
  1572. .relation-node .node-mark.custom {
  1573. fill: #fff;
  1574. stroke: #dfe1e7;
  1575. }
  1576. .node-mark-text {
  1577. fill: #fff;
  1578. font-size: 11px;
  1579. font-weight: 850;
  1580. text-anchor: middle;
  1581. }
  1582. .node-line-icon {
  1583. fill: none;
  1584. stroke: #fff;
  1585. stroke-width: 2;
  1586. stroke-linecap: round;
  1587. stroke-linejoin: round;
  1588. }
  1589. .node-line-dot {
  1590. fill: #fff;
  1591. }
  1592. .asset-node-icon-bg {
  1593. fill: #eef5ff;
  1594. }
  1595. .asset-node-icon-bg.email {
  1596. fill: #f1edff;
  1597. }
  1598. .asset-node-icon-bg.domain {
  1599. fill: #edf9f2;
  1600. }
  1601. .asset-line-icon {
  1602. fill: none;
  1603. stroke-width: 2;
  1604. stroke-linecap: round;
  1605. stroke-linejoin: round;
  1606. }
  1607. path.asset-line-icon.phone {
  1608. fill: #0071e3;
  1609. stroke: #0071e3;
  1610. stroke-width: 1.4;
  1611. }
  1612. .asset-line-icon.email {
  1613. stroke: #7d5fff;
  1614. }
  1615. .asset-line-icon.domain {
  1616. stroke: #16a36a;
  1617. }
  1618. .node-mark-image {
  1619. pointer-events: none;
  1620. filter: brightness(0) invert(1);
  1621. }
  1622. .node-mark-image.custom {
  1623. filter: none;
  1624. }
  1625. .relation-node-title {
  1626. fill: var(--text);
  1627. font-size: 13px;
  1628. font-weight: 780;
  1629. }
  1630. .relation-node-meta {
  1631. fill: var(--muted);
  1632. font-size: 11px;
  1633. font-weight: 620;
  1634. }
  1635. .relation-table-card {
  1636. padding: 14px;
  1637. overflow: hidden;
  1638. }
  1639. .relation-table-card-full {
  1640. width: 100%;
  1641. }
  1642. .relation-table-card .table-wrap {
  1643. width: 100%;
  1644. overflow-x: auto;
  1645. }
  1646. .relation-table-card table {
  1647. min-width: 1080px;
  1648. table-layout: fixed;
  1649. }
  1650. .relation-table-card th,
  1651. .relation-table-card td {
  1652. white-space: normal;
  1653. overflow-wrap: anywhere;
  1654. }
  1655. .relation-table-card th:last-child,
  1656. .relation-table-card td:last-child {
  1657. width: 220px;
  1658. }
  1659. .relation-table-card .inline-actions {
  1660. flex-wrap: nowrap;
  1661. align-items: center;
  1662. }
  1663. .relation-table-card .inline-actions button {
  1664. min-width: 58px;
  1665. white-space: nowrap;
  1666. }
  1667. .binding-details-list {
  1668. display: grid;
  1669. gap: 10px;
  1670. }
  1671. .binding-detail-row {
  1672. display: grid;
  1673. grid-template-columns: minmax(220px, 1fr) minmax(240px, 1.15fr) minmax(320px, 1.2fr) auto;
  1674. gap: 16px;
  1675. align-items: center;
  1676. padding: 14px;
  1677. border: 1px solid var(--line-soft);
  1678. border-radius: 12px;
  1679. background: #fff;
  1680. box-shadow: var(--shadow-soft);
  1681. }
  1682. .binding-detail-resource,
  1683. .binding-detail-account {
  1684. display: grid;
  1685. gap: 6px;
  1686. min-width: 0;
  1687. }
  1688. .binding-detail-meta {
  1689. display: grid;
  1690. grid-template-columns: repeat(4, minmax(72px, auto));
  1691. gap: 10px;
  1692. align-items: center;
  1693. }
  1694. .binding-detail-meta > div {
  1695. display: grid;
  1696. gap: 5px;
  1697. }
  1698. .binding-detail-meta strong {
  1699. color: var(--text);
  1700. font-size: 13px;
  1701. font-weight: 720;
  1702. white-space: nowrap;
  1703. }
  1704. .binding-detail-label {
  1705. color: var(--muted);
  1706. font-size: 11px;
  1707. font-weight: 760;
  1708. }
  1709. .binding-detail-actions {
  1710. justify-content: flex-end;
  1711. }
  1712. .binding-cell-main {
  1713. display: inline-grid;
  1714. grid-template-columns: 34px minmax(0, 1fr);
  1715. gap: 10px;
  1716. align-items: center;
  1717. width: 100%;
  1718. min-width: 0;
  1719. }
  1720. .binding-cell-main > div > strong,
  1721. .binding-cell-main > div > span {
  1722. display: block;
  1723. min-width: 0;
  1724. overflow-wrap: anywhere;
  1725. }
  1726. .binding-cell-main > div > strong {
  1727. color: var(--text);
  1728. font-size: 14px;
  1729. line-height: 1.25;
  1730. max-width: 220px;
  1731. }
  1732. .binding-cell-main > div > span {
  1733. margin-top: 3px;
  1734. color: var(--muted);
  1735. font-size: 12px;
  1736. }
  1737. .resource-mini-icon {
  1738. display: grid;
  1739. place-items: center;
  1740. width: 34px;
  1741. height: 34px;
  1742. border-radius: 10px;
  1743. background: #eef5ff;
  1744. color: var(--accent);
  1745. }
  1746. .binding-cell-main .platform-logo {
  1747. width: 34px;
  1748. height: 34px;
  1749. align-self: center;
  1750. }
  1751. .binding-cell-main .platform-logo img {
  1752. width: 22px;
  1753. height: 22px;
  1754. }
  1755. .resource-mini-icon.email {
  1756. background: #f1edff;
  1757. color: #7d5fff;
  1758. }
  1759. .resource-mini-icon.domain {
  1760. background: #edf9f2;
  1761. color: var(--success);
  1762. }
  1763. .resource-mini-icon.account {
  1764. background: #f2f2f4;
  1765. color: #1d1d1f;
  1766. }
  1767. .resource-mini-icon svg {
  1768. display: block;
  1769. width: 20px;
  1770. height: 20px;
  1771. }
  1772. .resource-mini-icon svg * {
  1773. fill: none;
  1774. stroke: currentColor;
  1775. stroke-width: 2;
  1776. stroke-linecap: round;
  1777. stroke-linejoin: round;
  1778. }
  1779. .resource-mini-icon.phone svg path {
  1780. fill: none;
  1781. stroke: currentColor;
  1782. stroke-width: 2.1;
  1783. }
  1784. .resource-mini-icon.email svg {
  1785. transform: translateY(0.5px);
  1786. }
  1787. .resource-mini-icon.account svg circle {
  1788. fill: currentColor;
  1789. stroke: currentColor;
  1790. }
  1791. .role-badge {
  1792. display: inline-flex;
  1793. align-items: center;
  1794. min-height: 26px;
  1795. padding: 4px 10px;
  1796. border-radius: 999px;
  1797. background: #eef5ff;
  1798. color: var(--accent);
  1799. font-size: 12px;
  1800. font-weight: 760;
  1801. white-space: nowrap;
  1802. }
  1803. .role-badge.recovery {
  1804. background: #edf9f2;
  1805. color: var(--success);
  1806. }
  1807. .role-badge.payment {
  1808. background: #fff6e8;
  1809. color: var(--warning);
  1810. }
  1811. .role-badge.two_factor,
  1812. .role-badge.trusted_phone {
  1813. background: #f1edff;
  1814. color: #7d5fff;
  1815. }
  1816. .table-icon-actions {
  1817. display: flex;
  1818. gap: 8px;
  1819. align-items: center;
  1820. }
  1821. .table-icon-button {
  1822. position: relative;
  1823. display: grid;
  1824. place-items: center;
  1825. width: 34px;
  1826. min-width: 34px;
  1827. height: 34px;
  1828. min-height: 34px;
  1829. padding: 0;
  1830. border-radius: 50%;
  1831. background: #fff;
  1832. border-color: var(--line);
  1833. }
  1834. .table-icon-button::before,
  1835. .table-icon-button::after {
  1836. content: "";
  1837. position: absolute;
  1838. box-sizing: border-box;
  1839. }
  1840. .table-icon-button.view::before {
  1841. width: 18px;
  1842. height: 12px;
  1843. border: 2px solid currentColor;
  1844. border-radius: 50%;
  1845. }
  1846. .table-icon-button.view::after {
  1847. width: 5px;
  1848. height: 5px;
  1849. border-radius: 50%;
  1850. background: currentColor;
  1851. }
  1852. .table-icon-button.edit::before {
  1853. width: 16px;
  1854. height: 3px;
  1855. background: currentColor;
  1856. border-radius: 2px;
  1857. transform: rotate(-35deg);
  1858. }
  1859. .table-icon-button.edit::after {
  1860. right: 9px;
  1861. bottom: 8px;
  1862. width: 9px;
  1863. height: 2px;
  1864. background: currentColor;
  1865. border-radius: 2px;
  1866. }
  1867. .table-icon-button.delete {
  1868. color: var(--danger);
  1869. }
  1870. .table-icon-button.delete::before {
  1871. width: 14px;
  1872. height: 15px;
  1873. border: 2px solid currentColor;
  1874. border-top: 0;
  1875. border-radius: 0 0 3px 3px;
  1876. transform: translateY(2px);
  1877. }
  1878. .table-icon-button.delete::after {
  1879. width: 16px;
  1880. height: 2px;
  1881. background: currentColor;
  1882. border-radius: 2px;
  1883. transform: translateY(-8px);
  1884. }
  1885. .count-badge {
  1886. display: inline-grid;
  1887. place-items: center;
  1888. min-width: 24px;
  1889. min-height: 22px;
  1890. padding: 0 7px;
  1891. border-radius: 999px;
  1892. background: #eef5ff;
  1893. color: var(--accent);
  1894. font-size: 12px;
  1895. vertical-align: middle;
  1896. }
  1897. .relation-inspector {
  1898. position: sticky;
  1899. top: 20px;
  1900. overflow: hidden;
  1901. }
  1902. .inspector-profile,
  1903. .inspector-section {
  1904. padding: 16px;
  1905. border-bottom: 1px solid var(--line-soft);
  1906. }
  1907. .inspector-profile {
  1908. display: grid;
  1909. gap: 12px;
  1910. }
  1911. .inspector-profile h3,
  1912. .inspector-section h4 {
  1913. margin: 0;
  1914. }
  1915. .inspector-profile p {
  1916. margin: 5px 0 8px;
  1917. color: var(--muted);
  1918. overflow-wrap: anywhere;
  1919. }
  1920. .inspector-avatar .platform-chip {
  1921. transform-origin: left center;
  1922. }
  1923. .inspector-list {
  1924. display: grid;
  1925. gap: 8px;
  1926. margin-top: 12px;
  1927. }
  1928. .inspector-item {
  1929. display: grid;
  1930. gap: 4px;
  1931. padding: 10px;
  1932. border: 1px solid var(--line-soft);
  1933. border-radius: 8px;
  1934. background: #fbfbfd;
  1935. }
  1936. .inspector-item.active {
  1937. border-color: rgba(0, 113, 227, 0.45);
  1938. background: #f3f8ff;
  1939. }
  1940. .inspector-item span {
  1941. overflow-wrap: anywhere;
  1942. font-size: 13px;
  1943. }
  1944. .inspector-item strong {
  1945. color: var(--muted);
  1946. font-size: 12px;
  1947. }
  1948. .inspector-meta {
  1949. display: grid;
  1950. grid-template-columns: 86px minmax(0, 1fr);
  1951. gap: 10px;
  1952. margin: 12px 0 0;
  1953. align-items: center;
  1954. }
  1955. .inspector-meta dt {
  1956. color: var(--muted);
  1957. font-size: 12px;
  1958. font-weight: 720;
  1959. }
  1960. .inspector-meta dd {
  1961. margin: 0;
  1962. min-width: 0;
  1963. }
  1964. .risk-list.compact {
  1965. margin-top: 12px;
  1966. }
  1967. table {
  1968. width: 100%;
  1969. border-collapse: collapse;
  1970. min-width: 760px;
  1971. }
  1972. th,
  1973. td {
  1974. padding: 12px 15px;
  1975. border-bottom: 1px solid var(--line-soft);
  1976. text-align: left;
  1977. vertical-align: top;
  1978. font-size: 13px;
  1979. }
  1980. th {
  1981. background: #fbfbfd;
  1982. color: var(--muted);
  1983. font-size: 11px;
  1984. text-transform: uppercase;
  1985. letter-spacing: 0.05em;
  1986. font-weight: 760;
  1987. }
  1988. tbody tr {
  1989. transition: background 0.14s ease;
  1990. }
  1991. tbody tr:hover {
  1992. background: #fbfbfd;
  1993. }
  1994. tr:last-child td {
  1995. border-bottom: 0;
  1996. }
  1997. .accounts-list-view {
  1998. background: #f5f7fa;
  1999. border: 1.2px solid var(--border);
  2000. border-radius: 14px;
  2001. overflow: hidden;
  2002. margin-bottom: 20px;
  2003. }
  2004. .accounts-list-header {
  2005. padding: 12px 16px 0;
  2006. border-bottom: 1px solid var(--border);
  2007. }
  2008. .accounts-list-search {
  2009. display: flex;
  2010. align-items: center;
  2011. gap: 8px;
  2012. padding-bottom: 12px;
  2013. }
  2014. .accounts-list-search svg { flex-shrink: 0; width: 16px; height: 16px; color: var(--muted); }
  2015. .accounts-list-search input {
  2016. flex: 1;
  2017. border: none;
  2018. outline: none;
  2019. font-size: 14px;
  2020. background: transparent;
  2021. color: var(--text);
  2022. }
  2023. .accounts-list-search input::placeholder { color: var(--muted); }
  2024. .accounts-platform-tabs {
  2025. display: flex;
  2026. gap: 6px;
  2027. overflow-x: auto;
  2028. scrollbar-width: none;
  2029. padding-bottom: 12px;
  2030. }
  2031. .accounts-platform-tabs::-webkit-scrollbar { display: none; }
  2032. .accounts-list-items {
  2033. display: grid;
  2034. grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  2035. gap: 10px;
  2036. padding: 16px;
  2037. }
  2038. .account-list-item {
  2039. position: relative;
  2040. display: flex;
  2041. align-items: center;
  2042. gap: 12px;
  2043. padding: 14px 16px;
  2044. border-radius: 14px;
  2045. background: #fff;
  2046. box-shadow: 0 1px 3px rgba(0,0,0,.06), 0 1px 1px rgba(0,0,0,.03);
  2047. cursor: pointer;
  2048. transition: box-shadow 0.18s, transform 0.18s;
  2049. }
  2050. .account-list-item:hover {
  2051. box-shadow: 0 4px 18px rgba(0,0,0,.10);
  2052. transform: translateY(-2px);
  2053. }
  2054. .account-list-item:hover .account-list-item-actions { opacity: 1; }
  2055. .account-list-item.active {
  2056. box-shadow: 0 0 0 2px var(--accent), 0 4px 16px rgba(0,113,227,.1);
  2057. background: #f0f6ff;
  2058. }
  2059. .account-list-item[hidden] { display: none; }
  2060. .account-list-item .platform-logo {
  2061. flex-shrink: 0;
  2062. width: 38px;
  2063. height: 38px;
  2064. border-radius: 11px;
  2065. font-size: 12px;
  2066. }
  2067. .account-list-item-info {
  2068. flex: 1;
  2069. display: flex;
  2070. flex-direction: column;
  2071. gap: 2px;
  2072. min-width: 0;
  2073. }
  2074. .account-list-item-name { font-size: 14px; font-weight: 700; color: var(--text); }
  2075. .account-list-item-id { font-size: 12px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  2076. .account-list-item-actions {
  2077. position: absolute;
  2078. top: 8px;
  2079. right: 8px;
  2080. display: flex;
  2081. gap: 4px;
  2082. opacity: 0;
  2083. transition: opacity 0.14s;
  2084. }
  2085. .acct-action-btn {
  2086. display: grid;
  2087. place-items: center;
  2088. width: 26px;
  2089. height: 26px;
  2090. border-radius: 8px;
  2091. border: none;
  2092. background: rgba(255,255,255,.92);
  2093. box-shadow: 0 1px 4px rgba(0,0,0,.12);
  2094. color: var(--muted);
  2095. cursor: pointer;
  2096. backdrop-filter: blur(4px);
  2097. transition: background 0.12s, color 0.12s, box-shadow 0.12s;
  2098. }
  2099. .acct-action-btn svg { width: 13px; height: 13px; }
  2100. .assets-card-view {
  2101. background: #f5f7fa;
  2102. border: 1.2px solid var(--border);
  2103. border-radius: 14px;
  2104. overflow: hidden;
  2105. margin-bottom: 20px;
  2106. }
  2107. .assets-card-header {
  2108. padding: 12px 16px 0;
  2109. border-bottom: 1px solid var(--border);
  2110. }
  2111. .assets-card-grid {
  2112. display: grid;
  2113. grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  2114. gap: 12px;
  2115. padding: 16px;
  2116. }
  2117. .asset-drawer-backdrop {
  2118. position: fixed;
  2119. inset: 0;
  2120. background: rgba(15, 23, 42, 0.16);
  2121. backdrop-filter: blur(3px);
  2122. z-index: 35;
  2123. animation: assetDrawerBackdropIn 0.2s ease-out both;
  2124. }
  2125. .asset-drawer {
  2126. position: fixed;
  2127. top: 0;
  2128. right: 0;
  2129. bottom: 0;
  2130. width: min(460px, calc(100vw - 32px));
  2131. padding: 18px;
  2132. z-index: 36;
  2133. pointer-events: none;
  2134. animation: assetDrawerIn 0.24s cubic-bezier(0.2, 0.8, 0.2, 1) both;
  2135. }
  2136. .asset-drawer-backdrop.closing {
  2137. animation: assetDrawerBackdropOut 0.18s ease-in both;
  2138. }
  2139. .asset-drawer.closing {
  2140. animation: assetDrawerOut 0.2s cubic-bezier(0.4, 0, 1, 1) both;
  2141. }
  2142. .asset-drawer-shell {
  2143. position: relative;
  2144. height: 100%;
  2145. overflow: auto;
  2146. border-radius: 24px;
  2147. background: rgba(250, 250, 252, 0.96);
  2148. border: 1px solid rgba(205, 210, 220, 0.82);
  2149. box-shadow:
  2150. -16px 0 40px rgba(15, 23, 42, 0.1),
  2151. 0 12px 30px rgba(15, 23, 42, 0.08);
  2152. pointer-events: auto;
  2153. }
  2154. @keyframes assetDrawerIn {
  2155. from {
  2156. opacity: 0;
  2157. transform: translateX(28px) scale(0.985);
  2158. }
  2159. to {
  2160. opacity: 1;
  2161. transform: translateX(0) scale(1);
  2162. }
  2163. }
  2164. @keyframes assetDrawerOut {
  2165. from {
  2166. opacity: 1;
  2167. transform: translateX(0) scale(1);
  2168. }
  2169. to {
  2170. opacity: 0;
  2171. transform: translateX(28px) scale(0.985);
  2172. }
  2173. }
  2174. @keyframes assetDrawerBackdropIn {
  2175. from {
  2176. opacity: 0;
  2177. backdrop-filter: blur(0);
  2178. }
  2179. to {
  2180. opacity: 1;
  2181. backdrop-filter: blur(3px);
  2182. }
  2183. }
  2184. @keyframes assetDrawerBackdropOut {
  2185. from {
  2186. opacity: 1;
  2187. backdrop-filter: blur(3px);
  2188. }
  2189. to {
  2190. opacity: 0;
  2191. backdrop-filter: blur(0);
  2192. }
  2193. }
  2194. @media (prefers-reduced-motion: reduce) {
  2195. .asset-drawer,
  2196. .asset-drawer-backdrop,
  2197. .asset-drawer.closing,
  2198. .asset-drawer-backdrop.closing {
  2199. animation-duration: 0.01ms;
  2200. }
  2201. }
  2202. .asset-drawer-close {
  2203. position: absolute;
  2204. top: 16px;
  2205. right: 16px;
  2206. display: grid;
  2207. place-items: center;
  2208. width: 36px;
  2209. height: 36px;
  2210. border: 0;
  2211. border-radius: 50%;
  2212. background: rgba(29, 29, 31, 0.08);
  2213. color: #1d1d1f;
  2214. font-size: 24px;
  2215. line-height: 1;
  2216. z-index: 2;
  2217. }
  2218. .asset-drawer-close:hover {
  2219. background: rgba(29, 29, 31, 0.14);
  2220. }
  2221. .asset-card {
  2222. position: relative;
  2223. display: flex;
  2224. align-items: center;
  2225. gap: 14px;
  2226. min-height: 96px;
  2227. padding: 16px 18px;
  2228. border-radius: 18px;
  2229. background: #fff;
  2230. box-shadow: 0 1px 3px rgba(0,0,0,.06), 0 1px 1px rgba(0,0,0,.03);
  2231. cursor: pointer;
  2232. transition: box-shadow 0.18s, transform 0.18s, background 0.18s;
  2233. }
  2234. .asset-card:hover {
  2235. box-shadow: 0 6px 22px rgba(0,0,0,.09);
  2236. transform: translateY(-2px);
  2237. }
  2238. .asset-card:hover .asset-card-actions {
  2239. opacity: 1;
  2240. }
  2241. .asset-card.active {
  2242. background: #f0f6ff;
  2243. box-shadow: 0 0 0 2px var(--accent), 0 6px 22px rgba(0,113,227,.10);
  2244. }
  2245. .asset-card[hidden] {
  2246. display: none;
  2247. }
  2248. .asset-card-icon {
  2249. flex: 0 0 auto;
  2250. display: grid;
  2251. place-items: center;
  2252. width: 48px;
  2253. height: 48px;
  2254. border-radius: 14px;
  2255. box-shadow: inset 0 1px 0 rgba(255,255,255,.2);
  2256. }
  2257. .asset-card-icon svg {
  2258. width: 24px;
  2259. height: 24px;
  2260. }
  2261. .asset-card-body {
  2262. min-width: 0;
  2263. flex: 1;
  2264. display: grid;
  2265. gap: 4px;
  2266. }
  2267. .asset-card-title {
  2268. font-size: 14px;
  2269. font-weight: 760;
  2270. color: var(--text);
  2271. overflow-wrap: anywhere;
  2272. }
  2273. .asset-card-sub {
  2274. color: var(--muted);
  2275. font-size: 12px;
  2276. line-height: 1.35;
  2277. overflow-wrap: anywhere;
  2278. }
  2279. .asset-card-status {
  2280. margin-top: 2px;
  2281. }
  2282. .asset-card-actions {
  2283. position: absolute;
  2284. top: 10px;
  2285. right: 10px;
  2286. display: flex;
  2287. gap: 4px;
  2288. opacity: 0;
  2289. transition: opacity 0.14s ease;
  2290. }
  2291. .asset-card-empty {
  2292. padding: 24px 16px 28px;
  2293. color: var(--muted);
  2294. font-size: 14px;
  2295. }
  2296. .acct-action-btn:hover { background: #fff; color: var(--text); box-shadow: 0 2px 8px rgba(0,0,0,.16); }
  2297. .acct-action-del:hover { color: var(--danger); }
  2298. .account-list-empty {
  2299. padding: 24px 16px;
  2300. color: var(--muted);
  2301. font-size: 14px;
  2302. text-align: center;
  2303. }
  2304. .pill {
  2305. display: inline-flex;
  2306. align-items: center;
  2307. min-height: 23px;
  2308. padding: 3px 8px;
  2309. border-radius: 999px;
  2310. border: 1px solid var(--line);
  2311. background: var(--panel-soft);
  2312. color: var(--text);
  2313. font-size: 11px;
  2314. font-weight: 760;
  2315. white-space: nowrap;
  2316. }
  2317. .pill.high,
  2318. .pill.critical,
  2319. .pill.locked,
  2320. .pill.suspended,
  2321. .pill.unusable,
  2322. .pill.cannot_receive,
  2323. .pill.cannot_receive_sms,
  2324. .pill.high_risk {
  2325. background: #fff0ee;
  2326. border-color: #f0caca;
  2327. color: var(--danger);
  2328. }
  2329. .pill.medium,
  2330. .pill.appealing,
  2331. .pill.pending_verify,
  2332. .pill.processing {
  2333. background: #fff6e8;
  2334. border-color: #eed0a2;
  2335. color: var(--warning);
  2336. }
  2337. .pill.low,
  2338. .pill.normal,
  2339. .pill.available,
  2340. .pill.active,
  2341. .pill.resolved {
  2342. background: #eef9f1;
  2343. border-color: #c5e8d0;
  2344. color: var(--success);
  2345. }
  2346. .flag-chip {
  2347. display: inline-flex;
  2348. align-items: center;
  2349. gap: 7px;
  2350. max-width: 100%;
  2351. min-height: 25px;
  2352. padding: 3px 9px 3px 5px;
  2353. border: 1px solid #dedfe5;
  2354. border-radius: 999px;
  2355. background: linear-gradient(180deg, #ffffff 0%, #f7f7fa 100%);
  2356. color: var(--text);
  2357. box-shadow: 0 1px 2px rgba(0, 0, 0, 0.035);
  2358. font-size: 12px;
  2359. font-weight: 720;
  2360. white-space: nowrap;
  2361. }
  2362. .flag-chip-icon {
  2363. display: grid;
  2364. place-items: center;
  2365. width: 21px;
  2366. height: 21px;
  2367. border-radius: 50%;
  2368. background: #fff;
  2369. box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.06);
  2370. font-size: 14px;
  2371. line-height: 1;
  2372. }
  2373. .platform-chip {
  2374. display: inline-flex;
  2375. align-items: center;
  2376. gap: 8px;
  2377. max-width: 100%;
  2378. min-height: 28px;
  2379. padding: 3px 10px 3px 4px;
  2380. border: 1px solid #dedfe5;
  2381. border-radius: 999px;
  2382. background: linear-gradient(180deg, #ffffff 0%, #f7f7fa 100%);
  2383. color: var(--text);
  2384. box-shadow: 0 1px 2px rgba(0, 0, 0, 0.035);
  2385. font-size: 12px;
  2386. font-weight: 740;
  2387. white-space: nowrap;
  2388. }
  2389. .platform-logo {
  2390. position: relative;
  2391. display: grid;
  2392. place-items: center;
  2393. width: 22px;
  2394. height: 22px;
  2395. border-radius: 50%;
  2396. background: #1d1d1f;
  2397. color: #fff;
  2398. font-size: 10px;
  2399. font-weight: 850;
  2400. letter-spacing: 0;
  2401. line-height: 1;
  2402. overflow: hidden;
  2403. }
  2404. .platform-logo img {
  2405. position: absolute;
  2406. inset: 50% auto auto 50%;
  2407. display: block;
  2408. width: 64%;
  2409. height: 64%;
  2410. object-fit: contain;
  2411. filter: brightness(0) invert(1);
  2412. transform: translate(-50%, -50%);
  2413. }
  2414. .platform-logo.wechat img,
  2415. .platform-logo.openai img,
  2416. .platform-logo.chatgpt img,
  2417. .platform-logo.claude img {
  2418. width: 68%;
  2419. height: 68%;
  2420. }
  2421. .platform-logo.openai img,
  2422. .platform-logo.chatgpt img {
  2423. transform: translate(-50%, -50%) translate(0.5px, 0.25px) scale(0.96);
  2424. }
  2425. .platform-logo.wechat img {
  2426. transform: translate(-50%, -50%) translate(0.5px, 0.25px) scale(0.96);
  2427. }
  2428. .platform-logo.claude img {
  2429. transform: translate(-50%, -50%) translate(0.25px, 0.25px) scale(0.92);
  2430. }
  2431. .platform-logo.gemini img {
  2432. transform: translate(-50%, -50%) translate(0.25px, 0.25px) scale(0.94);
  2433. }
  2434. .platform-logo.apple img {
  2435. width: 62%;
  2436. height: 62%;
  2437. transform: translate(-50%, -50%) translate(0.5px, 0.5px);
  2438. }
  2439. .platform-logo.apple {
  2440. background: #1d1d1f;
  2441. }
  2442. .platform-logo.google {
  2443. background: conic-gradient(from 45deg, #4285f4, #34a853, #fbbc05, #ea4335, #4285f4);
  2444. }
  2445. .platform-logo.gemini {
  2446. background: linear-gradient(135deg, #4c8bf5 0%, #9b72f2 52%, #d96570 100%);
  2447. }
  2448. .platform-logo.chatgpt,
  2449. .platform-logo.openai {
  2450. background: #10a37f;
  2451. }
  2452. .platform-logo.claude {
  2453. background: #d97745;
  2454. }
  2455. .platform-logo.wechat {
  2456. background: #07c160;
  2457. font-size: 12px;
  2458. }
  2459. .platform-logo.github {
  2460. background: #24292f;
  2461. }
  2462. .platform-logo.telegram {
  2463. background: #229ed9;
  2464. }
  2465. .platform-logo.qq {
  2466. background: #1d1d1f;
  2467. }
  2468. .platform-logo.x,
  2469. .platform-logo.notion,
  2470. .platform-logo.github,
  2471. .platform-logo.steam,
  2472. .platform-logo.epicgames {
  2473. background: #1d1d1f;
  2474. }
  2475. .platform-logo.facebook {
  2476. background: #1877f2;
  2477. }
  2478. .platform-logo.instagram {
  2479. background: linear-gradient(135deg, #833ab4 0%, #fd1d1d 50%, #fcb045 100%);
  2480. }
  2481. .platform-logo.discord {
  2482. background: #5865f2;
  2483. }
  2484. .platform-logo.slack {
  2485. background: #4a154b;
  2486. }
  2487. .platform-logo.onepassword,
  2488. .platform-logo.microsoft,
  2489. .platform-logo.playstation {
  2490. background: #0078d4;
  2491. }
  2492. .platform-logo.amazon {
  2493. background: #ff9900;
  2494. }
  2495. .platform-logo.cloudflare {
  2496. background: #f38020;
  2497. }
  2498. .platform-logo.paypal {
  2499. background: #003087;
  2500. }
  2501. .platform-logo.stripe {
  2502. background: #635bff;
  2503. }
  2504. .platform-logo.alipay {
  2505. background: #1677ff;
  2506. }
  2507. .platform-logo.tiktok {
  2508. background: #111;
  2509. }
  2510. .platform-logo.youtube,
  2511. .platform-logo.netflix,
  2512. .platform-logo.nintendo {
  2513. background: #e50914;
  2514. }
  2515. .platform-logo.spotify {
  2516. background: #1db954;
  2517. }
  2518. .platform-logo.generic {
  2519. background: #777b86;
  2520. }
  2521. .platform-logo.custom {
  2522. background: #fff;
  2523. color: var(--text);
  2524. border: 1px solid #dfe1e7;
  2525. }
  2526. .platform-logo.custom img {
  2527. width: 76%;
  2528. height: 76%;
  2529. filter: none;
  2530. transform: translate(-50%, -50%);
  2531. }
  2532. .logo-input-row {
  2533. display: grid;
  2534. grid-template-columns: minmax(0, 1fr) auto;
  2535. gap: 10px;
  2536. align-items: center;
  2537. }
  2538. .logo-upload-button {
  2539. display: inline-flex;
  2540. align-items: center;
  2541. justify-content: center;
  2542. min-height: 44px;
  2543. white-space: nowrap;
  2544. cursor: pointer;
  2545. }
  2546. .detail-panel {
  2547. padding: 18px;
  2548. display: grid;
  2549. gap: 14px;
  2550. }
  2551. .detail-panel-drawer {
  2552. min-height: 100%;
  2553. padding: 26px 22px 22px;
  2554. background: transparent;
  2555. border: 0;
  2556. box-shadow: none;
  2557. backdrop-filter: none;
  2558. }
  2559. .detail-panel-drawer > .toolbar {
  2560. display: grid;
  2561. grid-template-columns: 1fr;
  2562. gap: 14px;
  2563. padding-right: 52px;
  2564. }
  2565. .detail-panel-drawer > .toolbar .inline-actions {
  2566. justify-content: flex-start;
  2567. }
  2568. .detail-panel-drawer > .toolbar .inline-actions button {
  2569. min-height: 36px;
  2570. padding: 8px 12px;
  2571. }
  2572. .detail-panel h3 {
  2573. margin: 0;
  2574. font-size: 20px;
  2575. }
  2576. .detail-panel-drawer h3 {
  2577. font-size: 22px;
  2578. line-height: 1.2;
  2579. overflow-wrap: anywhere;
  2580. }
  2581. .detail-grid {
  2582. display: grid;
  2583. grid-template-columns: repeat(3, minmax(160px, 1fr));
  2584. gap: 12px;
  2585. }
  2586. .detail-panel-drawer .detail-grid {
  2587. grid-template-columns: repeat(2, minmax(0, 1fr));
  2588. gap: 10px;
  2589. }
  2590. .detail-item {
  2591. padding: 13px;
  2592. background: #fbfbfd;
  2593. border: 1px solid var(--line-soft);
  2594. border-radius: 8px;
  2595. min-width: 0;
  2596. }
  2597. .detail-panel-drawer .detail-item {
  2598. padding: 12px;
  2599. border-radius: 12px;
  2600. background: rgba(255, 255, 255, 0.76);
  2601. }
  2602. .detail-item span {
  2603. display: block;
  2604. margin-bottom: 5px;
  2605. color: var(--muted);
  2606. font-size: 12px;
  2607. font-weight: 720;
  2608. }
  2609. .detail-item strong {
  2610. display: block;
  2611. overflow-wrap: anywhere;
  2612. font-size: 18px;
  2613. line-height: 1.35;
  2614. font-weight: 760;
  2615. }
  2616. .detail-panel-drawer .detail-item strong {
  2617. font-size: 15px;
  2618. }
  2619. .detail-panel-drawer .detail-item span {
  2620. font-size: 11px;
  2621. }
  2622. .detail-panel-drawer .bound-list,
  2623. .detail-panel-drawer .risk-list {
  2624. gap: 8px;
  2625. }
  2626. .detail-panel-drawer .bound-item,
  2627. .detail-panel-drawer .risk-item {
  2628. padding: 12px;
  2629. border-radius: 12px;
  2630. background: rgba(255, 255, 255, 0.76);
  2631. }
  2632. .detail-item strong .pill,
  2633. .detail-item strong .flag-chip,
  2634. .detail-item strong .platform-chip {
  2635. font-size: 12px;
  2636. line-height: 1;
  2637. font-weight: 740;
  2638. vertical-align: middle;
  2639. }
  2640. .detail-item strong .platform-chip,
  2641. .detail-item strong .flag-chip {
  2642. display: inline-flex;
  2643. width: auto;
  2644. max-width: 100%;
  2645. }
  2646. .detail-item strong .platform-logo {
  2647. width: 22px;
  2648. height: 22px;
  2649. font-size: 10px;
  2650. }
  2651. .detail-item strong .flag-chip-icon {
  2652. width: 21px;
  2653. height: 21px;
  2654. font-size: 14px;
  2655. }
  2656. .risk-item,
  2657. .bound-item {
  2658. display: grid;
  2659. gap: 5px;
  2660. padding: 13px;
  2661. background: #fbfbfd;
  2662. border: 1px solid var(--line-soft);
  2663. border-radius: 8px;
  2664. }
  2665. .risk-title {
  2666. display: flex;
  2667. justify-content: space-between;
  2668. gap: 10px;
  2669. align-items: start;
  2670. }
  2671. .empty {
  2672. padding: 38px;
  2673. text-align: center;
  2674. }
  2675. .empty h3 {
  2676. font-size: 20px;
  2677. }
  2678. .empty p {
  2679. margin: 8px auto 0;
  2680. max-width: 520px;
  2681. color: var(--muted);
  2682. line-height: 1.55;
  2683. }
  2684. .dialog {
  2685. width: min(760px, calc(100vw - 28px));
  2686. border: 0;
  2687. border-radius: 8px;
  2688. padding: 0;
  2689. box-shadow: 0 30px 90px rgba(0, 0, 0, 0.22);
  2690. overflow: hidden;
  2691. }
  2692. .dialog::backdrop {
  2693. background: rgba(0, 0, 0, 0.32);
  2694. backdrop-filter: blur(8px);
  2695. }
  2696. .onboarding-dialog {
  2697. width: min(860px, calc(100vw - 28px));
  2698. border: 0;
  2699. border-radius: 18px;
  2700. padding: 0;
  2701. background: transparent;
  2702. box-shadow: 0 30px 90px rgba(0, 0, 0, 0.24);
  2703. overflow: hidden;
  2704. }
  2705. .onboarding-dialog::backdrop {
  2706. background: rgba(0, 0, 0, 0.3);
  2707. backdrop-filter: blur(8px);
  2708. }
  2709. .onboarding-panel {
  2710. background: #fbfbfd;
  2711. }
  2712. .onboarding-head {
  2713. display: flex;
  2714. align-items: start;
  2715. justify-content: space-between;
  2716. gap: 18px;
  2717. padding: 24px;
  2718. background: rgba(255, 255, 255, 0.86);
  2719. border-bottom: 1px solid var(--line-soft);
  2720. }
  2721. .onboarding-head h3 {
  2722. margin-top: 6px;
  2723. font-size: 28px;
  2724. line-height: 1.12;
  2725. }
  2726. .onboarding-steps {
  2727. display: grid;
  2728. grid-template-columns: repeat(2, minmax(0, 1fr));
  2729. gap: 14px;
  2730. padding: 22px 24px;
  2731. }
  2732. .onboarding-step {
  2733. display: grid;
  2734. grid-template-columns: 34px minmax(0, 1fr);
  2735. gap: 14px;
  2736. padding: 16px;
  2737. border: 1px solid var(--line-soft);
  2738. border-radius: 14px;
  2739. background: #fff;
  2740. box-shadow: var(--shadow-soft);
  2741. }
  2742. .onboarding-step-index {
  2743. display: grid;
  2744. place-items: center;
  2745. width: 34px;
  2746. height: 34px;
  2747. border-radius: 50%;
  2748. background: #eef5ff;
  2749. color: var(--accent);
  2750. font-size: 14px;
  2751. font-weight: 820;
  2752. }
  2753. .onboarding-step h4 {
  2754. margin: 2px 0 7px;
  2755. font-size: 17px;
  2756. line-height: 1.2;
  2757. }
  2758. .onboarding-step p {
  2759. margin: 0 0 14px;
  2760. color: var(--muted);
  2761. font-size: 13px;
  2762. line-height: 1.55;
  2763. }
  2764. .onboarding-step button {
  2765. min-height: 34px;
  2766. padding: 7px 12px;
  2767. font-size: 13px;
  2768. }
  2769. .onboarding-actions {
  2770. display: flex;
  2771. justify-content: flex-end;
  2772. gap: 10px;
  2773. padding: 16px 24px 22px;
  2774. border-top: 1px solid var(--line-soft);
  2775. background: rgba(255, 255, 255, 0.72);
  2776. }
  2777. .guided-tour-layer {
  2778. position: fixed;
  2779. inset: 0;
  2780. z-index: 80;
  2781. pointer-events: none;
  2782. }
  2783. .dialog .guided-tour-layer {
  2784. z-index: 3;
  2785. }
  2786. .guided-tour-layer.dialog-tour {
  2787. position: absolute;
  2788. }
  2789. .guided-tour-scrim {
  2790. position: fixed;
  2791. inset: 0;
  2792. background: rgba(15, 23, 42, 0.18);
  2793. backdrop-filter: blur(1.5px);
  2794. pointer-events: none;
  2795. }
  2796. .guided-tour-layer.dialog-tour .guided-tour-scrim {
  2797. display: none;
  2798. }
  2799. .guided-tour-spotlight {
  2800. position: fixed;
  2801. border: 2px solid var(--accent);
  2802. border-radius: 12px;
  2803. box-shadow:
  2804. 0 0 0 9999px rgba(15, 23, 42, 0.22),
  2805. 0 0 0 7px rgba(0, 113, 227, 0.12),
  2806. 0 12px 34px rgba(0, 113, 227, 0.22);
  2807. pointer-events: none;
  2808. animation: tourPulse 1.4s ease-in-out infinite;
  2809. }
  2810. .guided-tour-layer.dialog-tour .guided-tour-spotlight {
  2811. box-shadow:
  2812. 0 0 0 7px rgba(0, 113, 227, 0.12),
  2813. 0 12px 34px rgba(0, 113, 227, 0.2);
  2814. }
  2815. .guided-tour-cursor {
  2816. position: fixed;
  2817. width: 28px;
  2818. height: 28px;
  2819. pointer-events: none;
  2820. filter: drop-shadow(0 8px 10px rgba(15, 23, 42, 0.22));
  2821. animation: tourCursorTap 1.2s ease-in-out infinite;
  2822. }
  2823. .guided-tour-cursor::before {
  2824. content: "";
  2825. position: absolute;
  2826. left: 4px;
  2827. top: 2px;
  2828. width: 0;
  2829. height: 0;
  2830. border-top: 21px solid #1d1d1f;
  2831. border-right: 13px solid transparent;
  2832. transform: rotate(-18deg);
  2833. }
  2834. .guided-tour-cursor::after {
  2835. content: "";
  2836. position: absolute;
  2837. left: 8px;
  2838. top: 7px;
  2839. width: 8px;
  2840. height: 8px;
  2841. border-radius: 50%;
  2842. background: #fff;
  2843. opacity: 0.95;
  2844. }
  2845. .guided-tour-card {
  2846. position: fixed;
  2847. width: min(320px, calc(100vw - 36px));
  2848. padding: 16px;
  2849. border: 1px solid rgba(207, 210, 220, 0.9);
  2850. border-radius: 16px;
  2851. background: rgba(255, 255, 255, 0.96);
  2852. box-shadow: 0 22px 60px rgba(15, 23, 42, 0.18);
  2853. pointer-events: auto;
  2854. }
  2855. .guided-tour-progress {
  2856. color: var(--accent);
  2857. font-size: 12px;
  2858. font-weight: 820;
  2859. }
  2860. .guided-tour-card h3 {
  2861. margin: 8px 0 8px;
  2862. font-size: 18px;
  2863. line-height: 1.25;
  2864. }
  2865. .guided-tour-card p {
  2866. margin: 0;
  2867. color: var(--muted);
  2868. font-size: 13px;
  2869. line-height: 1.55;
  2870. }
  2871. .guided-tour-actions {
  2872. display: flex;
  2873. align-items: center;
  2874. justify-content: space-between;
  2875. gap: 10px;
  2876. margin-top: 14px;
  2877. }
  2878. .guided-tour-actions button {
  2879. min-height: 34px;
  2880. padding: 7px 12px;
  2881. font-size: 13px;
  2882. }
  2883. .guided-tour-wait {
  2884. color: var(--muted);
  2885. font-size: 12px;
  2886. font-weight: 720;
  2887. }
  2888. @keyframes tourPulse {
  2889. 0%, 100% {
  2890. box-shadow:
  2891. 0 0 0 9999px rgba(15, 23, 42, 0.22),
  2892. 0 0 0 7px rgba(0, 113, 227, 0.12),
  2893. 0 12px 34px rgba(0, 113, 227, 0.22);
  2894. }
  2895. 50% {
  2896. box-shadow:
  2897. 0 0 0 9999px rgba(15, 23, 42, 0.22),
  2898. 0 0 0 11px rgba(0, 113, 227, 0.18),
  2899. 0 16px 42px rgba(0, 113, 227, 0.28);
  2900. }
  2901. }
  2902. .guided-tour-layer.dialog-tour .guided-tour-spotlight {
  2903. animation: tourPulseLight 1.4s ease-in-out infinite;
  2904. }
  2905. @keyframes tourPulseLight {
  2906. 0%, 100% {
  2907. box-shadow:
  2908. 0 0 0 7px rgba(0, 113, 227, 0.12),
  2909. 0 12px 34px rgba(0, 113, 227, 0.2);
  2910. }
  2911. 50% {
  2912. box-shadow:
  2913. 0 0 0 11px rgba(0, 113, 227, 0.18),
  2914. 0 16px 42px rgba(0, 113, 227, 0.26);
  2915. }
  2916. }
  2917. @keyframes tourCursorTap {
  2918. 0%, 100% {
  2919. transform: translate(0, 0) scale(1);
  2920. }
  2921. 50% {
  2922. transform: translate(2px, 2px) scale(0.94);
  2923. }
  2924. }
  2925. .dialog form {
  2926. padding: 0;
  2927. background: #fbfbfd;
  2928. }
  2929. .dialog-head {
  2930. display: flex;
  2931. align-items: start;
  2932. justify-content: space-between;
  2933. gap: 16px;
  2934. padding: 22px 22px 18px;
  2935. margin-bottom: 0;
  2936. background: rgba(255, 255, 255, 0.82);
  2937. border-bottom: 1px solid var(--line-soft);
  2938. }
  2939. .dialog-head h3 {
  2940. font-size: 22px;
  2941. font-weight: 780;
  2942. line-height: 1.15;
  2943. }
  2944. .form-grid {
  2945. display: grid;
  2946. grid-template-columns: repeat(2, minmax(0, 1fr));
  2947. gap: 15px;
  2948. max-height: min(68vh, 680px);
  2949. overflow: auto;
  2950. padding: 20px 22px 22px;
  2951. background:
  2952. linear-gradient(#fbfbfd 30%, rgba(251, 251, 253, 0)),
  2953. linear-gradient(rgba(251, 251, 253, 0), #fbfbfd 70%) bottom,
  2954. linear-gradient(rgba(0, 0, 0, 0.045), rgba(0, 0, 0, 0)),
  2955. linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.035)) bottom;
  2956. background-repeat: no-repeat;
  2957. background-size:
  2958. 100% 28px,
  2959. 100% 28px,
  2960. 100% 10px,
  2961. 100% 10px;
  2962. background-attachment: local, local, scroll, scroll;
  2963. }
  2964. .form-field {
  2965. display: grid;
  2966. gap: 7px;
  2967. align-content: start;
  2968. }
  2969. .form-field.full {
  2970. grid-column: 1 / -1;
  2971. }
  2972. .phone-combo {
  2973. display: grid;
  2974. grid-template-columns: minmax(220px, 0.8fr) minmax(220px, 1fr);
  2975. align-items: stretch;
  2976. }
  2977. .phone-combo select,
  2978. .phone-combo input {
  2979. min-height: 42px;
  2980. border: 1px solid #cfd0d6;
  2981. background: var(--panel-solid);
  2982. color: var(--text);
  2983. padding: 9px 11px;
  2984. outline: 0;
  2985. box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.025);
  2986. transition:
  2987. border-color 0.16s ease,
  2988. box-shadow 0.16s ease,
  2989. background 0.16s ease;
  2990. }
  2991. .phone-combo select {
  2992. border-radius: 8px 0 0 8px;
  2993. }
  2994. .phone-combo input {
  2995. margin-left: -1px;
  2996. border-radius: 0 8px 8px 0;
  2997. }
  2998. .phone-combo select:hover,
  2999. .phone-combo input:hover {
  3000. border-color: #b7b8bf;
  3001. }
  3002. .phone-combo select:focus,
  3003. .phone-combo input:focus {
  3004. position: relative;
  3005. z-index: 1;
  3006. border-color: var(--accent);
  3007. background: #fff;
  3008. box-shadow:
  3009. 0 0 0 4px rgba(0, 113, 227, 0.12),
  3010. inset 0 1px 1px rgba(0, 0, 0, 0.02);
  3011. }
  3012. .form-field label {
  3013. display: flex;
  3014. justify-content: space-between;
  3015. gap: 10px;
  3016. font-size: 13px;
  3017. font-weight: 720;
  3018. color: #303034;
  3019. }
  3020. .required-mark {
  3021. align-self: center;
  3022. padding: 2px 6px;
  3023. border-radius: 999px;
  3024. background: #eef5ff;
  3025. color: var(--accent-strong);
  3026. font-size: 10px;
  3027. font-weight: 760;
  3028. }
  3029. .form-field textarea {
  3030. min-height: 94px;
  3031. resize: vertical;
  3032. }
  3033. .field-hint {
  3034. margin-top: 1px;
  3035. font-size: 12px;
  3036. line-height: 1.45;
  3037. }
  3038. .switch-row {
  3039. align-self: end;
  3040. display: flex;
  3041. gap: 11px;
  3042. align-items: center;
  3043. min-height: 42px;
  3044. padding: 9px 11px;
  3045. border: 1px solid var(--line-soft);
  3046. border-radius: 8px;
  3047. background: #fff;
  3048. color: #303034;
  3049. font-size: 13px;
  3050. font-weight: 650;
  3051. cursor: pointer;
  3052. transition:
  3053. border-color 0.16s ease,
  3054. background 0.16s ease,
  3055. box-shadow 0.16s ease;
  3056. }
  3057. .switch-row:hover {
  3058. border-color: #c8c9d0;
  3059. box-shadow: var(--shadow-soft);
  3060. }
  3061. .switch-row input {
  3062. position: absolute;
  3063. opacity: 0;
  3064. pointer-events: none;
  3065. }
  3066. .switch-track {
  3067. position: relative;
  3068. flex: 0 0 auto;
  3069. width: 42px;
  3070. height: 24px;
  3071. border-radius: 999px;
  3072. background: #d7d8dd;
  3073. transition:
  3074. background 0.18s ease,
  3075. box-shadow 0.18s ease;
  3076. }
  3077. .switch-thumb {
  3078. position: absolute;
  3079. top: 2px;
  3080. left: 2px;
  3081. width: 20px;
  3082. height: 20px;
  3083. border-radius: 50%;
  3084. background: #fff;
  3085. box-shadow: 0 2px 5px rgba(0, 0, 0, 0.22);
  3086. transition: transform 0.18s ease;
  3087. }
  3088. .switch-row input:checked + .switch-track {
  3089. background: var(--accent);
  3090. }
  3091. .switch-row input:checked + .switch-track .switch-thumb {
  3092. transform: translateX(18px);
  3093. }
  3094. .switch-row input:focus-visible + .switch-track {
  3095. box-shadow: 0 0 0 4px rgba(0, 113, 227, 0.16);
  3096. }
  3097. .binding-sentence {
  3098. display: flex;
  3099. flex-wrap: wrap;
  3100. align-items: center;
  3101. gap: 6px 8px;
  3102. padding: 14px 16px;
  3103. margin-bottom: 4px;
  3104. border-radius: 10px;
  3105. background: linear-gradient(135deg, #f0f5ff 0%, #f5f0ff 100%);
  3106. border: 1px solid #dde5f8;
  3107. font-size: 14px;
  3108. line-height: 1.5;
  3109. grid-column: 1 / -1;
  3110. }
  3111. .bs-text {
  3112. color: var(--muted);
  3113. font-weight: 520;
  3114. }
  3115. .bs-chip {
  3116. padding: 3px 10px;
  3117. border-radius: 999px;
  3118. background: rgba(255, 255, 255, 0.88);
  3119. border: 1px solid #c8d6f0;
  3120. color: var(--text);
  3121. font-weight: 700;
  3122. font-size: 13px;
  3123. max-width: 200px;
  3124. overflow: hidden;
  3125. text-overflow: ellipsis;
  3126. white-space: nowrap;
  3127. }
  3128. .binding-section-label {
  3129. grid-column: 1 / -1;
  3130. font-size: 12px;
  3131. font-weight: 760;
  3132. color: var(--muted);
  3133. text-transform: uppercase;
  3134. letter-spacing: 0.06em;
  3135. margin-top: 4px;
  3136. display: flex;
  3137. align-items: center;
  3138. gap: 8px;
  3139. }
  3140. .binding-section-label .required-mark {
  3141. font-size: 10px;
  3142. }
  3143. .binding-asset-row {
  3144. grid-column: 1 / -1;
  3145. display: flex;
  3146. gap: 10px;
  3147. }
  3148. .binding-asset-row .form-field {
  3149. flex: 1;
  3150. }
  3151. .binding-more {
  3152. grid-column: 1 / -1;
  3153. margin-top: 4px;
  3154. }
  3155. .binding-more summary {
  3156. cursor: pointer;
  3157. font-size: 13px;
  3158. font-weight: 680;
  3159. color: var(--muted);
  3160. padding: 8px 4px;
  3161. border-radius: 6px;
  3162. user-select: none;
  3163. list-style: none;
  3164. display: flex;
  3165. align-items: center;
  3166. gap: 6px;
  3167. }
  3168. .binding-more summary::before {
  3169. content: "▸";
  3170. display: inline-block;
  3171. transition: transform 0.18s;
  3172. font-size: 10px;
  3173. }
  3174. .binding-more[open] summary::before {
  3175. transform: rotate(90deg);
  3176. }
  3177. .binding-more-grid {
  3178. display: grid;
  3179. grid-template-columns: repeat(2, minmax(0, 1fr));
  3180. gap: 14px;
  3181. padding-top: 10px;
  3182. }
  3183. .binding-more-grid .form-field.full,
  3184. .binding-more-grid textarea {
  3185. grid-column: 1 / -1;
  3186. }
  3187. .sr-only {
  3188. position: absolute;
  3189. width: 1px;
  3190. height: 1px;
  3191. overflow: hidden;
  3192. clip: rect(0 0 0 0);
  3193. white-space: nowrap;
  3194. }
  3195. .asset-type-tabs {
  3196. display: grid;
  3197. grid-template-columns: repeat(4, 1fr);
  3198. gap: 8px;
  3199. margin-bottom: 8px;
  3200. }
  3201. .asset-type-tab {
  3202. display: flex;
  3203. flex-direction: column;
  3204. align-items: center;
  3205. gap: 5px;
  3206. padding: 10px 6px;
  3207. border-radius: 10px;
  3208. border: 1.2px solid var(--border);
  3209. background: var(--bg);
  3210. cursor: pointer;
  3211. font-size: 12px;
  3212. font-weight: 640;
  3213. color: var(--muted);
  3214. transition: border-color 0.12s, background 0.12s, color 0.12s;
  3215. }
  3216. .asset-type-tab svg { width: 18px; height: 18px; }
  3217. .asset-type-tab:hover { border-color: var(--accent); color: var(--accent); background: #f0f5ff; }
  3218. .asset-type-tab.active { border-color: var(--accent); color: var(--accent); background: #eef5ff; font-weight: 760; }
  3219. .asset-picker-list {
  3220. border: 1.2px solid var(--border);
  3221. border-radius: 10px;
  3222. overflow: hidden;
  3223. max-height: 160px;
  3224. overflow-y: auto;
  3225. }
  3226. .asset-item {
  3227. padding: 9px 14px;
  3228. font-size: 13px;
  3229. cursor: pointer;
  3230. color: var(--text);
  3231. border-bottom: 1px solid var(--border);
  3232. transition: background 0.1s;
  3233. }
  3234. .asset-item:last-child { border-bottom: none; }
  3235. .asset-item:hover { background: var(--hover, #f5f5f5); }
  3236. .asset-item.selected { background: #eef5ff; color: var(--accent); font-weight: 680; }
  3237. .asset-item-empty { padding: 12px 14px; color: var(--muted); font-size: 13px; }
  3238. .account-picker {
  3239. border: 1.2px solid var(--border);
  3240. border-radius: 10px;
  3241. overflow: hidden;
  3242. background: var(--bg);
  3243. transition: border-color 0.15s;
  3244. }
  3245. .account-picker:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(0,113,227,.1); }
  3246. .account-picker.picker-error { border-color: var(--danger); box-shadow: 0 0 0 3px rgba(255,59,48,.1); }
  3247. .account-picker-search {
  3248. display: flex;
  3249. align-items: center;
  3250. gap: 8px;
  3251. padding: 8px 12px;
  3252. border-bottom: 1px solid var(--border);
  3253. }
  3254. .account-picker-search svg { flex-shrink: 0; width: 15px; height: 15px; color: var(--muted); }
  3255. .account-picker-search input {
  3256. flex: 1;
  3257. border: none;
  3258. outline: none;
  3259. font-size: 13px;
  3260. background: transparent;
  3261. color: var(--text);
  3262. }
  3263. .account-picker-search input::placeholder { color: var(--muted); }
  3264. .account-filter-tabs {
  3265. display: flex;
  3266. gap: 6px;
  3267. padding: 8px 12px;
  3268. border-bottom: 1px solid var(--border);
  3269. overflow-x: auto;
  3270. scrollbar-width: none;
  3271. }
  3272. .account-filter-tabs::-webkit-scrollbar { display: none; }
  3273. .platform-tab {
  3274. flex-shrink: 0;
  3275. padding: 3px 10px;
  3276. border-radius: 999px;
  3277. border: 1px solid var(--border);
  3278. background: transparent;
  3279. font-size: 12px;
  3280. font-weight: 640;
  3281. color: var(--muted);
  3282. cursor: pointer;
  3283. white-space: nowrap;
  3284. transition: border-color 0.12s, background 0.12s, color 0.12s;
  3285. }
  3286. .platform-tab:hover { border-color: var(--accent); color: var(--accent); }
  3287. .platform-tab.active { background: var(--accent); border-color: var(--accent); color: #fff; }
  3288. .account-picker-list {
  3289. max-height: 220px;
  3290. overflow-y: auto;
  3291. }
  3292. .account-item {
  3293. display: flex;
  3294. align-items: center;
  3295. gap: 10px;
  3296. padding: 8px 12px;
  3297. cursor: pointer;
  3298. transition: background 0.1s;
  3299. }
  3300. .account-item:hover { background: var(--hover, #f5f5f5); }
  3301. .account-item.selected { background: #eef5ff; }
  3302. .account-item[hidden] { display: none; }
  3303. .account-item-logo {
  3304. flex-shrink: 0;
  3305. width: 26px;
  3306. height: 26px;
  3307. border-radius: 7px;
  3308. font-size: 9px;
  3309. }
  3310. .account-item-info {
  3311. display: flex;
  3312. flex-direction: column;
  3313. min-width: 0;
  3314. gap: 1px;
  3315. }
  3316. .account-item-platform { font-size: 13px; font-weight: 680; color: var(--text); }
  3317. .account-item-id { font-size: 11px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  3318. .dialog-actions {
  3319. display: flex;
  3320. justify-content: flex-end;
  3321. gap: 10px;
  3322. margin-top: 0;
  3323. padding: 16px 22px 20px;
  3324. background: rgba(255, 255, 255, 0.9);
  3325. border-top: 1px solid var(--line-soft);
  3326. }
  3327. .toast {
  3328. position: fixed;
  3329. inset: auto;
  3330. top: 22px;
  3331. right: 22px;
  3332. margin: 0;
  3333. max-width: min(420px, calc(100vw - 44px));
  3334. display: grid;
  3335. grid-template-columns: 30px minmax(0, 1fr);
  3336. gap: 10px;
  3337. align-items: center;
  3338. min-height: 54px;
  3339. padding: 10px 14px 10px 11px;
  3340. border-radius: 8px;
  3341. background: rgba(255, 255, 255, 0.94);
  3342. color: var(--text);
  3343. border: 1px solid rgba(0, 0, 0, 0.08);
  3344. box-shadow: 0 18px 46px rgba(0, 0, 0, 0.16);
  3345. backdrop-filter: blur(18px);
  3346. opacity: 0;
  3347. transform: translateY(-12px) scale(0.98);
  3348. pointer-events: none;
  3349. transition:
  3350. opacity 0.2s ease,
  3351. transform 0.2s ease;
  3352. }
  3353. .toast.show {
  3354. opacity: 1;
  3355. transform: translateY(0) scale(1);
  3356. }
  3357. .toast-icon {
  3358. display: grid;
  3359. place-items: center;
  3360. width: 30px;
  3361. height: 30px;
  3362. border-radius: 50%;
  3363. background: #eaf7ee;
  3364. color: var(--success);
  3365. font-size: 11px;
  3366. font-weight: 850;
  3367. }
  3368. .toast.error .toast-icon {
  3369. background: #fff0ee;
  3370. color: var(--danger);
  3371. }
  3372. .toast.warning .toast-icon {
  3373. background: #fff6e8;
  3374. color: var(--warning);
  3375. }
  3376. #toast-message {
  3377. min-width: 0;
  3378. overflow-wrap: anywhere;
  3379. font-size: 14px;
  3380. font-weight: 650;
  3381. line-height: 1.35;
  3382. }
  3383. @media (max-width: 1020px) {
  3384. .app-shell {
  3385. grid-template-columns: 1fr;
  3386. }
  3387. .sidebar {
  3388. position: static;
  3389. height: auto;
  3390. }
  3391. .nav,
  3392. .stats-grid,
  3393. .dashboard-grid {
  3394. grid-template-columns: repeat(2, minmax(0, 1fr));
  3395. }
  3396. .dashboard-hero,
  3397. .dashboard-settings-grid,
  3398. .dashboard-insights-grid {
  3399. grid-template-columns: 1fr;
  3400. }
  3401. .backup-note {
  3402. margin-top: 0;
  3403. }
  3404. .topbar {
  3405. align-items: stretch;
  3406. flex-direction: column;
  3407. }
  3408. .relation-layout,
  3409. .relation-stats {
  3410. grid-template-columns: 1fr;
  3411. overflow-x: visible;
  3412. }
  3413. .relation-inspector {
  3414. position: static;
  3415. }
  3416. .binding-detail-row {
  3417. grid-template-columns: minmax(0, 1fr);
  3418. }
  3419. .binding-detail-meta {
  3420. grid-template-columns: repeat(2, minmax(0, 1fr));
  3421. }
  3422. .binding-detail-actions {
  3423. justify-content: flex-start;
  3424. }
  3425. .relation-hero {
  3426. align-items: stretch;
  3427. flex-direction: column;
  3428. }
  3429. }
  3430. @media (max-width: 680px) {
  3431. .main,
  3432. .sidebar {
  3433. padding: 18px 14px;
  3434. }
  3435. .nav,
  3436. .stats-grid,
  3437. .dashboard-grid,
  3438. .detail-grid,
  3439. .form-grid {
  3440. grid-template-columns: 1fr;
  3441. }
  3442. .dashboard-setting-card,
  3443. .dashboard-panel-card,
  3444. .dashboard-hero-note {
  3445. padding: 20px;
  3446. border-radius: 20px;
  3447. }
  3448. .dashboard-card-value {
  3449. font-size: 40px;
  3450. }
  3451. .dashboard-platform-row,
  3452. .dashboard-recent-item {
  3453. align-items: flex-start;
  3454. flex-direction: column;
  3455. }
  3456. .dashboard-platform-meter {
  3457. min-width: 100%;
  3458. width: 100%;
  3459. }
  3460. .phone-combo {
  3461. grid-template-columns: 1fr;
  3462. }
  3463. .phone-combo select {
  3464. border-radius: 8px 8px 0 0;
  3465. }
  3466. .phone-combo input {
  3467. margin-top: -1px;
  3468. margin-left: 0;
  3469. border-radius: 0 0 8px 8px;
  3470. }
  3471. .onboarding-steps {
  3472. grid-template-columns: 1fr;
  3473. padding: 18px;
  3474. }
  3475. .onboarding-head,
  3476. .onboarding-actions {
  3477. padding-right: 18px;
  3478. padding-left: 18px;
  3479. }
  3480. .onboarding-actions {
  3481. flex-direction: column-reverse;
  3482. }
  3483. .asset-drawer {
  3484. width: 100vw;
  3485. padding: 10px;
  3486. }
  3487. .asset-drawer-shell {
  3488. border-radius: 20px;
  3489. }
  3490. .global-search,
  3491. .global-search input,
  3492. .filter-row input,
  3493. .filter-row select,
  3494. .topbar-actions > label.file-button {
  3495. width: 100%;
  3496. }
  3497. .toolbar {
  3498. align-items: stretch;
  3499. }
  3500. .inline-actions,
  3501. .filter-row,
  3502. .topbar-actions {
  3503. width: 100%;
  3504. }
  3505. }
  3506. @media (max-width: 760px) {
  3507. body {
  3508. overflow-x: hidden;
  3509. background: #f5f5f7;
  3510. }
  3511. .app-shell {
  3512. display: block;
  3513. }
  3514. .sidebar {
  3515. position: sticky;
  3516. top: 0;
  3517. z-index: 25;
  3518. height: auto;
  3519. padding: 12px 12px 10px;
  3520. gap: 12px;
  3521. border-right: 0;
  3522. border-bottom: 1px solid rgba(216, 216, 222, 0.84);
  3523. background: rgba(251, 251, 253, 0.9);
  3524. backdrop-filter: blur(20px);
  3525. }
  3526. .brand {
  3527. gap: 10px;
  3528. }
  3529. .brand-mark {
  3530. width: 34px;
  3531. height: 34px;
  3532. border-radius: 8px;
  3533. font-size: 13px;
  3534. }
  3535. .brand h1 {
  3536. font-size: 17px;
  3537. }
  3538. .brand p {
  3539. font-size: 11px;
  3540. }
  3541. .nav {
  3542. display: flex;
  3543. gap: 8px;
  3544. overflow-x: auto;
  3545. padding-bottom: 2px;
  3546. scrollbar-width: none;
  3547. }
  3548. .nav::-webkit-scrollbar,
  3549. .accounts-platform-tabs::-webkit-scrollbar {
  3550. display: none;
  3551. }
  3552. .nav-group {
  3553. display: none;
  3554. }
  3555. .nav button {
  3556. flex: 0 0 auto;
  3557. width: auto;
  3558. min-height: 38px;
  3559. padding: 7px 11px 7px 8px;
  3560. border-radius: 12px;
  3561. font-size: 13px;
  3562. white-space: nowrap;
  3563. }
  3564. .nav-icon {
  3565. width: 24px;
  3566. height: 24px;
  3567. border-radius: 8px;
  3568. }
  3569. .main {
  3570. padding: 16px 12px 28px;
  3571. }
  3572. .topbar {
  3573. gap: 14px;
  3574. margin-bottom: 18px;
  3575. }
  3576. .topbar h2 {
  3577. font-size: 34px;
  3578. }
  3579. .topbar-actions {
  3580. display: grid;
  3581. grid-template-columns: minmax(0, 1fr) 40px 40px 40px;
  3582. gap: 8px;
  3583. width: 100%;
  3584. align-items: center;
  3585. }
  3586. .global-search {
  3587. grid-column: 1 / -1;
  3588. width: 100%;
  3589. min-height: 42px;
  3590. border-radius: 14px;
  3591. }
  3592. .language-select-wrap {
  3593. grid-column: 1 / 2;
  3594. width: 100%;
  3595. }
  3596. .language-select-wrap select {
  3597. width: 100%;
  3598. border-radius: 14px;
  3599. }
  3600. .global-search input {
  3601. width: 100%;
  3602. min-width: 0;
  3603. }
  3604. .topbar-actions > button,
  3605. .topbar-actions > label.file-button {
  3606. width: auto;
  3607. }
  3608. .topbar-actions > .icon-pill,
  3609. .topbar-actions .topbar-avatar {
  3610. flex: 0 0 auto;
  3611. width: 40px;
  3612. min-width: 40px;
  3613. }
  3614. .topbar-primary {
  3615. grid-column: 1 / 2;
  3616. justify-content: center;
  3617. width: 100%;
  3618. padding: 0 12px;
  3619. border-radius: 14px;
  3620. }
  3621. .topbar-primary span {
  3622. display: inline;
  3623. }
  3624. .icon-pill,
  3625. .topbar-avatar {
  3626. width: 40px;
  3627. height: 40px;
  3628. }
  3629. .account-menu {
  3630. position: fixed;
  3631. top: 112px;
  3632. right: 12px;
  3633. }
  3634. .content {
  3635. gap: 14px;
  3636. }
  3637. .toolbar,
  3638. .filter-row,
  3639. .inline-actions {
  3640. align-items: stretch;
  3641. width: 100%;
  3642. }
  3643. .filter-row input,
  3644. .filter-row select {
  3645. width: 100%;
  3646. }
  3647. .stats-grid,
  3648. .dashboard-grid,
  3649. .dashboard-settings-grid,
  3650. .dashboard-insights-grid,
  3651. .relation-stats,
  3652. .detail-grid,
  3653. .form-grid,
  3654. .binding-more-grid {
  3655. grid-template-columns: 1fr;
  3656. }
  3657. .dashboard-hero,
  3658. .dashboard-setting-card,
  3659. .dashboard-panel-card,
  3660. .dashboard-hero-note,
  3661. .card,
  3662. .topology-card,
  3663. .relationship-board,
  3664. .relation-table-card,
  3665. .relation-inspector,
  3666. .assets-card-view,
  3667. .accounts-list-view {
  3668. border-radius: 16px;
  3669. }
  3670. .dashboard-setting-card,
  3671. .dashboard-panel-card,
  3672. .dashboard-hero-note {
  3673. padding: 18px;
  3674. }
  3675. .dashboard-card-value {
  3676. font-size: 34px;
  3677. }
  3678. .assets-card-grid,
  3679. .accounts-list-items {
  3680. grid-template-columns: 1fr;
  3681. gap: 10px;
  3682. padding: 12px;
  3683. }
  3684. .asset-card,
  3685. .account-list-item {
  3686. min-height: 76px;
  3687. padding: 13px 14px;
  3688. border-radius: 15px;
  3689. }
  3690. .asset-card-icon,
  3691. .account-list-item .platform-logo {
  3692. width: 42px;
  3693. height: 42px;
  3694. border-radius: 12px;
  3695. }
  3696. .asset-card-actions,
  3697. .account-list-item-actions {
  3698. position: static;
  3699. opacity: 1;
  3700. flex: 0 0 auto;
  3701. }
  3702. .asset-card-title,
  3703. .account-list-item-name {
  3704. font-size: 15px;
  3705. }
  3706. .asset-card-sub,
  3707. .account-list-item-id {
  3708. font-size: 12px;
  3709. }
  3710. .relation-hero h3 {
  3711. font-size: 27px;
  3712. }
  3713. .relation-filter {
  3714. justify-content: stretch;
  3715. }
  3716. .relation-layout {
  3717. display: grid;
  3718. grid-template-columns: 1fr;
  3719. overflow-x: visible;
  3720. }
  3721. .relation-main {
  3722. min-width: 0;
  3723. }
  3724. .relationship-board {
  3725. padding: 12px;
  3726. }
  3727. .relationship-board-head {
  3728. display: grid;
  3729. }
  3730. .relation-canvas,
  3731. .topology-stage {
  3732. -webkit-overflow-scrolling: touch;
  3733. }
  3734. .relationship-board > .topology-legend {
  3735. overflow-x: auto;
  3736. flex-wrap: nowrap;
  3737. gap: 14px;
  3738. }
  3739. .binding-detail-row {
  3740. grid-template-columns: 1fr;
  3741. gap: 12px;
  3742. padding: 13px;
  3743. }
  3744. .binding-detail-meta {
  3745. grid-template-columns: repeat(2, minmax(0, 1fr));
  3746. }
  3747. .binding-detail-actions {
  3748. justify-content: flex-start;
  3749. }
  3750. .relation-table-card table {
  3751. min-width: 0;
  3752. }
  3753. .dialog {
  3754. width: calc(100vw - 20px);
  3755. max-height: calc(100dvh - 20px);
  3756. border-radius: 18px;
  3757. }
  3758. .dialog form {
  3759. max-height: calc(100dvh - 20px);
  3760. }
  3761. .dialog-head,
  3762. .dialog-actions {
  3763. padding: 16px;
  3764. }
  3765. .form-grid {
  3766. gap: 12px;
  3767. padding: 16px;
  3768. }
  3769. .phone-combo {
  3770. grid-template-columns: 1fr;
  3771. }
  3772. .phone-combo select {
  3773. border-radius: 8px 8px 0 0;
  3774. }
  3775. .phone-combo input {
  3776. margin-top: -1px;
  3777. margin-left: 0;
  3778. border-radius: 0 0 8px 8px;
  3779. }
  3780. .dialog-actions {
  3781. position: sticky;
  3782. bottom: 0;
  3783. background: rgba(255, 255, 255, 0.94);
  3784. backdrop-filter: blur(14px);
  3785. }
  3786. .dialog-actions button {
  3787. flex: 1;
  3788. }
  3789. .asset-drawer {
  3790. top: auto;
  3791. left: 0;
  3792. right: 0;
  3793. bottom: 0;
  3794. width: 100vw;
  3795. height: min(86dvh, 760px);
  3796. padding: 8px;
  3797. animation-name: assetDrawerUp;
  3798. }
  3799. .asset-drawer.closing {
  3800. animation-name: assetDrawerDown;
  3801. }
  3802. .asset-drawer-shell {
  3803. border-radius: 22px 22px 16px 16px;
  3804. box-shadow: 0 -18px 48px rgba(15, 23, 42, 0.18);
  3805. }
  3806. .detail-panel-drawer {
  3807. padding: 22px 16px 18px;
  3808. }
  3809. .detail-panel-drawer .detail-grid {
  3810. grid-template-columns: 1fr;
  3811. }
  3812. .toast {
  3813. top: 12px;
  3814. right: 12px;
  3815. left: 12px;
  3816. max-width: none;
  3817. }
  3818. .auth-screen {
  3819. padding: 18px;
  3820. }
  3821. .auth-card {
  3822. margin-top: 54px;
  3823. }
  3824. .auth-card h2 {
  3825. margin-bottom: 40px;
  3826. font-size: 34px;
  3827. }
  3828. .auth-field {
  3829. min-height: 74px;
  3830. padding: 14px 54px 10px 20px;
  3831. }
  3832. .auth-field input {
  3833. font-size: 22px;
  3834. }
  3835. .auth-remember {
  3836. margin-top: 38px;
  3837. font-size: 20px;
  3838. }
  3839. .guided-tour-card {
  3840. left: 12px !important;
  3841. right: 12px;
  3842. width: auto;
  3843. }
  3844. }
  3845. @keyframes assetDrawerUp {
  3846. from {
  3847. opacity: 0;
  3848. transform: translateY(28px) scale(0.985);
  3849. }
  3850. to {
  3851. opacity: 1;
  3852. transform: translateY(0) scale(1);
  3853. }
  3854. }
  3855. @keyframes assetDrawerDown {
  3856. from {
  3857. opacity: 1;
  3858. transform: translateY(0) scale(1);
  3859. }
  3860. to {
  3861. opacity: 0;
  3862. transform: translateY(28px) scale(0.985);
  3863. }
  3864. }
  3865. @media (max-width: 420px) {
  3866. .topbar h2 {
  3867. font-size: 30px;
  3868. }
  3869. .topbar-actions {
  3870. grid-template-columns: minmax(0, 1fr) 38px 38px 38px;
  3871. }
  3872. .topbar-primary span {
  3873. display: none;
  3874. }
  3875. .topbar-primary {
  3876. min-width: 0;
  3877. }
  3878. .asset-card,
  3879. .account-list-item {
  3880. gap: 10px;
  3881. }
  3882. .acct-action-btn {
  3883. width: 28px;
  3884. height: 28px;
  3885. }
  3886. .auth-card h2 {
  3887. font-size: 30px;
  3888. }
  3889. }
  3890. /* ── License Gate ──────────────────────────────────────────────────────────── */
  3891. .license-gate {
  3892. position: fixed;
  3893. inset: 0;
  3894. z-index: 70;
  3895. display: grid;
  3896. place-items: center;
  3897. min-height: 100vh;
  3898. background: rgba(245, 245, 247, 0.88);
  3899. backdrop-filter: blur(18px);
  3900. padding: 24px;
  3901. }
  3902. .license-card {
  3903. position: relative;
  3904. width: min(440px, 100%);
  3905. background: var(--panel-solid);
  3906. border: 1px solid var(--line);
  3907. border-radius: 20px;
  3908. padding: 32px;
  3909. box-shadow: 0 24px 60px rgba(0, 0, 0, 0.1);
  3910. display: grid;
  3911. gap: 24px;
  3912. }
  3913. .license-close {
  3914. position: absolute;
  3915. top: 14px;
  3916. right: 14px;
  3917. display: grid;
  3918. place-items: center;
  3919. width: 34px;
  3920. height: 34px;
  3921. min-height: 0;
  3922. padding: 0;
  3923. border: 0;
  3924. border-radius: 50%;
  3925. background: rgba(29, 29, 31, 0.08);
  3926. color: var(--text);
  3927. font-size: 22px;
  3928. line-height: 1;
  3929. box-shadow: none;
  3930. }
  3931. .license-close:hover {
  3932. background: rgba(29, 29, 31, 0.14);
  3933. transform: none;
  3934. box-shadow: none;
  3935. }
  3936. .license-brand {
  3937. display: flex;
  3938. gap: 12px;
  3939. align-items: center;
  3940. }
  3941. .license-brand h1 {
  3942. margin: 0;
  3943. font-size: 19px;
  3944. font-weight: 760;
  3945. }
  3946. .license-brand p {
  3947. margin: 2px 0 0;
  3948. font-size: 12px;
  3949. color: var(--muted);
  3950. }
  3951. .license-tabs {
  3952. display: flex;
  3953. gap: 4px;
  3954. padding: 4px;
  3955. background: var(--panel-soft);
  3956. border-radius: 10px;
  3957. }
  3958. .license-tab {
  3959. flex: 1;
  3960. min-height: 34px;
  3961. border: 0;
  3962. border-radius: 7px;
  3963. background: transparent;
  3964. color: var(--muted);
  3965. font-size: 13px;
  3966. font-weight: 620;
  3967. box-shadow: none;
  3968. transition: background 0.16s, color 0.16s, box-shadow 0.16s;
  3969. }
  3970. .license-tab:hover {
  3971. transform: none;
  3972. color: var(--text);
  3973. }
  3974. .license-tab.active {
  3975. background: var(--panel-solid);
  3976. color: var(--text);
  3977. font-weight: 700;
  3978. box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
  3979. }
  3980. .license-desc {
  3981. margin: 0 0 14px;
  3982. font-size: 13.5px;
  3983. color: var(--muted);
  3984. line-height: 1.55;
  3985. }
  3986. .license-desc strong {
  3987. color: var(--text);
  3988. }
  3989. .license-form {
  3990. display: grid;
  3991. gap: 10px;
  3992. }
  3993. .license-form input {
  3994. min-height: 44px;
  3995. width: 100%;
  3996. border: 1px solid var(--line);
  3997. border-radius: 10px;
  3998. background: var(--panel-solid);
  3999. color: var(--text);
  4000. padding: 10px 14px;
  4001. font-size: 14px;
  4002. outline: 0;
  4003. transition: border-color 0.16s, box-shadow 0.16s;
  4004. }
  4005. .license-form input:focus {
  4006. border-color: var(--accent);
  4007. box-shadow: 0 0 0 4px rgba(0, 113, 227, 0.12);
  4008. }
  4009. .license-form .primary-button {
  4010. min-height: 44px;
  4011. border-radius: 10px;
  4012. font-size: 14px;
  4013. }
  4014. .license-msg {
  4015. margin: 8px 0 0;
  4016. font-size: 13px;
  4017. line-height: 1.45;
  4018. }
  4019. .license-msg.success {
  4020. color: var(--success);
  4021. }
  4022. .license-msg.error {
  4023. color: var(--danger);
  4024. }
  4025. /* ── Pricing Dialog ────────────────────────────────────────────────────────── */
  4026. .pricing-dialog {
  4027. width: min(960px, calc(100vw - 28px));
  4028. border-radius: 18px;
  4029. }
  4030. .pricing-dialog::backdrop {
  4031. background: rgba(15, 23, 42, 0.4);
  4032. backdrop-filter: blur(6px);
  4033. }
  4034. .pricing-head {
  4035. display: flex;
  4036. align-items: start;
  4037. justify-content: space-between;
  4038. gap: 16px;
  4039. padding: 26px 28px 0;
  4040. background: #fbfbfd;
  4041. }
  4042. .pricing-head h3 {
  4043. margin: 6px 0 6px;
  4044. font-size: 26px;
  4045. font-weight: 780;
  4046. line-height: 1.12;
  4047. }
  4048. .pricing-sub {
  4049. margin: 0;
  4050. color: var(--muted);
  4051. font-size: 14px;
  4052. }
  4053. .pricing-grid {
  4054. display: grid;
  4055. grid-template-columns: repeat(2, minmax(0, 1fr));
  4056. gap: 16px;
  4057. padding: 22px 28px 28px;
  4058. background: #fbfbfd;
  4059. }
  4060. .pricing-card {
  4061. position: relative;
  4062. display: grid;
  4063. gap: 16px;
  4064. align-content: start;
  4065. padding: 26px 24px 22px;
  4066. background: var(--panel-solid);
  4067. border: 1px solid var(--line);
  4068. border-radius: 18px;
  4069. box-shadow: var(--shadow-soft);
  4070. transition: border-color 0.2s, box-shadow 0.2s, transform 0.2s;
  4071. }
  4072. .pricing-card:hover {
  4073. transform: translateY(-2px);
  4074. box-shadow: 0 20px 40px rgba(15, 23, 42, 0.08);
  4075. }
  4076. .pricing-card.is-current {
  4077. border-color: rgba(0, 113, 227, 0.45);
  4078. box-shadow: 0 0 0 3px rgba(0, 113, 227, 0.08);
  4079. }
  4080. .pricing-card-pro {
  4081. background: linear-gradient(160deg, #f8f9ff 0%, #ffffff 60%);
  4082. border-color: rgba(125, 95, 255, 0.32);
  4083. }
  4084. .pricing-card-pro.is-current {
  4085. border-color: rgba(125, 95, 255, 0.6);
  4086. box-shadow: 0 0 0 3px rgba(125, 95, 255, 0.12);
  4087. }
  4088. .pricing-badge {
  4089. position: absolute;
  4090. top: 14px;
  4091. right: 14px;
  4092. padding: 3px 10px;
  4093. border-radius: 999px;
  4094. background: linear-gradient(135deg, #7d5fff 0%, #4c8bf5 100%);
  4095. color: #fff;
  4096. font-size: 11px;
  4097. font-weight: 760;
  4098. letter-spacing: 0.05em;
  4099. text-transform: uppercase;
  4100. box-shadow: 0 6px 14px rgba(125, 95, 255, 0.3);
  4101. }
  4102. .pricing-card header h4 {
  4103. margin: 0 0 10px;
  4104. font-size: 22px;
  4105. font-weight: 780;
  4106. }
  4107. .pricing-price {
  4108. display: flex;
  4109. align-items: baseline;
  4110. gap: 4px;
  4111. margin-bottom: 6px;
  4112. }
  4113. .pricing-currency {
  4114. font-size: 18px;
  4115. font-weight: 700;
  4116. color: var(--text);
  4117. }
  4118. .pricing-amount {
  4119. font-size: 44px;
  4120. font-weight: 800;
  4121. line-height: 1;
  4122. letter-spacing: -0.02em;
  4123. }
  4124. .pricing-period {
  4125. color: var(--muted);
  4126. font-size: 13px;
  4127. font-weight: 620;
  4128. }
  4129. .pricing-desc {
  4130. margin: 0;
  4131. color: var(--muted);
  4132. font-size: 13.5px;
  4133. line-height: 1.45;
  4134. }
  4135. .pricing-cta {
  4136. width: 100%;
  4137. min-height: 44px;
  4138. padding: 11px 16px;
  4139. border-radius: 999px;
  4140. border: 1px solid transparent;
  4141. font-size: 14px;
  4142. font-weight: 700;
  4143. cursor: pointer;
  4144. transition: background 0.16s, color 0.16s, border-color 0.16s, transform 0.16s;
  4145. box-shadow: none;
  4146. }
  4147. .pricing-cta:hover {
  4148. transform: translateY(-1px);
  4149. }
  4150. .pricing-cta-current {
  4151. background: var(--panel-soft);
  4152. color: var(--muted);
  4153. border-color: var(--line);
  4154. cursor: default;
  4155. }
  4156. .pricing-cta-current:hover {
  4157. transform: none;
  4158. }
  4159. .pricing-cta-current:disabled {
  4160. opacity: 1;
  4161. cursor: default;
  4162. }
  4163. .pricing-cta-upgrade {
  4164. background: linear-gradient(135deg, #4c8bf5 0%, #7d5fff 100%);
  4165. color: #fff;
  4166. border-color: transparent;
  4167. box-shadow: 0 10px 22px rgba(76, 139, 245, 0.24);
  4168. }
  4169. .pricing-cta-upgrade:hover {
  4170. box-shadow: 0 14px 28px rgba(76, 139, 245, 0.32);
  4171. }
  4172. .pricing-cta-downgrade {
  4173. background: #fff;
  4174. color: var(--text);
  4175. border-color: var(--line);
  4176. }
  4177. .pricing-cta-downgrade:hover {
  4178. background: var(--panel-soft);
  4179. }
  4180. .pricing-includes {
  4181. margin: 4px 0 0;
  4182. color: var(--text);
  4183. font-size: 13px;
  4184. font-weight: 720;
  4185. }
  4186. .pricing-features {
  4187. list-style: none;
  4188. margin: 0;
  4189. padding: 0;
  4190. display: grid;
  4191. gap: 10px;
  4192. }
  4193. .pricing-features li {
  4194. position: relative;
  4195. padding-left: 24px;
  4196. color: var(--text);
  4197. font-size: 13.5px;
  4198. line-height: 1.5;
  4199. }
  4200. .pricing-features li::before {
  4201. content: "";
  4202. position: absolute;
  4203. left: 0;
  4204. top: 4px;
  4205. width: 16px;
  4206. height: 16px;
  4207. border-radius: 50%;
  4208. background: #e6efff;
  4209. background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5 12l4 4 10-10' fill='none' stroke='%230071e3' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  4210. background-size: 12px 12px;
  4211. background-repeat: no-repeat;
  4212. background-position: center;
  4213. }
  4214. .pricing-features-pro li::before {
  4215. background: #f1edff;
  4216. background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5 12l4 4 10-10' fill='none' stroke='%237d5fff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  4217. background-repeat: no-repeat;
  4218. background-position: center;
  4219. background-size: 12px 12px;
  4220. }
  4221. @media (max-width: 760px) {
  4222. .pricing-grid {
  4223. grid-template-columns: 1fr;
  4224. }
  4225. }
  4226. /* ── Profile Dialog ────────────────────────────────────────────────────────── */
  4227. .profile-dialog {
  4228. width: min(640px, calc(100vw - 28px));
  4229. }
  4230. .profile-body {
  4231. padding: 22px;
  4232. background: #fbfbfd;
  4233. display: grid;
  4234. gap: 18px;
  4235. max-height: 68vh;
  4236. overflow: auto;
  4237. }
  4238. .profile-section {
  4239. background: var(--panel-solid);
  4240. border: 1px solid var(--line);
  4241. border-radius: 14px;
  4242. padding: 16px 18px;
  4243. }
  4244. .profile-section h4 {
  4245. margin: 0 0 12px;
  4246. font-size: 13px;
  4247. font-weight: 720;
  4248. color: var(--muted);
  4249. text-transform: uppercase;
  4250. letter-spacing: 0.06em;
  4251. }
  4252. .profile-grid {
  4253. display: grid;
  4254. grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  4255. gap: 10px 16px;
  4256. }
  4257. .profile-item {
  4258. display: grid;
  4259. gap: 4px;
  4260. min-width: 0;
  4261. }
  4262. .profile-item span {
  4263. color: var(--muted);
  4264. font-size: 12px;
  4265. font-weight: 620;
  4266. }
  4267. .profile-item strong {
  4268. font-size: 14px;
  4269. font-weight: 700;
  4270. color: var(--text);
  4271. overflow-wrap: anywhere;
  4272. }
  4273. .profile-item .mono {
  4274. font-family: "SF Mono", Menlo, Consolas, monospace;
  4275. font-size: 12.5px;
  4276. font-weight: 600;
  4277. }