factoryCalendar.scss 144 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034
  1. .factory-calendar {
  2. font-size: 15px;
  3. @at-root .factory-calendar-dialog {
  4. border-radius: 6px;
  5. overflow: hidden;
  6. .el-dialog__header {
  7. padding: 16px 24px;
  8. border-bottom: 1px solid #edf1f7;
  9. background: linear-gradient(180deg, #ffffff, #f8fbff);
  10. }
  11. .el-dialog__title {
  12. color: #1f2d3d;
  13. font-size: 18px;
  14. font-weight: 600;
  15. }
  16. .el-dialog__headerbtn {
  17. top: 18px;
  18. }
  19. .el-dialog__body {
  20. max-height: calc(100vh - 178px);
  21. padding: 18px 28px 8px;
  22. background: #f6f8fb;
  23. overflow-y: auto;
  24. }
  25. .el-dialog__footer {
  26. padding: 12px 28px 16px;
  27. border-top: 1px solid #edf1f7;
  28. background: #ffffff;
  29. }
  30. .el-form-box {
  31. padding: 0;
  32. }
  33. .el-form-item {
  34. margin-bottom: 10px;
  35. }
  36. .el-form-item__label {
  37. color: #5f6f85;
  38. font-weight: 600;
  39. }
  40. .el-input__inner,
  41. .el-textarea__inner {
  42. border-color: #dce3ec;
  43. border-radius: 6px;
  44. background-color: #ffffff;
  45. }
  46. .el-input__inner {
  47. height: 36px;
  48. line-height: 36px;
  49. }
  50. .el-select .el-tag {
  51. height: 26px;
  52. margin: 3px 0 3px 6px;
  53. border-color: #dce3ec;
  54. border-radius: 5px;
  55. background: #f4f7fb;
  56. line-height: 24px;
  57. }
  58. }
  59. .el-form-item__label,
  60. .el-input__inner,
  61. .el-button,
  62. .el-tabs__item,
  63. .el-dialog,
  64. .el-drawer {
  65. font-size: 15px;
  66. }
  67. .el-table {
  68. font-size: 14px;
  69. th.el-table__cell,
  70. td.el-table__cell,
  71. .cell {
  72. font-size: 14px;
  73. }
  74. .el-link {
  75. font-size: 13px;
  76. }
  77. .el-tag {
  78. font-size: 12px;
  79. }
  80. }
  81. @at-root .factory-calendar-loading {
  82. .el-loading-spinner {
  83. .el-icon-loading {
  84. color: #1677ff;
  85. font-size: 30px;
  86. }
  87. .el-loading-text {
  88. color: #1f2d3d;
  89. font-size: 16px;
  90. font-weight: 600;
  91. margin-top: 12px;
  92. }
  93. }
  94. }
  95. @at-root .adjust-detail-dialog {
  96. border-radius: 8px;
  97. overflow: hidden;
  98. .el-dialog__header {
  99. padding: 22px 30px 18px;
  100. border-bottom: 1px solid #edf1f7;
  101. background: linear-gradient(180deg, #ffffff, #f8fbff);
  102. }
  103. .el-dialog__title {
  104. color: #1f2d3d;
  105. font-size: 20px;
  106. font-weight: 700;
  107. }
  108. .el-dialog__body {
  109. max-height: calc(100vh - 186px);
  110. padding: 22px 30px;
  111. background:
  112. linear-gradient(135deg, rgba(64, 158, 255, 0.05), transparent 42%),
  113. #f7faff;
  114. overflow-y: auto;
  115. }
  116. .el-dialog__footer {
  117. padding: 14px 30px 18px;
  118. border-top: 1px solid #edf1f7;
  119. background: #ffffff;
  120. }
  121. .adjust-detail-view {
  122. color: #1f2d3d;
  123. font-size: 15px;
  124. }
  125. .adjust-detail-grid {
  126. display: grid;
  127. grid-template-columns: repeat(2, minmax(0, 1fr));
  128. gap: 14px;
  129. }
  130. .adjust-detail-field,
  131. .adjust-data-card,
  132. .adjust-detail-section {
  133. border: 1px solid #dbe8f5;
  134. border-radius: 8px;
  135. background:
  136. linear-gradient(135deg, rgba(255, 255, 255, 0.96), rgba(239, 247, 255, 0.86)),
  137. #ffffff;
  138. box-shadow:
  139. inset 0 1px 0 rgba(255, 255, 255, 0.95),
  140. 0 8px 18px rgba(32, 89, 148, 0.06);
  141. }
  142. .adjust-detail-field {
  143. min-height: 72px;
  144. padding: 14px 18px;
  145. }
  146. .adjust-detail-field.is-wide {
  147. display: flex;
  148. min-height: 78px;
  149. grid-column: 1 / -1;
  150. justify-content: center;
  151. flex-direction: column;
  152. border-color: #c8def4;
  153. background:
  154. linear-gradient(135deg, rgba(255, 255, 255, 0.98), rgba(233, 246, 255, 0.9)),
  155. #ffffff;
  156. }
  157. .adjust-detail-field span,
  158. .adjust-data-card span,
  159. .section-title {
  160. display: block;
  161. margin-bottom: 6px;
  162. color: #7a8798;
  163. font-size: 14px;
  164. line-height: 20px;
  165. font-weight: 600;
  166. }
  167. .adjust-detail-field strong,
  168. .adjust-data-card strong {
  169. display: block;
  170. color: #25364a;
  171. font-size: 16px;
  172. line-height: 24px;
  173. font-weight: 700;
  174. word-break: break-word;
  175. }
  176. .adjust-period-value {
  177. display: inline-flex;
  178. width: fit-content;
  179. max-width: 100%;
  180. align-items: center;
  181. padding: 6px 12px;
  182. border: 1px solid rgba(64, 158, 255, 0.16);
  183. border-radius: 6px;
  184. background: rgba(255, 255, 255, 0.72);
  185. color: #1f3a5f;
  186. font-size: 17px;
  187. line-height: 24px;
  188. box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.9);
  189. white-space: normal;
  190. }
  191. .adjust-detail-field .el-tag {
  192. height: 28px;
  193. padding: 0 12px;
  194. font-size: 14px;
  195. line-height: 26px;
  196. }
  197. .adjust-compare {
  198. display: grid;
  199. grid-template-columns: repeat(2, minmax(0, 1fr));
  200. gap: 14px;
  201. margin-top: 14px;
  202. }
  203. .adjust-data-card {
  204. position: relative;
  205. min-height: 88px;
  206. padding: 14px 18px;
  207. overflow: hidden;
  208. }
  209. .adjust-data-card::before {
  210. content: '';
  211. position: absolute;
  212. left: 0;
  213. top: 0;
  214. bottom: 0;
  215. width: 4px;
  216. }
  217. .adjust-data-card.before::before {
  218. background: #909399;
  219. }
  220. .adjust-data-card.after::before {
  221. background: #409eff;
  222. }
  223. .adjust-detail-section {
  224. margin-top: 12px;
  225. padding: 15px 18px;
  226. }
  227. .adjust-detail-section p {
  228. margin: 0;
  229. color: #25364a;
  230. font-size: 16px;
  231. line-height: 26px;
  232. word-break: break-word;
  233. }
  234. .approve-timeline {
  235. display: flex;
  236. flex-direction: column;
  237. gap: 12px;
  238. }
  239. .approve-node {
  240. display: grid;
  241. grid-template-columns: 18px minmax(0, 1fr);
  242. gap: 10px;
  243. }
  244. .node-dot {
  245. width: 10px;
  246. height: 10px;
  247. margin-top: 9px;
  248. border: 2px solid #ffffff;
  249. border-radius: 50%;
  250. background: #67c23a;
  251. box-shadow: 0 0 0 4px rgba(103, 194, 58, 0.14);
  252. }
  253. .node-content {
  254. padding: 10px 12px;
  255. border: 1px solid #dbe8f5;
  256. border-radius: 7px;
  257. background: rgba(255, 255, 255, 0.78);
  258. }
  259. .node-content > div {
  260. display: flex;
  261. align-items: center;
  262. justify-content: space-between;
  263. gap: 12px;
  264. }
  265. .node-content strong {
  266. color: #25364a;
  267. font-size: 16px;
  268. line-height: 24px;
  269. }
  270. .node-content span,
  271. .node-content em {
  272. color: #7a8798;
  273. font-size: 14px;
  274. line-height: 20px;
  275. font-style: normal;
  276. }
  277. .node-content p {
  278. margin: 5px 0 2px;
  279. color: #425466;
  280. font-size: 15px;
  281. line-height: 24px;
  282. }
  283. .approve-empty {
  284. padding: 18px;
  285. border: 1px dashed #cfdceb;
  286. border-radius: 8px;
  287. color: #8a97a8;
  288. font-size: 15px;
  289. line-height: 22px;
  290. text-align: center;
  291. background: rgba(255, 255, 255, 0.62);
  292. }
  293. @media (max-width: 900px) {
  294. .adjust-detail-grid,
  295. .adjust-compare {
  296. grid-template-columns: 1fr;
  297. }
  298. }
  299. }
  300. .factory-calendar-card {
  301. min-height: calc(100vh - 112px);
  302. }
  303. .page-header {
  304. display: flex;
  305. align-items: center;
  306. justify-content: space-between;
  307. margin-bottom: 16px;
  308. }
  309. .page-title {
  310. font-size: 22px;
  311. font-weight: 600;
  312. color: #1f2d3d;
  313. line-height: 32px;
  314. }
  315. .page-subtitle {
  316. font-size: 15px;
  317. color: #8c8c8c;
  318. margin-top: 2px;
  319. }
  320. .header-actions,
  321. .tab-actions {
  322. display: flex;
  323. align-items: center;
  324. gap: 8px;
  325. }
  326. .toolbar-form,
  327. .view-toolbar {
  328. padding: 14px 16px 2px;
  329. margin-bottom: 12px;
  330. background: linear-gradient(180deg, #ffffff, #f8fbff);
  331. border: 1px solid #e4edf7;
  332. border-radius: 6px;
  333. box-shadow: 0 6px 16px rgba(31, 45, 61, 0.04);
  334. }
  335. .range-tag {
  336. margin: 2px 4px 2px 0;
  337. }
  338. .stat-row {
  339. display: grid;
  340. grid-template-columns: repeat(6, minmax(120px, 1fr));
  341. gap: 12px;
  342. margin-bottom: 12px;
  343. }
  344. .stat-card {
  345. min-height: 72px;
  346. padding: 12px 14px;
  347. border: 1px solid #e4edf7;
  348. border-radius: 6px;
  349. background: linear-gradient(180deg, #ffffff, #f8fbff);
  350. display: flex;
  351. align-items: center;
  352. justify-content: space-between;
  353. box-shadow: 0 8px 18px rgba(31, 45, 61, 0.05);
  354. span {
  355. color: #606266;
  356. font-size: 14px;
  357. }
  358. strong {
  359. font-size: 24px;
  360. line-height: 30px;
  361. color: #303133;
  362. }
  363. }
  364. .calendar-layout {
  365. display: grid;
  366. grid-template-columns: minmax(0, 1fr) 230px;
  367. gap: 14px;
  368. }
  369. .calendar-panel,
  370. .legend-panel,
  371. .chart-card {
  372. border: 1px solid #e4edf7;
  373. border-radius: 6px;
  374. background: #fff;
  375. box-shadow: 0 10px 24px rgba(31, 45, 61, 0.05);
  376. overflow: hidden;
  377. }
  378. .calendar-view-title {
  379. height: 42px;
  380. line-height: 42px;
  381. padding: 0 14px;
  382. border-bottom: 1px solid #e4edf7;
  383. color: #303133;
  384. font-weight: 600;
  385. background: linear-gradient(90deg, #f4f9ff, #ffffff);
  386. }
  387. .calendar-week {
  388. display: grid;
  389. grid-template-columns: repeat(7, 1fr);
  390. border-bottom: 1px solid #e4edf7;
  391. span {
  392. height: 36px;
  393. line-height: 36px;
  394. text-align: center;
  395. color: #5f6f85;
  396. font-weight: 600;
  397. background: #fbfdff;
  398. }
  399. }
  400. .calendar-grid {
  401. display: grid;
  402. grid-template-columns: repeat(7, minmax(96px, 1fr));
  403. min-height: 520px;
  404. &.view-day {
  405. grid-template-columns: 1fr;
  406. min-height: 260px;
  407. .calendar-cell {
  408. min-height: 240px;
  409. }
  410. .day-body {
  411. min-height: 140px;
  412. }
  413. }
  414. &.view-week {
  415. grid-template-columns: repeat(7, minmax(110px, 1fr));
  416. min-height: 240px;
  417. .calendar-cell {
  418. min-height: 220px;
  419. }
  420. }
  421. &.view-quarter {
  422. grid-template-columns: repeat(13, minmax(68px, 1fr));
  423. min-height: 520px;
  424. .calendar-cell {
  425. min-height: 80px;
  426. padding: 6px;
  427. }
  428. .day-body {
  429. min-height: 30px;
  430. margin: 4px 0;
  431. }
  432. .period-pill {
  433. font-size: 11px;
  434. line-height: 18px;
  435. }
  436. }
  437. }
  438. .calendar-cell {
  439. min-height: 104px;
  440. padding: 8px;
  441. border-right: 1px solid #e9eef5;
  442. border-bottom: 1px solid #e9eef5;
  443. cursor: pointer;
  444. background: #fff;
  445. transition: box-shadow 0.2s, transform 0.2s, background 0.2s;
  446. position: relative;
  447. overflow: hidden;
  448. &::before {
  449. content: '';
  450. position: absolute;
  451. left: 0;
  452. top: 0;
  453. width: 3px;
  454. height: 100%;
  455. background: transparent;
  456. }
  457. &:hover {
  458. z-index: 1;
  459. box-shadow: inset 0 0 0 1px #409eff, 0 8px 18px rgba(64, 158, 255, 0.12);
  460. }
  461. &.empty {
  462. cursor: default;
  463. background: #fafafa;
  464. }
  465. &.muted {
  466. opacity: 0.22;
  467. }
  468. &.disabled-calendar {
  469. cursor: not-allowed;
  470. color: #c0c4cc;
  471. background: #f5f7fa;
  472. opacity: 0.72;
  473. }
  474. &.scheduled {
  475. background: #ecf5ff;
  476. &::before {
  477. background: #409eff;
  478. }
  479. }
  480. &.idle {
  481. background: #fff;
  482. }
  483. &.rest {
  484. background: #f2f3f5;
  485. &::before {
  486. background: #a8abb2;
  487. }
  488. }
  489. &.holiday {
  490. background: #fff7e8;
  491. &::before {
  492. background: #f59e0b;
  493. }
  494. }
  495. &.maintenance {
  496. background: #fff3e6;
  497. &::before {
  498. background: #e6a23c;
  499. }
  500. }
  501. &.temp {
  502. background: #f5efff;
  503. &::before {
  504. background: #9254de;
  505. }
  506. }
  507. &.conflict {
  508. background: #fef0f0;
  509. animation: conflictFlash 1.4s infinite;
  510. &::before {
  511. background: #f56c6c;
  512. }
  513. }
  514. }
  515. .day-head,
  516. .day-foot {
  517. display: flex;
  518. align-items: center;
  519. justify-content: space-between;
  520. min-height: 20px;
  521. }
  522. .day-head span {
  523. font-weight: 600;
  524. color: #303133;
  525. }
  526. .temp-icon {
  527. color: #9254de;
  528. }
  529. .holiday-tag {
  530. height: 20px;
  531. padding: 0 6px;
  532. border-color: #f7c873;
  533. background: #fff3d6;
  534. color: #b76e00;
  535. line-height: 18px;
  536. }
  537. .day-body {
  538. min-height: 46px;
  539. margin: 6px 0;
  540. }
  541. .period-pill {
  542. display: block;
  543. width: fit-content;
  544. max-width: 100%;
  545. margin-bottom: 3px;
  546. padding: 1px 6px;
  547. border-radius: 4px;
  548. background: rgba(255, 255, 255, 0.72);
  549. border: 1px solid rgba(144, 147, 153, 0.16);
  550. font-size: 12px;
  551. color: #606266;
  552. line-height: 18px;
  553. white-space: nowrap;
  554. overflow: hidden;
  555. text-overflow: ellipsis;
  556. }
  557. .conflict-text {
  558. color: #f56c6c;
  559. font-weight: 600;
  560. }
  561. .legend-panel {
  562. padding: 14px;
  563. }
  564. .legend-title,
  565. .chart-title,
  566. .drawer-title {
  567. font-weight: 600;
  568. color: #303133;
  569. margin-bottom: 12px;
  570. }
  571. .legend-item {
  572. display: flex;
  573. gap: 10px;
  574. margin-bottom: 14px;
  575. strong {
  576. color: #303133;
  577. }
  578. p {
  579. margin: 3px 0 0;
  580. color: #909399;
  581. font-size: 12px;
  582. line-height: 18px;
  583. }
  584. }
  585. .legend-dot {
  586. width: 14px;
  587. height: 14px;
  588. margin-top: 3px;
  589. border: 1px solid #dcdfe6;
  590. border-radius: 2px;
  591. &.scheduled {
  592. background: #409eff;
  593. }
  594. &.idle {
  595. background: #fff;
  596. }
  597. &.rest {
  598. background: #c0c4cc;
  599. }
  600. &.holiday {
  601. background: #f59e0b;
  602. }
  603. &.maintenance {
  604. background: #e6a23c;
  605. }
  606. &.temp {
  607. background: #9254de;
  608. }
  609. &.conflict {
  610. background: #f56c6c;
  611. }
  612. }
  613. .range-editor {
  614. border: 1px solid #ebeef5;
  615. border-radius: 4px;
  616. padding: 10px;
  617. }
  618. .range-row,
  619. .holiday-rule-row,
  620. .inline-time {
  621. display: flex;
  622. align-items: center;
  623. gap: 8px;
  624. margin-bottom: 8px;
  625. }
  626. .rest-rule-editor,
  627. .legal-holiday-section,
  628. .holiday-rule-editor {
  629. border: 1px solid #dfe8f3;
  630. border-radius: 6px;
  631. padding: 14px 16px;
  632. background: linear-gradient(180deg, #ffffff, #f8fbff);
  633. box-shadow: 0 6px 16px rgba(31, 45, 61, 0.04);
  634. }
  635. .custom-rest-weekdays {
  636. margin-top: 10px;
  637. }
  638. .legal-holiday-section {
  639. min-height: 56px;
  640. }
  641. .legal-holiday-title {
  642. margin-bottom: 4px;
  643. font-weight: 600;
  644. color: #1f2d3d;
  645. }
  646. .legal-holiday-header {
  647. display: flex;
  648. align-items: center;
  649. justify-content: space-between;
  650. gap: 12px;
  651. margin-bottom: 12px;
  652. padding-bottom: 12px;
  653. border-bottom: 1px solid #edf2f7;
  654. }
  655. .legal-holiday-desc {
  656. margin-top: 2px;
  657. color: #909399;
  658. font-size: 12px;
  659. line-height: 18px;
  660. }
  661. .legal-holiday-count {
  662. flex: 0 0 auto;
  663. margin-top: 2px;
  664. padding: 5px 10px;
  665. border: 1px solid #cfe3ff;
  666. border-radius: 6px;
  667. background: #eef6ff;
  668. color: #1677ff;
  669. font-size: 12px;
  670. line-height: 18px;
  671. font-weight: 600;
  672. }
  673. .legal-holiday-list {
  674. display: flex;
  675. flex-direction: column;
  676. gap: 10px;
  677. max-height: 300px;
  678. overflow-y: auto;
  679. padding: 2px 6px 2px 0;
  680. }
  681. .legal-holiday-group {
  682. display: grid;
  683. grid-template-columns: 118px 1fr;
  684. gap: 12px;
  685. padding: 12px 14px;
  686. border: 1px solid #e3ebf5;
  687. border-radius: 6px;
  688. background: #ffffff;
  689. transition: border-color 0.18s ease, box-shadow 0.18s ease;
  690. &:hover {
  691. border-color: #bdd7ff;
  692. box-shadow: 0 8px 18px rgba(64, 158, 255, 0.08);
  693. }
  694. }
  695. .legal-holiday-group-head {
  696. display: flex;
  697. flex-direction: column;
  698. justify-content: center;
  699. gap: 6px;
  700. min-width: 0;
  701. strong {
  702. color: #1f2d3d;
  703. font-size: 14px;
  704. line-height: 22px;
  705. }
  706. span {
  707. width: fit-content;
  708. padding: 2px 8px;
  709. border-radius: 12px;
  710. background: #f1f5fa;
  711. color: #7a8797;
  712. font-size: 12px;
  713. line-height: 18px;
  714. }
  715. }
  716. .legal-holiday-dates {
  717. display: flex;
  718. flex-wrap: wrap;
  719. gap: 8px;
  720. align-items: center;
  721. }
  722. .legal-holiday-date {
  723. display: inline-flex;
  724. align-items: center;
  725. justify-content: space-between;
  726. gap: 10px;
  727. min-width: 124px;
  728. height: 32px;
  729. padding: 0 10px;
  730. border: 1px solid #dce3ec;
  731. border-radius: 6px;
  732. background: #f8fafc;
  733. color: #4f5f73;
  734. font-size: 12px;
  735. cursor: pointer;
  736. transition: all 0.18s ease;
  737. span {
  738. color: #303b4a;
  739. font-weight: 600;
  740. }
  741. em {
  742. min-width: 34px;
  743. padding: 1px 6px;
  744. border-radius: 10px;
  745. background: #edf1f7;
  746. color: #8a97a8;
  747. font-size: 12px;
  748. line-height: 18px;
  749. text-align: center;
  750. font-style: normal;
  751. }
  752. &:hover {
  753. border-color: #409eff;
  754. background: #eef6ff;
  755. color: #409eff;
  756. }
  757. &.is-work {
  758. border-color: #67c23a;
  759. background: #f0f9eb;
  760. color: #2f7d18;
  761. em {
  762. background: #dff2d8;
  763. color: #2f7d18;
  764. }
  765. }
  766. }
  767. .holiday-rule-row {
  768. align-items: flex-start;
  769. }
  770. .rule-tip {
  771. margin-top: 8px;
  772. color: #909399;
  773. font-size: 12px;
  774. line-height: 18px;
  775. }
  776. .shift-option-code {
  777. float: right;
  778. color: #909399;
  779. font-size: 12px;
  780. }
  781. .range-separator {
  782. color: #909399;
  783. }
  784. .danger-link {
  785. color: #f56c6c;
  786. }
  787. .drawer-body {
  788. padding: 2px 18px 18px;
  789. background: #f6f9fc;
  790. }
  791. .drawer-summary {
  792. display: grid;
  793. grid-template-columns: 78px 1fr;
  794. gap: 14px;
  795. margin-bottom: 18px;
  796. padding: 16px;
  797. border: 1px solid #cfe7ff;
  798. border-radius: 8px;
  799. background: linear-gradient(135deg, #f2f8ff, #ffffff 72%);
  800. box-shadow: 0 10px 24px rgba(64, 158, 255, 0.1);
  801. }
  802. .summary-date {
  803. height: 82px;
  804. border-radius: 8px;
  805. background: linear-gradient(180deg, #409eff, #1f78e8);
  806. color: #fff;
  807. display: flex;
  808. flex-direction: column;
  809. align-items: center;
  810. justify-content: center;
  811. box-shadow: 0 10px 20px rgba(64, 158, 255, 0.22);
  812. span {
  813. font-size: 12px;
  814. opacity: 0.82;
  815. }
  816. strong {
  817. font-size: 34px;
  818. line-height: 38px;
  819. }
  820. }
  821. .summary-info {
  822. min-width: 0;
  823. p {
  824. margin: 8px 0 10px;
  825. color: #606266;
  826. line-height: 20px;
  827. }
  828. }
  829. .summary-title {
  830. display: flex;
  831. align-items: center;
  832. justify-content: space-between;
  833. gap: 10px;
  834. color: #303133;
  835. font-size: 16px;
  836. font-weight: 600;
  837. }
  838. .summary-tags {
  839. display: flex;
  840. flex-wrap: wrap;
  841. gap: 6px;
  842. }
  843. .drawer-section {
  844. margin-bottom: 18px;
  845. padding: 16px;
  846. border: 1px solid #e4edf7;
  847. border-radius: 8px;
  848. background: #fff;
  849. box-shadow: 0 8px 18px rgba(31, 45, 61, 0.05);
  850. }
  851. .drawer-title {
  852. display: flex;
  853. align-items: center;
  854. justify-content: space-between;
  855. margin-bottom: 14px;
  856. span {
  857. position: relative;
  858. padding-left: 10px;
  859. color: #303133;
  860. font-size: 17px;
  861. font-weight: 600;
  862. &::before {
  863. content: '';
  864. position: absolute;
  865. left: 0;
  866. top: 3px;
  867. width: 3px;
  868. height: 15px;
  869. border-radius: 2px;
  870. background: #409eff;
  871. }
  872. }
  873. em {
  874. color: #909399;
  875. font-size: 14px;
  876. font-style: normal;
  877. }
  878. }
  879. .detail-timeline {
  880. display: flex;
  881. flex-direction: column;
  882. gap: 12px;
  883. position: relative;
  884. }
  885. .detail-item {
  886. display: grid;
  887. grid-template-columns: 126px 1fr;
  888. gap: 12px;
  889. align-items: stretch;
  890. }
  891. .detail-time {
  892. min-height: 68px;
  893. padding: 10px;
  894. border: 1px solid #cfe7ff;
  895. border-radius: 8px;
  896. background: linear-gradient(180deg, #f3f8ff, #ffffff);
  897. text-align: center;
  898. box-sizing: border-box;
  899. display: flex;
  900. align-items: center;
  901. justify-content: center;
  902. strong {
  903. color: #1f4e86;
  904. font-size: 16px;
  905. line-height: 22px;
  906. white-space: nowrap;
  907. font-variant-numeric: tabular-nums;
  908. }
  909. }
  910. .detail-content {
  911. min-height: 68px;
  912. display: grid;
  913. grid-template-columns: minmax(0, 1fr) auto;
  914. align-items: center;
  915. justify-content: space-between;
  916. gap: 12px;
  917. padding: 12px 14px;
  918. border: 1px solid #edf2f7;
  919. border-left: 4px solid #409eff;
  920. border-radius: 8px;
  921. background: linear-gradient(180deg, #ffffff, #f8fbff);
  922. position: relative;
  923. &::before {
  924. display: none;
  925. }
  926. strong,
  927. span {
  928. display: block;
  929. }
  930. strong {
  931. color: #303133;
  932. font-size: 16px;
  933. line-height: 22px;
  934. }
  935. span {
  936. margin-top: 4px;
  937. color: #909399;
  938. font-size: 14px;
  939. line-height: 20px;
  940. }
  941. }
  942. .detail-meta {
  943. grid-column: 1 / -1;
  944. display: flex;
  945. flex-wrap: wrap;
  946. gap: 6px;
  947. margin-top: 2px;
  948. span {
  949. margin-top: 0;
  950. padding: 2px 8px;
  951. border-radius: 10px;
  952. background: #eef5ff;
  953. color: #5b6f8f;
  954. font-size: 12px;
  955. line-height: 20px;
  956. }
  957. }
  958. .plan-list {
  959. display: flex;
  960. flex-direction: column;
  961. gap: 10px;
  962. .el-tooltip {
  963. display: block;
  964. }
  965. }
  966. .plan-item {
  967. display: block;
  968. padding: 12px 16px;
  969. border: 1px solid #edf2f7;
  970. border-radius: 8px;
  971. background: linear-gradient(180deg, #ffffff, #f8fbff);
  972. border-left: 4px solid #67c23a;
  973. }
  974. .plan-main {
  975. min-width: 0;
  976. }
  977. .plan-topline {
  978. display: grid;
  979. grid-template-columns: minmax(0, 1fr) max-content;
  980. align-items: center;
  981. gap: 12px;
  982. margin-bottom: 6px;
  983. strong {
  984. color: #303133;
  985. font-size: 16px;
  986. line-height: 22px;
  987. text-align: left;
  988. }
  989. span {
  990. margin: 0;
  991. color: #8a97a8;
  992. font-size: 14px;
  993. line-height: 20px;
  994. text-align: right;
  995. }
  996. }
  997. .plan-name,
  998. .plan-metrics,
  999. .plan-topline strong,
  1000. .plan-topline span {
  1001. overflow: hidden;
  1002. text-overflow: ellipsis;
  1003. white-space: nowrap;
  1004. }
  1005. .plan-name {
  1006. display: block;
  1007. width: 100%;
  1008. margin: 0 0 8px;
  1009. color: #606266;
  1010. font-size: 14px;
  1011. line-height: 20px;
  1012. text-align: left;
  1013. }
  1014. .team-queue-plan .queue-name-only {
  1015. display: flex;
  1016. align-items: center;
  1017. gap: 4px;
  1018. margin: 0;
  1019. color: #303133;
  1020. font-size: 16px;
  1021. font-weight: 600;
  1022. line-height: 22px;
  1023. white-space: nowrap;
  1024. .queue-name-label {
  1025. flex: 0 0 auto;
  1026. color: #7a8798;
  1027. font-size: 13px;
  1028. font-weight: 500;
  1029. }
  1030. .queue-name-text {
  1031. min-width: 0;
  1032. overflow: hidden;
  1033. text-overflow: ellipsis;
  1034. white-space: nowrap;
  1035. }
  1036. }
  1037. .team-queue-item {
  1038. position: relative;
  1039. padding: 0;
  1040. overflow: hidden;
  1041. border-color: #dfeaf5;
  1042. border-left: 0;
  1043. background:
  1044. linear-gradient(135deg, rgba(64, 158, 255, 0.08), transparent 42%),
  1045. linear-gradient(180deg, #ffffff, #f7fbff);
  1046. box-shadow:
  1047. inset 0 1px 0 rgba(255, 255, 255, 0.9),
  1048. 0 8px 18px rgba(31, 45, 61, 0.05);
  1049. transition:
  1050. border-color 0.18s ease,
  1051. box-shadow 0.18s ease,
  1052. transform 0.18s ease;
  1053. &::before {
  1054. content: '';
  1055. position: absolute;
  1056. left: 0;
  1057. top: 0;
  1058. bottom: 0;
  1059. width: 4px;
  1060. background: linear-gradient(180deg, #67c23a, #25b8a8);
  1061. }
  1062. &:hover {
  1063. border-color: #b9dcff;
  1064. box-shadow:
  1065. inset 0 1px 0 rgba(255, 255, 255, 0.94),
  1066. 0 12px 24px rgba(64, 158, 255, 0.1);
  1067. transform: translateY(-1px);
  1068. }
  1069. }
  1070. .team-queue-plan {
  1071. display: grid;
  1072. grid-template-columns: 42px minmax(0, 1fr) auto;
  1073. gap: 12px;
  1074. align-items: center;
  1075. min-height: 72px;
  1076. padding: 13px 14px 13px 16px;
  1077. }
  1078. .queue-avatar {
  1079. display: flex;
  1080. width: 42px;
  1081. height: 42px;
  1082. align-items: center;
  1083. justify-content: center;
  1084. border: 1px solid #cfe7ff;
  1085. border-radius: 8px;
  1086. background: linear-gradient(180deg, #eef7ff, #dff0ff);
  1087. color: #1677ff;
  1088. font-size: 20px;
  1089. box-shadow:
  1090. inset 0 1px 0 rgba(255, 255, 255, 0.86),
  1091. 0 8px 14px rgba(64, 158, 255, 0.1);
  1092. }
  1093. .queue-info {
  1094. min-width: 0;
  1095. }
  1096. .team-queue-plan .queue-user-name {
  1097. display: flex;
  1098. min-width: 0;
  1099. align-items: center;
  1100. gap: 4px;
  1101. margin-top: 7px;
  1102. color: #6d7f92;
  1103. font-size: 13px;
  1104. line-height: 20px;
  1105. white-space: nowrap;
  1106. overflow: hidden;
  1107. text-overflow: ellipsis;
  1108. i {
  1109. flex: 0 0 auto;
  1110. color: #67c23a;
  1111. font-size: 14px;
  1112. }
  1113. span {
  1114. flex: 0 0 auto;
  1115. }
  1116. strong {
  1117. min-width: 0;
  1118. overflow: hidden;
  1119. color: #425466;
  1120. font-weight: 600;
  1121. text-overflow: ellipsis;
  1122. white-space: nowrap;
  1123. }
  1124. }
  1125. .queue-badge {
  1126. flex: 0 0 auto;
  1127. padding: 3px 9px;
  1128. border: 1px solid #d9f2d0;
  1129. border-radius: 12px;
  1130. background: #f0f9eb;
  1131. color: #3b8f22;
  1132. font-size: 12px;
  1133. line-height: 18px;
  1134. font-weight: 600;
  1135. }
  1136. .plan-metrics {
  1137. display: flex;
  1138. align-items: center;
  1139. justify-content: flex-start;
  1140. gap: 14px;
  1141. color: #8a97a8;
  1142. font-size: 13px;
  1143. line-height: 20px;
  1144. font-variant-numeric: tabular-nums;
  1145. text-align: left;
  1146. em {
  1147. font-style: normal;
  1148. }
  1149. }
  1150. .drawer-empty {
  1151. padding: 22px 0 10px;
  1152. }
  1153. .drawer-actions {
  1154. position: absolute;
  1155. left: 0;
  1156. right: 0;
  1157. bottom: 0;
  1158. display: grid;
  1159. grid-template-columns: repeat(2, minmax(0, 1fr));
  1160. gap: 10px;
  1161. padding: 14px 18px 18px;
  1162. border-top: 1px solid #ebeef5;
  1163. background: rgba(255, 255, 255, 0.96);
  1164. box-shadow: 0 -8px 18px rgba(31, 45, 61, 0.06);
  1165. .el-button {
  1166. width: 100%;
  1167. margin-left: 0;
  1168. }
  1169. }
  1170. .visual-stat-page {
  1171. display: flex;
  1172. flex-direction: column;
  1173. gap: 18px;
  1174. padding: 20px;
  1175. border-radius: 8px;
  1176. border: 1px solid rgba(102, 127, 139, 0.34);
  1177. background:
  1178. linear-gradient(90deg, rgba(245, 181, 70, 0.08) 0 12px, transparent 12px 24px),
  1179. repeating-linear-gradient(
  1180. 135deg,
  1181. rgba(255, 255, 255, 0.016) 0,
  1182. rgba(255, 255, 255, 0.016) 1px,
  1183. transparent 1px,
  1184. transparent 12px
  1185. ),
  1186. linear-gradient(rgba(122, 156, 164, 0.045) 1px, transparent 1px),
  1187. linear-gradient(90deg, rgba(122, 156, 164, 0.035) 1px, transparent 1px),
  1188. radial-gradient(circle at 18% 8%, rgba(118, 173, 154, 0.13), transparent 28%),
  1189. linear-gradient(145deg, #12171d 0%, #17272a 48%, #1a1f28 100%);
  1190. background-size: 24px 4px, 100% 100%, 30px 30px, 30px 30px, 100% 100%, 100% 100%;
  1191. box-shadow:
  1192. inset 0 0 0 1px rgba(255, 255, 255, 0.045),
  1193. inset 0 32px 70px rgba(255, 255, 255, 0.025),
  1194. inset 0 -46px 100px rgba(0, 0, 0, 0.22),
  1195. 0 18px 34px rgba(0, 0, 0, 0.18);
  1196. position: relative;
  1197. overflow: hidden;
  1198. &::before {
  1199. content: '';
  1200. position: absolute;
  1201. left: 0;
  1202. right: 0;
  1203. top: 0;
  1204. height: 3px;
  1205. background:
  1206. linear-gradient(90deg, rgba(35, 211, 198, 0.9), rgba(120, 190, 84, 0.9)),
  1207. repeating-linear-gradient(
  1208. 90deg,
  1209. rgba(245, 181, 70, 0.95) 0 20px,
  1210. rgba(31, 36, 40, 0.95) 20px 34px
  1211. );
  1212. opacity: 0.88;
  1213. }
  1214. &::after {
  1215. content: '';
  1216. pointer-events: none;
  1217. position: absolute;
  1218. inset: 8px;
  1219. border: 1px solid rgba(255, 255, 255, 0.035);
  1220. border-radius: 6px;
  1221. box-shadow:
  1222. inset 0 0 0 1px rgba(0, 0, 0, 0.2),
  1223. inset 0 0 40px rgba(78, 180, 178, 0.035);
  1224. }
  1225. > *:not(.factory-visual-layer) {
  1226. position: relative;
  1227. z-index: 1;
  1228. }
  1229. }
  1230. .factory-visual-layer {
  1231. pointer-events: none;
  1232. position: absolute;
  1233. inset: 0;
  1234. z-index: 0;
  1235. opacity: 0.52;
  1236. overflow: hidden;
  1237. span {
  1238. position: absolute;
  1239. display: block;
  1240. }
  1241. }
  1242. .factory-roof {
  1243. left: 32px;
  1244. right: 32px;
  1245. top: 22px;
  1246. height: 98px;
  1247. opacity: 0.18;
  1248. background:
  1249. linear-gradient(135deg, transparent 0 24px, rgba(152, 190, 184, 0.35) 25px 27px, transparent 28px),
  1250. linear-gradient(45deg, transparent 0 24px, rgba(152, 190, 184, 0.22) 25px 27px, transparent 28px);
  1251. background-size: 56px 56px;
  1252. border-bottom: 1px solid rgba(152, 190, 184, 0.2);
  1253. }
  1254. .factory-stack {
  1255. bottom: 24px;
  1256. width: 34px;
  1257. border: 1px solid rgba(152, 190, 184, 0.16);
  1258. border-bottom: 0;
  1259. background:
  1260. repeating-linear-gradient(
  1261. 0deg,
  1262. rgba(255, 255, 255, 0.05) 0 8px,
  1263. transparent 8px 16px
  1264. ),
  1265. linear-gradient(180deg, rgba(152, 190, 184, 0.1), rgba(0, 0, 0, 0.02));
  1266. }
  1267. .stack-one {
  1268. right: 11%;
  1269. height: 180px;
  1270. }
  1271. .stack-two {
  1272. right: 6.5%;
  1273. height: 132px;
  1274. }
  1275. .factory-conveyor {
  1276. left: 24px;
  1277. right: 24px;
  1278. bottom: 24px;
  1279. height: 34px;
  1280. border-top: 1px solid rgba(152, 190, 184, 0.18);
  1281. border-bottom: 1px solid rgba(152, 190, 184, 0.12);
  1282. background:
  1283. repeating-linear-gradient(
  1284. 90deg,
  1285. rgba(245, 181, 70, 0.16) 0 18px,
  1286. rgba(0, 0, 0, 0.04) 18px 36px
  1287. );
  1288. }
  1289. .visual-overview {
  1290. min-height: 118px;
  1291. display: flex;
  1292. align-items: center;
  1293. justify-content: space-between;
  1294. gap: 20px;
  1295. padding: 20px 24px;
  1296. border: 1px solid rgba(144, 168, 171, 0.28);
  1297. border-radius: 8px;
  1298. background:
  1299. linear-gradient(135deg, rgba(255, 255, 255, 0.1), transparent 34%),
  1300. linear-gradient(90deg, rgba(47, 58, 65, 0.92), rgba(36, 88, 81, 0.82)),
  1301. linear-gradient(180deg, rgba(242, 244, 235, 0.045), rgba(0, 0, 0, 0.08)),
  1302. repeating-linear-gradient(
  1303. 90deg,
  1304. transparent 0,
  1305. transparent 46px,
  1306. rgba(255, 255, 255, 0.035) 47px
  1307. );
  1308. box-shadow:
  1309. 0 16px 34px rgba(0, 0, 0, 0.2),
  1310. inset 0 1px 0 rgba(255, 255, 255, 0.12),
  1311. inset 0 -1px 0 rgba(0, 0, 0, 0.2),
  1312. inset 0 -28px 60px rgba(0, 0, 0, 0.14);
  1313. color: #fff;
  1314. overflow: hidden;
  1315. position: relative;
  1316. &::before {
  1317. content: '';
  1318. position: absolute;
  1319. right: 190px;
  1320. top: 16px;
  1321. width: 1px;
  1322. height: 86px;
  1323. background: linear-gradient(
  1324. 180deg,
  1325. transparent,
  1326. rgba(125, 211, 230, 0.44),
  1327. transparent
  1328. );
  1329. }
  1330. &::after {
  1331. content: '';
  1332. position: absolute;
  1333. left: 0;
  1334. bottom: 0;
  1335. width: 100%;
  1336. height: 1px;
  1337. background: linear-gradient(90deg, transparent, rgba(218, 174, 81, 0.45), rgba(64, 222, 201, 0.42), transparent);
  1338. }
  1339. }
  1340. .overview-copy,
  1341. .overview-health {
  1342. position: relative;
  1343. z-index: 1;
  1344. }
  1345. .overview-kicker {
  1346. display: flex;
  1347. align-items: center;
  1348. gap: 8px;
  1349. margin-bottom: 8px;
  1350. color: rgba(231, 242, 244, 0.78);
  1351. font-size: 13px;
  1352. letter-spacing: 0;
  1353. }
  1354. .live-dot {
  1355. width: 8px;
  1356. height: 8px;
  1357. border-radius: 50%;
  1358. background: #36f0b6;
  1359. box-shadow: 0 0 0 5px rgba(54, 240, 182, 0.12);
  1360. }
  1361. .overview-copy {
  1362. h3 {
  1363. margin: 0;
  1364. font-size: 25px;
  1365. line-height: 34px;
  1366. font-weight: 600;
  1367. color: #f3fbff;
  1368. }
  1369. p {
  1370. max-width: 680px;
  1371. margin: 8px 0 0;
  1372. color: rgba(224, 238, 240, 0.7);
  1373. line-height: 22px;
  1374. }
  1375. }
  1376. .overview-health {
  1377. min-width: 132px;
  1378. padding: 10px 14px;
  1379. border-radius: 6px;
  1380. background:
  1381. linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.025));
  1382. box-shadow:
  1383. inset 0 0 0 1px rgba(255, 255, 255, 0.08),
  1384. inset 0 -12px 24px rgba(0, 0, 0, 0.12);
  1385. text-align: center;
  1386. span,
  1387. em {
  1388. display: block;
  1389. color: rgba(255, 255, 255, 0.68);
  1390. font-style: normal;
  1391. }
  1392. strong {
  1393. display: block;
  1394. margin: 4px 0;
  1395. font-size: 42px;
  1396. line-height: 46px;
  1397. color: #72f0d1;
  1398. text-shadow: 0 0 18px rgba(114, 240, 209, 0.24);
  1399. }
  1400. }
  1401. .visual-kpi-row {
  1402. display: grid;
  1403. grid-template-columns: repeat(4, minmax(160px, 1fr));
  1404. gap: 14px;
  1405. }
  1406. .visual-kpi-card {
  1407. min-height: 112px;
  1408. padding: 15px 17px 14px;
  1409. border: 1px solid rgba(130, 154, 155, 0.3);
  1410. border-radius: 8px;
  1411. background:
  1412. linear-gradient(150deg, rgba(255, 255, 255, 0.1), transparent 36%),
  1413. linear-gradient(145deg, rgba(42, 52, 58, 0.94), rgba(22, 75, 68, 0.82)),
  1414. linear-gradient(180deg, rgba(216, 218, 207, 0.035), rgba(0, 0, 0, 0.1)),
  1415. repeating-linear-gradient(
  1416. 0deg,
  1417. transparent 0,
  1418. transparent 30px,
  1419. rgba(255, 255, 255, 0.026) 31px
  1420. );
  1421. position: relative;
  1422. overflow: hidden;
  1423. box-shadow:
  1424. inset 0 1px 0 rgba(255, 255, 255, 0.08),
  1425. inset 0 -18px 36px rgba(0, 0, 0, 0.12),
  1426. 0 10px 24px rgba(0, 0, 0, 0.2);
  1427. transition: transform 0.2s, border-color 0.2s, box-shadow 0.2s;
  1428. &::before {
  1429. content: '';
  1430. position: absolute;
  1431. left: 0;
  1432. right: 0;
  1433. top: 0;
  1434. height: 3px;
  1435. background:
  1436. linear-gradient(90deg, var(--kpi-color), rgba(255, 255, 255, 0)),
  1437. repeating-linear-gradient(
  1438. 90deg,
  1439. rgba(245, 181, 70, 0.8) 0 10px,
  1440. transparent 10px 18px
  1441. );
  1442. }
  1443. &::after {
  1444. content: '';
  1445. position: absolute;
  1446. right: 14px;
  1447. bottom: 12px;
  1448. width: 52px;
  1449. height: 18px;
  1450. border-right: 1px solid rgba(255, 255, 255, 0.12);
  1451. border-bottom: 1px solid rgba(255, 255, 255, 0.12);
  1452. opacity: 0.56;
  1453. }
  1454. &:hover {
  1455. transform: translateY(-2px);
  1456. border-color: rgba(126, 211, 197, 0.5);
  1457. box-shadow:
  1458. inset 0 1px 0 rgba(255, 255, 255, 0.14),
  1459. 0 16px 30px rgba(0, 0, 0, 0.26);
  1460. }
  1461. span,
  1462. small {
  1463. display: block;
  1464. color: rgba(232, 244, 255, 0.72);
  1465. }
  1466. strong {
  1467. display: block;
  1468. margin: 10px 0 3px;
  1469. font-size: 32px;
  1470. line-height: 36px;
  1471. color: #ffffff;
  1472. text-shadow: 0 0 14px rgba(126, 211, 197, 0.18);
  1473. }
  1474. }
  1475. .kpi-card-head {
  1476. display: flex;
  1477. align-items: center;
  1478. justify-content: space-between;
  1479. gap: 10px;
  1480. position: relative;
  1481. z-index: 1;
  1482. span {
  1483. color: rgba(255, 255, 255, 0.82);
  1484. font-weight: 500;
  1485. }
  1486. }
  1487. .kpi-card-body {
  1488. position: relative;
  1489. z-index: 1;
  1490. }
  1491. .kpi-icon {
  1492. width: 38px;
  1493. height: 38px;
  1494. border-radius: 6px;
  1495. display: flex;
  1496. align-items: center;
  1497. justify-content: center;
  1498. color: var(--kpi-color);
  1499. background: rgba(255, 255, 255, 0.06);
  1500. border: 1px solid rgba(255, 255, 255, 0.12);
  1501. font-size: 20px;
  1502. box-shadow:
  1503. inset 0 1px 0 rgba(255, 255, 255, 0.12),
  1504. 0 6px 14px rgba(0, 0, 0, 0.14);
  1505. }
  1506. .scheduled .kpi-icon {
  1507. background: rgba(19, 194, 194, 0.12);
  1508. }
  1509. .conflict .kpi-icon {
  1510. background: rgba(245, 108, 108, 0.12);
  1511. }
  1512. .temp .kpi-icon {
  1513. background: rgba(139, 92, 246, 0.12);
  1514. }
  1515. .visual-grid {
  1516. display: grid;
  1517. grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr);
  1518. grid-template-areas:
  1519. 'schedule month'
  1520. 'type month'
  1521. 'type conflict';
  1522. align-items: start;
  1523. gap: 14px;
  1524. }
  1525. .visual-grid > .visual-card:nth-child(2) {
  1526. grid-area: month;
  1527. }
  1528. .visual-grid > .visual-card:nth-child(3) {
  1529. grid-area: type;
  1530. }
  1531. .visual-card {
  1532. min-height: 270px;
  1533. padding: 18px 20px;
  1534. border: 1px solid rgba(130, 154, 155, 0.28);
  1535. border-radius: 8px;
  1536. background:
  1537. linear-gradient(145deg, rgba(255, 255, 255, 0.09), transparent 32%),
  1538. linear-gradient(145deg, rgba(31, 42, 48, 0.95), rgba(18, 70, 65, 0.82)),
  1539. linear-gradient(180deg, rgba(218, 220, 208, 0.03), rgba(0, 0, 0, 0.12)),
  1540. repeating-linear-gradient(
  1541. 90deg,
  1542. transparent 0,
  1543. transparent 44px,
  1544. rgba(255, 255, 255, 0.022) 45px
  1545. );
  1546. box-sizing: border-box;
  1547. box-shadow:
  1548. inset 0 1px 0 rgba(255, 255, 255, 0.08),
  1549. inset 0 -26px 50px rgba(0, 0, 0, 0.14),
  1550. 0 12px 26px rgba(0, 0, 0, 0.2);
  1551. overflow: hidden;
  1552. position: relative;
  1553. &::before {
  1554. content: '';
  1555. position: absolute;
  1556. left: 12px;
  1557. top: 12px;
  1558. width: 56px;
  1559. height: 26px;
  1560. border-left: 2px solid rgba(245, 181, 70, 0.48);
  1561. border-top: 2px solid rgba(98, 212, 111, 0.42);
  1562. opacity: 0.75;
  1563. }
  1564. &::after {
  1565. content: '';
  1566. position: absolute;
  1567. left: 0;
  1568. right: 0;
  1569. top: 0;
  1570. height: 1px;
  1571. background: linear-gradient(90deg, transparent, rgba(218, 174, 81, 0.35), rgba(114, 240, 209, 0.36), transparent);
  1572. }
  1573. .chart-title {
  1574. position: relative;
  1575. margin-bottom: 4px;
  1576. padding-left: 10px;
  1577. font-size: 17px;
  1578. font-weight: 600;
  1579. color: #f2f9fb;
  1580. &::before {
  1581. content: '';
  1582. position: absolute;
  1583. left: 0;
  1584. top: 3px;
  1585. width: 3px;
  1586. height: 16px;
  1587. border-radius: 2px;
  1588. background: linear-gradient(180deg, #33b8ff, #62d46f);
  1589. }
  1590. }
  1591. }
  1592. .panel-head {
  1593. display: flex;
  1594. align-items: flex-start;
  1595. justify-content: space-between;
  1596. gap: 12px;
  1597. margin-bottom: 16px;
  1598. position: relative;
  1599. z-index: 1;
  1600. p {
  1601. margin: 0;
  1602. color: rgba(224, 238, 240, 0.62);
  1603. font-size: 13px;
  1604. }
  1605. .el-tag {
  1606. border-color: rgba(255, 255, 255, 0.28);
  1607. background: rgba(255, 255, 255, 0.08);
  1608. font-weight: 600;
  1609. }
  1610. }
  1611. .schedule-card {
  1612. grid-area: schedule;
  1613. min-height: 0;
  1614. padding-bottom: 16px;
  1615. &::before {
  1616. width: 74px;
  1617. border-left-color: rgba(245, 181, 70, 0.58);
  1618. border-top-color: rgba(69, 214, 186, 0.45);
  1619. }
  1620. &::after {
  1621. height: 3px;
  1622. background:
  1623. linear-gradient(90deg, rgba(245, 181, 70, 0.74), rgba(67, 222, 198, 0.56), transparent 72%),
  1624. repeating-linear-gradient(
  1625. 90deg,
  1626. rgba(245, 181, 70, 0.8) 0 12px,
  1627. rgba(22, 29, 32, 0.68) 12px 22px
  1628. );
  1629. }
  1630. }
  1631. .donut-wrap {
  1632. display: grid;
  1633. grid-template-columns: minmax(188px, 220px) minmax(180px, 1fr);
  1634. align-items: center;
  1635. gap: 24px;
  1636. min-height: 0;
  1637. margin-top: 6px;
  1638. padding: 18px 20px;
  1639. border-radius: 8px;
  1640. border: 1px solid rgba(126, 154, 154, 0.18);
  1641. background:
  1642. radial-gradient(circle at 25% 50%, rgba(76, 220, 193, 0.11), transparent 34%),
  1643. linear-gradient(145deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.025)),
  1644. linear-gradient(90deg, rgba(28, 36, 40, 0.92), rgba(18, 68, 64, 0.7)),
  1645. repeating-linear-gradient(
  1646. 135deg,
  1647. transparent 0,
  1648. transparent 16px,
  1649. rgba(255, 255, 255, 0.025) 17px,
  1650. rgba(255, 255, 255, 0.025) 18px
  1651. );
  1652. box-shadow:
  1653. inset 0 1px 0 rgba(255, 255, 255, 0.08),
  1654. inset 0 -18px 36px rgba(0, 0, 0, 0.16),
  1655. 0 10px 20px rgba(0, 0, 0, 0.14);
  1656. position: relative;
  1657. z-index: 1;
  1658. &::before,
  1659. &::after {
  1660. content: '';
  1661. position: absolute;
  1662. width: 7px;
  1663. height: 7px;
  1664. border-radius: 50%;
  1665. background: linear-gradient(135deg, #7f9293, #1d2a2d);
  1666. box-shadow:
  1667. inset 0 1px 1px rgba(255, 255, 255, 0.28),
  1668. 0 0 0 1px rgba(0, 0, 0, 0.3);
  1669. }
  1670. &::before {
  1671. left: 12px;
  1672. top: 12px;
  1673. }
  1674. &::after {
  1675. right: 12px;
  1676. bottom: 12px;
  1677. }
  1678. }
  1679. .donut-chart {
  1680. width: 172px;
  1681. height: 172px;
  1682. border-radius: 50%;
  1683. display: flex;
  1684. align-items: center;
  1685. justify-content: center;
  1686. margin: 0 auto;
  1687. box-shadow:
  1688. 0 18px 36px rgba(0, 0, 0, 0.22),
  1689. 0 0 0 9px rgba(189, 199, 196, 0.06),
  1690. 0 0 0 17px rgba(0, 0, 0, 0.12),
  1691. inset 0 0 0 1px rgba(255, 255, 255, 0.2);
  1692. position: relative;
  1693. &::after {
  1694. content: '';
  1695. position: absolute;
  1696. inset: -24px;
  1697. border-radius: 50%;
  1698. border: 1px dashed rgba(143, 170, 169, 0.2);
  1699. }
  1700. }
  1701. .donut-center {
  1702. width: 104px;
  1703. height: 104px;
  1704. border-radius: 50%;
  1705. background: linear-gradient(180deg, #f7fbfc, #dce8ec);
  1706. box-shadow:
  1707. 0 0 0 1px rgba(55, 88, 105, 0.18) inset,
  1708. 0 8px 22px rgba(0, 0, 0, 0.2);
  1709. display: flex;
  1710. flex-direction: column;
  1711. align-items: center;
  1712. justify-content: center;
  1713. strong {
  1714. font-size: 30px;
  1715. color: #10233f;
  1716. }
  1717. span {
  1718. color: #536273;
  1719. }
  1720. }
  1721. .donut-legend {
  1722. width: 100%;
  1723. position: relative;
  1724. z-index: 1;
  1725. .el-tooltip {
  1726. display: block;
  1727. }
  1728. }
  1729. .donut-legend-item {
  1730. display: grid;
  1731. grid-template-columns: 28px 1fr 40px;
  1732. align-items: center;
  1733. gap: 8px;
  1734. margin-bottom: 10px;
  1735. padding: 9px 10px;
  1736. border: 1px solid rgba(132, 170, 188, 0.18);
  1737. border-radius: 6px;
  1738. background:
  1739. linear-gradient(90deg, rgba(255, 255, 255, 0.11), rgba(255, 255, 255, 0.04)),
  1740. linear-gradient(180deg, rgba(214, 210, 190, 0.035), transparent);
  1741. box-shadow:
  1742. inset 0 1px 0 rgba(255, 255, 255, 0.06),
  1743. inset 4px 0 0 rgba(245, 181, 70, 0.08);
  1744. em {
  1745. color: rgba(232, 244, 255, 0.76);
  1746. font-style: normal;
  1747. }
  1748. strong {
  1749. color: #ffffff;
  1750. text-align: right;
  1751. }
  1752. }
  1753. .legend-line {
  1754. width: 24px;
  1755. height: 8px;
  1756. border-radius: 8px;
  1757. }
  1758. .visual-bar-item {
  1759. margin-bottom: 14px;
  1760. padding: 10px 12px;
  1761. border: 1px solid rgba(132, 170, 188, 0.16);
  1762. border-radius: 6px;
  1763. background:
  1764. linear-gradient(90deg, rgba(255, 255, 255, 0.085), rgba(255, 255, 255, 0.035)),
  1765. linear-gradient(180deg, rgba(214, 210, 190, 0.03), transparent);
  1766. box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05);
  1767. cursor: pointer;
  1768. transition: background 0.2s, border-color 0.2s, transform 0.2s;
  1769. &:hover {
  1770. transform: translateX(2px);
  1771. border-color: rgba(114, 240, 209, 0.34);
  1772. background: rgba(255, 255, 255, 0.1);
  1773. }
  1774. }
  1775. .visual-bar-list {
  1776. position: relative;
  1777. z-index: 1;
  1778. .el-tooltip {
  1779. display: block;
  1780. }
  1781. }
  1782. .bar-head {
  1783. display: flex;
  1784. align-items: center;
  1785. justify-content: space-between;
  1786. margin-bottom: 7px;
  1787. color: rgba(232, 244, 255, 0.78);
  1788. strong {
  1789. color: #ffffff;
  1790. }
  1791. }
  1792. .bar-track {
  1793. height: 10px;
  1794. border-radius: 12px;
  1795. overflow: hidden;
  1796. background: rgba(211, 226, 230, 0.14);
  1797. box-shadow:
  1798. inset 0 0 0 1px rgba(255, 255, 255, 0.04),
  1799. inset 0 2px 5px rgba(0, 0, 0, 0.18);
  1800. }
  1801. .bar-fill {
  1802. height: 100%;
  1803. min-width: 4px;
  1804. border-radius: 12px;
  1805. transition: width 0.3s;
  1806. box-shadow: 8px 0 18px rgba(64, 158, 255, 0.18);
  1807. }
  1808. .type-visual-list {
  1809. display: grid;
  1810. grid-template-columns: repeat(3, minmax(0, 1fr));
  1811. gap: 12px;
  1812. position: relative;
  1813. z-index: 1;
  1814. .el-tooltip {
  1815. display: block;
  1816. }
  1817. }
  1818. .type-visual-item {
  1819. min-height: 160px;
  1820. display: flex;
  1821. flex-direction: column;
  1822. align-items: center;
  1823. justify-content: center;
  1824. gap: 10px;
  1825. padding: 14px 10px;
  1826. border: 1px solid rgba(132, 170, 188, 0.18);
  1827. border-radius: 8px;
  1828. background:
  1829. linear-gradient(160deg, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.045)),
  1830. linear-gradient(180deg, rgba(214, 210, 190, 0.035), transparent);
  1831. box-shadow:
  1832. inset 0 1px 0 rgba(255, 255, 255, 0.06),
  1833. inset 0 -18px 30px rgba(0, 0, 0, 0.1);
  1834. text-align: center;
  1835. cursor: pointer;
  1836. transition: transform 0.2s, border-color 0.2s, background 0.2s;
  1837. &:hover {
  1838. transform: translateY(-2px);
  1839. border-color: rgba(114, 240, 209, 0.32);
  1840. background:
  1841. linear-gradient(180deg, rgba(255, 255, 255, 0.14), rgba(255, 255, 255, 0.08));
  1842. }
  1843. span {
  1844. color: #ffffff;
  1845. font-weight: 600;
  1846. }
  1847. p {
  1848. margin: 5px 0 0;
  1849. color: rgba(232, 244, 255, 0.62);
  1850. font-size: 14px;
  1851. }
  1852. }
  1853. .type-ring {
  1854. width: 72px;
  1855. height: 72px;
  1856. border-radius: 50%;
  1857. background: conic-gradient(
  1858. var(--ring-color) var(--ring-percent),
  1859. rgba(214, 231, 248, 0.18) 0
  1860. );
  1861. display: flex;
  1862. align-items: center;
  1863. justify-content: center;
  1864. box-shadow: 0 10px 22px rgba(3, 20, 43, 0.18);
  1865. strong {
  1866. width: 48px;
  1867. height: 48px;
  1868. border-radius: 50%;
  1869. background: #f4f8f8;
  1870. color: #10233f;
  1871. display: flex;
  1872. align-items: center;
  1873. justify-content: center;
  1874. }
  1875. }
  1876. .conflict-visual-card {
  1877. grid-area: conflict;
  1878. display: flex;
  1879. flex-direction: column;
  1880. .el-button {
  1881. align-self: flex-start;
  1882. margin-top: 14px;
  1883. border-color: rgba(255, 178, 69, 0.34);
  1884. background: rgba(255, 178, 69, 0.12);
  1885. color: #ffd08a;
  1886. &:hover,
  1887. &:focus {
  1888. border-color: rgba(255, 178, 69, 0.56);
  1889. background: rgba(255, 178, 69, 0.2);
  1890. color: #ffe0aa;
  1891. }
  1892. }
  1893. }
  1894. .conflict-visual {
  1895. flex: 1;
  1896. display: grid;
  1897. grid-template-columns: 136px 1fr;
  1898. align-items: end;
  1899. gap: 18px;
  1900. min-height: 172px;
  1901. padding-bottom: 26px;
  1902. position: relative;
  1903. z-index: 1;
  1904. }
  1905. .conflict-number {
  1906. align-self: center;
  1907. padding: 18px 12px;
  1908. border-radius: 8px;
  1909. background: rgba(255, 108, 108, 0.1);
  1910. border: 1px solid rgba(255, 132, 132, 0.28);
  1911. text-align: center;
  1912. box-shadow:
  1913. inset 0 1px 0 rgba(255, 255, 255, 0.06),
  1914. inset 0 -20px 28px rgba(0, 0, 0, 0.12);
  1915. strong {
  1916. display: block;
  1917. font-size: 58px;
  1918. line-height: 62px;
  1919. color: #ff7777;
  1920. text-shadow: 0 0 18px rgba(245, 108, 108, 0.28);
  1921. }
  1922. span {
  1923. color: rgba(255, 235, 235, 0.78);
  1924. }
  1925. }
  1926. .spark-bars {
  1927. height: 158px;
  1928. display: grid;
  1929. grid-template-columns: repeat(6, 1fr);
  1930. align-items: end;
  1931. gap: 10px;
  1932. padding: 14px 8px 0;
  1933. border-bottom: 1px solid rgba(126, 211, 255, 0.18);
  1934. background-image: linear-gradient(rgba(125, 179, 201, 0.12) 1px, transparent 1px);
  1935. background-size: 100% 38px;
  1936. position: relative;
  1937. &::before {
  1938. content: '';
  1939. position: absolute;
  1940. left: 0;
  1941. right: 0;
  1942. bottom: 0;
  1943. height: 1px;
  1944. background: linear-gradient(90deg, transparent, rgba(125, 211, 230, 0.45), transparent);
  1945. }
  1946. .el-tooltip {
  1947. height: 100%;
  1948. display: flex;
  1949. align-items: flex-end;
  1950. }
  1951. span {
  1952. min-height: 18px;
  1953. max-width: 72px;
  1954. width: 100%;
  1955. justify-self: center;
  1956. border-radius: 6px 6px 0 0;
  1957. background: linear-gradient(180deg, #ff8a8a, #f56c6c);
  1958. position: relative;
  1959. box-shadow: 0 8px 16px rgba(245, 108, 108, 0.26);
  1960. }
  1961. b {
  1962. position: absolute;
  1963. left: 50%;
  1964. top: -22px;
  1965. transform: translateX(-50%);
  1966. color: #ff7f7f;
  1967. font-weight: 600;
  1968. }
  1969. em {
  1970. position: absolute;
  1971. left: 50%;
  1972. bottom: -22px;
  1973. transform: translateX(-50%);
  1974. white-space: nowrap;
  1975. color: rgba(232, 244, 255, 0.58);
  1976. font-size: 12px;
  1977. font-style: normal;
  1978. }
  1979. }
  1980. .visual-stat-page {
  1981. gap: 14px;
  1982. padding: 16px;
  1983. border: 1px solid rgba(118, 137, 136, 0.34);
  1984. border-radius: 6px;
  1985. background:
  1986. linear-gradient(90deg, rgba(219, 167, 72, 0.12) 0 10px, transparent 10px 22px),
  1987. linear-gradient(180deg, rgba(255, 255, 255, 0.045), transparent 24%),
  1988. linear-gradient(rgba(142, 156, 152, 0.06) 1px, transparent 1px),
  1989. linear-gradient(90deg, rgba(142, 156, 152, 0.045) 1px, transparent 1px),
  1990. radial-gradient(circle at 78% 14%, rgba(76, 214, 184, 0.12), transparent 32%),
  1991. linear-gradient(135deg, #161b1d 0%, #202727 42%, #132d2b 100%);
  1992. background-size: 22px 100%, 100% 100%, 34px 34px, 34px 34px, 100% 100%, 100% 100%;
  1993. }
  1994. .visual-stat-page::after {
  1995. inset: 6px;
  1996. border-radius: 4px;
  1997. border-color: rgba(230, 238, 230, 0.04);
  1998. }
  1999. .factory-visual-layer {
  2000. opacity: 0.26;
  2001. }
  2002. .factory-roof {
  2003. top: 0;
  2004. height: 76px;
  2005. opacity: 0.2;
  2006. }
  2007. .factory-conveyor {
  2008. bottom: 12px;
  2009. height: 24px;
  2010. opacity: 0.54;
  2011. }
  2012. .visual-overview {
  2013. min-height: 92px;
  2014. padding: 18px 22px;
  2015. border-radius: 6px;
  2016. border-color: rgba(137, 159, 156, 0.32);
  2017. background:
  2018. linear-gradient(90deg, rgba(223, 166, 70, 0.12), transparent 16%),
  2019. linear-gradient(135deg, rgba(255, 255, 255, 0.12), transparent 34%),
  2020. linear-gradient(90deg, rgba(44, 54, 56, 0.96), rgba(31, 86, 78, 0.82));
  2021. }
  2022. .visual-overview::before {
  2023. right: 160px;
  2024. background: linear-gradient(180deg, transparent, rgba(219, 167, 72, 0.42), transparent);
  2025. }
  2026. .overview-copy h3 {
  2027. font-size: 24px;
  2028. line-height: 30px;
  2029. }
  2030. .overview-copy p {
  2031. margin-top: 6px;
  2032. color: rgba(231, 238, 232, 0.7);
  2033. }
  2034. .overview-health {
  2035. min-width: 118px;
  2036. padding: 9px 12px;
  2037. border-radius: 5px;
  2038. background:
  2039. linear-gradient(180deg, rgba(116, 132, 130, 0.26), rgba(26, 35, 36, 0.34));
  2040. box-shadow:
  2041. inset 0 0 0 1px rgba(255, 255, 255, 0.08),
  2042. inset 0 -16px 28px rgba(0, 0, 0, 0.16);
  2043. }
  2044. .overview-health strong {
  2045. margin: 2px 0;
  2046. font-size: 38px;
  2047. line-height: 40px;
  2048. color: #78f0cf;
  2049. }
  2050. .visual-kpi-row {
  2051. grid-template-columns: repeat(4, minmax(0, 1fr));
  2052. gap: 10px;
  2053. padding: 10px;
  2054. border: 1px solid rgba(126, 147, 143, 0.22);
  2055. border-radius: 6px;
  2056. background:
  2057. linear-gradient(180deg, rgba(255, 255, 255, 0.055), rgba(255, 255, 255, 0.015)),
  2058. repeating-linear-gradient(90deg, rgba(222, 169, 72, 0.08) 0 18px, transparent 18px 36px);
  2059. }
  2060. .visual-kpi-card {
  2061. min-height: 76px;
  2062. display: grid;
  2063. grid-template-columns: 42px minmax(0, 1fr);
  2064. grid-template-rows: auto auto;
  2065. gap: 2px 10px;
  2066. align-items: center;
  2067. padding: 12px 14px;
  2068. border-radius: 5px;
  2069. border-color: rgba(143, 164, 158, 0.28);
  2070. background:
  2071. linear-gradient(90deg, rgba(255, 255, 255, 0.08), transparent 58%),
  2072. linear-gradient(180deg, rgba(47, 59, 60, 0.95), rgba(24, 55, 52, 0.82));
  2073. }
  2074. .visual-kpi-card::before {
  2075. right: auto;
  2076. width: 4px;
  2077. height: 100%;
  2078. background: var(--kpi-color);
  2079. opacity: 0.82;
  2080. }
  2081. .visual-kpi-card::after {
  2082. width: 34px;
  2083. height: 14px;
  2084. opacity: 0.38;
  2085. }
  2086. .visual-kpi-card:hover {
  2087. transform: translateY(-1px);
  2088. }
  2089. .kpi-card-head {
  2090. display: contents;
  2091. }
  2092. .kpi-card-head span {
  2093. grid-column: 2;
  2094. font-size: 13px;
  2095. color: rgba(234, 242, 238, 0.74);
  2096. }
  2097. .kpi-icon {
  2098. grid-row: 1 / 3;
  2099. width: 36px;
  2100. height: 36px;
  2101. border-radius: 5px;
  2102. background: rgba(255, 255, 255, 0.05);
  2103. }
  2104. .kpi-card-body {
  2105. grid-column: 2;
  2106. display: flex;
  2107. align-items: baseline;
  2108. gap: 10px;
  2109. }
  2110. .visual-kpi-card strong {
  2111. margin: 0;
  2112. font-size: 28px;
  2113. line-height: 30px;
  2114. }
  2115. .visual-kpi-card small {
  2116. min-width: 0;
  2117. font-size: 12px;
  2118. color: rgba(231, 238, 232, 0.6);
  2119. }
  2120. .visual-grid {
  2121. display: grid;
  2122. grid-template-columns: minmax(0, 1.08fr) minmax(360px, 0.92fr);
  2123. gap: 14px;
  2124. grid-template-areas: none;
  2125. align-items: start;
  2126. }
  2127. .visual-column {
  2128. min-width: 0;
  2129. display: flex;
  2130. flex-direction: column;
  2131. gap: 14px;
  2132. }
  2133. .visual-card,
  2134. .schedule-card,
  2135. .month-card,
  2136. .type-card,
  2137. .conflict-visual-card,
  2138. .visual-grid > .visual-card:nth-child(2),
  2139. .visual-grid > .visual-card:nth-child(3) {
  2140. grid-area: auto;
  2141. }
  2142. .visual-card {
  2143. min-height: 0;
  2144. padding: 16px;
  2145. border-radius: 6px;
  2146. border-color: rgba(138, 160, 154, 0.28);
  2147. background:
  2148. linear-gradient(90deg, rgba(222, 169, 72, 0.08), transparent 18%),
  2149. linear-gradient(145deg, rgba(255, 255, 255, 0.09), transparent 34%),
  2150. linear-gradient(180deg, rgba(45, 58, 58, 0.94), rgba(20, 66, 61, 0.84));
  2151. box-shadow:
  2152. inset 0 1px 0 rgba(255, 255, 255, 0.08),
  2153. inset 0 -18px 34px rgba(0, 0, 0, 0.14),
  2154. 0 8px 18px rgba(0, 0, 0, 0.18);
  2155. }
  2156. .visual-card::before {
  2157. left: 10px;
  2158. top: 10px;
  2159. width: 40px;
  2160. height: 18px;
  2161. border-left-color: rgba(222, 169, 72, 0.6);
  2162. border-top-color: rgba(82, 226, 196, 0.44);
  2163. }
  2164. .panel-head {
  2165. margin-bottom: 12px;
  2166. }
  2167. .visual-card .chart-title {
  2168. font-size: 16px;
  2169. line-height: 22px;
  2170. }
  2171. .panel-head p {
  2172. color: rgba(231, 238, 232, 0.62);
  2173. }
  2174. .donut-wrap {
  2175. grid-template-columns: 180px minmax(0, 1fr);
  2176. gap: 18px;
  2177. padding: 16px;
  2178. border-radius: 6px;
  2179. background:
  2180. radial-gradient(circle at 18% 52%, rgba(120, 240, 207, 0.11), transparent 38%),
  2181. linear-gradient(90deg, rgba(25, 32, 34, 0.78), rgba(47, 70, 68, 0.6));
  2182. }
  2183. .donut-chart {
  2184. width: 158px;
  2185. height: 158px;
  2186. }
  2187. .donut-chart::after {
  2188. inset: -18px;
  2189. border-color: rgba(222, 169, 72, 0.18);
  2190. }
  2191. .donut-center {
  2192. width: 94px;
  2193. height: 94px;
  2194. }
  2195. .donut-center strong {
  2196. font-size: 28px;
  2197. line-height: 32px;
  2198. }
  2199. .donut-legend-item {
  2200. margin-bottom: 8px;
  2201. padding: 10px 12px;
  2202. border-radius: 5px;
  2203. background:
  2204. linear-gradient(90deg, rgba(255, 255, 255, 0.11), rgba(255, 255, 255, 0.035));
  2205. }
  2206. .month-card .visual-bar-list {
  2207. display: grid;
  2208. gap: 10px;
  2209. }
  2210. .visual-bar-item {
  2211. margin-bottom: 0;
  2212. padding: 12px 14px;
  2213. border-radius: 5px;
  2214. border-color: rgba(137, 160, 154, 0.22);
  2215. background:
  2216. linear-gradient(90deg, rgba(255, 255, 255, 0.11), rgba(255, 255, 255, 0.035));
  2217. }
  2218. .bar-head {
  2219. margin-bottom: 8px;
  2220. font-size: 14px;
  2221. }
  2222. .bar-track {
  2223. height: 9px;
  2224. background: rgba(218, 226, 222, 0.16);
  2225. }
  2226. .type-card .type-visual-list {
  2227. grid-template-columns: 1fr;
  2228. gap: 10px;
  2229. }
  2230. .type-visual-item {
  2231. min-height: 90px;
  2232. flex-direction: row;
  2233. justify-content: flex-start;
  2234. gap: 14px;
  2235. padding: 12px 14px;
  2236. text-align: left;
  2237. border-radius: 5px;
  2238. }
  2239. .type-ring {
  2240. flex: 0 0 auto;
  2241. width: 58px;
  2242. height: 58px;
  2243. }
  2244. .type-ring strong {
  2245. width: 38px;
  2246. height: 38px;
  2247. font-size: 18px;
  2248. }
  2249. .conflict-visual-card {
  2250. min-height: 0;
  2251. }
  2252. .conflict-visual {
  2253. grid-template-columns: 112px minmax(0, 1fr);
  2254. min-height: 140px;
  2255. gap: 14px;
  2256. padding-bottom: 24px;
  2257. }
  2258. .conflict-number {
  2259. padding: 15px 10px;
  2260. border-radius: 5px;
  2261. }
  2262. .conflict-number strong {
  2263. font-size: 46px;
  2264. line-height: 50px;
  2265. }
  2266. .spark-bars {
  2267. height: 138px;
  2268. gap: 8px;
  2269. background-size: 100% 34px;
  2270. }
  2271. .donut-chart {
  2272. overflow: visible;
  2273. background-blend-mode: normal;
  2274. box-shadow:
  2275. 0 18px 0 rgba(13, 28, 29, 0.72),
  2276. 0 28px 34px rgba(0, 0, 0, 0.34),
  2277. 0 0 0 8px rgba(221, 227, 218, 0.08),
  2278. 0 0 0 17px rgba(0, 0, 0, 0.16),
  2279. inset 8px 10px 14px rgba(255, 255, 255, 0.22),
  2280. inset -12px -16px 20px rgba(0, 0, 0, 0.28);
  2281. }
  2282. .donut-chart::before {
  2283. content: '';
  2284. position: absolute;
  2285. inset: -11px;
  2286. border-radius: 50%;
  2287. background:
  2288. linear-gradient(145deg, rgba(255, 255, 255, 0.28), transparent 34%),
  2289. linear-gradient(315deg, rgba(0, 0, 0, 0.38), transparent 42%);
  2290. box-shadow:
  2291. inset 0 2px 0 rgba(255, 255, 255, 0.18),
  2292. inset 0 -10px 18px rgba(0, 0, 0, 0.28);
  2293. pointer-events: none;
  2294. z-index: -1;
  2295. }
  2296. .donut-chart::after {
  2297. inset: auto 10px -22px;
  2298. height: 32px;
  2299. border: 0;
  2300. border-radius: 50%;
  2301. background:
  2302. radial-gradient(ellipse at center, rgba(0, 0, 0, 0.34), transparent 66%),
  2303. linear-gradient(180deg, rgba(38, 58, 56, 0.8), rgba(8, 18, 18, 0.16));
  2304. filter: blur(0.2px);
  2305. transform: scaleX(1.08);
  2306. z-index: -2;
  2307. }
  2308. .donut-center {
  2309. background:
  2310. radial-gradient(circle at 34% 28%, rgba(255, 255, 255, 0.98), rgba(225, 235, 235, 0.92) 52%, rgba(182, 200, 200, 0.92));
  2311. box-shadow:
  2312. inset 4px 5px 9px rgba(255, 255, 255, 0.74),
  2313. inset -6px -8px 12px rgba(77, 104, 111, 0.22),
  2314. 0 8px 0 rgba(113, 132, 133, 0.3),
  2315. 0 14px 22px rgba(0, 0, 0, 0.24);
  2316. }
  2317. .type-ring {
  2318. position: relative;
  2319. overflow: visible;
  2320. filter: drop-shadow(0 14px 12px rgba(0, 0, 0, 0.28));
  2321. box-shadow:
  2322. 0 10px 0 rgba(12, 26, 27, 0.72),
  2323. inset 5px 7px 10px rgba(255, 255, 255, 0.22),
  2324. inset -8px -10px 13px rgba(0, 0, 0, 0.28);
  2325. }
  2326. .type-ring::before {
  2327. content: '';
  2328. position: absolute;
  2329. inset: -6px;
  2330. border-radius: 50%;
  2331. background:
  2332. linear-gradient(145deg, rgba(255, 255, 255, 0.22), transparent 38%),
  2333. linear-gradient(315deg, rgba(0, 0, 0, 0.32), transparent 44%);
  2334. box-shadow:
  2335. inset 0 2px 0 rgba(255, 255, 255, 0.14),
  2336. inset 0 -8px 14px rgba(0, 0, 0, 0.24);
  2337. pointer-events: none;
  2338. z-index: -1;
  2339. }
  2340. .type-ring::after {
  2341. content: '';
  2342. position: absolute;
  2343. left: 7px;
  2344. right: 7px;
  2345. bottom: -13px;
  2346. height: 20px;
  2347. border-radius: 50%;
  2348. background: radial-gradient(ellipse at center, rgba(0, 0, 0, 0.3), transparent 68%);
  2349. z-index: -2;
  2350. }
  2351. .type-ring strong {
  2352. background:
  2353. radial-gradient(circle at 34% 26%, #ffffff, #eef4f2 56%, #cbd9d8);
  2354. box-shadow:
  2355. inset 3px 4px 6px rgba(255, 255, 255, 0.76),
  2356. inset -4px -6px 9px rgba(72, 93, 100, 0.22),
  2357. 0 5px 0 rgba(102, 124, 125, 0.28);
  2358. }
  2359. .bar-track {
  2360. height: 16px;
  2361. padding: 3px 7px;
  2362. overflow: visible;
  2363. border-radius: 8px;
  2364. background:
  2365. linear-gradient(180deg, rgba(255, 255, 255, 0.14), rgba(255, 255, 255, 0.02)),
  2366. linear-gradient(180deg, rgba(47, 65, 64, 0.9), rgba(14, 29, 31, 0.78));
  2367. box-shadow:
  2368. inset 0 3px 5px rgba(255, 255, 255, 0.08),
  2369. inset 0 -5px 9px rgba(0, 0, 0, 0.32),
  2370. 0 7px 12px rgba(0, 0, 0, 0.2);
  2371. perspective: 420px;
  2372. }
  2373. .bar-fill {
  2374. position: relative;
  2375. height: 10px;
  2376. min-width: 6px;
  2377. overflow: visible;
  2378. border-radius: 6px;
  2379. box-shadow:
  2380. inset 0 3px 4px rgba(255, 255, 255, 0.32),
  2381. inset 0 -5px 7px rgba(0, 0, 0, 0.22),
  2382. 0 7px 0 rgba(0, 0, 0, 0.18),
  2383. 0 11px 16px rgba(0, 0, 0, 0.22);
  2384. }
  2385. .bar-fill::before {
  2386. content: '';
  2387. position: absolute;
  2388. left: 5px;
  2389. right: 3px;
  2390. top: -4px;
  2391. height: 5px;
  2392. border-radius: 5px 5px 2px 2px;
  2393. background: linear-gradient(180deg, rgba(255, 255, 255, 0.48), rgba(255, 255, 255, 0.08));
  2394. transform: skewX(-28deg);
  2395. transform-origin: left bottom;
  2396. pointer-events: none;
  2397. }
  2398. .bar-fill::after {
  2399. content: '';
  2400. position: absolute;
  2401. right: -7px;
  2402. top: 1px;
  2403. width: 8px;
  2404. height: 10px;
  2405. border-radius: 0 5px 5px 0;
  2406. background: linear-gradient(90deg, rgba(0, 0, 0, 0.2), rgba(255, 255, 255, 0.1));
  2407. transform: skewY(34deg);
  2408. transform-origin: left top;
  2409. pointer-events: none;
  2410. }
  2411. .spark-bars {
  2412. perspective: 720px;
  2413. padding-top: 22px;
  2414. background-image:
  2415. linear-gradient(rgba(125, 179, 201, 0.12) 1px, transparent 1px),
  2416. linear-gradient(90deg, rgba(255, 255, 255, 0.035) 1px, transparent 1px);
  2417. background-size: 100% 34px, 42px 100%;
  2418. }
  2419. .spark-bars span {
  2420. overflow: visible;
  2421. border-radius: 7px 7px 2px 2px;
  2422. background:
  2423. linear-gradient(90deg, rgba(255, 255, 255, 0.22), transparent 24%),
  2424. linear-gradient(180deg, #ff8f8f, #ff6262 64%, #c84141);
  2425. box-shadow:
  2426. inset 6px 0 8px rgba(255, 255, 255, 0.16),
  2427. inset -9px 0 10px rgba(0, 0, 0, 0.18),
  2428. 0 9px 0 rgba(99, 23, 25, 0.54),
  2429. 0 16px 20px rgba(0, 0, 0, 0.28);
  2430. transform: rotateX(2deg);
  2431. transform-origin: center bottom;
  2432. }
  2433. .spark-bars span::before {
  2434. content: '';
  2435. position: absolute;
  2436. left: 5px;
  2437. right: -4px;
  2438. top: -8px;
  2439. height: 10px;
  2440. border-radius: 7px 7px 3px 3px;
  2441. background: linear-gradient(180deg, #ffaaaa, #ff7777);
  2442. transform: skewX(-28deg);
  2443. transform-origin: left bottom;
  2444. box-shadow: inset 0 2px 3px rgba(255, 255, 255, 0.34);
  2445. }
  2446. .spark-bars span::after {
  2447. content: '';
  2448. position: absolute;
  2449. right: -8px;
  2450. top: -4px;
  2451. bottom: -7px;
  2452. width: 9px;
  2453. border-radius: 0 6px 3px 0;
  2454. background: linear-gradient(180deg, #d95252, #8f2e31);
  2455. transform: skewY(42deg);
  2456. transform-origin: left top;
  2457. box-shadow: inset -2px 0 5px rgba(0, 0, 0, 0.2);
  2458. }
  2459. .type-visual-item {
  2460. min-height: 116px;
  2461. align-items: center;
  2462. gap: 18px;
  2463. overflow: hidden;
  2464. isolation: isolate;
  2465. }
  2466. .type-visual-item > div:last-child {
  2467. min-width: 0;
  2468. position: relative;
  2469. z-index: 2;
  2470. }
  2471. .type-visual-item > div:last-child span,
  2472. .type-visual-item > div:last-child p {
  2473. overflow: hidden;
  2474. text-overflow: ellipsis;
  2475. white-space: nowrap;
  2476. }
  2477. .type-ring {
  2478. width: 54px;
  2479. height: 54px;
  2480. overflow: hidden;
  2481. filter: none;
  2482. z-index: 1;
  2483. box-shadow:
  2484. 0 5px 10px rgba(0, 0, 0, 0.24),
  2485. inset 4px 5px 8px rgba(255, 255, 255, 0.18),
  2486. inset -6px -7px 10px rgba(0, 0, 0, 0.2);
  2487. }
  2488. .type-ring::before {
  2489. inset: 3px;
  2490. background:
  2491. linear-gradient(145deg, rgba(255, 255, 255, 0.2), transparent 42%),
  2492. linear-gradient(315deg, rgba(0, 0, 0, 0.16), transparent 46%);
  2493. box-shadow: inset 0 -4px 8px rgba(0, 0, 0, 0.16);
  2494. z-index: 0;
  2495. }
  2496. .type-ring::after {
  2497. left: 8px;
  2498. right: 8px;
  2499. bottom: 3px;
  2500. height: 7px;
  2501. background: radial-gradient(ellipse at center, rgba(0, 0, 0, 0.18), transparent 72%);
  2502. z-index: 0;
  2503. }
  2504. .type-ring strong {
  2505. width: 34px;
  2506. height: 34px;
  2507. position: relative;
  2508. z-index: 1;
  2509. box-shadow:
  2510. inset 2px 3px 5px rgba(255, 255, 255, 0.72),
  2511. inset -3px -4px 7px rgba(72, 93, 100, 0.18),
  2512. 0 2px 5px rgba(0, 0, 0, 0.16);
  2513. }
  2514. .bar-track {
  2515. height: 13px;
  2516. padding: 2px;
  2517. overflow: hidden;
  2518. border-radius: 9px;
  2519. background:
  2520. linear-gradient(180deg, rgba(255, 255, 255, 0.12), rgba(0, 0, 0, 0.08)),
  2521. rgba(25, 42, 43, 0.78);
  2522. box-shadow:
  2523. inset 0 2px 5px rgba(0, 0, 0, 0.32),
  2524. inset 0 -1px 0 rgba(255, 255, 255, 0.08);
  2525. perspective: none;
  2526. }
  2527. .bar-fill {
  2528. height: 9px;
  2529. border-radius: 8px;
  2530. box-shadow:
  2531. inset 0 2px 3px rgba(255, 255, 255, 0.36),
  2532. inset 0 -3px 5px rgba(0, 0, 0, 0.18),
  2533. 0 2px 6px rgba(0, 0, 0, 0.2);
  2534. }
  2535. .bar-fill::before {
  2536. left: 5px;
  2537. right: 5px;
  2538. top: 1px;
  2539. height: 3px;
  2540. border-radius: 8px;
  2541. background: linear-gradient(90deg, rgba(255, 255, 255, 0.42), rgba(255, 255, 255, 0.04));
  2542. transform: none;
  2543. }
  2544. .bar-fill::after {
  2545. display: none;
  2546. }
  2547. .spark-bars {
  2548. height: 132px;
  2549. gap: 12px;
  2550. padding: 18px 6px 0;
  2551. perspective: none;
  2552. background-image:
  2553. linear-gradient(rgba(125, 179, 201, 0.1) 1px, transparent 1px),
  2554. linear-gradient(90deg, rgba(255, 255, 255, 0.026) 1px, transparent 1px);
  2555. background-size: 100% 32px, 48px 100%;
  2556. }
  2557. .spark-bars span {
  2558. min-height: 7px;
  2559. max-width: 62px;
  2560. border-radius: 8px 8px 2px 2px;
  2561. background:
  2562. linear-gradient(180deg, rgba(255, 255, 255, 0.26), transparent 42%),
  2563. linear-gradient(180deg, #ff8b8b, #f45d5d);
  2564. box-shadow:
  2565. inset 4px 0 6px rgba(255, 255, 255, 0.14),
  2566. inset -4px 0 6px rgba(0, 0, 0, 0.12),
  2567. 0 4px 7px rgba(245, 108, 108, 0.24);
  2568. transform: none;
  2569. }
  2570. .spark-bars span::before {
  2571. left: 5px;
  2572. right: 5px;
  2573. top: 2px;
  2574. height: 4px;
  2575. border-radius: 8px;
  2576. background: linear-gradient(90deg, rgba(255, 255, 255, 0.38), rgba(255, 255, 255, 0.06));
  2577. transform: none;
  2578. box-shadow: none;
  2579. }
  2580. .spark-bars span::after {
  2581. display: none;
  2582. }
  2583. .spark-bars b {
  2584. top: -24px;
  2585. }
  2586. .visual-stat-page {
  2587. gap: 16px;
  2588. padding: 18px;
  2589. border: 1px solid rgba(76, 214, 214, 0.28);
  2590. border-radius: 8px;
  2591. background:
  2592. linear-gradient(90deg, rgba(76, 214, 214, 0.08) 1px, transparent 1px),
  2593. linear-gradient(rgba(76, 214, 214, 0.055) 1px, transparent 1px),
  2594. radial-gradient(circle at 76% 18%, rgba(82, 226, 196, 0.16), transparent 30%),
  2595. radial-gradient(circle at 16% 78%, rgba(222, 169, 72, 0.1), transparent 28%),
  2596. linear-gradient(135deg, #0d1418 0%, #132323 48%, #101619 100%);
  2597. background-size: 34px 34px, 34px 34px, 100% 100%, 100% 100%, 100% 100%;
  2598. box-shadow:
  2599. inset 0 0 0 1px rgba(255, 255, 255, 0.04),
  2600. inset 0 0 56px rgba(76, 214, 214, 0.04),
  2601. 0 18px 36px rgba(0, 0, 0, 0.22);
  2602. }
  2603. .visual-stat-page::before {
  2604. height: 2px;
  2605. background: linear-gradient(90deg, #52e2c4, #3da6ff, #dca948, #52e2c4);
  2606. opacity: 0.9;
  2607. }
  2608. .visual-stat-page::after {
  2609. inset: 10px;
  2610. border-color: rgba(76, 214, 214, 0.12);
  2611. box-shadow:
  2612. inset 0 0 0 1px rgba(255, 255, 255, 0.025),
  2613. inset 0 0 40px rgba(76, 214, 214, 0.035);
  2614. }
  2615. .factory-visual-layer {
  2616. opacity: 0.34;
  2617. }
  2618. .factory-roof {
  2619. top: 12px;
  2620. height: 120px;
  2621. opacity: 0.16;
  2622. background:
  2623. linear-gradient(135deg, transparent 0 22px, rgba(76, 214, 214, 0.28) 23px 24px, transparent 25px),
  2624. linear-gradient(45deg, transparent 0 22px, rgba(220, 169, 72, 0.2) 23px 24px, transparent 25px);
  2625. background-size: 48px 48px;
  2626. }
  2627. .factory-stack,
  2628. .factory-conveyor {
  2629. opacity: 0.28;
  2630. }
  2631. .visual-overview {
  2632. min-height: 108px;
  2633. padding: 18px 24px;
  2634. border: 1px solid rgba(76, 214, 214, 0.24);
  2635. border-radius: 8px;
  2636. background:
  2637. linear-gradient(90deg, rgba(82, 226, 196, 0.15), transparent 22%),
  2638. linear-gradient(135deg, rgba(255, 255, 255, 0.1), transparent 32%),
  2639. linear-gradient(90deg, rgba(22, 35, 38, 0.94), rgba(19, 69, 65, 0.76));
  2640. box-shadow:
  2641. inset 0 1px 0 rgba(255, 255, 255, 0.1),
  2642. inset 0 -18px 38px rgba(0, 0, 0, 0.16),
  2643. 0 12px 26px rgba(0, 0, 0, 0.2);
  2644. }
  2645. .overview-kicker {
  2646. color: rgba(190, 245, 238, 0.78);
  2647. }
  2648. .live-dot {
  2649. background: #52e2c4;
  2650. box-shadow:
  2651. 0 0 0 4px rgba(82, 226, 196, 0.13),
  2652. 0 0 16px rgba(82, 226, 196, 0.46);
  2653. }
  2654. .overview-copy h3 {
  2655. color: #f4fbff;
  2656. text-shadow: 0 0 18px rgba(76, 214, 214, 0.18);
  2657. }
  2658. .overview-health {
  2659. border: 1px solid rgba(82, 226, 196, 0.22);
  2660. background:
  2661. linear-gradient(180deg, rgba(82, 226, 196, 0.12), rgba(255, 255, 255, 0.025));
  2662. }
  2663. .visual-kpi-row {
  2664. padding: 0;
  2665. border: 0;
  2666. background: transparent;
  2667. grid-template-columns: repeat(4, minmax(0, 1fr));
  2668. gap: 12px;
  2669. }
  2670. .visual-kpi-card {
  2671. min-height: 86px;
  2672. border: 1px solid rgba(96, 190, 190, 0.22);
  2673. border-radius: 8px;
  2674. background:
  2675. linear-gradient(90deg, rgba(82, 226, 196, 0.1), transparent 42%),
  2676. linear-gradient(180deg, rgba(255, 255, 255, 0.07), rgba(255, 255, 255, 0.025)),
  2677. rgba(16, 30, 32, 0.78);
  2678. box-shadow:
  2679. inset 0 1px 0 rgba(255, 255, 255, 0.09),
  2680. 0 10px 20px rgba(0, 0, 0, 0.18);
  2681. }
  2682. .visual-kpi-card::before {
  2683. width: 3px;
  2684. border-radius: 0 3px 3px 0;
  2685. box-shadow: 0 0 14px var(--kpi-color);
  2686. }
  2687. .visual-kpi-card::after {
  2688. right: 12px;
  2689. bottom: 10px;
  2690. width: 42px;
  2691. height: 16px;
  2692. border-color: rgba(76, 214, 214, 0.18);
  2693. }
  2694. .kpi-icon {
  2695. border-color: rgba(82, 226, 196, 0.24);
  2696. background: rgba(82, 226, 196, 0.09);
  2697. box-shadow:
  2698. inset 0 1px 0 rgba(255, 255, 255, 0.13),
  2699. 0 0 14px rgba(82, 226, 196, 0.14);
  2700. }
  2701. .visual-grid {
  2702. grid-template-columns: minmax(0, 1.08fr) minmax(380px, 0.92fr);
  2703. gap: 16px;
  2704. }
  2705. .visual-column {
  2706. gap: 16px;
  2707. }
  2708. .visual-card {
  2709. padding: 16px;
  2710. border: 1px solid rgba(76, 214, 214, 0.2);
  2711. border-radius: 8px;
  2712. background:
  2713. linear-gradient(135deg, rgba(255, 255, 255, 0.085), transparent 34%),
  2714. linear-gradient(90deg, rgba(82, 226, 196, 0.08), transparent 24%),
  2715. rgba(15, 35, 36, 0.82);
  2716. box-shadow:
  2717. inset 0 1px 0 rgba(255, 255, 255, 0.09),
  2718. inset 0 -20px 42px rgba(0, 0, 0, 0.12),
  2719. 0 12px 26px rgba(0, 0, 0, 0.18);
  2720. }
  2721. .visual-card::before {
  2722. left: 12px;
  2723. top: 12px;
  2724. width: 48px;
  2725. height: 22px;
  2726. border-left-color: rgba(82, 226, 196, 0.72);
  2727. border-top-color: rgba(220, 169, 72, 0.58);
  2728. }
  2729. .visual-card::after {
  2730. background: linear-gradient(90deg, transparent, rgba(82, 226, 196, 0.5), rgba(61, 166, 255, 0.42), transparent);
  2731. }
  2732. .visual-card .chart-title {
  2733. color: #f5fbff;
  2734. text-shadow: 0 0 12px rgba(82, 226, 196, 0.18);
  2735. }
  2736. .visual-card .chart-title::before {
  2737. background: linear-gradient(180deg, #52e2c4, #3da6ff);
  2738. box-shadow: 0 0 12px rgba(82, 226, 196, 0.36);
  2739. }
  2740. .donut-wrap {
  2741. grid-template-columns: 190px minmax(0, 1fr);
  2742. padding: 18px;
  2743. border: 1px solid rgba(76, 214, 214, 0.16);
  2744. border-radius: 8px;
  2745. background:
  2746. radial-gradient(circle at 96px 50%, rgba(61, 166, 255, 0.12), transparent 38%),
  2747. linear-gradient(90deg, rgba(9, 18, 22, 0.56), rgba(255, 255, 255, 0.035));
  2748. }
  2749. .donut-chart {
  2750. width: 156px;
  2751. height: 156px;
  2752. box-shadow:
  2753. 0 14px 26px rgba(0, 0, 0, 0.24),
  2754. 0 0 0 8px rgba(82, 226, 196, 0.055),
  2755. inset 8px 10px 14px rgba(255, 255, 255, 0.18),
  2756. inset -10px -12px 18px rgba(0, 0, 0, 0.2);
  2757. }
  2758. .donut-chart::before {
  2759. inset: -10px;
  2760. background: conic-gradient(from 90deg, rgba(82, 226, 196, 0.24), transparent 22%, rgba(61, 166, 255, 0.2), transparent 58%, rgba(220, 169, 72, 0.2), transparent 82%);
  2761. box-shadow: none;
  2762. }
  2763. .donut-chart::after {
  2764. inset: -16px;
  2765. height: auto;
  2766. border: 1px dashed rgba(82, 226, 196, 0.2);
  2767. background: transparent;
  2768. transform: none;
  2769. z-index: -1;
  2770. }
  2771. .donut-center {
  2772. background:
  2773. radial-gradient(circle at 34% 28%, #ffffff, #e9f6f5 58%, #bed1d0);
  2774. box-shadow:
  2775. inset 3px 4px 8px rgba(255, 255, 255, 0.7),
  2776. inset -4px -6px 10px rgba(60, 86, 94, 0.2),
  2777. 0 8px 16px rgba(0, 0, 0, 0.18);
  2778. }
  2779. .donut-legend-item {
  2780. border-color: rgba(76, 214, 214, 0.16);
  2781. background:
  2782. linear-gradient(90deg, rgba(82, 226, 196, 0.08), rgba(255, 255, 255, 0.035));
  2783. }
  2784. .type-visual-item {
  2785. min-height: 104px;
  2786. padding: 14px 16px;
  2787. border: 1px solid rgba(76, 214, 214, 0.16);
  2788. background:
  2789. linear-gradient(90deg, rgba(82, 226, 196, 0.08), transparent 44%),
  2790. rgba(255, 255, 255, 0.035);
  2791. }
  2792. .type-ring {
  2793. width: 56px;
  2794. height: 56px;
  2795. border-radius: 50%;
  2796. box-shadow:
  2797. 0 8px 14px rgba(0, 0, 0, 0.22),
  2798. inset 4px 5px 8px rgba(255, 255, 255, 0.2),
  2799. inset -5px -6px 10px rgba(0, 0, 0, 0.18);
  2800. }
  2801. .type-ring::before {
  2802. inset: 4px;
  2803. background:
  2804. linear-gradient(145deg, rgba(255, 255, 255, 0.18), transparent 44%),
  2805. linear-gradient(315deg, rgba(0, 0, 0, 0.12), transparent 48%);
  2806. }
  2807. .type-ring::after {
  2808. display: none;
  2809. }
  2810. .type-ring strong {
  2811. width: 35px;
  2812. height: 35px;
  2813. }
  2814. .month-card .visual-bar-list {
  2815. gap: 12px;
  2816. }
  2817. .visual-bar-item {
  2818. padding: 13px 14px;
  2819. border: 1px solid rgba(76, 214, 214, 0.15);
  2820. background:
  2821. linear-gradient(90deg, rgba(82, 226, 196, 0.07), transparent 36%),
  2822. rgba(255, 255, 255, 0.035);
  2823. }
  2824. .bar-track {
  2825. height: 14px;
  2826. padding: 2px;
  2827. border: 1px solid rgba(76, 214, 214, 0.1);
  2828. border-radius: 10px;
  2829. background:
  2830. linear-gradient(90deg, rgba(76, 214, 214, 0.08) 1px, transparent 1px),
  2831. rgba(9, 20, 22, 0.76);
  2832. background-size: 32px 100%, 100% 100%;
  2833. box-shadow:
  2834. inset 0 2px 4px rgba(0, 0, 0, 0.34),
  2835. 0 0 12px rgba(82, 226, 196, 0.06);
  2836. }
  2837. .bar-fill {
  2838. height: 8px;
  2839. border-radius: 8px;
  2840. box-shadow:
  2841. inset 0 2px 3px rgba(255, 255, 255, 0.36),
  2842. 0 0 12px currentColor;
  2843. }
  2844. .bar-fill::before {
  2845. top: 1px;
  2846. height: 2px;
  2847. background: linear-gradient(90deg, rgba(255, 255, 255, 0.5), rgba(255, 255, 255, 0.05));
  2848. }
  2849. .conflict-visual {
  2850. grid-template-columns: 118px minmax(0, 1fr);
  2851. min-height: 148px;
  2852. padding-bottom: 18px;
  2853. }
  2854. .conflict-number {
  2855. border-color: rgba(255, 112, 112, 0.28);
  2856. background:
  2857. linear-gradient(180deg, rgba(255, 112, 112, 0.12), rgba(255, 255, 255, 0.025));
  2858. }
  2859. .spark-bars {
  2860. height: 136px;
  2861. gap: 14px;
  2862. padding: 22px 8px 0;
  2863. border-bottom-color: rgba(82, 226, 196, 0.2);
  2864. background-image:
  2865. linear-gradient(rgba(76, 214, 214, 0.11) 1px, transparent 1px),
  2866. linear-gradient(90deg, rgba(76, 214, 214, 0.045) 1px, transparent 1px);
  2867. background-size: 100% 34px, 56px 100%;
  2868. }
  2869. .spark-bars span {
  2870. max-width: 48px;
  2871. min-height: 6px;
  2872. border-radius: 8px 8px 2px 2px;
  2873. background:
  2874. linear-gradient(180deg, rgba(255, 255, 255, 0.28), transparent 40%),
  2875. linear-gradient(180deg, #ff8b8b, #f15e63);
  2876. box-shadow:
  2877. inset 0 2px 4px rgba(255, 255, 255, 0.24),
  2878. 0 0 14px rgba(241, 94, 99, 0.22);
  2879. }
  2880. .spark-bars span::before {
  2881. top: 2px;
  2882. height: 3px;
  2883. background: linear-gradient(90deg, rgba(255, 255, 255, 0.42), rgba(255, 255, 255, 0.05));
  2884. }
  2885. .tech-dashboard-v2 {
  2886. gap: 16px;
  2887. padding: 18px;
  2888. border: 1px solid rgba(61, 166, 255, 0.28);
  2889. border-radius: 10px;
  2890. background:
  2891. linear-gradient(90deg, rgba(61, 166, 255, 0.11) 1px, transparent 1px),
  2892. linear-gradient(rgba(82, 226, 196, 0.08) 1px, transparent 1px),
  2893. radial-gradient(circle at 20% 18%, rgba(82, 226, 196, 0.16), transparent 30%),
  2894. radial-gradient(circle at 82% 26%, rgba(61, 166, 255, 0.18), transparent 34%),
  2895. linear-gradient(135deg, #081116 0%, #0d2020 48%, #091316 100%);
  2896. background-size: 38px 38px, 38px 38px, 100% 100%, 100% 100%, 100% 100%;
  2897. box-shadow:
  2898. inset 0 0 0 1px rgba(255, 255, 255, 0.04),
  2899. inset 0 0 90px rgba(82, 226, 196, 0.05),
  2900. 0 20px 40px rgba(0, 0, 0, 0.24);
  2901. }
  2902. .tech-dashboard-v2::before {
  2903. height: 2px;
  2904. background: linear-gradient(90deg, transparent, #52e2c4 18%, #3da6ff 52%, #dca948 82%, transparent);
  2905. box-shadow: 0 0 18px rgba(82, 226, 196, 0.45);
  2906. }
  2907. .tech-dashboard-v2::after {
  2908. inset: 9px;
  2909. border: 1px solid rgba(82, 226, 196, 0.12);
  2910. border-radius: 8px;
  2911. box-shadow:
  2912. inset 0 0 0 1px rgba(61, 166, 255, 0.04),
  2913. inset 0 0 46px rgba(61, 166, 255, 0.035);
  2914. }
  2915. .tech-dashboard-v2 .factory-visual-layer {
  2916. opacity: 0.22;
  2917. }
  2918. .tech-dashboard-v2 .factory-roof {
  2919. top: 16px;
  2920. height: 150px;
  2921. opacity: 0.22;
  2922. background:
  2923. linear-gradient(135deg, transparent 0 20px, rgba(82, 226, 196, 0.24) 21px 22px, transparent 23px),
  2924. linear-gradient(45deg, transparent 0 20px, rgba(61, 166, 255, 0.18) 21px 22px, transparent 23px);
  2925. background-size: 46px 46px;
  2926. border-bottom-color: rgba(82, 226, 196, 0.16);
  2927. }
  2928. .tech-dashboard-v2 .factory-stack,
  2929. .tech-dashboard-v2 .factory-conveyor {
  2930. opacity: 0.18;
  2931. }
  2932. .tech-dashboard-v2 .visual-overview {
  2933. min-height: 104px;
  2934. padding: 18px 24px;
  2935. border: 1px solid rgba(82, 226, 196, 0.24);
  2936. border-radius: 10px;
  2937. background:
  2938. linear-gradient(90deg, rgba(82, 226, 196, 0.15), transparent 26%),
  2939. linear-gradient(135deg, rgba(255, 255, 255, 0.1), transparent 34%),
  2940. rgba(9, 26, 29, 0.76);
  2941. box-shadow:
  2942. inset 0 1px 0 rgba(255, 255, 255, 0.12),
  2943. inset 0 -22px 44px rgba(0, 0, 0, 0.18),
  2944. 0 0 28px rgba(82, 226, 196, 0.08);
  2945. backdrop-filter: blur(6px);
  2946. }
  2947. .tech-dashboard-v2 .visual-overview::before {
  2948. right: 178px;
  2949. background: linear-gradient(180deg, transparent, rgba(82, 226, 196, 0.5), transparent);
  2950. }
  2951. .tech-dashboard-v2 .visual-overview::after {
  2952. background: linear-gradient(90deg, transparent, rgba(82, 226, 196, 0.58), rgba(61, 166, 255, 0.48), transparent);
  2953. }
  2954. .tech-dashboard-v2 .overview-kicker {
  2955. color: rgba(207, 251, 247, 0.8);
  2956. text-transform: uppercase;
  2957. }
  2958. .tech-dashboard-v2 .live-dot {
  2959. background: #52e2c4;
  2960. box-shadow:
  2961. 0 0 0 5px rgba(82, 226, 196, 0.12),
  2962. 0 0 22px rgba(82, 226, 196, 0.52);
  2963. }
  2964. .tech-dashboard-v2 .overview-copy h3 {
  2965. color: #f7fcff;
  2966. font-size: 27px;
  2967. line-height: 34px;
  2968. text-shadow: 0 0 20px rgba(82, 226, 196, 0.2);
  2969. }
  2970. .tech-dashboard-v2 .overview-copy p {
  2971. color: rgba(220, 239, 238, 0.72);
  2972. }
  2973. .tech-dashboard-v2 .overview-health {
  2974. min-width: 128px;
  2975. border: 1px solid rgba(82, 226, 196, 0.26);
  2976. border-radius: 8px;
  2977. background:
  2978. radial-gradient(circle at 50% 18%, rgba(82, 226, 196, 0.18), transparent 58%),
  2979. rgba(11, 26, 29, 0.66);
  2980. box-shadow:
  2981. inset 0 0 24px rgba(82, 226, 196, 0.06),
  2982. 0 0 18px rgba(82, 226, 196, 0.08);
  2983. }
  2984. .tech-dashboard-v2 .overview-health strong {
  2985. color: #6ff7d6;
  2986. text-shadow: 0 0 18px rgba(111, 247, 214, 0.38);
  2987. }
  2988. .tech-dashboard-v2 .visual-kpi-row {
  2989. display: grid;
  2990. grid-template-columns: repeat(4, minmax(0, 1fr));
  2991. gap: 12px;
  2992. padding: 0;
  2993. border: 0;
  2994. background: transparent;
  2995. }
  2996. .tech-dashboard-v2 .visual-kpi-card {
  2997. min-height: 84px;
  2998. padding: 13px 15px;
  2999. border: 1px solid rgba(108, 205, 210, 0.22);
  3000. border-radius: 10px;
  3001. background:
  3002. linear-gradient(90deg, rgba(61, 166, 255, 0.1), transparent 42%),
  3003. linear-gradient(180deg, rgba(255, 255, 255, 0.075), rgba(255, 255, 255, 0.018)),
  3004. rgba(10, 24, 28, 0.72);
  3005. box-shadow:
  3006. inset 0 1px 0 rgba(255, 255, 255, 0.1),
  3007. 0 0 22px rgba(61, 166, 255, 0.055);
  3008. backdrop-filter: blur(5px);
  3009. }
  3010. .tech-dashboard-v2 .visual-kpi-card::before {
  3011. width: 3px;
  3012. background: var(--kpi-color);
  3013. box-shadow: 0 0 18px var(--kpi-color);
  3014. }
  3015. .tech-dashboard-v2 .visual-kpi-card::after {
  3016. right: 13px;
  3017. bottom: 12px;
  3018. border-color: rgba(82, 226, 196, 0.2);
  3019. opacity: 0.78;
  3020. }
  3021. .tech-dashboard-v2 .kpi-icon {
  3022. border-color: rgba(82, 226, 196, 0.24);
  3023. background: rgba(82, 226, 196, 0.09);
  3024. box-shadow:
  3025. inset 0 1px 0 rgba(255, 255, 255, 0.14),
  3026. 0 0 18px rgba(82, 226, 196, 0.12);
  3027. }
  3028. .tech-dashboard-v2 .visual-grid {
  3029. grid-template-columns: minmax(0, 1.05fr) minmax(380px, 0.95fr);
  3030. gap: 16px;
  3031. align-items: stretch;
  3032. }
  3033. .tech-dashboard-v2 .visual-column {
  3034. gap: 16px;
  3035. }
  3036. .tech-dashboard-v2 .visual-card {
  3037. border: 1px solid rgba(82, 226, 196, 0.2);
  3038. border-radius: 10px;
  3039. background:
  3040. linear-gradient(135deg, rgba(255, 255, 255, 0.085), transparent 32%),
  3041. linear-gradient(90deg, rgba(82, 226, 196, 0.08), transparent 28%),
  3042. rgba(9, 29, 31, 0.76);
  3043. box-shadow:
  3044. inset 0 1px 0 rgba(255, 255, 255, 0.1),
  3045. inset 0 -22px 46px rgba(0, 0, 0, 0.12),
  3046. 0 0 24px rgba(82, 226, 196, 0.055);
  3047. backdrop-filter: blur(5px);
  3048. }
  3049. .tech-dashboard-v2 .visual-card::before {
  3050. left: 12px;
  3051. top: 12px;
  3052. width: 50px;
  3053. height: 22px;
  3054. border-left-color: rgba(82, 226, 196, 0.74);
  3055. border-top-color: rgba(61, 166, 255, 0.58);
  3056. }
  3057. .tech-dashboard-v2 .visual-card::after {
  3058. background: linear-gradient(90deg, transparent, rgba(82, 226, 196, 0.54), rgba(61, 166, 255, 0.44), transparent);
  3059. }
  3060. .tech-dashboard-v2 .visual-card .chart-title {
  3061. color: #f5fcff;
  3062. text-shadow: 0 0 14px rgba(82, 226, 196, 0.2);
  3063. }
  3064. .tech-dashboard-v2 .visual-card .chart-title::before {
  3065. background: linear-gradient(180deg, #52e2c4, #3da6ff);
  3066. box-shadow: 0 0 14px rgba(82, 226, 196, 0.36);
  3067. }
  3068. .tech-dashboard-v2 .panel-head p {
  3069. color: rgba(214, 234, 234, 0.62);
  3070. }
  3071. .tech-dashboard-v2 .donut-wrap {
  3072. grid-template-columns: 210px minmax(0, 1fr);
  3073. align-items: center;
  3074. padding: 18px;
  3075. border: 1px solid rgba(82, 226, 196, 0.16);
  3076. border-radius: 10px;
  3077. background:
  3078. radial-gradient(circle at 108px 50%, rgba(61, 166, 255, 0.14), transparent 40%),
  3079. linear-gradient(90deg, rgba(6, 18, 22, 0.62), rgba(255, 255, 255, 0.035));
  3080. }
  3081. .tech-dashboard-v2 .donut-chart {
  3082. width: 166px;
  3083. height: 166px;
  3084. box-shadow:
  3085. 0 16px 28px rgba(0, 0, 0, 0.24),
  3086. 0 0 0 8px rgba(82, 226, 196, 0.055),
  3087. inset 8px 10px 14px rgba(255, 255, 255, 0.17),
  3088. inset -10px -12px 18px rgba(0, 0, 0, 0.2);
  3089. }
  3090. .tech-dashboard-v2 .donut-chart::before {
  3091. inset: -11px;
  3092. background: conic-gradient(from 90deg, rgba(82, 226, 196, 0.24), transparent 22%, rgba(61, 166, 255, 0.2), transparent 58%, rgba(220, 169, 72, 0.2), transparent 82%);
  3093. box-shadow: none;
  3094. }
  3095. .tech-dashboard-v2 .donut-chart::after {
  3096. inset: -17px;
  3097. height: auto;
  3098. border: 1px dashed rgba(82, 226, 196, 0.2);
  3099. background: transparent;
  3100. transform: none;
  3101. z-index: -1;
  3102. }
  3103. .tech-dashboard-v2 .donut-center {
  3104. background: radial-gradient(circle at 34% 28%, #ffffff, #e9f6f5 58%, #bed1d0);
  3105. box-shadow:
  3106. inset 3px 4px 8px rgba(255, 255, 255, 0.7),
  3107. inset -4px -6px 10px rgba(60, 86, 94, 0.2),
  3108. 0 8px 16px rgba(0, 0, 0, 0.18);
  3109. }
  3110. .tech-dashboard-v2 .donut-legend-item,
  3111. .tech-dashboard-v2 .type-visual-item,
  3112. .tech-dashboard-v2 .visual-bar-item {
  3113. border-color: rgba(82, 226, 196, 0.15);
  3114. background:
  3115. linear-gradient(90deg, rgba(82, 226, 196, 0.08), transparent 42%),
  3116. rgba(255, 255, 255, 0.035);
  3117. }
  3118. .tech-dashboard-v2 .type-visual-item {
  3119. min-height: 108px;
  3120. padding: 15px 16px;
  3121. }
  3122. .tech-dashboard-v2 .type-ring {
  3123. width: 58px;
  3124. height: 58px;
  3125. box-shadow:
  3126. 0 8px 14px rgba(0, 0, 0, 0.22),
  3127. inset 4px 5px 8px rgba(255, 255, 255, 0.2),
  3128. inset -5px -6px 10px rgba(0, 0, 0, 0.18);
  3129. }
  3130. .tech-dashboard-v2 .type-ring::after {
  3131. display: none;
  3132. }
  3133. .tech-dashboard-v2 .bar-track {
  3134. height: 14px;
  3135. padding: 2px;
  3136. border: 1px solid rgba(82, 226, 196, 0.12);
  3137. border-radius: 10px;
  3138. background:
  3139. linear-gradient(90deg, rgba(82, 226, 196, 0.08) 1px, transparent 1px),
  3140. rgba(6, 18, 22, 0.78);
  3141. background-size: 34px 100%, 100% 100%;
  3142. }
  3143. .tech-dashboard-v2 .bar-fill {
  3144. height: 8px;
  3145. border-radius: 8px;
  3146. box-shadow:
  3147. inset 0 2px 3px rgba(255, 255, 255, 0.36),
  3148. 0 0 12px rgba(82, 226, 196, 0.18);
  3149. }
  3150. .tech-dashboard-v2 .spark-bars {
  3151. height: 138px;
  3152. gap: 14px;
  3153. padding: 22px 8px 0;
  3154. background-image:
  3155. linear-gradient(rgba(82, 226, 196, 0.12) 1px, transparent 1px),
  3156. linear-gradient(90deg, rgba(61, 166, 255, 0.052) 1px, transparent 1px);
  3157. background-size: 100% 34px, 56px 100%;
  3158. }
  3159. .tech-dashboard-v2 .spark-bars span {
  3160. max-width: 48px;
  3161. min-height: 6px;
  3162. border-radius: 8px 8px 2px 2px;
  3163. background:
  3164. linear-gradient(180deg, rgba(255, 255, 255, 0.28), transparent 40%),
  3165. linear-gradient(180deg, #ff8b8b, #f15e63);
  3166. box-shadow:
  3167. inset 0 2px 4px rgba(255, 255, 255, 0.24),
  3168. 0 0 14px rgba(241, 94, 99, 0.24);
  3169. }
  3170. }
  3171. .calendar-day-drawer {
  3172. display: flex;
  3173. flex-direction: column;
  3174. .el-drawer__header {
  3175. flex: 0 0 auto;
  3176. padding: 22px 24px 14px;
  3177. margin-bottom: 0;
  3178. border-bottom: 1px solid #e4edf7;
  3179. color: #303133;
  3180. font-size: 18px;
  3181. font-weight: 600;
  3182. background: linear-gradient(90deg, #f4f9ff, #ffffff);
  3183. }
  3184. .el-drawer__body {
  3185. flex: 1 1 auto;
  3186. min-height: 0;
  3187. height: auto;
  3188. position: relative;
  3189. background: #f5f7fb;
  3190. overflow: hidden;
  3191. }
  3192. .drawer-body {
  3193. height: 100%;
  3194. padding: 18px;
  3195. box-sizing: border-box;
  3196. overflow-y: auto;
  3197. }
  3198. .drawer-summary {
  3199. display: grid;
  3200. grid-template-columns: 78px 1fr;
  3201. gap: 14px;
  3202. margin-bottom: 18px;
  3203. padding: 16px;
  3204. border: 1px solid #cfe7ff;
  3205. border-radius: 8px;
  3206. background: linear-gradient(135deg, #f2f8ff, #ffffff 72%);
  3207. box-shadow: 0 10px 24px rgba(64, 158, 255, 0.1);
  3208. }
  3209. .summary-date {
  3210. height: 82px;
  3211. border-radius: 8px;
  3212. background: linear-gradient(180deg, #409eff, #1f78e8);
  3213. color: #fff;
  3214. display: flex;
  3215. flex-direction: column;
  3216. align-items: center;
  3217. justify-content: center;
  3218. box-shadow: 0 10px 20px rgba(64, 158, 255, 0.22);
  3219. span {
  3220. font-size: 12px;
  3221. opacity: 0.82;
  3222. }
  3223. strong {
  3224. font-size: 34px;
  3225. line-height: 38px;
  3226. }
  3227. }
  3228. .summary-info {
  3229. min-width: 0;
  3230. p {
  3231. margin: 8px 0 10px;
  3232. color: #606266;
  3233. line-height: 20px;
  3234. }
  3235. }
  3236. .summary-title {
  3237. display: flex;
  3238. align-items: center;
  3239. justify-content: space-between;
  3240. gap: 10px;
  3241. color: #303133;
  3242. font-size: 16px;
  3243. font-weight: 600;
  3244. }
  3245. .summary-tags {
  3246. display: flex;
  3247. flex-wrap: wrap;
  3248. gap: 6px;
  3249. }
  3250. .drawer-section {
  3251. margin-bottom: 18px;
  3252. padding: 16px;
  3253. border: 1px solid #e4edf7;
  3254. border-radius: 8px;
  3255. background: #fff;
  3256. box-shadow: 0 8px 18px rgba(31, 45, 61, 0.05);
  3257. }
  3258. .drawer-title {
  3259. display: flex;
  3260. align-items: center;
  3261. justify-content: space-between;
  3262. margin-bottom: 14px;
  3263. span {
  3264. position: relative;
  3265. padding-left: 10px;
  3266. color: #303133;
  3267. font-size: 17px;
  3268. font-weight: 600;
  3269. &::before {
  3270. content: '';
  3271. position: absolute;
  3272. left: 0;
  3273. top: 3px;
  3274. width: 3px;
  3275. height: 15px;
  3276. border-radius: 2px;
  3277. background: #409eff;
  3278. }
  3279. }
  3280. em {
  3281. color: #909399;
  3282. font-size: 14px;
  3283. font-style: normal;
  3284. }
  3285. }
  3286. .detail-timeline,
  3287. .plan-list {
  3288. display: flex;
  3289. flex-direction: column;
  3290. gap: 12px;
  3291. }
  3292. .plan-list {
  3293. .el-tooltip {
  3294. display: block;
  3295. }
  3296. }
  3297. .detail-item {
  3298. display: grid;
  3299. grid-template-columns: 126px 1fr;
  3300. gap: 12px;
  3301. align-items: stretch;
  3302. }
  3303. .detail-time {
  3304. min-height: 68px;
  3305. padding: 10px;
  3306. border: 1px solid #cfe7ff;
  3307. border-radius: 8px;
  3308. background: linear-gradient(180deg, #f3f8ff, #ffffff);
  3309. text-align: center;
  3310. box-sizing: border-box;
  3311. display: flex;
  3312. align-items: center;
  3313. justify-content: center;
  3314. strong {
  3315. color: #1f4e86;
  3316. font-size: 16px;
  3317. line-height: 22px;
  3318. white-space: nowrap;
  3319. font-variant-numeric: tabular-nums;
  3320. }
  3321. }
  3322. .detail-content {
  3323. min-height: 68px;
  3324. display: grid;
  3325. grid-template-columns: minmax(0, 1fr) auto;
  3326. align-items: center;
  3327. justify-content: space-between;
  3328. gap: 12px;
  3329. padding: 12px 14px;
  3330. border: 1px solid #edf2f7;
  3331. border-left: 4px solid #409eff;
  3332. border-radius: 8px;
  3333. background: linear-gradient(180deg, #ffffff, #f8fbff);
  3334. position: relative;
  3335. &::before {
  3336. display: none;
  3337. }
  3338. strong,
  3339. span {
  3340. display: block;
  3341. }
  3342. strong {
  3343. color: #303133;
  3344. font-size: 16px;
  3345. line-height: 22px;
  3346. }
  3347. span {
  3348. margin-top: 4px;
  3349. color: #909399;
  3350. font-size: 14px;
  3351. line-height: 20px;
  3352. }
  3353. }
  3354. .detail-meta {
  3355. grid-column: 1 / -1;
  3356. display: flex;
  3357. flex-wrap: wrap;
  3358. gap: 6px;
  3359. margin-top: 2px;
  3360. span {
  3361. margin-top: 0;
  3362. padding: 2px 8px;
  3363. border-radius: 10px;
  3364. background: #eef5ff;
  3365. color: #5b6f8f;
  3366. font-size: 12px;
  3367. line-height: 20px;
  3368. }
  3369. }
  3370. .plan-item {
  3371. display: block;
  3372. padding: 12px 16px;
  3373. border: 1px solid #edf2f7;
  3374. border-left: 4px solid #67c23a;
  3375. border-radius: 8px;
  3376. background: linear-gradient(180deg, #ffffff, #f8fbff);
  3377. }
  3378. .plan-main {
  3379. min-width: 0;
  3380. }
  3381. .plan-topline {
  3382. display: grid;
  3383. grid-template-columns: minmax(0, 1fr) max-content;
  3384. align-items: center;
  3385. gap: 12px;
  3386. margin-bottom: 6px;
  3387. strong {
  3388. color: #303133;
  3389. font-size: 16px;
  3390. line-height: 22px;
  3391. text-align: left;
  3392. }
  3393. span {
  3394. margin-top: 0;
  3395. color: #8a97a8;
  3396. font-size: 14px;
  3397. line-height: 20px;
  3398. text-align: right;
  3399. }
  3400. }
  3401. .plan-name,
  3402. .plan-metrics,
  3403. .plan-topline strong,
  3404. .plan-topline span {
  3405. overflow: hidden;
  3406. text-overflow: ellipsis;
  3407. white-space: nowrap;
  3408. }
  3409. .plan-name {
  3410. display: block;
  3411. width: 100%;
  3412. margin: 0 0 8px;
  3413. color: #606266;
  3414. font-size: 14px;
  3415. line-height: 20px;
  3416. text-align: left;
  3417. }
  3418. .team-queue-plan .queue-name-only {
  3419. display: flex;
  3420. align-items: center;
  3421. gap: 4px;
  3422. margin: 0;
  3423. color: #303133;
  3424. font-size: 16px;
  3425. font-weight: 600;
  3426. line-height: 22px;
  3427. white-space: nowrap;
  3428. .queue-name-label {
  3429. flex: 0 0 auto;
  3430. color: #7a8798;
  3431. font-size: 13px;
  3432. font-weight: 500;
  3433. }
  3434. .queue-name-text {
  3435. min-width: 0;
  3436. overflow: hidden;
  3437. text-overflow: ellipsis;
  3438. white-space: nowrap;
  3439. }
  3440. }
  3441. .plan-metrics {
  3442. display: flex;
  3443. align-items: center;
  3444. justify-content: flex-start;
  3445. gap: 14px;
  3446. color: #8a97a8;
  3447. font-size: 13px;
  3448. line-height: 20px;
  3449. font-variant-numeric: tabular-nums;
  3450. text-align: left;
  3451. em {
  3452. font-style: normal;
  3453. }
  3454. }
  3455. .drawer-empty {
  3456. padding: 22px 0 10px;
  3457. }
  3458. .drawer-actions {
  3459. position: absolute;
  3460. left: 0;
  3461. right: 0;
  3462. bottom: 0;
  3463. display: grid;
  3464. grid-template-columns: repeat(2, minmax(0, 1fr));
  3465. gap: 10px;
  3466. padding: 14px 18px 18px;
  3467. border-top: 1px solid #ebeef5;
  3468. background: rgba(255, 255, 255, 0.96);
  3469. box-shadow: 0 -8px 18px rgba(31, 45, 61, 0.06);
  3470. .el-button {
  3471. width: 100%;
  3472. margin-left: 0;
  3473. }
  3474. }
  3475. }
  3476. .calendar-tooltip {
  3477. line-height: 24px;
  3478. color: #303133;
  3479. }
  3480. .plan-tooltip {
  3481. max-width: 360px;
  3482. line-height: 24px;
  3483. color: #303133;
  3484. word-break: break-all;
  3485. }
  3486. @keyframes conflictFlash {
  3487. 0% {
  3488. box-shadow: inset 0 0 0 1px rgba(245, 108, 108, 0.2);
  3489. }
  3490. 50% {
  3491. box-shadow: inset 0 0 0 2px rgba(245, 108, 108, 0.85);
  3492. }
  3493. 100% {
  3494. box-shadow: inset 0 0 0 1px rgba(245, 108, 108, 0.2);
  3495. }
  3496. }
  3497. @media (max-width: 1200px) {
  3498. .factory-calendar {
  3499. .stat-row,
  3500. .visual-kpi-row,
  3501. .visual-grid {
  3502. grid-template-columns: repeat(2, minmax(0, 1fr));
  3503. }
  3504. .visual-overview {
  3505. align-items: flex-start;
  3506. flex-direction: column;
  3507. &::before {
  3508. display: none;
  3509. }
  3510. }
  3511. .donut-wrap,
  3512. .type-visual-list {
  3513. grid-template-columns: 1fr;
  3514. }
  3515. .calendar-layout {
  3516. grid-template-columns: 1fr;
  3517. }
  3518. .calendar-grid.view-quarter {
  3519. grid-template-columns: repeat(7, minmax(78px, 1fr));
  3520. }
  3521. }
  3522. }
  3523. @media (max-width: 768px) {
  3524. .factory-calendar {
  3525. .stat-row {
  3526. grid-template-columns: 1fr;
  3527. }
  3528. .calendar-grid,
  3529. .calendar-grid.view-week,
  3530. .calendar-grid.view-quarter {
  3531. grid-template-columns: repeat(2, minmax(140px, 1fr));
  3532. }
  3533. .legend-panel {
  3534. display: none;
  3535. }
  3536. .visual-stat-page {
  3537. padding: 12px;
  3538. }
  3539. .visual-overview {
  3540. padding: 16px;
  3541. }
  3542. .overview-copy h3 {
  3543. font-size: 22px;
  3544. line-height: 30px;
  3545. }
  3546. .visual-kpi-row,
  3547. .visual-grid,
  3548. .conflict-visual {
  3549. grid-template-columns: 1fr;
  3550. }
  3551. .visual-grid {
  3552. grid-template-areas: none;
  3553. > .visual-card,
  3554. > .visual-card:nth-child(2),
  3555. > .visual-card:nth-child(3),
  3556. .schedule-card,
  3557. .conflict-visual-card {
  3558. grid-area: auto;
  3559. }
  3560. }
  3561. .type-visual-list {
  3562. grid-template-columns: repeat(2, minmax(0, 1fr));
  3563. }
  3564. }
  3565. .calendar-day-drawer {
  3566. width: 92% !important;
  3567. .drawer-summary,
  3568. .detail-item,
  3569. .plan-item {
  3570. grid-template-columns: 1fr;
  3571. }
  3572. .plan-extra {
  3573. min-width: 0;
  3574. text-align: left;
  3575. }
  3576. }
  3577. }
  3578. .factory-calendar .industrial-stat-board {
  3579. position: relative;
  3580. min-height: 650px;
  3581. padding: 18px;
  3582. overflow: hidden;
  3583. color: #dff6ff;
  3584. border: 1px solid rgba(52, 185, 220, 0.34);
  3585. border-radius: 8px;
  3586. background:
  3587. linear-gradient(90deg, rgba(42, 187, 215, 0.13) 1px, transparent 1px),
  3588. linear-gradient(rgba(39, 207, 178, 0.08) 1px, transparent 1px),
  3589. radial-gradient(circle at 16% 8%, rgba(47, 220, 188, 0.16), transparent 28%),
  3590. radial-gradient(circle at 88% 18%, rgba(56, 132, 255, 0.16), transparent 30%),
  3591. linear-gradient(135deg, #061017 0%, #0a1d27 46%, #07131b 100%);
  3592. background-size: 42px 42px, 42px 42px, 100% 100%, 100% 100%, 100% 100%;
  3593. box-shadow:
  3594. inset 0 1px 0 rgba(255, 255, 255, 0.08),
  3595. inset 0 0 0 1px rgba(97, 227, 255, 0.06),
  3596. inset 0 -70px 130px rgba(0, 0, 0, 0.22),
  3597. 0 18px 34px rgba(0, 0, 0, 0.18);
  3598. }
  3599. .factory-calendar .industrial-stat-board::before,
  3600. .factory-calendar .industrial-stat-board::after {
  3601. content: '';
  3602. position: absolute;
  3603. pointer-events: none;
  3604. }
  3605. .factory-calendar .industrial-stat-board::before {
  3606. left: 18px;
  3607. right: 18px;
  3608. top: 10px;
  3609. height: 2px;
  3610. background: linear-gradient(90deg, transparent, #31e7cc 20%, #45a7ff 52%, #f2b84b 82%, transparent);
  3611. box-shadow: 0 0 20px rgba(49, 231, 204, 0.36);
  3612. }
  3613. .factory-calendar .industrial-stat-board::after {
  3614. inset: 8px;
  3615. border: 1px solid rgba(92, 209, 237, 0.12);
  3616. border-radius: 7px;
  3617. }
  3618. .factory-calendar .industrial-grid-layer {
  3619. position: absolute;
  3620. inset: 0;
  3621. pointer-events: none;
  3622. opacity: 0.76;
  3623. }
  3624. .factory-calendar .grid-beam {
  3625. position: absolute;
  3626. height: 1px;
  3627. background: linear-gradient(90deg, transparent, rgba(49, 231, 204, 0.52), transparent);
  3628. }
  3629. .factory-calendar .grid-beam-main {
  3630. left: 4%;
  3631. right: 6%;
  3632. top: 36%;
  3633. }
  3634. .factory-calendar .grid-beam-sub {
  3635. left: 18%;
  3636. right: 4%;
  3637. bottom: 30%;
  3638. }
  3639. .factory-calendar .grid-node {
  3640. position: absolute;
  3641. width: 9px;
  3642. height: 9px;
  3643. border: 1px solid rgba(49, 231, 204, 0.76);
  3644. background: #061017;
  3645. box-shadow: 0 0 16px rgba(49, 231, 204, 0.42);
  3646. transform: rotate(45deg);
  3647. }
  3648. .factory-calendar .grid-node-a {
  3649. left: 16%;
  3650. top: 35%;
  3651. }
  3652. .factory-calendar .grid-node-b {
  3653. right: 18%;
  3654. bottom: 29%;
  3655. }
  3656. .factory-calendar .industrial-command,
  3657. .factory-calendar .industrial-kpi-strip,
  3658. .factory-calendar .industrial-main-grid {
  3659. position: relative;
  3660. z-index: 1;
  3661. }
  3662. .factory-calendar .industrial-command {
  3663. display: grid;
  3664. grid-template-columns: minmax(0, 1fr) 410px;
  3665. gap: 18px;
  3666. align-items: stretch;
  3667. min-height: 138px;
  3668. padding: 22px 24px;
  3669. border: 1px solid rgba(71, 203, 218, 0.25);
  3670. border-radius: 8px;
  3671. background:
  3672. linear-gradient(100deg, rgba(49, 231, 204, 0.15), transparent 36%),
  3673. linear-gradient(180deg, rgba(255, 255, 255, 0.09), rgba(255, 255, 255, 0.025)),
  3674. rgba(6, 22, 31, 0.86);
  3675. box-shadow:
  3676. inset 0 1px 0 rgba(255, 255, 255, 0.12),
  3677. inset 0 -28px 60px rgba(0, 0, 0, 0.16),
  3678. 0 16px 30px rgba(0, 0, 0, 0.2);
  3679. }
  3680. .factory-calendar .command-copy {
  3681. min-width: 0;
  3682. }
  3683. .factory-calendar .command-kicker {
  3684. display: flex;
  3685. align-items: center;
  3686. gap: 8px;
  3687. color: rgba(174, 235, 246, 0.78);
  3688. font-size: 12px;
  3689. line-height: 18px;
  3690. letter-spacing: 0;
  3691. }
  3692. .factory-calendar .command-live-dot {
  3693. width: 8px;
  3694. height: 8px;
  3695. border-radius: 50%;
  3696. background: #31e7cc;
  3697. box-shadow: 0 0 0 5px rgba(49, 231, 204, 0.12), 0 0 18px rgba(49, 231, 204, 0.55);
  3698. }
  3699. .factory-calendar .command-copy h3 {
  3700. margin: 10px 0 8px;
  3701. color: #f3fbff;
  3702. font-size: 30px;
  3703. line-height: 38px;
  3704. font-weight: 700;
  3705. }
  3706. .factory-calendar .command-copy p {
  3707. max-width: 720px;
  3708. margin: 0;
  3709. color: rgba(221, 239, 246, 0.7);
  3710. font-size: 14px;
  3711. line-height: 22px;
  3712. }
  3713. .factory-calendar .command-status {
  3714. display: grid;
  3715. grid-template-columns: 146px minmax(0, 1fr);
  3716. gap: 12px;
  3717. }
  3718. .factory-calendar .health-gauge {
  3719. display: flex;
  3720. align-items: center;
  3721. justify-content: center;
  3722. flex-direction: column;
  3723. border: 1px solid rgba(49, 231, 204, 0.24);
  3724. border-radius: 8px;
  3725. background: linear-gradient(160deg, rgba(49, 231, 204, 0.12), rgba(255, 255, 255, 0.035));
  3726. }
  3727. .factory-calendar .health-ring {
  3728. display: flex;
  3729. width: 74px;
  3730. height: 74px;
  3731. align-items: center;
  3732. justify-content: center;
  3733. margin-bottom: 6px;
  3734. border-radius: 50%;
  3735. background:
  3736. radial-gradient(circle at center, #07131b 0 54%, transparent 55%),
  3737. conic-gradient(#31e7cc 0 70%, rgba(69, 167, 255, 0.2) 70% 100%);
  3738. box-shadow:
  3739. inset 4px 5px 10px rgba(255, 255, 255, 0.12),
  3740. inset -6px -8px 14px rgba(0, 0, 0, 0.22),
  3741. 0 0 24px rgba(49, 231, 204, 0.12);
  3742. }
  3743. .factory-calendar .health-ring strong {
  3744. color: #74f8d9;
  3745. font-size: 30px;
  3746. line-height: 36px;
  3747. font-weight: 800;
  3748. font-variant-numeric: tabular-nums;
  3749. }
  3750. .factory-calendar .health-gauge span,
  3751. .factory-calendar .health-gauge em {
  3752. color: rgba(221, 239, 246, 0.68);
  3753. font-size: 12px;
  3754. line-height: 18px;
  3755. font-style: normal;
  3756. }
  3757. .factory-calendar .command-summary {
  3758. display: grid;
  3759. grid-template-columns: 1fr;
  3760. gap: 10px;
  3761. }
  3762. .factory-calendar .command-summary div {
  3763. display: flex;
  3764. align-items: center;
  3765. justify-content: space-between;
  3766. gap: 12px;
  3767. padding: 12px 14px;
  3768. border: 1px solid rgba(69, 167, 255, 0.2);
  3769. border-radius: 8px;
  3770. background: rgba(255, 255, 255, 0.045);
  3771. }
  3772. .factory-calendar .command-summary span {
  3773. color: rgba(221, 239, 246, 0.68);
  3774. font-size: 12px;
  3775. line-height: 18px;
  3776. }
  3777. .factory-calendar .command-summary strong {
  3778. color: #f3fbff;
  3779. font-size: 24px;
  3780. line-height: 30px;
  3781. font-weight: 800;
  3782. font-variant-numeric: tabular-nums;
  3783. }
  3784. .factory-calendar .command-summary .danger strong {
  3785. color: #ff8b8b;
  3786. }
  3787. .factory-calendar .industrial-kpi-strip {
  3788. display: grid;
  3789. grid-template-columns: repeat(4, minmax(0, 1fr));
  3790. gap: 12px;
  3791. margin-top: 14px;
  3792. }
  3793. .factory-calendar .industrial-kpi {
  3794. position: relative;
  3795. display: grid;
  3796. grid-template-columns: 44px minmax(0, 1fr);
  3797. gap: 12px;
  3798. align-items: center;
  3799. min-height: 86px;
  3800. padding: 14px 16px;
  3801. overflow: hidden;
  3802. border: 1px solid rgba(71, 203, 218, 0.22);
  3803. border-radius: 8px;
  3804. background:
  3805. linear-gradient(90deg, rgba(69, 167, 255, 0.1), transparent 44%),
  3806. linear-gradient(180deg, rgba(255, 255, 255, 0.075), rgba(255, 255, 255, 0.022)),
  3807. rgba(7, 25, 36, 0.82);
  3808. box-shadow:
  3809. inset 3px 0 0 var(--accent-color),
  3810. inset 0 1px 0 rgba(255, 255, 255, 0.09),
  3811. 0 10px 20px rgba(0, 0, 0, 0.16);
  3812. }
  3813. .factory-calendar .industrial-kpi::after {
  3814. content: '';
  3815. position: absolute;
  3816. right: 10px;
  3817. bottom: 10px;
  3818. width: 30px;
  3819. height: 16px;
  3820. border-right: 1px solid rgba(174, 235, 246, 0.22);
  3821. border-bottom: 1px solid rgba(174, 235, 246, 0.22);
  3822. }
  3823. .factory-calendar .industrial-kpi-icon {
  3824. display: flex;
  3825. width: 38px;
  3826. height: 38px;
  3827. align-items: center;
  3828. justify-content: center;
  3829. border: 1px solid rgba(255, 255, 255, 0.12);
  3830. border-radius: 7px;
  3831. color: var(--accent-color);
  3832. background: rgba(255, 255, 255, 0.06);
  3833. font-size: 19px;
  3834. }
  3835. .factory-calendar .industrial-kpi-copy {
  3836. min-width: 0;
  3837. }
  3838. .factory-calendar .industrial-kpi-copy span,
  3839. .factory-calendar .industrial-kpi-copy em {
  3840. display: block;
  3841. overflow: hidden;
  3842. color: rgba(221, 239, 246, 0.68);
  3843. font-size: 12px;
  3844. line-height: 18px;
  3845. text-overflow: ellipsis;
  3846. white-space: nowrap;
  3847. font-style: normal;
  3848. }
  3849. .factory-calendar .industrial-kpi-copy strong {
  3850. display: block;
  3851. margin: 2px 0;
  3852. color: #f3fbff;
  3853. font-size: 27px;
  3854. line-height: 32px;
  3855. font-weight: 800;
  3856. font-variant-numeric: tabular-nums;
  3857. }
  3858. .factory-calendar .industrial-main-grid {
  3859. display: grid;
  3860. grid-template-columns: minmax(0, 1.18fr) minmax(360px, 0.82fr);
  3861. grid-template-areas:
  3862. 'schedule types'
  3863. 'month conflict';
  3864. gap: 14px;
  3865. margin-top: 14px;
  3866. }
  3867. .factory-calendar .industrial-panel {
  3868. position: relative;
  3869. min-width: 0;
  3870. padding: 16px;
  3871. border: 1px solid rgba(71, 203, 218, 0.22);
  3872. border-radius: 8px;
  3873. background:
  3874. linear-gradient(135deg, rgba(255, 255, 255, 0.08), transparent 34%),
  3875. linear-gradient(180deg, rgba(8, 31, 43, 0.92), rgba(5, 19, 28, 0.92));
  3876. box-shadow:
  3877. inset 0 1px 0 rgba(255, 255, 255, 0.08),
  3878. inset 0 -24px 52px rgba(0, 0, 0, 0.13),
  3879. 0 12px 24px rgba(0, 0, 0, 0.16);
  3880. }
  3881. .factory-calendar .industrial-panel::before {
  3882. content: '';
  3883. position: absolute;
  3884. left: 12px;
  3885. top: 12px;
  3886. width: 42px;
  3887. height: 18px;
  3888. border-top: 1px solid rgba(49, 231, 204, 0.62);
  3889. border-left: 1px solid rgba(49, 231, 204, 0.62);
  3890. }
  3891. .factory-calendar .schedule-analysis {
  3892. grid-area: schedule;
  3893. }
  3894. .factory-calendar .type-analysis {
  3895. grid-area: types;
  3896. }
  3897. .factory-calendar .month-analysis {
  3898. grid-area: month;
  3899. }
  3900. .factory-calendar .conflict-analysis {
  3901. grid-area: conflict;
  3902. }
  3903. .factory-calendar .industrial-panel-head {
  3904. display: flex;
  3905. align-items: flex-start;
  3906. justify-content: space-between;
  3907. gap: 12px;
  3908. margin-bottom: 14px;
  3909. padding-left: 12px;
  3910. }
  3911. .factory-calendar .industrial-panel-head span {
  3912. display: block;
  3913. color: #57d4ff;
  3914. font-size: 11px;
  3915. line-height: 16px;
  3916. }
  3917. .factory-calendar .industrial-panel-head strong {
  3918. display: block;
  3919. margin-top: 2px;
  3920. color: #f3fbff;
  3921. font-size: 17px;
  3922. line-height: 24px;
  3923. font-weight: 700;
  3924. }
  3925. .factory-calendar .industrial-panel-head p {
  3926. margin: 2px 0 0;
  3927. color: rgba(221, 239, 246, 0.58);
  3928. font-size: 12px;
  3929. line-height: 18px;
  3930. }
  3931. .factory-calendar .schedule-analysis-body {
  3932. display: grid;
  3933. grid-template-columns: 230px minmax(0, 1fr);
  3934. gap: 18px;
  3935. align-items: center;
  3936. }
  3937. .factory-calendar .schedule-radar {
  3938. position: relative;
  3939. width: 204px;
  3940. height: 204px;
  3941. margin: 0 auto;
  3942. border: 1px solid rgba(49, 231, 204, 0.22);
  3943. border-radius: 50%;
  3944. background:
  3945. linear-gradient(90deg, transparent 49%, rgba(49, 231, 204, 0.12) 50%, transparent 51%),
  3946. linear-gradient(0deg, transparent 49%, rgba(69, 167, 255, 0.12) 50%, transparent 51%),
  3947. rgba(5, 19, 28, 0.7);
  3948. box-shadow:
  3949. inset 0 0 24px rgba(49, 231, 204, 0.08),
  3950. 0 18px 28px rgba(0, 0, 0, 0.24);
  3951. }
  3952. .factory-calendar .schedule-radar::before {
  3953. content: '';
  3954. position: absolute;
  3955. inset: 16px;
  3956. border: 1px dashed rgba(174, 235, 246, 0.26);
  3957. border-radius: 50%;
  3958. }
  3959. .factory-calendar .schedule-donut {
  3960. position: absolute;
  3961. inset: 29px;
  3962. border-radius: 50%;
  3963. box-shadow:
  3964. inset 8px 10px 14px rgba(255, 255, 255, 0.16),
  3965. inset -10px -13px 18px rgba(0, 0, 0, 0.22);
  3966. }
  3967. .factory-calendar .schedule-donut-center {
  3968. position: absolute;
  3969. inset: 35px;
  3970. display: flex;
  3971. align-items: center;
  3972. justify-content: center;
  3973. flex-direction: column;
  3974. border: 1px solid rgba(255, 255, 255, 0.26);
  3975. border-radius: 50%;
  3976. background: linear-gradient(180deg, #edf8fb, #bdd5dc);
  3977. color: #07131b;
  3978. box-shadow: 0 10px 18px rgba(0, 0, 0, 0.28);
  3979. }
  3980. .factory-calendar .schedule-donut-center strong {
  3981. font-size: 30px;
  3982. line-height: 36px;
  3983. font-weight: 800;
  3984. font-variant-numeric: tabular-nums;
  3985. }
  3986. .factory-calendar .schedule-donut-center span {
  3987. color: #365568;
  3988. font-size: 12px;
  3989. line-height: 18px;
  3990. }
  3991. .factory-calendar .schedule-segments,
  3992. .factory-calendar .month-telemetry-list,
  3993. .factory-calendar .type-distribution {
  3994. display: flex;
  3995. flex-direction: column;
  3996. gap: 10px;
  3997. }
  3998. .factory-calendar .schedule-segment-row,
  3999. .factory-calendar .month-telemetry-row,
  4000. .factory-calendar .type-distribution-row {
  4001. border: 1px solid rgba(71, 203, 218, 0.16);
  4002. border-radius: 7px;
  4003. background: rgba(255, 255, 255, 0.045);
  4004. }
  4005. .factory-calendar .schedule-segment-row,
  4006. .factory-calendar .month-telemetry-row {
  4007. padding: 11px 12px;
  4008. }
  4009. .factory-calendar .segment-meta,
  4010. .factory-calendar .month-row-head {
  4011. display: flex;
  4012. align-items: center;
  4013. justify-content: space-between;
  4014. gap: 12px;
  4015. margin-bottom: 8px;
  4016. color: rgba(221, 239, 246, 0.78);
  4017. font-size: 13px;
  4018. line-height: 18px;
  4019. }
  4020. .factory-calendar .segment-meta strong,
  4021. .factory-calendar .month-row-head strong {
  4022. color: #f3fbff;
  4023. font-weight: 800;
  4024. font-variant-numeric: tabular-nums;
  4025. }
  4026. .factory-calendar .segment-track,
  4027. .factory-calendar .month-track {
  4028. height: 9px;
  4029. overflow: hidden;
  4030. border-radius: 9px;
  4031. background:
  4032. linear-gradient(90deg, rgba(174, 235, 246, 0.13) 1px, transparent 1px),
  4033. rgba(2, 12, 19, 0.76);
  4034. background-size: 28px 100%, 100% 100%;
  4035. }
  4036. .factory-calendar .segment-track i,
  4037. .factory-calendar .month-track i {
  4038. display: block;
  4039. height: 100%;
  4040. border-radius: 9px;
  4041. background:
  4042. linear-gradient(180deg, rgba(255, 255, 255, 0.34), transparent 44%),
  4043. var(--segment-color, var(--month-color));
  4044. box-shadow: 0 0 14px var(--segment-color, var(--month-color));
  4045. }
  4046. .factory-calendar .type-distribution-row {
  4047. display: grid;
  4048. grid-template-columns: 66px minmax(0, 1fr);
  4049. gap: 12px;
  4050. align-items: center;
  4051. min-height: 82px;
  4052. padding: 12px;
  4053. }
  4054. .factory-calendar .type-orbit {
  4055. display: flex;
  4056. width: 56px;
  4057. height: 56px;
  4058. align-items: center;
  4059. justify-content: center;
  4060. border-radius: 50%;
  4061. background:
  4062. radial-gradient(circle at center, #07131b 0 55%, transparent 56%),
  4063. conic-gradient(var(--type-color) 0 var(--type-percent), rgba(174, 235, 246, 0.15) var(--type-percent) 100%);
  4064. box-shadow:
  4065. inset 4px 5px 8px rgba(255, 255, 255, 0.1),
  4066. inset -5px -6px 10px rgba(0, 0, 0, 0.2);
  4067. }
  4068. .factory-calendar .type-orbit strong {
  4069. color: #f3fbff;
  4070. font-size: 18px;
  4071. line-height: 24px;
  4072. font-weight: 800;
  4073. font-variant-numeric: tabular-nums;
  4074. }
  4075. .factory-calendar .type-copy {
  4076. min-width: 0;
  4077. }
  4078. .factory-calendar .type-copy strong {
  4079. display: block;
  4080. overflow: hidden;
  4081. color: #f3fbff;
  4082. font-size: 15px;
  4083. line-height: 22px;
  4084. text-overflow: ellipsis;
  4085. white-space: nowrap;
  4086. }
  4087. .factory-calendar .type-copy span {
  4088. display: block;
  4089. overflow: hidden;
  4090. color: rgba(221, 239, 246, 0.62);
  4091. font-size: 12px;
  4092. line-height: 18px;
  4093. text-overflow: ellipsis;
  4094. white-space: nowrap;
  4095. }
  4096. .factory-calendar .conflict-analysis-body {
  4097. display: grid;
  4098. grid-template-columns: 118px minmax(0, 1fr);
  4099. gap: 14px;
  4100. align-items: stretch;
  4101. }
  4102. .factory-calendar .conflict-total {
  4103. display: flex;
  4104. min-height: 148px;
  4105. align-items: center;
  4106. justify-content: center;
  4107. flex-direction: column;
  4108. border: 1px solid rgba(49, 231, 204, 0.18);
  4109. border-radius: 8px;
  4110. background: linear-gradient(160deg, rgba(49, 231, 204, 0.1), rgba(255, 255, 255, 0.035));
  4111. }
  4112. .factory-calendar .conflict-total.danger {
  4113. border-color: rgba(244, 114, 114, 0.28);
  4114. background: linear-gradient(160deg, rgba(244, 114, 114, 0.13), rgba(255, 255, 255, 0.035));
  4115. }
  4116. .factory-calendar .conflict-total span {
  4117. color: rgba(221, 239, 246, 0.66);
  4118. font-size: 12px;
  4119. line-height: 18px;
  4120. }
  4121. .factory-calendar .conflict-total strong {
  4122. color: #74f8d9;
  4123. font-size: 42px;
  4124. line-height: 50px;
  4125. font-weight: 800;
  4126. font-variant-numeric: tabular-nums;
  4127. }
  4128. .factory-calendar .conflict-total.danger strong {
  4129. color: #ff8b8b;
  4130. }
  4131. .factory-calendar .conflict-bars {
  4132. display: grid;
  4133. grid-template-columns: repeat(6, minmax(26px, 1fr));
  4134. gap: 10px;
  4135. align-items: end;
  4136. min-height: 148px;
  4137. padding: 12px 8px 0;
  4138. border: 1px solid rgba(71, 203, 218, 0.14);
  4139. border-radius: 8px;
  4140. background:
  4141. linear-gradient(rgba(174, 235, 246, 0.1) 1px, transparent 1px),
  4142. rgba(2, 12, 19, 0.36);
  4143. background-size: 100% 34px, 100% 100%;
  4144. }
  4145. .factory-calendar .conflict-bar {
  4146. display: flex;
  4147. min-width: 0;
  4148. height: 124px;
  4149. align-items: center;
  4150. justify-content: flex-end;
  4151. flex-direction: column;
  4152. gap: 6px;
  4153. }
  4154. .factory-calendar .conflict-bar span {
  4155. position: relative;
  4156. display: flex;
  4157. width: 100%;
  4158. min-height: 6px;
  4159. max-width: 36px;
  4160. align-items: flex-start;
  4161. justify-content: center;
  4162. border-radius: 7px 7px 2px 2px;
  4163. background:
  4164. linear-gradient(180deg, rgba(255, 255, 255, 0.34), transparent 38%),
  4165. linear-gradient(180deg, #ff9b81, #f15363);
  4166. box-shadow: 0 0 12px rgba(241, 83, 99, 0.22);
  4167. }
  4168. .factory-calendar .conflict-bar b {
  4169. position: absolute;
  4170. top: -20px;
  4171. color: #ffd1d1;
  4172. font-size: 12px;
  4173. font-weight: 800;
  4174. line-height: 16px;
  4175. font-variant-numeric: tabular-nums;
  4176. }
  4177. .factory-calendar .conflict-bar em {
  4178. overflow: hidden;
  4179. width: 100%;
  4180. color: rgba(221, 239, 246, 0.62);
  4181. font-size: 12px;
  4182. line-height: 16px;
  4183. text-align: center;
  4184. text-overflow: ellipsis;
  4185. white-space: nowrap;
  4186. font-style: normal;
  4187. }
  4188. @media (max-width: 1360px) {
  4189. .factory-calendar .industrial-command,
  4190. .factory-calendar .industrial-main-grid,
  4191. .factory-calendar .schedule-analysis-body {
  4192. grid-template-columns: 1fr;
  4193. }
  4194. .factory-calendar .industrial-main-grid {
  4195. grid-template-areas:
  4196. 'schedule'
  4197. 'types'
  4198. 'month'
  4199. 'conflict';
  4200. }
  4201. }
  4202. @media (max-width: 1100px) {
  4203. .factory-calendar .industrial-kpi-strip {
  4204. grid-template-columns: repeat(2, minmax(0, 1fr));
  4205. }
  4206. }
  4207. @media (max-width: 768px) {
  4208. .factory-calendar .industrial-stat-board,
  4209. .factory-calendar .industrial-command,
  4210. .factory-calendar .industrial-panel {
  4211. padding: 14px;
  4212. }
  4213. .factory-calendar .command-copy h3 {
  4214. font-size: 22px;
  4215. line-height: 30px;
  4216. }
  4217. .factory-calendar .command-status,
  4218. .factory-calendar .industrial-kpi-strip,
  4219. .factory-calendar .conflict-analysis-body {
  4220. grid-template-columns: 1fr;
  4221. }
  4222. .factory-calendar .schedule-radar {
  4223. width: 178px;
  4224. height: 178px;
  4225. }
  4226. }
  4227. .factory-calendar .industrial-stat-board {
  4228. color: #203447;
  4229. border-color: rgba(55, 145, 190, 0.26);
  4230. background:
  4231. linear-gradient(90deg, rgba(43, 135, 190, 0.08) 1px, transparent 1px),
  4232. linear-gradient(rgba(38, 180, 165, 0.07) 1px, transparent 1px),
  4233. radial-gradient(circle at 14% 10%, rgba(52, 211, 190, 0.18), transparent 28%),
  4234. radial-gradient(circle at 88% 18%, rgba(78, 145, 255, 0.16), transparent 30%),
  4235. linear-gradient(135deg, #f3f9fc 0%, #eaf5f9 46%, #f7fbfd 100%);
  4236. box-shadow:
  4237. inset 0 1px 0 rgba(255, 255, 255, 0.86),
  4238. inset 0 0 0 1px rgba(255, 255, 255, 0.64),
  4239. 0 16px 32px rgba(40, 94, 128, 0.1);
  4240. }
  4241. .factory-calendar .industrial-stat-board::after {
  4242. border-color: rgba(55, 145, 190, 0.14);
  4243. }
  4244. .factory-calendar .grid-node {
  4245. background: #f6fbfd;
  4246. }
  4247. .factory-calendar .industrial-command,
  4248. .factory-calendar .industrial-panel,
  4249. .factory-calendar .industrial-kpi {
  4250. border-color: rgba(55, 145, 190, 0.22);
  4251. background:
  4252. linear-gradient(135deg, rgba(255, 255, 255, 0.92), rgba(255, 255, 255, 0.5) 45%, rgba(229, 246, 249, 0.7)),
  4253. rgba(255, 255, 255, 0.76);
  4254. box-shadow:
  4255. inset 0 1px 0 rgba(255, 255, 255, 0.92),
  4256. inset 0 -18px 38px rgba(42, 145, 176, 0.04),
  4257. 0 12px 26px rgba(33, 83, 116, 0.1);
  4258. }
  4259. .factory-calendar .industrial-command {
  4260. background:
  4261. linear-gradient(100deg, rgba(55, 210, 190, 0.18), transparent 38%),
  4262. linear-gradient(180deg, rgba(255, 255, 255, 0.96), rgba(234, 248, 251, 0.72)),
  4263. rgba(255, 255, 255, 0.82);
  4264. }
  4265. .factory-calendar .command-kicker,
  4266. .factory-calendar .industrial-panel-head span {
  4267. color: #168fb3;
  4268. }
  4269. .factory-calendar .command-copy h3,
  4270. .factory-calendar .industrial-panel-head strong,
  4271. .factory-calendar .industrial-kpi-copy strong,
  4272. .factory-calendar .command-summary strong,
  4273. .factory-calendar .segment-meta strong,
  4274. .factory-calendar .month-row-head strong,
  4275. .factory-calendar .type-copy strong {
  4276. color: #183044;
  4277. text-shadow: none;
  4278. }
  4279. .factory-calendar .command-copy p,
  4280. .factory-calendar .industrial-panel-head p,
  4281. .factory-calendar .industrial-kpi-copy span,
  4282. .factory-calendar .industrial-kpi-copy em,
  4283. .factory-calendar .health-gauge span,
  4284. .factory-calendar .health-gauge em,
  4285. .factory-calendar .command-summary span,
  4286. .factory-calendar .segment-meta,
  4287. .factory-calendar .month-row-head,
  4288. .factory-calendar .type-copy span,
  4289. .factory-calendar .conflict-total span,
  4290. .factory-calendar .conflict-bar em {
  4291. color: #65798a;
  4292. }
  4293. .factory-calendar .health-gauge,
  4294. .factory-calendar .command-summary div,
  4295. .factory-calendar .schedule-segment-row,
  4296. .factory-calendar .month-telemetry-row,
  4297. .factory-calendar .type-distribution-row,
  4298. .factory-calendar .conflict-total {
  4299. border-color: rgba(65, 160, 190, 0.18);
  4300. background:
  4301. linear-gradient(135deg, rgba(255, 255, 255, 0.78), rgba(229, 248, 249, 0.62)),
  4302. rgba(255, 255, 255, 0.66);
  4303. }
  4304. .factory-calendar .industrial-kpi-icon {
  4305. border-color: rgba(65, 160, 190, 0.22);
  4306. background: rgba(237, 249, 251, 0.9);
  4307. }
  4308. .factory-calendar .health-ring {
  4309. background:
  4310. radial-gradient(circle at center, #f8fcfd 0 54%, transparent 55%),
  4311. conic-gradient(#21bfae 0 70%, rgba(60, 141, 225, 0.18) 70% 100%);
  4312. box-shadow:
  4313. inset 4px 5px 10px rgba(255, 255, 255, 0.78),
  4314. inset -5px -7px 12px rgba(66, 121, 148, 0.14),
  4315. 0 10px 22px rgba(33, 191, 174, 0.12);
  4316. }
  4317. .factory-calendar .health-ring strong,
  4318. .factory-calendar .conflict-total strong {
  4319. color: #0b9f91;
  4320. }
  4321. .factory-calendar .schedule-radar {
  4322. border-color: rgba(65, 160, 190, 0.22);
  4323. background:
  4324. linear-gradient(90deg, transparent 49%, rgba(32, 172, 184, 0.12) 50%, transparent 51%),
  4325. linear-gradient(0deg, transparent 49%, rgba(65, 132, 220, 0.11) 50%, transparent 51%),
  4326. rgba(247, 252, 253, 0.92);
  4327. box-shadow:
  4328. inset 0 0 24px rgba(54, 178, 190, 0.08),
  4329. 0 16px 24px rgba(33, 83, 116, 0.1);
  4330. }
  4331. .factory-calendar .schedule-radar::before {
  4332. border-color: rgba(65, 160, 190, 0.26);
  4333. }
  4334. .factory-calendar .schedule-donut {
  4335. box-shadow:
  4336. inset 8px 10px 14px rgba(255, 255, 255, 0.28),
  4337. inset -10px -13px 18px rgba(43, 92, 120, 0.12),
  4338. 0 12px 22px rgba(33, 83, 116, 0.14);
  4339. }
  4340. .factory-calendar .schedule-donut-center {
  4341. border-color: rgba(65, 160, 190, 0.2);
  4342. background: linear-gradient(180deg, #ffffff, #e5f4f8);
  4343. color: #173247;
  4344. box-shadow:
  4345. inset 2px 3px 8px rgba(255, 255, 255, 0.8),
  4346. 0 10px 18px rgba(33, 83, 116, 0.12);
  4347. }
  4348. .factory-calendar .schedule-donut-center span {
  4349. color: #607789;
  4350. }
  4351. .factory-calendar .segment-track,
  4352. .factory-calendar .month-track {
  4353. background:
  4354. linear-gradient(90deg, rgba(63, 150, 188, 0.12) 1px, transparent 1px),
  4355. rgba(220, 237, 243, 0.78);
  4356. }
  4357. .factory-calendar .type-orbit {
  4358. background:
  4359. radial-gradient(circle at center, #f9fdfe 0 55%, transparent 56%),
  4360. conic-gradient(var(--type-color) 0 var(--type-percent), rgba(96, 153, 180, 0.16) var(--type-percent) 100%);
  4361. box-shadow:
  4362. inset 4px 5px 8px rgba(255, 255, 255, 0.7),
  4363. inset -5px -6px 10px rgba(66, 121, 148, 0.14);
  4364. }
  4365. .factory-calendar .type-orbit strong {
  4366. color: #173247;
  4367. }
  4368. .factory-calendar .conflict-bars {
  4369. border-color: rgba(65, 160, 190, 0.16);
  4370. background:
  4371. linear-gradient(rgba(63, 150, 188, 0.11) 1px, transparent 1px),
  4372. rgba(239, 248, 251, 0.72);
  4373. }
  4374. .factory-calendar .conflict-bar em {
  4375. color: #607789;
  4376. }
  4377. .factory-calendar .conflict-total.danger {
  4378. border-color: rgba(244, 114, 114, 0.3);
  4379. background:
  4380. linear-gradient(160deg, rgba(255, 233, 233, 0.9), rgba(255, 255, 255, 0.7)),
  4381. rgba(255, 255, 255, 0.72);
  4382. }
  4383. .factory-calendar .industrial-main-grid {
  4384. align-items: start;
  4385. }
  4386. .factory-calendar .conflict-analysis {
  4387. align-self: start;
  4388. }
  4389. .factory-calendar .conflict-analysis .industrial-panel-head {
  4390. margin-bottom: 10px;
  4391. }
  4392. .factory-calendar .conflict-analysis-body {
  4393. grid-template-columns: 136px minmax(0, 1fr);
  4394. gap: 12px;
  4395. align-items: stretch;
  4396. }
  4397. .factory-calendar .conflict-total {
  4398. min-height: 118px;
  4399. padding: 10px 8px;
  4400. }
  4401. .factory-calendar .conflict-total strong {
  4402. font-size: 38px;
  4403. line-height: 44px;
  4404. }
  4405. .factory-calendar .conflict-bars {
  4406. min-height: 118px;
  4407. padding: 10px 10px 2px;
  4408. align-items: end;
  4409. }
  4410. .factory-calendar .conflict-bar {
  4411. height: 98px;
  4412. gap: 4px;
  4413. }
  4414. .factory-calendar .conflict-bar span {
  4415. max-width: 42px;
  4416. }
  4417. .factory-calendar .industrial-main-grid {
  4418. display: grid;
  4419. grid-template-columns: minmax(0, 1.18fr) minmax(360px, 0.82fr);
  4420. grid-template-areas: none;
  4421. align-items: start;
  4422. }
  4423. .factory-calendar .industrial-column {
  4424. display: flex;
  4425. min-width: 0;
  4426. flex-direction: column;
  4427. gap: 14px;
  4428. }
  4429. .factory-calendar .schedule-analysis,
  4430. .factory-calendar .type-analysis,
  4431. .factory-calendar .month-analysis,
  4432. .factory-calendar .conflict-analysis {
  4433. grid-area: auto;
  4434. }
  4435. .factory-calendar .schedule-analysis .industrial-panel-head {
  4436. margin-bottom: 10px;
  4437. }
  4438. .factory-calendar .schedule-analysis-body {
  4439. grid-template-columns: 190px minmax(0, 1fr);
  4440. gap: 16px;
  4441. }
  4442. .factory-calendar .schedule-radar {
  4443. width: 172px;
  4444. height: 172px;
  4445. }
  4446. .factory-calendar .schedule-radar::before {
  4447. inset: 12px;
  4448. }
  4449. .factory-calendar .schedule-donut {
  4450. inset: 24px;
  4451. }
  4452. .factory-calendar .schedule-donut-center {
  4453. inset: 31px;
  4454. }
  4455. .factory-calendar .schedule-donut-center strong {
  4456. font-size: 26px;
  4457. line-height: 32px;
  4458. }
  4459. .factory-calendar .schedule-segments {
  4460. gap: 8px;
  4461. }
  4462. .factory-calendar .schedule-segment-row {
  4463. padding: 9px 11px;
  4464. }
  4465. .factory-calendar .conflict-analysis {
  4466. min-height: 0;
  4467. }
  4468. @media (max-width: 1360px) {
  4469. .factory-calendar .industrial-main-grid {
  4470. grid-template-columns: 1fr;
  4471. }
  4472. }
  4473. .factory-calendar .industrial-main-grid {
  4474. grid-template-columns: minmax(0, 1.26fr) minmax(460px, 0.74fr);
  4475. align-items: stretch;
  4476. }
  4477. .factory-calendar .industrial-column {
  4478. height: 100%;
  4479. }
  4480. .factory-calendar .industrial-column-side {
  4481. display: grid;
  4482. grid-template-rows: auto minmax(240px, 1fr);
  4483. align-content: stretch;
  4484. }
  4485. .factory-calendar .industrial-column-side > .industrial-panel {
  4486. width: 100%;
  4487. box-sizing: border-box;
  4488. }
  4489. .factory-calendar .schedule-analysis-body {
  4490. grid-template-columns: 168px minmax(0, 1fr);
  4491. gap: 14px;
  4492. }
  4493. .factory-calendar .schedule-radar {
  4494. width: 152px;
  4495. height: 152px;
  4496. }
  4497. .factory-calendar .schedule-radar::before {
  4498. inset: 10px;
  4499. }
  4500. .factory-calendar .schedule-donut {
  4501. inset: 20px;
  4502. }
  4503. .factory-calendar .schedule-donut-center {
  4504. inset: 28px;
  4505. }
  4506. .factory-calendar .schedule-donut-center strong {
  4507. font-size: 25px;
  4508. line-height: 30px;
  4509. }
  4510. .factory-calendar .schedule-segments {
  4511. gap: 7px;
  4512. }
  4513. .factory-calendar .schedule-segment-row {
  4514. padding: 8px 11px;
  4515. }
  4516. .factory-calendar .schedule-segment-row,
  4517. .factory-calendar .month-telemetry-row,
  4518. .factory-calendar .type-distribution-row,
  4519. .factory-calendar .conflict-total,
  4520. .factory-calendar .conflict-bars {
  4521. border-color: rgba(74, 162, 196, 0.22);
  4522. background:
  4523. linear-gradient(135deg, rgba(255, 255, 255, 0.88), rgba(234, 248, 250, 0.72)),
  4524. rgba(255, 255, 255, 0.72);
  4525. box-shadow:
  4526. inset 0 1px 0 rgba(255, 255, 255, 0.88),
  4527. 0 8px 18px rgba(45, 95, 123, 0.06);
  4528. }
  4529. .factory-calendar .conflict-analysis {
  4530. display: flex;
  4531. min-height: 252px;
  4532. flex-direction: column;
  4533. overflow: hidden;
  4534. }
  4535. .factory-calendar .conflict-analysis .industrial-panel-head {
  4536. margin-bottom: 12px;
  4537. }
  4538. .factory-calendar .conflict-analysis-body {
  4539. display: grid;
  4540. flex: 1;
  4541. grid-template-columns: 148px minmax(0, 1fr);
  4542. gap: 14px;
  4543. align-items: stretch;
  4544. }
  4545. .factory-calendar .conflict-total {
  4546. position: relative;
  4547. min-height: 164px;
  4548. padding: 14px 12px;
  4549. border-radius: 8px;
  4550. background:
  4551. linear-gradient(180deg, rgba(255, 255, 255, 0.9), rgba(232, 248, 249, 0.72)),
  4552. linear-gradient(135deg, rgba(31, 184, 168, 0.12), transparent 58%);
  4553. }
  4554. .factory-calendar .conflict-total::after {
  4555. content: '';
  4556. position: absolute;
  4557. right: 12px;
  4558. bottom: 12px;
  4559. left: 12px;
  4560. height: 3px;
  4561. border-radius: 3px;
  4562. background: linear-gradient(90deg, #2bc4b6, rgba(48, 142, 232, 0.28));
  4563. }
  4564. .factory-calendar .conflict-total.danger::after {
  4565. background: linear-gradient(90deg, #ff7b72, rgba(255, 176, 88, 0.35));
  4566. }
  4567. .factory-calendar .conflict-total span {
  4568. max-width: 94px;
  4569. text-align: center;
  4570. }
  4571. .factory-calendar .conflict-total strong {
  4572. margin-top: 6px;
  4573. color: #0b9f91;
  4574. font-size: 44px;
  4575. line-height: 52px;
  4576. }
  4577. .factory-calendar .conflict-bars {
  4578. position: relative;
  4579. display: grid;
  4580. min-height: 164px;
  4581. grid-template-columns: repeat(6, minmax(34px, 1fr));
  4582. gap: 12px;
  4583. align-items: end;
  4584. padding: 22px 16px 12px;
  4585. overflow: hidden;
  4586. border-radius: 8px;
  4587. background:
  4588. linear-gradient(180deg, rgba(255, 255, 255, 0.86), rgba(237, 249, 251, 0.7)),
  4589. linear-gradient(rgba(66, 151, 186, 0.12) 1px, transparent 1px);
  4590. background-size: 100% 100%, 100% 32px;
  4591. }
  4592. .factory-calendar .conflict-bars::before {
  4593. content: '';
  4594. position: absolute;
  4595. right: 14px;
  4596. bottom: 38px;
  4597. left: 14px;
  4598. height: 1px;
  4599. background: linear-gradient(90deg, rgba(43, 196, 182, 0.18), rgba(48, 142, 232, 0.28), rgba(43, 196, 182, 0.18));
  4600. }
  4601. .factory-calendar .conflict-bar {
  4602. position: relative;
  4603. z-index: 1;
  4604. display: flex;
  4605. height: 132px;
  4606. min-width: 0;
  4607. align-items: center;
  4608. justify-content: flex-end;
  4609. flex-direction: column;
  4610. gap: 7px;
  4611. }
  4612. .factory-calendar .conflict-bar span {
  4613. position: relative;
  4614. display: flex;
  4615. width: calc(100% - 8px);
  4616. min-height: 8px;
  4617. max-width: 50px;
  4618. align-items: flex-start;
  4619. justify-content: center;
  4620. border: 1px solid rgba(255, 255, 255, 0.68);
  4621. border-radius: 5px 5px 3px 3px;
  4622. background:
  4623. linear-gradient(180deg, rgba(255, 255, 255, 0.36), transparent 45%),
  4624. linear-gradient(180deg, #ff9b8f, #f05d68);
  4625. box-shadow:
  4626. inset 0 1px 0 rgba(255, 255, 255, 0.42),
  4627. 0 7px 12px rgba(229, 87, 97, 0.18);
  4628. }
  4629. .factory-calendar .conflict-bar.is-zero span {
  4630. background:
  4631. linear-gradient(180deg, rgba(255, 255, 255, 0.52), transparent 45%),
  4632. linear-gradient(180deg, #8fe2e0, #35b7c8);
  4633. box-shadow:
  4634. inset 0 1px 0 rgba(255, 255, 255, 0.5),
  4635. 0 6px 12px rgba(53, 183, 200, 0.16);
  4636. }
  4637. .factory-calendar .conflict-bar b {
  4638. top: -21px;
  4639. color: #d86363;
  4640. font-size: 12px;
  4641. line-height: 16px;
  4642. }
  4643. .factory-calendar .conflict-bar.is-zero b {
  4644. color: #22a6a2;
  4645. }
  4646. .factory-calendar .conflict-bar em {
  4647. color: #5f7383;
  4648. font-size: 12px;
  4649. line-height: 16px;
  4650. }
  4651. @media (max-width: 1500px) {
  4652. .factory-calendar .industrial-main-grid {
  4653. grid-template-columns: minmax(0, 1.12fr) minmax(420px, 0.88fr);
  4654. }
  4655. .factory-calendar .conflict-analysis-body {
  4656. grid-template-columns: 130px minmax(0, 1fr);
  4657. }
  4658. }
  4659. @media (max-width: 1360px) {
  4660. .factory-calendar .industrial-main-grid,
  4661. .factory-calendar .schedule-analysis-body,
  4662. .factory-calendar .conflict-analysis-body {
  4663. grid-template-columns: 1fr;
  4664. }
  4665. .factory-calendar .industrial-column-side {
  4666. display: flex;
  4667. }
  4668. .factory-calendar .conflict-total,
  4669. .factory-calendar .conflict-bars {
  4670. min-height: 132px;
  4671. }
  4672. }
  4673. .factory-calendar .conflict-analysis {
  4674. min-height: 242px;
  4675. }
  4676. .factory-calendar .conflict-analysis-body {
  4677. display: flex;
  4678. flex: 1;
  4679. flex-direction: column;
  4680. gap: 12px;
  4681. }
  4682. .factory-calendar .conflict-total {
  4683. min-height: 64px;
  4684. padding: 11px 16px;
  4685. align-items: center;
  4686. justify-content: space-between;
  4687. flex-direction: row;
  4688. border-radius: 8px;
  4689. }
  4690. .factory-calendar .conflict-total span {
  4691. max-width: none;
  4692. color: #607789;
  4693. font-size: 13px;
  4694. line-height: 20px;
  4695. text-align: left;
  4696. }
  4697. .factory-calendar .conflict-total strong {
  4698. margin-top: 0;
  4699. font-size: 34px;
  4700. line-height: 40px;
  4701. }
  4702. .factory-calendar .conflict-total::after {
  4703. right: auto;
  4704. bottom: 12px;
  4705. left: 16px;
  4706. width: 118px;
  4707. }
  4708. .factory-calendar .conflict-bars {
  4709. min-height: 126px;
  4710. grid-template-columns: repeat(6, minmax(58px, 1fr));
  4711. gap: 8px;
  4712. padding: 22px 14px 12px;
  4713. align-items: end;
  4714. }
  4715. .factory-calendar .conflict-bars::before {
  4716. right: 14px;
  4717. bottom: 35px;
  4718. left: 14px;
  4719. }
  4720. .factory-calendar .conflict-bar {
  4721. height: 104px;
  4722. gap: 6px;
  4723. }
  4724. .factory-calendar .conflict-bar span {
  4725. width: 38px;
  4726. min-height: 8px;
  4727. max-width: 38px;
  4728. }
  4729. .factory-calendar .conflict-bar b {
  4730. top: -20px;
  4731. font-size: 12px;
  4732. line-height: 16px;
  4733. }
  4734. .factory-calendar .conflict-bar em {
  4735. width: 58px;
  4736. min-width: 58px;
  4737. overflow: visible;
  4738. color: #587284;
  4739. font-size: 12px;
  4740. line-height: 16px;
  4741. text-overflow: clip;
  4742. white-space: nowrap;
  4743. }
  4744. @media (max-width: 1500px) {
  4745. .factory-calendar .conflict-bars {
  4746. grid-template-columns: repeat(6, minmax(52px, 1fr));
  4747. gap: 6px;
  4748. padding-right: 10px;
  4749. padding-left: 10px;
  4750. }
  4751. .factory-calendar .conflict-bar em {
  4752. width: 52px;
  4753. min-width: 52px;
  4754. }
  4755. }
  4756. .factory-calendar .schedule-radar {
  4757. width: 168px;
  4758. height: 168px;
  4759. border: 1px solid rgba(70, 183, 207, 0.26);
  4760. background:
  4761. radial-gradient(circle at 50% 50%, rgba(255, 255, 255, 0.92) 0 40%, transparent 41%),
  4762. repeating-conic-gradient(from -2deg, rgba(33, 160, 185, 0.24) 0deg 1deg, transparent 1deg 10deg),
  4763. radial-gradient(circle at 50% 50%, rgba(45, 196, 186, 0.14), transparent 62%),
  4764. linear-gradient(145deg, rgba(255, 255, 255, 0.92), rgba(228, 247, 250, 0.72));
  4765. box-shadow:
  4766. inset 0 0 0 10px rgba(238, 249, 251, 0.78),
  4767. inset 0 0 0 11px rgba(65, 168, 196, 0.12),
  4768. inset 10px 14px 22px rgba(255, 255, 255, 0.82),
  4769. inset -12px -16px 24px rgba(55, 112, 145, 0.12),
  4770. 0 18px 28px rgba(36, 96, 128, 0.14);
  4771. }
  4772. .factory-calendar .schedule-radar::before {
  4773. inset: 18px;
  4774. border: 1px dashed rgba(63, 158, 190, 0.28);
  4775. background:
  4776. linear-gradient(90deg, transparent 49%, rgba(63, 158, 190, 0.18) 50%, transparent 51%),
  4777. linear-gradient(0deg, transparent 49%, rgba(36, 190, 177, 0.14) 50%, transparent 51%);
  4778. box-shadow: inset 0 0 18px rgba(39, 172, 186, 0.08);
  4779. }
  4780. .factory-calendar .schedule-radar::after {
  4781. content: '';
  4782. position: absolute;
  4783. inset: 4px;
  4784. border-radius: 50%;
  4785. background:
  4786. conic-gradient(from 218deg, transparent 0 66%, rgba(255, 255, 255, 0.72) 72%, transparent 82%),
  4787. radial-gradient(circle at 32% 22%, rgba(255, 255, 255, 0.64), transparent 26%);
  4788. opacity: 0.7;
  4789. pointer-events: none;
  4790. mix-blend-mode: screen;
  4791. }
  4792. .factory-calendar .schedule-donut {
  4793. inset: 30px;
  4794. overflow: hidden;
  4795. border: 1px solid rgba(255, 255, 255, 0.7);
  4796. box-shadow:
  4797. inset 7px 9px 12px rgba(255, 255, 255, 0.32),
  4798. inset -9px -12px 16px rgba(39, 90, 122, 0.18),
  4799. 0 12px 22px rgba(36, 96, 128, 0.16);
  4800. }
  4801. .factory-calendar .schedule-donut::before {
  4802. content: '';
  4803. position: absolute;
  4804. inset: 0;
  4805. border-radius: 50%;
  4806. background:
  4807. linear-gradient(135deg, rgba(255, 255, 255, 0.42), transparent 38%),
  4808. radial-gradient(circle at 70% 76%, rgba(23, 118, 180, 0.18), transparent 32%);
  4809. pointer-events: none;
  4810. }
  4811. .factory-calendar .schedule-donut::after {
  4812. content: '';
  4813. position: absolute;
  4814. inset: 11px;
  4815. border: 1px solid rgba(255, 255, 255, 0.62);
  4816. border-radius: 50%;
  4817. box-shadow:
  4818. inset 0 0 0 1px rgba(54, 160, 186, 0.12),
  4819. 0 0 16px rgba(45, 196, 186, 0.1);
  4820. pointer-events: none;
  4821. }
  4822. .factory-calendar .schedule-donut-center {
  4823. inset: 30px;
  4824. z-index: 1;
  4825. border: 1px solid rgba(58, 160, 188, 0.18);
  4826. background:
  4827. radial-gradient(circle at 36% 26%, rgba(255, 255, 255, 0.95), transparent 34%),
  4828. linear-gradient(145deg, #ffffff, #e7f6f8 60%, #d3e9ef);
  4829. box-shadow:
  4830. inset 3px 4px 9px rgba(255, 255, 255, 0.86),
  4831. inset -5px -7px 12px rgba(68, 117, 148, 0.16),
  4832. 0 8px 16px rgba(36, 96, 128, 0.14);
  4833. }
  4834. .factory-calendar .schedule-donut-center strong {
  4835. color: #173247;
  4836. font-size: 28px;
  4837. line-height: 32px;
  4838. text-shadow: 0 1px 0 rgba(255, 255, 255, 0.9);
  4839. }
  4840. .factory-calendar .schedule-donut-center span {
  4841. margin-top: 1px;
  4842. color: #5b7486;
  4843. font-size: 12px;
  4844. line-height: 17px;
  4845. }
  4846. .factory-calendar .schedule-analysis-body {
  4847. grid-template-columns: 220px minmax(0, 1fr);
  4848. }
  4849. .factory-calendar .schedule-radar {
  4850. width: 190px;
  4851. height: 190px;
  4852. flex: 0 0 190px;
  4853. }
  4854. .factory-calendar .schedule-radar::before {
  4855. inset: 20px;
  4856. }
  4857. .factory-calendar .schedule-donut {
  4858. inset: 28px;
  4859. }
  4860. .factory-calendar .schedule-donut::after {
  4861. inset: 12px;
  4862. }
  4863. .factory-calendar .schedule-donut-center {
  4864. inset: 26px;
  4865. }
  4866. .factory-calendar .schedule-donut-center strong {
  4867. font-size: 29px;
  4868. line-height: 34px;
  4869. }
  4870. .factory-calendar .schedule-donut-center span {
  4871. margin-top: 2px;
  4872. line-height: 18px;
  4873. white-space: nowrap;
  4874. }
  4875. .factory-calendar .industrial-stat-board {
  4876. contain: paint;
  4877. overflow-anchor: none;
  4878. }
  4879. .factory-calendar .industrial-stat-board.is-stat-scrolling {
  4880. pointer-events: none;
  4881. }
  4882. .factory-calendar .industrial-stat-board.is-stat-scrolling *,
  4883. .factory-calendar .industrial-stat-board.is-stat-scrolling *::before,
  4884. .factory-calendar .industrial-stat-board.is-stat-scrolling *::after {
  4885. transition: none !important;
  4886. }
  4887. @at-root body.factory-calendar-stat-scrolling .factory-calendar-stat-tooltip {
  4888. display: none !important;
  4889. }
  4890. .factory-calendar .schedule-radar,
  4891. .factory-calendar .schedule-segment-row,
  4892. .factory-calendar .month-telemetry-row,
  4893. .factory-calendar .type-distribution-row,
  4894. .factory-calendar .conflict-bar {
  4895. cursor: pointer;
  4896. transition:
  4897. border-color 0.22s ease,
  4898. box-shadow 0.22s ease,
  4899. transform 0.22s ease,
  4900. background 0.22s ease;
  4901. will-change: transform;
  4902. }
  4903. .factory-calendar .industrial-stat-board:not(.is-stat-scrolling) .schedule-radar:hover,
  4904. .factory-calendar .industrial-stat-board:not(.is-stat-scrolling) .schedule-segment-row:hover,
  4905. .factory-calendar .industrial-stat-board:not(.is-stat-scrolling) .month-telemetry-row:hover,
  4906. .factory-calendar .industrial-stat-board:not(.is-stat-scrolling) .type-distribution-row:hover {
  4907. border-color: rgba(35, 178, 208, 0.46);
  4908. background:
  4909. linear-gradient(135deg, rgba(255, 255, 255, 0.96), rgba(222, 249, 251, 0.82)),
  4910. rgba(255, 255, 255, 0.84);
  4911. box-shadow:
  4912. inset 0 1px 0 rgba(255, 255, 255, 0.94),
  4913. 0 10px 22px rgba(35, 132, 168, 0.13),
  4914. 0 0 0 3px rgba(52, 211, 190, 0.08);
  4915. transform: translateY(-2px);
  4916. }
  4917. .factory-calendar .industrial-stat-board:not(.is-stat-scrolling) .schedule-radar:hover {
  4918. animation: factoryStatTipPulse 0.48s ease-out both;
  4919. }
  4920. .factory-calendar .industrial-stat-board:not(.is-stat-scrolling) .schedule-segment-row:hover .segment-track i,
  4921. .factory-calendar .industrial-stat-board:not(.is-stat-scrolling) .month-telemetry-row:hover .month-track i {
  4922. filter: saturate(1.12);
  4923. box-shadow:
  4924. inset 0 1px 0 rgba(255, 255, 255, 0.36),
  4925. 0 0 16px var(--segment-color, var(--month-color));
  4926. }
  4927. .factory-calendar .industrial-stat-board:not(.is-stat-scrolling) .type-distribution-row:hover .type-orbit {
  4928. transform: scale(1.05);
  4929. box-shadow:
  4930. inset 4px 5px 8px rgba(255, 255, 255, 0.76),
  4931. inset -5px -6px 10px rgba(66, 121, 148, 0.14),
  4932. 0 8px 16px rgba(35, 132, 168, 0.12);
  4933. }
  4934. .factory-calendar .type-orbit,
  4935. .factory-calendar .conflict-bar span {
  4936. transition:
  4937. box-shadow 0.22s ease,
  4938. transform 0.22s ease,
  4939. filter 0.22s ease;
  4940. will-change: transform;
  4941. }
  4942. .factory-calendar .industrial-stat-board:not(.is-stat-scrolling) .conflict-bar:hover span {
  4943. filter: saturate(1.12);
  4944. transform: translateY(-3px) scaleY(1.04);
  4945. transform-origin: center bottom;
  4946. box-shadow:
  4947. inset 0 1px 0 rgba(255, 255, 255, 0.54),
  4948. 0 8px 16px rgba(53, 183, 200, 0.22);
  4949. }
  4950. .factory-calendar .industrial-stat-board:not(.is-stat-scrolling) .conflict-bar:not(.is-zero):hover span {
  4951. box-shadow:
  4952. inset 0 1px 0 rgba(255, 255, 255, 0.5),
  4953. 0 8px 16px rgba(229, 87, 97, 0.22);
  4954. }
  4955. .factory-calendar .industrial-stat-board:not(.is-stat-scrolling) .conflict-bar:hover em {
  4956. color: #16384d;
  4957. font-weight: 600;
  4958. }
  4959. .factory-calendar .industrial-stat-board .industrial-kpi-strip {
  4960. grid-template-columns: repeat(3, minmax(0, 1fr));
  4961. }
  4962. .factory-calendar .industrial-stat-board .industrial-main-grid {
  4963. grid-template-columns: minmax(0, 1.42fr) minmax(360px, 0.58fr);
  4964. grid-template-areas:
  4965. 'schedule types'
  4966. 'month month';
  4967. align-items: stretch;
  4968. }
  4969. .factory-calendar .industrial-stat-board .schedule-analysis {
  4970. grid-area: schedule;
  4971. }
  4972. .factory-calendar .industrial-stat-board .type-analysis {
  4973. grid-area: types;
  4974. }
  4975. .factory-calendar .industrial-stat-board .type-analysis {
  4976. display: flex;
  4977. width: 100%;
  4978. min-height: 0;
  4979. flex-direction: column;
  4980. }
  4981. .factory-calendar .industrial-stat-board .type-distribution {
  4982. display: grid;
  4983. flex: 1;
  4984. grid-template-rows: repeat(3, minmax(92px, 1fr));
  4985. gap: 12px;
  4986. }
  4987. .factory-calendar .industrial-stat-board .type-distribution-row {
  4988. grid-template-columns: 68px minmax(0, 1fr);
  4989. min-height: 92px;
  4990. padding: 14px;
  4991. background:
  4992. linear-gradient(135deg, rgba(255, 255, 255, 0.92), rgba(231, 249, 252, 0.78)),
  4993. rgba(255, 255, 255, 0.8);
  4994. }
  4995. .factory-calendar .industrial-stat-board .type-orbit {
  4996. width: 58px;
  4997. height: 58px;
  4998. }
  4999. .factory-calendar .industrial-stat-board .month-analysis {
  5000. grid-area: month;
  5001. grid-column: 1 / -1;
  5002. min-height: 0;
  5003. }
  5004. .factory-calendar .industrial-stat-board .month-telemetry-list {
  5005. display: grid;
  5006. grid-template-columns: repeat(5, minmax(150px, 1fr));
  5007. gap: 12px;
  5008. }
  5009. .factory-calendar .industrial-stat-board .month-telemetry-row {
  5010. display: flex;
  5011. min-height: 72px;
  5012. justify-content: center;
  5013. flex-direction: column;
  5014. padding: 14px 16px;
  5015. }
  5016. .factory-calendar .industrial-stat-board .schedule-analysis-body {
  5017. grid-template-columns: 210px minmax(0, 1fr);
  5018. gap: 20px;
  5019. }
  5020. .factory-calendar .industrial-stat-board .schedule-segments {
  5021. gap: 12px;
  5022. }
  5023. .factory-calendar .industrial-stat-board .schedule-segment-row {
  5024. padding: 13px 15px;
  5025. }
  5026. @media (max-width: 1500px) {
  5027. .factory-calendar .industrial-stat-board .industrial-main-grid {
  5028. grid-template-columns: minmax(0, 1.24fr) minmax(330px, 0.76fr);
  5029. }
  5030. .factory-calendar .industrial-stat-board .schedule-analysis-body {
  5031. grid-template-columns: 188px minmax(0, 1fr);
  5032. }
  5033. .factory-calendar .industrial-stat-board .month-telemetry-list {
  5034. grid-template-columns: repeat(3, minmax(180px, 1fr));
  5035. }
  5036. }
  5037. @media (max-width: 1360px) {
  5038. .factory-calendar .industrial-stat-board .industrial-kpi-strip,
  5039. .factory-calendar .industrial-stat-board .industrial-main-grid,
  5040. .factory-calendar .industrial-stat-board .schedule-analysis-body,
  5041. .factory-calendar .industrial-stat-board .month-telemetry-list {
  5042. grid-template-columns: 1fr;
  5043. }
  5044. .factory-calendar .industrial-stat-board .industrial-main-grid {
  5045. grid-template-areas:
  5046. 'schedule'
  5047. 'types'
  5048. 'month';
  5049. }
  5050. .factory-calendar .industrial-stat-board .type-distribution {
  5051. grid-template-rows: none;
  5052. }
  5053. }
  5054. .factory-calendar .industrial-stat-board .industrial-kpi-strip {
  5055. grid-template-columns: repeat(4, minmax(0, 1fr));
  5056. }
  5057. .factory-calendar .industrial-stat-board .industrial-main-grid {
  5058. grid-template-columns: minmax(0, 1.28fr) minmax(380px, 0.72fr);
  5059. grid-template-areas:
  5060. 'schedule types'
  5061. 'month conflict';
  5062. }
  5063. .factory-calendar .industrial-stat-board .month-analysis {
  5064. grid-area: month;
  5065. grid-column: auto;
  5066. }
  5067. .factory-calendar .industrial-stat-board .conflict-analysis {
  5068. display: flex;
  5069. grid-area: conflict;
  5070. min-height: 0;
  5071. flex-direction: column;
  5072. }
  5073. .factory-calendar .industrial-stat-board .month-telemetry-list {
  5074. grid-template-columns: repeat(2, minmax(180px, 1fr));
  5075. }
  5076. .factory-calendar .industrial-stat-board .month-telemetry-row {
  5077. min-height: 76px;
  5078. }
  5079. .factory-calendar .industrial-stat-board .conflict-analysis-body {
  5080. display: grid;
  5081. flex: 1;
  5082. grid-template-columns: 1fr;
  5083. grid-template-rows: auto minmax(168px, 1fr);
  5084. gap: 14px;
  5085. }
  5086. .factory-calendar .industrial-stat-board .conflict-total {
  5087. position: relative;
  5088. display: flex;
  5089. min-height: 74px;
  5090. align-items: center;
  5091. justify-content: space-between;
  5092. flex-direction: row;
  5093. padding: 14px 18px 14px 20px;
  5094. overflow: hidden;
  5095. border: 1px solid rgba(74, 162, 196, 0.24);
  5096. border-radius: 8px;
  5097. background:
  5098. linear-gradient(135deg, rgba(255, 255, 255, 0.95), rgba(231, 249, 252, 0.78)),
  5099. rgba(255, 255, 255, 0.82);
  5100. box-shadow:
  5101. inset 0 1px 0 rgba(255, 255, 255, 0.9),
  5102. 0 8px 18px rgba(45, 95, 123, 0.07);
  5103. }
  5104. .factory-calendar .industrial-stat-board .conflict-total::before {
  5105. content: '';
  5106. position: absolute;
  5107. left: 0;
  5108. top: 14px;
  5109. bottom: 14px;
  5110. width: 4px;
  5111. border-radius: 0 4px 4px 0;
  5112. background: linear-gradient(180deg, #2bc4b6, #308ee8);
  5113. }
  5114. .factory-calendar .industrial-stat-board .conflict-total.danger::before {
  5115. background: linear-gradient(180deg, #ff8f70, #f05d68);
  5116. }
  5117. .factory-calendar .industrial-stat-board .conflict-total span {
  5118. color: #607789;
  5119. font-size: 14px;
  5120. line-height: 22px;
  5121. font-weight: 600;
  5122. }
  5123. .factory-calendar .industrial-stat-board .conflict-total strong {
  5124. margin-left: auto;
  5125. color: #0b9f91;
  5126. font-size: 36px;
  5127. line-height: 42px;
  5128. }
  5129. .factory-calendar .industrial-stat-board .conflict-total.danger strong {
  5130. color: #df5a63;
  5131. }
  5132. .factory-calendar .industrial-stat-board .conflict-total em {
  5133. margin-left: 10px;
  5134. color: #6d8292;
  5135. font-size: 12px;
  5136. line-height: 18px;
  5137. font-style: normal;
  5138. }
  5139. .factory-calendar .industrial-stat-board .conflict-bars {
  5140. position: relative;
  5141. display: grid;
  5142. height: 100%;
  5143. min-height: 214px;
  5144. grid-template-columns: repeat(6, minmax(54px, 1fr));
  5145. gap: 12px;
  5146. align-items: end;
  5147. padding: 32px 18px 18px;
  5148. overflow: hidden;
  5149. border: 1px solid rgba(74, 162, 196, 0.22);
  5150. border-radius: 8px;
  5151. background:
  5152. linear-gradient(rgba(66, 151, 186, 0.11) 1px, transparent 1px),
  5153. linear-gradient(180deg, rgba(255, 255, 255, 0.9), rgba(237, 249, 251, 0.72));
  5154. background-size: 100% 34px, 100% 100%;
  5155. box-shadow:
  5156. inset 0 1px 0 rgba(255, 255, 255, 0.88),
  5157. 0 8px 18px rgba(45, 95, 123, 0.06);
  5158. }
  5159. .factory-calendar .industrial-stat-board .conflict-bar {
  5160. display: flex;
  5161. height: 158px;
  5162. min-width: 0;
  5163. align-items: center;
  5164. justify-content: flex-end;
  5165. flex-direction: column;
  5166. gap: 9px;
  5167. }
  5168. .factory-calendar .industrial-stat-board .conflict-bar span {
  5169. position: relative;
  5170. display: flex;
  5171. width: min(46px, 70%);
  5172. min-height: 8px;
  5173. max-width: 46px;
  5174. align-items: flex-start;
  5175. justify-content: center;
  5176. border: 1px solid rgba(255, 255, 255, 0.68);
  5177. border-radius: 6px 6px 3px 3px;
  5178. background:
  5179. linear-gradient(180deg, rgba(255, 255, 255, 0.36), transparent 45%),
  5180. linear-gradient(180deg, #ff9b8f, #f05d68);
  5181. box-shadow:
  5182. inset 0 1px 0 rgba(255, 255, 255, 0.44),
  5183. 0 7px 13px rgba(229, 87, 97, 0.2);
  5184. }
  5185. .factory-calendar .industrial-stat-board .conflict-bar.is-zero span {
  5186. background:
  5187. linear-gradient(180deg, rgba(255, 255, 255, 0.52), transparent 45%),
  5188. linear-gradient(180deg, #8fe2e0, #35b7c8);
  5189. box-shadow:
  5190. inset 0 1px 0 rgba(255, 255, 255, 0.5),
  5191. 0 6px 12px rgba(53, 183, 200, 0.16);
  5192. }
  5193. .factory-calendar .industrial-stat-board .conflict-bar b {
  5194. position: absolute;
  5195. top: -24px;
  5196. color: #d86363;
  5197. font-size: 13px;
  5198. line-height: 18px;
  5199. font-weight: 700;
  5200. }
  5201. .factory-calendar .industrial-stat-board .conflict-bar.is-zero b {
  5202. color: #22a6a2;
  5203. }
  5204. .factory-calendar .industrial-stat-board .conflict-bar em {
  5205. width: 64px;
  5206. overflow: visible;
  5207. color: #587284;
  5208. font-size: 12px;
  5209. line-height: 16px;
  5210. text-align: center;
  5211. text-overflow: clip;
  5212. white-space: nowrap;
  5213. font-style: normal;
  5214. }
  5215. @media (max-width: 1500px) {
  5216. .factory-calendar .industrial-stat-board .industrial-main-grid {
  5217. grid-template-columns: minmax(0, 1.12fr) minmax(350px, 0.88fr);
  5218. }
  5219. .factory-calendar .industrial-stat-board .industrial-kpi-strip {
  5220. grid-template-columns: repeat(2, minmax(0, 1fr));
  5221. }
  5222. }
  5223. @media (max-width: 1360px) {
  5224. .factory-calendar .industrial-stat-board .industrial-main-grid {
  5225. grid-template-columns: 1fr;
  5226. grid-template-areas:
  5227. 'schedule'
  5228. 'types'
  5229. 'month'
  5230. 'conflict';
  5231. }
  5232. .factory-calendar .industrial-stat-board .month-telemetry-list {
  5233. grid-template-columns: repeat(3, minmax(160px, 1fr));
  5234. }
  5235. }
  5236. @media (max-width: 900px) {
  5237. .factory-calendar .industrial-stat-board .industrial-kpi-strip,
  5238. .factory-calendar .industrial-stat-board .month-telemetry-list {
  5239. grid-template-columns: 1fr;
  5240. }
  5241. }
  5242. @keyframes factoryStatTipPulse {
  5243. 0% {
  5244. transform: translateY(0) scale(1);
  5245. }
  5246. 58% {
  5247. transform: translateY(-2px) scale(1.015);
  5248. }
  5249. 100% {
  5250. transform: translateY(-2px) scale(1);
  5251. }
  5252. }