styles.css 166 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056
  1. :root { font-family: Inter,'SF Pro Display','PingFang SC','Microsoft YaHei',sans-serif; color:#18233a; background:#f5f7fb; font-synthesis:none; --blue:#55b0f7; --blue-action:#0875bd; --blue-dark:#075f9b; --blue-ink:#075078; --primary:var(--blue-action); --ink:#17213a; --muted:#78839a; --line:#e4e8f0; --paper:#fff; --button-radius:6px; --button-height:44px; --button-small-height:34px; --button-shadow:none; }
  2. * { box-sizing:border-box; }
  3. body { margin:0; min-width:320px; min-height:100vh; background:radial-gradient(circle at 85% 6%,rgba(85,176,247,.06),transparent 24%),#f5f7fb; }
  4. button,input,textarea,select { font:inherit; }
  5. button,a { -webkit-tap-highlight-color:transparent; }
  6. a { color:inherit; text-decoration:none; }
  7. button { cursor:pointer; }
  8. .app-shell { min-height:100vh; display:flex; flex-direction:column; }
  9. .app-main { flex:1; }
  10. .topbar { height:72px; padding:0 clamp(24px,5vw,76px); display:flex; align-items:center; border-bottom:1px solid rgba(220,225,235,.8); background:rgba(248,249,252,.82); backdrop-filter:blur(14px); position:sticky; top:0; z-index:20; }
  11. .logo-link { display:flex; }
  12. .brand { display:inline-flex; align-items:center; gap:11px; text-decoration:none; user-select:none; }
  13. .brand-mark { width:38px; height:24px; display:inline-flex; align-items:center; justify-content:center; flex-shrink:0; transition:transform .3s cubic-bezier(0.2,0.8,0.2,1); }
  14. .brand-mark-svg { width:100%; height:100%; overflow:visible; display:block; }
  15. .brand:hover .brand-mark { transform:translateY(-1px) scale(1.04); }
  16. .brand-text { display:inline-flex; align-items:baseline; gap:8px; }
  17. .brand strong, .brand-title { font-family:"Songti SC","Noto Serif SC","Source Han Serif CN","STSong","STKaiti","PingFang SC",serif; font-size:21px; font-weight:600; letter-spacing:.2em; color:#121826; line-height:1; transition:color .2s ease; }
  18. .brand small, .brand-sub { font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif; font-size:9px; font-weight:500; letter-spacing:.28em; color:#8c97aa; line-height:1; text-transform:uppercase; }
  19. .brand--compact .brand-mark { width:32px; height:20px; }
  20. .brand--compact strong, .brand--compact .brand-title { font-size:18px; letter-spacing:.16em; }
  21. .topbar nav { display:flex; height:100%; gap:34px; align-items:center; margin-left:60px; color:#9aa3b3; font-size:14px; }
  22. .topbar nav a { color:#5b6880; font-weight:500; height:100%; display:flex; align-items:center; position:relative; }
  23. .topbar nav a.active { color:var(--blue-action); font-weight:600; }
  24. .topbar nav a.active:after { content:''; position:absolute; bottom:0; left:3px; right:3px; height:2px; background:var(--blue); }
  25. .admin-nav-link { color:var(--blue-action)!important; display:inline-flex; align-items:center; gap:6px; font-weight:600!important; }
  26. .admin-tag { background:var(--blue); color:var(--blue-ink); font-size:10px; padding:2px 6px; border-radius:4px; margin-left:4px; font-weight:500; }
  27. .nav-muted { cursor:default; }
  28. .top-actions { margin-left:auto; display:flex; align-items:center; gap:13px; }
  29. .icon-button { border:0; background:transparent; color:#8d96a7; padding:7px; display:grid; place-items:center; border-radius:6px; }
  30. .icon-button:hover { color:#18233a; background:rgba(0,0,0,.04); }
  31. .beta { display:flex; align-items:center; gap:6px; font-size:11px; color:#0875bd; border:1px solid #dbe4f7; background:#f0f4fd; border-radius:999px; padding:6px 10px; letter-spacing:.06em; }
  32. .page { width:min(1400px,100%); margin:0 auto; padding:0 clamp(24px,5vw,76px) 70px; }
  33. .hero { min-height:414px; display:flex; align-items:center; position:relative; overflow:hidden; border-bottom:1px solid var(--line); }
  34. .hero-copy { position:relative; z-index:2; padding-top:12px; }
  35. .eyebrow { font-size:11px!important; font-weight:600; letter-spacing:.18em; color:#0875bd!important; text-transform:uppercase; display:flex; align-items:center; gap:8px; margin:0 0 20px!important; }
  36. .hero h1 { color:#19233a; font-size:clamp(39px,4.3vw,64px); line-height:1.18; letter-spacing:-.045em; margin:0; font-weight:300; }
  37. .hero h1 em { font-style:normal; color:var(--blue); }
  38. .hero-copy>p:not(.eyebrow) { color:#7b8699; font-size:15px; margin:24px 0 30px; letter-spacing:.02em; }
  39. .primary-button,.secondary-button { border:0; border-radius:var(--button-radius); min-height:var(--button-height); padding:0 19px; display:inline-flex; align-items:center; justify-content:center; gap:9px; font-weight:500; font-size:14px; line-height:1; transition:background-color .16s ease,border-color .16s ease,color .16s ease; }
  40. .primary-button { background:var(--blue-action); color:#fff; box-shadow:none; }
  41. .primary-button:hover:not(:disabled) { background:var(--blue-dark); color:#fff; }
  42. .primary-button:active:not(:disabled) { background:#054e82; }
  43. .primary-button:disabled,.secondary-button:disabled { opacity:.48; cursor:not-allowed; box-shadow:none; }
  44. .secondary-button { border:1px solid #dce2ed; color:#536077; background:#fff; }
  45. .secondary-button:hover:not(:disabled) { border-color:#b8c8d6; background:#f4f8fb; color:#35435b; }
  46. .secondary-button:active:not(:disabled) { background:#eaf2f8; }
  47. .small-button { min-height:var(--button-small-height); padding:0 12px; font-size:12px; }
  48. .highlight-button { background:var(--blue-action); color:#fff; box-shadow:none; }
  49. .highlight-button:hover:not(:disabled) { background:var(--blue-dark); color:#fff; }
  50. .orbit { position:absolute; border:1px solid rgba(72,91,125,.18); border-color:rgba(72,91,125,.22) transparent transparent transparent; border-radius:50%; transform:rotate(-12deg); }
  51. .orbit-one { width:570px; height:280px; right:1%; top:99px; }
  52. .orbit-two { width:440px; height:210px; right:6%; top:135px; border-color:rgba(85,176,247,.14) transparent transparent transparent; }
  53. .star-dot { position:absolute; border-radius:50%; width:8px; height:8px; background:#c4a05b; right:8.4%; top:192px; box-shadow:-380px 50px 0 -2px #55b0f7; }
  54. .hero-note { position:absolute; right:4%; top:165px; width:340px; z-index:2; }
  55. .hero-note span { display:block; letter-spacing:.36em; color:#aab1bf; font-size:10px; margin-bottom:18px; }
  56. .hero-note p { margin:0; color:#556176; font-weight:300; font-size:17px; line-height:1.8; max-width:260px; }
  57. .content-section { padding-top:43px; }
  58. .section-heading { display:flex; align-items:end; justify-content:space-between; margin-bottom:23px; }
  59. .section-kicker { color:#a0aabc; letter-spacing:.22em; font-size:9px; font-weight:600; }
  60. .section-heading h2 { margin:6px 0 0; font-size:24px; font-weight:500; }
  61. .metrics { display:flex; gap:20px; color:#8b96aa; font-size:12px; }
  62. .metrics span { display:flex; align-items:center; gap:7px; }
  63. .course-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px; }
  64. .course-card { min-height:158px; border:1px solid #e5e9f1; background:rgba(255,255,255,.82); border-radius:12px; display:flex; padding:22px; position:relative; transition:.2s; overflow:hidden; }
  65. .course-card:hover { border-color:#cbd7ee; box-shadow:0 12px 40px rgba(24,48,91,.07); transform:translateY(-2px); }
  66. .course-number { width:70px; min-width:70px; flex-shrink:0; height:100%; min-height:110px; display:grid; place-items:center; border-radius:8px; color:#0875bd; font-size:18px; font-weight:600; background:linear-gradient(145deg,#eaf7ff,#f7f9fd); margin-right:20px; position:relative; overflow:hidden; }
  67. .course-number:after { content:''; position:absolute; width:80px; height:36px; border:1px solid rgba(44,95,200,.2); border-radius:50%; top:50%; left:50%; transform:translate(-50%,-50%) rotate(-15deg); pointer-events:none; }
  68. .tone-0 { color:#0875bd; background:linear-gradient(145deg,#eaf7ff,#f7f9fd); }
  69. .tone-1 { color:#6885a9; background:#f1f4f7; }
  70. .tone-1:after { border-color:rgba(104,133,169,.22); }
  71. .tone-2 { color:#b09052; background:#f8f5ed; }
  72. .tone-2:after { border-color:rgba(176,144,82,.25); }
  73. .course-card-main { flex:1; min-width:0; padding-top:1px; padding-right:28px; }
  74. .course-card h3 { margin:11px 0 6px; font-size:17px; font-weight:500; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  75. .course-card-main>p { font-size:12px; color:#8c96a8; margin:0 0 17px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  76. .course-meta { display:flex; gap:8px; flex-wrap:wrap; }
  77. .course-meta span { font-size:10px; color:#7d899c; background:#f4f6f9; padding:5px 8px; border-radius:4px; }
  78. .card-arrow { position:absolute; right:20px; top:24px; color:#b6bfce; }
  79. /* 状态徽章体系 */
  80. .status { display:inline-flex; align-items:center; gap:6px; font-size:11px; font-weight:500; letter-spacing:.02em; padding:3px 9px; border-radius:20px; }
  81. .status i { width:6px; height:6px; border-radius:50%; }
  82. .status--draft { color:#627289; background:#f1f4f8; }
  83. .status--draft i { background:#8e9cb0; }
  84. .status--waiting_production { color:#b45309; background:#fef3c7; }
  85. .status--waiting_production i { background:#f59e0b; box-shadow:0 0 0 3px rgba(245,158,11,.2); }
  86. .status--in_production { color:#0875bd; background:#d3edff; }
  87. .status--in_production i { background:#1684ce; box-shadow:0 0 0 3px rgba(85,176,247,.2); }
  88. .status--completed { color:#15803d; background:#dcfce7; }
  89. .status--completed i { background:#22c55e; box-shadow:0 0 0 3px rgba(34,197,94,.2); }
  90. .status--rejected { color:#b91c1c; background:#fee2e2; }
  91. .status--rejected i { background:#ef4444; }
  92. .empty-state { background:rgba(255,255,255,.58); border:1px dashed #d9dfe9; min-height:260px; border-radius:12px; display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center; padding:30px; }
  93. .empty-state h3 { margin:13px 0 5px; font-size:17px; font-weight:500; }
  94. .empty-state p { color:#939cad; font-size:13px; margin:0 0 15px; }
  95. .empty-state a:not([class*="button"]) { color:var(--blue); font-size:13px; display:flex; align-items:center; gap:5px; }
  96. .empty-state .primary-button { color:#fff; }
  97. .compact-empty { min-height:160px; padding:20px; }
  98. .empty-orbit { width:58px; height:33px; border:1px solid #aab4c4; border-color:#aab4c4 transparent transparent transparent; border-radius:50%; position:relative; transform:rotate(-9deg); }
  99. .empty-orbit i { position:absolute; width:6px; height:6px; background:#c4a05b; border-radius:50%; top:8px; left:-1px; }
  100. .skeleton-card { height:158px; border-radius:12px; background:linear-gradient(90deg,#eceff4,#f7f8fa,#eceff4); background-size:200% 100%; animation:shimmer 1.3s infinite; }
  101. .form-page,.workspace-page { padding-top:32px; }
  102. .back-link { color:#8c96a7; display:inline-flex; align-items:center; gap:7px; font-size:12px; margin-bottom:35px; }
  103. .back-link:hover { color:var(--blue); }
  104. .form-layout { display:grid; grid-template-columns:minmax(260px,360px) minmax(500px,700px); gap:clamp(40px,8vw,115px); align-items:start; justify-content:center; }
  105. .form-layout aside { padding-top:24px; }
  106. .step-number { color:#c2cada; font-size:11px; letter-spacing:.18em; border-bottom:1px solid #bdc7d9; padding-bottom:6px; }
  107. .form-layout aside .eyebrow { margin-top:44px!important; }
  108. .form-layout aside h1 { font-size:36px; font-weight:300; line-height:1.45; margin:0; letter-spacing:-.035em; }
  109. .form-layout aside>p:last-child { color:#8b96a9; font-size:13px; line-height:1.8; margin-top:25px; max-width:280px; }
  110. .paper-form { background:#fff; padding:38px 42px; border:1px solid #e5e9f0; border-radius:13px; box-shadow:0 20px 60px rgba(40,57,90,.06); }
  111. .form-title { padding-bottom:25px; border-bottom:1px solid #edf0f4; margin-bottom:27px; }
  112. .form-title span { font-size:9px; color:#a3adbd; letter-spacing:.2em; }
  113. .form-title h2 { font-size:21px; margin:7px 0 0; font-weight:500; }
  114. .form-title h3 { font-size:19px; margin:6px 0 0; font-weight:500; }
  115. .form-title h4 { font-size:16px; margin:4px 0 0; font-weight:500; }
  116. .paper-form label { display:flex; flex-direction:column; gap:9px; font-size:12px; color:#59657b; margin:0 0 22px; }
  117. .paper-form label span { display:inline-flex; align-items:center; gap:3px; }
  118. .paper-form label b { color:#d86f67; font-weight:600; }
  119. .paper-form input,.paper-form select,.paper-form textarea { border:1px solid #dfe4ec; border-radius:7px; color:#253149; background:#fbfcfe; padding:12px 13px; outline:none; width:100%; transition:.2s; }
  120. .paper-form textarea { resize:vertical; line-height:1.6; }
  121. .paper-form input:focus,.paper-form select:focus,.paper-form textarea:focus { border-color:#8dcfff; box-shadow:0 0 0 3px rgba(85,176,247,.08); background:#fff; }
  122. .two-columns { display:grid; grid-template-columns:1fr 1fr; gap:15px; }
  123. .form-footer { border-top:1px solid #edf0f4; padding-top:22px; display:flex; justify-content:space-between; align-items:center; }
  124. .form-footer>span { font-size:11px; color:#a1aaba; }
  125. .form-error { color:#bc4e47; background:#fff4f3; padding:9px 12px; border-radius:6px; font-size:12px; }
  126. .workspace-head { display:flex; justify-content:space-between; align-items:end; border-bottom:1px solid var(--line); padding-bottom:28px; }
  127. .workspace-head .back-link { margin-bottom:22px; }
  128. .title-row { display:flex; align-items:center; gap:15px; flex-wrap:wrap; }
  129. .title-row h1 { margin:0; font-size:27px; font-weight:500; }
  130. .title-row h2 { margin:0; font-size:23px; font-weight:500; }
  131. .edit-course-info-btn { display:inline-flex; align-items:center; gap:6px; border:1px solid var(--line); background:#fff; color:#667085; border-radius:7px; padding:7px 10px; font-size:12px; cursor:pointer; transition:.2s; }
  132. .edit-course-info-btn:hover { color:var(--primary); border-color:var(--primary); background:#f8faff; }
  133. .workspace-head>div>p { color:#929cad; font-size:12px; margin:8px 0 0; }
  134. .modal-dialog.edit-course-modal {
  135. width: min(620px, 95vw);
  136. max-height: 90vh;
  137. background: #ffffff;
  138. border: 1px solid #e2e8f0;
  139. border-radius: 16px;
  140. box-shadow: 0 25px 60px rgba(0, 0, 0, 0.22);
  141. display: flex;
  142. flex-direction: column;
  143. overflow: hidden;
  144. }
  145. .edit-course-modal-body {
  146. padding: 22px 24px;
  147. overflow-y: auto;
  148. display: flex;
  149. flex: 1;
  150. flex-direction: column;
  151. gap: 18px;
  152. }
  153. .edit-course-modal-body .form-label {
  154. display: flex;
  155. flex-direction: column;
  156. gap: 8px;
  157. color: #334155;
  158. font-size: 13px;
  159. font-weight: 500;
  160. }
  161. .edit-course-modal-body .form-label.required > span::after {
  162. content: " *";
  163. color: #ef4444;
  164. }
  165. .edit-course-modal-body input,
  166. .edit-course-modal-body select,
  167. .edit-course-modal-body textarea {
  168. width: 100%;
  169. box-sizing: border-box;
  170. border: 1px solid #cbd5e1;
  171. border-radius: 8px;
  172. background: #f8fafc;
  173. padding: 10px 14px;
  174. color: #0f172a;
  175. font: inherit;
  176. font-size: 14px;
  177. transition: all .15s ease;
  178. }
  179. .edit-course-modal-body select {
  180. min-height: 42px;
  181. cursor: pointer;
  182. }
  183. .edit-course-modal-body textarea {
  184. min-height: 150px;
  185. resize: vertical;
  186. line-height: 1.55;
  187. }
  188. .edit-course-modal-body input:focus,
  189. .edit-course-modal-body select:focus,
  190. .edit-course-modal-body textarea:focus {
  191. outline: none;
  192. border-color: #55b0f7;
  193. background: #ffffff;
  194. box-shadow: 0 0 0 3px rgba(85, 176, 247, .12);
  195. }
  196. .edit-course-field-heading {
  197. display: flex;
  198. align-items: center;
  199. justify-content: space-between;
  200. gap: 12px;
  201. }
  202. .edit-course-modal-body .field-count {
  203. color: #98a2b3;
  204. font-size: 11px;
  205. font-weight: 400;
  206. }
  207. @media (max-width: 540px) {
  208. .edit-course-modal-body { padding: 18px; }
  209. .modal-dialog.edit-course-modal .modal-header,
  210. .modal-dialog.edit-course-modal .modal-footer { padding-left: 18px; padding-right: 18px; }
  211. }
  212. .waiting-edit-notice { margin:32px 0 18px; padding:14px 16px; border:1px solid #b8e2ff; background:#f1faff; border-radius:10px; display:flex; align-items:center; justify-content:space-between; gap:16px; color:#315b91; font-size:13px; }
  213. .waiting-edit-notice>div { display:flex; align-items:center; gap:9px; }
  214. .waiting-edit-notice .secondary-button { flex-shrink:0; }
  215. .cancel-waiting-button { border:0; background:transparent; color:#98a2b3; padding:8px 10px; font-size:12px; cursor:pointer; }
  216. .cancel-waiting-button:hover:not(:disabled) { color:#b42318; text-decoration:underline; }
  217. .cancel-waiting-button:disabled { cursor:not-allowed; opacity:.6; }
  218. @media (max-width: 640px) { .waiting-edit-notice { align-items:flex-start; flex-direction:column; } }
  219. .success-panel { margin:55px auto 0; max-width:720px; text-align:center; background:#fff; border:1px solid #e4e9f1; border-radius:14px; padding:50px 55px; box-shadow:0 22px 70px rgba(35,53,88,.06); }
  220. .success-panel .eyebrow { justify-content:center; margin-top:18px!important; margin-bottom:11px!important; }
  221. .success-panel h2 { font-size:28px; font-weight:400; margin:0 0 13px; }
  222. .success-panel>p:not(.eyebrow) { color:#8a95a7; font-size:13px; line-height:1.8; margin:0 auto; max-width:510px; }
  223. .completed-panel { border-color:#c8e6c9; background:linear-gradient(180deg,#fff 60%,#f5fbf7); }
  224. .producing-panel { border-color:#a7dcff; background:linear-gradient(180deg,#fff 60%,#f1faff); }
  225. .producing-orbit-icon { color:#55b0f7; margin-bottom:12px; }
  226. .success-badge-icon { color:#2e7d32; margin-bottom:12px; }
  227. .production-notes-box { background:#f4f9f4; border:1px solid #d4ecd7; border-radius:10px; padding:18px 22px; margin:24px 0; text-align:left; }
  228. .production-notes-box strong { font-size:13px; color:#276749; display:block; margin-bottom:8px; }
  229. .production-notes-box p { margin:0; font-size:13px; color:#2d3748; line-height:1.7; white-space:pre-line; }
  230. .deliverables-box { margin:24px 0; border:1px solid #e2e8f0; border-radius:10px; padding:20px; background:#fff; text-align:left; }
  231. .deliverables-box .box-header { display:flex; align-items:center; gap:8px; margin-bottom:15px; color:#0875bd; }
  232. .deliverables-box .box-header h4 { margin:0; font-size:15px; font-weight:600; }
  233. .deliverable-list { display:flex; flex-direction:column; gap:10px; }
  234. .deliverable-row { display:flex; align-items:center; gap:12px; background:#f8fafc; border:1px solid #e2e8f0; border-radius:8px; padding:12px 16px; }
  235. .deliv-info { flex:1; min-width:0; }
  236. .deliv-info strong { display:block; font-size:13px; color:#2d3748; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  237. .deliv-info span { font-size:11px; color:#718096; }
  238. .receipt { display:grid; grid-template-columns:1fr 1fr 1fr; background:#f7f9fc; border:1px solid #edf0f5; border-radius:9px; margin:30px 0 25px; text-align:left; }
  239. .receipt span { display:flex; flex-direction:column; gap:7px; padding:17px; min-width:0; border-right:1px solid #e6eaf1; }
  240. .receipt span:last-child { border:0; }
  241. .receipt small { color:#9ca6b5; font-size:9px; }
  242. .receipt strong { color:#536076; font-size:11px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  243. .center-loading { min-height:60vh; display:grid; place-items:center; color:#8793a8; }
  244. .spin { animation:spin .8s linear infinite; }
  245. @keyframes spin { to { transform:rotate(360deg); } }
  246. @keyframes shimmer { to { background-position:-200% 0; } }
  247. .user-link { display:flex; align-items:center; gap:7px; color:#66738a; font-size:12px; padding:7px 10px; border-radius:7px; }
  248. .auth-page { min-height:100vh; display:grid; grid-template-columns:1.1fr .9fr; }
  249. .auth-brand { padding:64px clamp(40px,8vw,120px); display:flex; flex-direction:column; justify-content:space-between; background:radial-gradient(circle at 20% 70%,rgba(85,176,247,.12),transparent 38%),#eef3fc; }
  250. .auth-brand h1 { font-size:clamp(40px,5vw,67px); font-weight:300; line-height:1.2; }
  251. .auth-brand h1 em { font-style:normal; color:var(--blue); }
  252. .auth-card { align-self:center; width:min(430px,calc(100% - 48px)); margin:auto; background:#fff; border:1px solid var(--line); border-radius:14px; padding:42px; }
  253. .auth-card label,.instructor-form label { display:flex; flex-direction:column; gap:8px; font-size:12px; color:#59657b; margin:18px 0; }
  254. .input-with-icon { position:relative; }
  255. .input-with-icon svg { position:absolute; left:13px; top:13px; width:17px; color:#a1abbc; }
  256. .auth-card input,.instructor-form input,.instructor-form textarea { width:100%; border:1px solid #dfe4ec; border-radius:7px; padding:12px 13px; background:#fbfcfe; }
  257. .input-with-icon input { padding-left:41px; }
  258. .auth-switch { display:block; margin:18px auto 0; border:0; background:transparent; color:var(--blue); }
  259. .profile-page { max-width:1180px; padding-top:34px; }
  260. .profile-settings { display:grid; grid-template-columns:270px minmax(0,1fr); gap:24px; align-items:start; margin-top:20px; }
  261. .profile-sidebar { position:sticky; top:96px; overflow:hidden; border:1px solid #e1e6ef; border-radius:14px; background:rgba(255,255,255,.78); box-shadow:0 14px 40px rgba(35,50,80,.05); backdrop-filter:blur(14px); }
  262. .profile-sidebar-heading { display:flex; align-items:center; gap:12px; padding:20px; border-bottom:1px solid #e8ecf2; }
  263. .profile-sidebar-heading>div:last-child { min-width:0; display:flex; flex-direction:column; gap:4px; }
  264. .profile-sidebar-heading strong { overflow:hidden; font-size:14px; text-overflow:ellipsis; white-space:nowrap; }
  265. .profile-sidebar-heading span { color:#929baa; font-size:11px; }
  266. .profile-avatar { width:40px; height:40px; flex:none; display:grid; place-items:center; border-radius:10px; color:#55b0f7; background:#eaf7ff; }
  267. .profile-sidebar nav { display:flex; flex-direction:column; gap:4px; padding:8px; }
  268. .profile-sidebar nav button { width:100%; display:grid; grid-template-columns:20px minmax(0,1fr) 15px; gap:11px; align-items:center; padding:12px; border:0; border-radius:9px; color:#69758a; background:transparent; text-align:left; }
  269. .profile-sidebar nav button>span { display:flex; flex-direction:column; gap:3px; }
  270. .profile-sidebar nav button strong { color:#354157; font-size:13px; font-weight:600; }
  271. .profile-sidebar nav button small { color:#9aa3b2; font-size:10px; }
  272. .profile-sidebar nav button>svg:last-child { opacity:.55; }
  273. .profile-sidebar nav button:hover { background:#f3f6fb; }
  274. .profile-sidebar nav button.active { color:#55b0f7; background:#eaf7ff; box-shadow:inset 0 0 0 1px rgba(85,176,247,.08); }
  275. .profile-sidebar nav button.active strong { color:#184ebc; }
  276. .profile-content { min-width:0; }
  277. .profile-panel { min-height:560px; }
  278. .profile-panel .form-title p { margin:7px 0 0; color:#929bad; font-size:12px; }
  279. .profile-field-item { display:flex; flex-direction:column; gap:9px; margin:0 0 22px; }
  280. .profile-field-label { font-size:12px; color:#59657b; font-weight:500; }
  281. .profile-org-list { display:flex; flex-direction:column; gap:10px; }
  282. .profile-org-card { display:flex; align-items:center; justify-content:space-between; padding:12px 16px; background:#fbfcfe; border:1px solid #dfe4ec; border-radius:9px; transition:border-color .2s; }
  283. .profile-org-main { display:flex; align-items:center; gap:12px; }
  284. .profile-org-icon-box { width:32px; height:32px; border-radius:8px; background:#eaf7ff; color:#0284c7; display:grid; place-items:center; flex-shrink:0; }
  285. .profile-org-meta { display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
  286. .profile-org-name { font-size:14px; font-weight:600; color:#1e293b; }
  287. .profile-org-badge { display:inline-flex; align-items:center; padding:2px 8px; border-radius:6px; font-size:11px; font-weight:500; }
  288. .profile-org-badge.badge-manager { background:#e0f2fe; color:#0369a1; border:1px solid #bae6fd; }
  289. .profile-org-badge.badge-member { background:#f1f5f9; color:#475569; border:1px solid #e2e8f0; }
  290. .profile-org-badge.badge-inactive { background:#fef2f2; color:#b91c1c; border:1px solid #fecaca; }
  291. .profile-org-action { font-size:12px; color:#0284c7; text-decoration:none; font-weight:500; padding:4px 10px; border-radius:6px; background:#fff; border:1px solid #bae6fd; transition:all .2s; }
  292. .profile-org-action:hover { background:#f0f9ff; border-color:#7dd3fc; }
  293. .profile-org-empty-card { display:flex; align-items:center; gap:10px; padding:12px 16px; background:#f8fafc; border:1px dashed #cbd5e1; border-radius:9px; color:#94a3b8; font-size:13px; }
  294. .points-form-title { display:flex; justify-content:space-between; align-items:flex-end; gap:16px; }
  295. .points-form-title h2 { margin:0; }
  296. .points-heading-wrap { display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
  297. .points-org-pill { display:inline-flex; align-items:center; gap:4px; padding:3px 8px; border-radius:6px; background:#eaf7ff; border:1px solid #a7dcff; color:#0875bd; font-size:11px; font-weight:500; line-height:1.2; }
  298. .profile-security { max-width:650px; }
  299. .points-wallet { display:flex; align-items:center; gap:16px; margin:25px 0 31px; padding:22px 24px; border:1px solid #f0dfcc; border-radius:12px; background:linear-gradient(135deg,#fff8ef,#fffdf9); }
  300. .points-wallet-icon { width:48px; height:48px; display:grid; place-items:center; flex:none; border-radius:13px; color:#c76520; background:#ffead4; }
  301. .points-wallet>div:last-child { display:flex; align-items:baseline; gap:7px; flex-wrap:wrap; }
  302. .points-wallet span { width:100%; color:#8d755f; font-size:11px; }
  303. .points-wallet strong { color:#b95519; font-size:30px; line-height:1; }
  304. .points-wallet small { color:#a97c5c; font-size:12px; }
  305. .points-history-heading { display:flex; align-items:center; justify-content:space-between; padding-bottom:12px; border-bottom:1px solid #e9edf3; }
  306. .points-history-heading h3 { margin:0; font-size:14px; }
  307. .points-history-heading span { color:#929baa; font-size:11px; }
  308. .points-transaction-list { display:flex; flex-direction:column; }
  309. .points-transaction { display:grid; grid-template-columns:38px minmax(0,1fr) auto; gap:13px; align-items:center; padding:16px 4px; border-bottom:1px solid #edf0f4; transition:.2s; }
  310. .points-transaction:hover { padding-left:9px; padding-right:9px; background:#f9fafc; }
  311. .transaction-icon { width:36px; height:36px; display:grid; place-items:center; border-radius:10px; color:#ba5e24; background:#fff0e4; }
  312. .transaction-main,.transaction-value { display:flex; flex-direction:column; gap:5px; }
  313. .transaction-main { min-width:0; }
  314. .transaction-main strong { overflow:hidden; color:#303b4e; font-size:13px; text-overflow:ellipsis; white-space:nowrap; }
  315. .transaction-main span,.transaction-value time { color:#9aa3b1; font-size:10px; }
  316. .transaction-value { align-items:flex-end; text-align:right; }
  317. .transaction-value strong { color:#d2542e; font-size:14px; }
  318. .points-empty { min-height:240px; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:9px; color:#a0a9b7; font-size:12px; text-align:center; }
  319. .points-empty strong { color:#69758a; font-size:13px; }
  320. .points-empty span { color:#a0a9b7; font-size:11px; }
  321. @media (max-width:760px) {
  322. .profile-page { padding-top:22px; }
  323. .profile-settings { grid-template-columns:1fr; }
  324. .profile-sidebar { position:static; }
  325. .profile-sidebar-heading { display:none; }
  326. .profile-sidebar nav { flex-direction:row; overflow-x:auto; }
  327. .profile-sidebar nav button { min-width:max-content; grid-template-columns:18px auto; padding:10px 12px; }
  328. .profile-sidebar nav button small,.profile-sidebar nav button>svg:last-child { display:none; }
  329. .profile-panel { min-height:0; }
  330. .points-transaction { grid-template-columns:36px minmax(0,1fr); }
  331. .transaction-value { grid-column:2; align-items:flex-start; flex-direction:row; justify-content:space-between; }
  332. }
  333. .notice { padding:12px 16px; border-radius:8px; margin:14px 0; font-size:13px; }
  334. .notice-error { color:#ad504a; background:#fff1f0; border:1px solid #f3d9d7; }
  335. .notice-success { color:#2e7d32; background:#e8f5e9; border:1px solid #c8e6c9; }
  336. .asset-layout { display:grid; grid-template-columns:minmax(0,1fr) 390px; gap:22px; margin:31px auto 0; max-width:1160px; }
  337. .upload-panel { background:#fff; border:1px solid #e5e9f0; border-radius:12px; padding:32px 35px; }
  338. .instructor-panel { background:#fff; border:1px solid #e5e9f0; border-radius:12px; padding:28px; align-self:start; }
  339. .panel-heading { display:flex; gap:22px; margin-bottom:27px; }
  340. .panel-heading .step-number { height:25px; }
  341. .panel-heading .eyebrow { margin-bottom:9px!important; }
  342. .panel-heading h2 { margin:0; font-size:22px; font-weight:500; }
  343. .panel-heading>div>p:last-child { color:#8e98aa; font-size:12px; margin:8px 0 0; }
  344. .drop-zone { min-height:255px; display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center; border:1px dashed #cbd5e5; border-radius:10px; background:#fafcff; cursor:pointer; transition:.2s; }
  345. .drop-zone:hover,.drop-zone.dragging { border-color:#8dcfff; background:#f5f8ff; }
  346. .compact { min-height:140px; }
  347. .drop-zone h3 { font-size:15px; font-weight:500; margin:3px 0 6px; }
  348. .drop-zone small { font-size:10px; color:#adb5c3; }
  349. .asset-list { display:flex; flex-direction:column; gap:9px; margin-bottom:14px; }
  350. .asset-row { display:flex; align-items:center; gap:12px; border:1px solid #e3e8f0; border-radius:8px; padding:12px; background:#fafbfc; }
  351. .asset-row div { display:flex; flex-direction:column; min-width:0; }
  352. .asset-row span { font-size:10px; color:#9aa5b7; }
  353. .asset-row button,.instructor-card>button { margin-left:auto; border:0; background:transparent; color:#a4adbb; cursor:pointer; }
  354. .asset-row button:hover,.instructor-card>button:hover { color:#e53e3e; }
  355. .aside-title { display:flex; justify-content:space-between; align-items:center; }
  356. .aside-title button { height:34px; border:1px solid #dce3ed; background:#fff; border-radius:6px; display:flex; align-items:center; gap:6px; padding:0 12px; font-size:12px; }
  357. .instructor-form { padding:18px; background:#f8fafd; border-radius:9px; margin-top:14px; border:1px solid #e2e8f0; }
  358. .instructor-list { margin-top:14px; }
  359. .instructor-card { display:flex; gap:11px; padding:13px 0; border-bottom:1px solid #edf0f4; align-items:start; }
  360. .instructor-card img,.avatar,.avatar-placeholder { width:54px; height:65px; object-fit:cover; border-radius:7px; background:#e9effa; display:grid; place-items:center; flex:none; font-weight:600; color:#4a5568; }
  361. .instructor-photo-stack,.admin-instructor-photos { display:flex; flex-wrap:wrap; gap:5px; flex:none; }
  362. .instructor-photo-stack { width:113px; }
  363. .instructor-photo-stack img { margin:0; }
  364. .admin-instructor-photos { max-width:117px; }
  365. .instructor-card>div { display:flex; flex-direction:column; gap:4px; min-width:0; }
  366. .instructor-card small,.instructor-card p,.empty-tip,.submit-box p { font-size:11px; color:#8d98aa; }
  367. .instructor-card p { margin:3px 0; line-height:1.5; color:#4a5568; }
  368. /* 数字讲师卡片升级样式 */
  369. .instructor-photo-thumb-btn {
  370. position: relative;
  371. display: block;
  372. padding: 0;
  373. border: 0;
  374. background: transparent;
  375. cursor: pointer;
  376. border-radius: 7px;
  377. overflow: hidden;
  378. line-height: 0;
  379. transition: transform 0.18s ease, box-shadow 0.18s ease;
  380. }
  381. .instructor-photo-thumb-btn:hover {
  382. transform: translateY(-2px);
  383. box-shadow: 0 4px 12px rgba(15, 23, 42, 0.16);
  384. }
  385. .instructor-photo-thumb-btn .photo-zoom-hint {
  386. position: absolute;
  387. right: 3px;
  388. bottom: 3px;
  389. width: 20px;
  390. height: 20px;
  391. border-radius: 4px;
  392. background: rgba(15, 23, 42, 0.65);
  393. backdrop-filter: blur(2px);
  394. color: #fff;
  395. display: flex;
  396. align-items: center;
  397. justify-content: center;
  398. opacity: 0;
  399. transform: scale(0.85);
  400. transition: all 0.15s ease;
  401. pointer-events: none;
  402. }
  403. .instructor-photo-thumb-btn:hover .photo-zoom-hint {
  404. opacity: 1;
  405. transform: scale(1);
  406. }
  407. .instructor-card-info {
  408. display: flex;
  409. flex-direction: column;
  410. gap: 4px;
  411. min-width: 0;
  412. flex: 1;
  413. justify-content: center;
  414. }
  415. .instructor-name-row {
  416. display: flex;
  417. align-items: center;
  418. gap: 8px;
  419. flex-wrap: wrap;
  420. }
  421. .instructor-name {
  422. font-size: 15px;
  423. font-weight: 600;
  424. color: #172033;
  425. }
  426. .instructor-voice-btn {
  427. display: inline-flex;
  428. align-items: center;
  429. gap: 4px;
  430. height: 24px;
  431. padding: 0 8px;
  432. border-radius: 12px;
  433. border: 1px solid #d0e2ff;
  434. background: #f0f6ff;
  435. color: #0066cc;
  436. font-size: 11px;
  437. font-weight: 500;
  438. cursor: pointer;
  439. transition: all 0.2s ease;
  440. flex-shrink: 0;
  441. }
  442. .instructor-voice-btn:hover {
  443. background: #e0edff;
  444. border-color: #b3d1ff;
  445. color: #0052a3;
  446. transform: translateY(-1px);
  447. }
  448. .instructor-voice-btn:disabled {
  449. opacity: 0.6;
  450. cursor: not-allowed;
  451. }
  452. .instructor-voice-btn.playing {
  453. background: #0066cc;
  454. border-color: #0066cc;
  455. color: #ffffff;
  456. box-shadow: 0 2px 8px rgba(0, 102, 204, 0.3);
  457. animation: pulse-voice 1.8s infinite;
  458. }
  459. .voice-icon-active {
  460. animation: bounce-voice 1s infinite alternate ease-in-out;
  461. }
  462. @keyframes bounce-voice {
  463. 0% { transform: scale(0.92); }
  464. 100% { transform: scale(1.12); }
  465. }
  466. @keyframes pulse-voice {
  467. 0% { box-shadow: 0 0 0 0 rgba(0, 102, 204, 0.4); }
  468. 70% { box-shadow: 0 0 0 6px rgba(0, 102, 204, 0); }
  469. 100% { box-shadow: 0 0 0 0 rgba(0, 102, 204, 0); }
  470. }
  471. .voice-btn-text {
  472. font-size: 11px;
  473. line-height: 1;
  474. }
  475. .instructor-note {
  476. margin: 3px 0 0 0;
  477. font-size: 12px;
  478. line-height: 1.5;
  479. color: #64748b;
  480. word-break: break-word;
  481. white-space: pre-wrap;
  482. }
  483. .submit-box { border-top:1px solid #edf0f4; margin-top:20px; padding-top:18px; }
  484. .production-progress-card { margin: 18px 0; }
  485. .points-balance-badge { padding:6px 10px; border-radius:999px; background:#fff0e7; color:#c7541a; font-size:12px; font-weight:700; }
  486. .course-workspace-tabs { display:flex; gap:6px; margin:20px 0 4px; padding:5px; width:max-content; max-width:100%; border:1px solid #e4e9f1; border-radius:10px; background:#f6f8fb; }
  487. .course-workspace-tabs button { display:flex; align-items:center; gap:7px; padding:9px 18px; border:0; border-radius:7px; background:transparent; color:#697386; font-size:13px; font-weight:600; cursor:pointer; }
  488. .course-workspace-tabs button.active { background:#fff; color:#172033; box-shadow:0 2px 8px rgba(28,44,76,.09); }
  489. .course-workspace-tabs button span { min-width:20px; padding:1px 6px; border-radius:999px; background:#e8edf5; color:#667085; font-size:10px; }
  490. .course-workspace-tabs button.active span { background:#fff0e7; color:#c7541a; }
  491. .course-progress-tab-panel { max-width:920px; }
  492. .course-progress-tab-panel .production-progress-card { margin-top:16px; }
  493. .progress-card-head { display:flex; align-items:flex-start; justify-content:space-between; gap:24px; }
  494. .points-summary { text-align:right; display:flex; flex-direction:column; gap:3px; }
  495. .points-summary strong { color:#e06b2d; font-size:24px; }
  496. .points-summary span,.points-summary small,.points-rule { color:#788397; font-size:12px; }
  497. .progress-title-row { display:flex; align-items:center; gap:10px; }
  498. .progress-title-row h3 { margin:4px 0 0; }
  499. .points-charged-label { color:#16845b !important; font-weight:700; }
  500. .points-rule { margin:10px 0 16px; }
  501. .progress-timeline { display:flex; flex-direction:column; gap:0; }
  502. .progress-event { display:grid; grid-template-columns:18px 1fr; gap:10px; padding:10px 0; border-top:1px solid #edf0f4; }
  503. .progress-dot { width:9px; height:9px; margin-top:5px; border-radius:50%; background:#e06b2d; box-shadow:0 0 0 4px #fff0e7; }
  504. .progress-event-title { display:flex; justify-content:space-between; gap:16px; }
  505. .progress-event-title time { color:#9aa3b2; font-size:11px; white-space:nowrap; }
  506. .progress-event p { margin:4px 0 0; color:#667085; font-size:12px; }
  507. .admin-points-panel { display:flex; justify-content:space-between; align-items:end; gap:28px; margin:18px 0; }
  508. .admin-points-form { display:grid; grid-template-columns:140px minmax(240px,1fr) auto; align-items:end; gap:12px; flex:1; max-width:720px; }
  509. .admin-points-form label { font-size:12px; }
  510. .admin-progress-card { margin-bottom:18px; }
  511. @media (max-width: 760px) { .progress-card-head,.admin-points-panel { flex-direction:column; } .points-summary { text-align:left; } .admin-points-form { grid-template-columns:1fr; width:100%; } }
  512. .selected-stack { margin-top:12px; }
  513. .selected-file { display:flex; align-items:center; border:1px solid #dfe6f1; background:#f9fbff; border-radius:9px; padding:12px 14px; margin-top:8px; gap:10px; }
  514. .selected-file div { display:flex; flex-direction:column; min-width:0; }
  515. .selected-file strong { font-size:12px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  516. .selected-file span { font-size:10px; color:#97a2b4; }
  517. .selected-file button { margin-left:auto; border:0; background:transparent; color:#9ca6b6; cursor:pointer; }
  518. .full-button { width:100%; margin-top:14px; }
  519. /* ==================== ADMIN 管理端专属现代设计系统 ==================== */
  520. .admin-shell { min-height:100vh; background:#f4f6fa; }
  521. .admin-topbar { height:70px; padding:0 clamp(20px,4vw,60px); display:flex; align-items:center; border-bottom:1px solid #dde3ed; background:#ffffff; box-shadow:0 1px 4px rgba(0,0,0,.03); position:sticky; top:0; z-index:20; }
  522. .admin-brand-wrap { display:flex; align-items:center; gap:14px; }
  523. .admin-badge { display:inline-flex; align-items:center; gap:5px; background:var(--blue); color:var(--blue-ink); font-size:11px; font-weight:600; padding:4px 9px; border-radius:6px; letter-spacing:.05em; }
  524. .admin-nav { display:flex; height:100%; gap:26px; align-items:center; margin-left:45px; }
  525. .admin-nav a { color:#64748b; font-size:14px; font-weight:500; height:100%; display:flex; align-items:center; gap:7px; position:relative; }
  526. .admin-nav a:hover { color:#1e293b; }
  527. .admin-nav a.active { color:var(--blue-action); font-weight:600; }
  528. .admin-nav a.active:after { content:''; position:absolute; bottom:0; left:0; right:0; height:2px; background:var(--blue); }
  529. .admin-top-actions { margin-left:auto; display:flex; align-items:center; gap:16px; }
  530. .client-switch-button { min-height:var(--button-small-height); display:inline-flex; align-items:center; gap:6px; font-size:12px; color:#536077; background:#fff; border:1px solid #dce2ed; padding:0 12px; border-radius:var(--button-radius); font-weight:500; transition:.2s ease; }
  531. .client-switch-button:hover { background:#e2e8f0; color:#0f172a; }
  532. .admin-user-info { display:flex; flex-direction:column; text-align:right; font-size:12px; }
  533. .admin-user-info strong { color:#1e293b; }
  534. .admin-user-info small { color:#94a3b8; font-size:10px; }
  535. .admin-page { padding-top:24px; padding-bottom:60px; }
  536. .admin-header-row { display:flex; justify-content:space-between; align-items:flex-end; margin-bottom:22px; }
  537. .admin-header-row h2 { margin:5px 0 0; font-size:24px; font-weight:700; color:#0f172a; }
  538. .admin-subtitle { color:#64748b; font-size:13px; margin:4px 0 0; }
  539. /* 导航面包屑 */
  540. .admin-breadcrumb-bar { display:flex; justify-content:space-between; align-items:center; margin-bottom:16px; font-size:13px; }
  541. .admin-breadcrumb-bar .back-link { display:inline-flex; align-items:center; gap:6px; color:#475569; font-weight:500; text-decoration:none; padding:6px 12px; border-radius:8px; background:#fff; border:1px solid #e2e8f0; transition:.15s; }
  542. .admin-breadcrumb-bar .back-link:hover { color:var(--blue); border-color:#cbd5e1; transform:translateX(-2px); }
  543. .breadcrumb-id { color:#94a3b8; font-size:12px; font-family:ui-monospace, monospace; }
  544. /* 统计卡片网格 */
  545. .stats-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(210px,1fr)); gap:16px; margin-bottom:28px; }
  546. .stat-card { background:#fff; border:1px solid #e2e8f0; border-radius:12px; padding:20px; display:flex; align-items:center; gap:16px; box-shadow:0 2px 6px rgba(0,0,0,.02); transition:.2s ease; }
  547. .stat-card:hover { transform:translateY(-2px); box-shadow:0 8px 20px rgba(0,0,0,.04); }
  548. .stat-icon { width:48px; height:48px; border-radius:10px; display:grid; place-items:center; flex-shrink:0; }
  549. .tone-blue { background:#eaf7ff; color:#1684ce; }
  550. .tone-slate { background:#f1f5f9; color:#475569; }
  551. .tone-gold { background:#fef3c7; color:#d97706; }
  552. .tone-primary { background:#eaf7ff; color:var(--blue); }
  553. .tone-green { background:#dcfce7; color:#16a34a; }
  554. .stat-content { display:flex; flex-direction:column; }
  555. .stat-content small { font-size:12px; color:#64748b; margin-bottom:4px; }
  556. .stat-content strong { font-size:24px; font-weight:600; color:#0f172a; line-height:1; }
  557. .admin-section-block { background:#fff; border:1px solid #e2e8f0; border-radius:12px; padding:24px; margin-bottom:28px; }
  558. .text-link { color:var(--blue-action); font-size:13px; display:inline-flex; align-items:center; gap:5px; }
  559. /* 过滤与搜索条 */
  560. .admin-filter-bar { display:flex; justify-content:space-between; align-items:center; gap:16px; margin-bottom:20px; flex-wrap:wrap; }
  561. .filter-tabs { display:flex; background:#e2e8f0; padding:3px; border-radius:8px; gap:3px; }
  562. .tab-item { border:0; background:transparent; color:#64748b; font-size:13px; font-weight:500; padding:6px 14px; border-radius:6px; transition:.15s; cursor:pointer; }
  563. .tab-item.active { background:#fff; color:#0f172a; font-weight:600; box-shadow:0 1px 3px rgba(0,0,0,.08); }
  564. .search-form { display:flex; gap:8px; width:100%; max-width:380px; }
  565. .search-form .input-with-icon { flex:1; }
  566. .search-form input { border:1px solid #cbd5e1; border-radius:8px; padding:9px 12px 9px 36px; font-size:13px; background:#fff; outline:none; width:100%; box-sizing:border-box; }
  567. .search-form input:focus { border-color:var(--blue); box-shadow:0 0 0 3px rgba(85,176,247,.1); }
  568. .user-stat-summary { color:#64748b; font-size:13px; }
  569. .status-filter-select { border:1px solid #cbd5e1; border-radius:8px; padding:9px 12px; font-size:13px; background:#fff; color:#334155; outline:none; }
  570. .status-filter-select:focus { border-color:var(--blue); box-shadow:0 0 0 3px rgba(85,176,247,.1); }
  571. .lead-message { max-width:340px; font-size:12px; line-height:1.7; color:#64748b; white-space:pre-wrap; word-break:break-word; }
  572. /* 管理端表格 */
  573. .admin-table-wrapper { width:100%; overflow-x:auto; background:#fff; border:1px solid #e2e8f0; border-radius:14px; box-shadow:0 2px 8px rgba(0,0,0,.02); }
  574. .admin-table { width:100%; border-collapse:collapse; text-align:left; font-size:13px; }
  575. .admin-table th { background:#f8fafc; color:#475569; font-weight:600; font-size:12px; padding:15px 18px; border-bottom:1px solid #e2e8f0; white-space:nowrap; letter-spacing:0.02em; }
  576. .admin-table td { padding:16px 18px; border-bottom:1px solid #f1f5f9; vertical-align:middle; color:#1e293b; }
  577. .admin-table tr:last-child td { border-bottom:0; }
  578. .admin-table tr:hover td { background:#f8fbff; }
  579. /* 列表项元素 */
  580. .course-table-name { display:block; font-size:14px; font-weight:600; color:#0f172a; margin-bottom:4px; line-height:1.4; }
  581. .course-table-desc { display:block; color:#64748b; font-size:12px; line-height:1.4; max-width:320px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; margin-bottom:4px; }
  582. .table-episodes-badge { display:inline-flex; align-items:center; gap:4px; font-size:11px; color:#475569; background:#f1f5f9; padding:2px 8px; border-radius:4px; margin-top:2px; }
  583. .category-pill { display:inline-block; font-size:12px; font-weight:500; color:#075f9b; background:#eaf7ff; padding:3px 8px; border-radius:6px; border:1px solid #d3edff; }
  584. /* 列表表格中的醒目用户信息单元格 */
  585. .user-highlight-cell { display:flex; align-items:flex-start; gap:10px; }
  586. .user-avatar-mini { width:32px; height:32px; border-radius:50%; background:#eaf7ff; color:var(--blue); border:1px solid #a7dcff; font-size:13px; font-weight:700; display:grid; place-items:center; flex-shrink:0; margin-top:2px; }
  587. .user-info-stack { display:flex; flex-direction:column; gap:2px; min-width:0; }
  588. .user-contact-name { font-size:13px; font-weight:700; color:#0f172a; }
  589. .user-org-text { font-size:11px; color:#475569; display:inline-flex; align-items:center; gap:4px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:180px; }
  590. .user-phone-text { font-size:12px; font-weight:600; color:#075f9b; display:inline-flex; align-items:center; gap:4px; }
  591. .badge-group { display:flex; flex-wrap:wrap; gap:6px; }
  592. .badge-count { display:inline-flex; align-items:center; gap:4px; font-size:11px; color:#475569; background:#f1f5f9; padding:3px 7px; border-radius:4px; }
  593. .deliverable-badge { background:#e8f5e9; color:#16a34a; font-weight:500; }
  594. .role-tag { display:inline-flex; align-items:center; gap:5px; font-size:11px; font-weight:600; padding:3px 9px; border-radius:20px; }
  595. .role-admin { background:#fee2e2; color:#991b1b; }
  596. .role-user { background:#f1f5f9; color:#475569; }
  597. .action-button-group { display:flex; justify-content:flex-end; gap:8px; }
  598. /* ==================== 课程详情工作台 Hero 与用户信息横幅 ==================== */
  599. .admin-hero-card { background:#ffffff; border:1px solid #e2e8f0; border-radius:16px; padding:24px 28px; margin-bottom:24px; box-shadow:0 4px 20px rgba(0,0,0,.03); display:flex; flex-direction:column; gap:20px; }
  600. .admin-hero-top { display:flex; justify-content:space-between; align-items:flex-start; gap:24px; flex-wrap:wrap; }
  601. .admin-hero-title-area { flex:1; min-width:280px; }
  602. .admin-hero-title-row { display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:10px; }
  603. .admin-course-name { margin:0; font-size:24px; font-weight:700; color:#0f172a; letter-spacing:-0.01em; }
  604. .admin-meta-tags { display:flex; flex-wrap:wrap; gap:10px; align-items:center; }
  605. .meta-tag { display:inline-flex; align-items:center; gap:5px; font-size:12px; color:#475569; background:#f8fafc; border:1px solid #e2e8f0; padding:4px 10px; border-radius:6px; }
  606. .meta-tag strong { color:#0f172a; font-weight:600; }
  607. .admin-hero-actions { display:flex; align-items:center; gap:12px; }
  608. .hero-action-btn { min-height:40px; padding:0 20px; font-size:14px; font-weight:600; box-shadow:0 2px 8px rgba(85,176,247,.2); }
  609. .hero-status-action-row { display:flex; align-items:center; gap:12px; }
  610. .status-pill { display:inline-flex; align-items:center; gap:6px; font-size:13px; font-weight:600; padding:7px 16px; border-radius:20px; }
  611. .status-pill-producing { background:#eaf7ff; color:#0875bd; border:1px solid #a7dcff; }
  612. .status-pill-completed { background:#f0fdf4; color:#15803d; border:1px solid #bbf7d0; }
  613. /* 🌟 核心高亮:提交用户信息横幅 (Creator Banner) */
  614. .admin-creator-banner {
  615. background: linear-gradient(135deg, #f0f7ff 0%, #f7faff 50%, #ffffff 100%);
  616. border: 1.5px solid #a7dcff;
  617. border-radius: 14px;
  618. padding: 18px 22px;
  619. box-shadow: 0 4px 16px rgba(85, 176, 247, 0.05);
  620. position: relative;
  621. }
  622. .creator-banner-badge {
  623. display: inline-flex;
  624. align-items: center;
  625. gap: 6px;
  626. background: var(--blue-action);
  627. color: #fff;
  628. font-size: 11px;
  629. font-weight: 700;
  630. padding: 3px 10px;
  631. border-radius: 6px;
  632. letter-spacing: 0.04em;
  633. margin-bottom: 14px;
  634. box-shadow: 0 2px 6px rgba(85, 176, 247, 0.25);
  635. }
  636. .creator-banner-grid {
  637. display: grid;
  638. grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  639. gap: 16px;
  640. align-items: center;
  641. }
  642. .creator-field-item {
  643. display: flex;
  644. align-items: center;
  645. gap: 12px;
  646. background: #ffffff;
  647. border: 1px solid #e2e8f0;
  648. border-radius: 10px;
  649. padding: 10px 14px;
  650. box-shadow: 0 1px 3px rgba(0, 0, 0, 0.02);
  651. transition: all .2s ease;
  652. }
  653. .creator-field-item:hover {
  654. border-color: #cbd5e1;
  655. box-shadow: 0 4px 10px rgba(0, 0, 0, 0.04);
  656. }
  657. .field-icon-wrap {
  658. width: 36px;
  659. height: 36px;
  660. border-radius: 8px;
  661. display: grid;
  662. place-items: center;
  663. flex-shrink: 0;
  664. }
  665. .name-icon { background: #eaf7ff; color: #1684ce; }
  666. .org-icon { background: #f1f5f9; color: #475569; }
  667. .phone-icon { background: #fef2f2; color: #dc2626; }
  668. .wechat-icon { background: #f0fdf4; color: #16a34a; }
  669. .time-icon { background: #fdf4ff; color: #9333ea; }
  670. .field-content {
  671. display: flex;
  672. flex-direction: column;
  673. min-width: 0;
  674. flex: 1;
  675. }
  676. .field-label {
  677. font-size: 11px;
  678. color: #64748b;
  679. font-weight: 500;
  680. margin-bottom: 2px;
  681. }
  682. .field-value-primary {
  683. font-size: 14px;
  684. font-weight: 700;
  685. color: #0f172a;
  686. white-space: nowrap;
  687. overflow: hidden;
  688. text-overflow: ellipsis;
  689. }
  690. .field-value-text {
  691. font-size: 13px;
  692. font-weight: 600;
  693. color: #334155;
  694. white-space: nowrap;
  695. overflow: hidden;
  696. text-overflow: ellipsis;
  697. }
  698. .field-value-highlight {
  699. font-size: 14px;
  700. font-weight: 700;
  701. color: #dc2626;
  702. font-family: ui-monospace, monospace;
  703. }
  704. .phone-row {
  705. display: flex;
  706. align-items: center;
  707. justify-content: space-between;
  708. gap: 8px;
  709. }
  710. .copy-phone-btn {
  711. display: inline-flex;
  712. align-items: center;
  713. gap: 4px;
  714. font-size: 11px;
  715. font-weight: 600;
  716. color: #1684ce;
  717. background: #eaf7ff;
  718. border: 1px solid #a7dcff;
  719. padding: 3px 8px;
  720. border-radius: 5px;
  721. cursor: pointer;
  722. transition: all .15s;
  723. }
  724. .copy-phone-btn:hover {
  725. background: #1684ce;
  726. color: #ffffff;
  727. }
  728. .copy-phone-btn.copied {
  729. background: #16a34a;
  730. color: #ffffff;
  731. border-color: #16a34a;
  732. }
  733. .field-value-time {
  734. font-size: 12px;
  735. color: #475569;
  736. font-weight: 500;
  737. }
  738. .creator-banner-bio {
  739. margin-top: 14px;
  740. padding: 10px 14px;
  741. background: #ffffff;
  742. border: 1px dashed #a7dcff;
  743. border-radius: 8px;
  744. display: flex;
  745. align-items: flex-start;
  746. gap: 8px;
  747. font-size: 12px;
  748. }
  749. .bio-label { color: #1684ce; font-weight: 600; flex-shrink: 0; }
  750. .bio-text { margin: 0; color: #334155; line-height: 1.5; }
  751. /* ==================== 制作积分消耗卡片 UI ==================== */
  752. .admin-points-card {
  753. background: #ffffff;
  754. border: 1px solid #e2e8f0;
  755. border-radius: 14px;
  756. padding: 22px 26px;
  757. margin: 20px 0;
  758. box-shadow: 0 2px 10px rgba(0,0,0,.02);
  759. display: grid;
  760. grid-template-columns: minmax(0, 1.2fr) minmax(360px, 1fr);
  761. gap: 28px;
  762. align-items: center;
  763. }
  764. .points-card-left { display: flex; flex-direction: column; gap: 10px; }
  765. .points-card-header h3 { margin: 2px 0 0; font-size: 18px; font-weight: 700; color: #0f172a; }
  766. .points-formula-box {
  767. display: flex;
  768. align-items: center;
  769. gap: 12px;
  770. background: #f8fafc;
  771. border: 1px solid #e2e8f0;
  772. border-radius: 10px;
  773. padding: 10px 16px;
  774. width: fit-content;
  775. flex-wrap: wrap;
  776. }
  777. .formula-item { display: flex; flex-direction: column; }
  778. .formula-label { font-size: 10px; color: #64748b; font-weight: 500; }
  779. .formula-item strong { font-size: 14px; color: #1e293b; font-weight: 700; }
  780. .formula-operator { font-size: 16px; color: #94a3b8; font-weight: 700; }
  781. .formula-highlight strong { color: var(--blue); font-size: 16px; }
  782. .points-card-note { font-size: 12px; color: #64748b; line-height: 1.5; margin: 0; }
  783. .points-card-form { display: flex; flex-direction: column; gap: 12px; }
  784. .points-form-fields { display: grid; grid-template-columns: 140px 1fr; gap: 12px; align-items: flex-end; }
  785. .points-input-field, .points-reason-field { display: flex; flex-direction: column; gap: 6px; font-size: 12px; font-weight: 600; color: #334155; }
  786. .input-suffix-wrap { position: relative; display: flex; align-items: center; }
  787. .points-number-input { width: 100%; padding-right: 42px !important; font-weight: 700; font-size: 14px; }
  788. .input-suffix { position: absolute; right: 10px; font-size: 12px; color: #94a3b8; font-weight: 500; pointer-events: none; }
  789. .points-update-btn { align-self: flex-end; display: inline-flex; align-items: center; gap: 6px; padding: 0 18px; min-height: 38px; }
  790. @media (max-width: 900px) {
  791. .admin-points-card { grid-template-columns: 1fr; }
  792. .points-form-fields { grid-template-columns: 1fr; }
  793. .points-update-btn { width: 100%; justify-content: center; }
  794. }
  795. /* ==================== 制作交付成果与素材双栏工作台 ==================== */
  796. .admin-detail-grid { display:grid; grid-template-columns:minmax(0,1.75fr) minmax(320px,1.05fr); gap:24px; align-items:start; }
  797. .admin-panel { background:#fff; border:1px solid #e2e8f0; border-radius:14px; padding:26px; margin-bottom:24px; box-shadow:0 2px 8px rgba(0,0,0,.02); }
  798. .panel-desc { font-size:13px; color:#64748b; line-height:1.6; margin:-6px 0 20px; }
  799. .form-title-with-actions { display:flex; justify-content:space-between; align-items:flex-end; margin-bottom:18px; }
  800. .form-title-with-actions h3 { margin:2px 0 0; font-size:18px; font-weight:700; color:#0f172a; }
  801. .ep-expand-actions { display:flex; align-items:center; gap:8px; font-size:12px; }
  802. .divider-dot { color:#cbd5e1; }
  803. .deliverable-list-section { margin-bottom: 24px; }
  804. .deliverable-list-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 14px; }
  805. .deliverable-list-header h4 { margin: 0; font-size: 15px; font-weight: 700; color: #1e293b; }
  806. .admin-deliv-group-card { background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 10px; padding: 14px; margin-bottom: 12px; }
  807. .admin-deliv-group-card .group-header { display: flex; align-items: center; gap: 8px; font-size: 13px; margin-bottom: 10px; }
  808. .deliverable-items { display: flex; flex-direction: column; gap: 8px; }
  809. .deliv-item { display: flex; align-items: center; gap: 12px; background: #ffffff; border: 1px solid #e2e8f0; border-radius: 8px; padding: 10px 14px; transition: .15s; }
  810. .deliv-item:hover { border-color: #cbd5e1; box-shadow: 0 2px 6px rgba(0,0,0,.03); }
  811. .deliv-icon-wrap { width: 34px; height: 34px; border-radius: 6px; background: #f0fdf4; display: grid; place-items: center; flex-shrink: 0; }
  812. .deliv-meta { flex: 1; min-width: 0; }
  813. .deliv-meta strong { display: block; font-size: 13px; color: #0f172a; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  814. .deliv-meta small { color: #64748b; font-size: 11px; }
  815. .deliv-actions { display: flex; align-items: center; gap: 8px; }
  816. .empty-deliverable-placeholder { background: #f8fafc; border: 1px dashed #cbd5e1; border-radius: 10px; padding: 24px; text-align: center; color: #64748b; font-size: 13px; display: flex; flex-direction: column; align-items: center; gap: 8px; }
  817. .placeholder-icon { color: #94a3b8; }
  818. .admin-upload-section { background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 10px; padding: 16px; margin-top: 18px; }
  819. .upload-section-title { display: flex; align-items: center; gap: 6px; font-size: 13px; color: #1e293b; margin-bottom: 12px; }
  820. .deliv-upload-row { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
  821. .target-ep-select-label { display: flex; align-items: center; gap: 8px; font-size: 12px; color: #475569; font-weight: 500; }
  822. .target-ep-select-label select { padding: 6px 10px; border-radius: 6px; border: 1px solid #cbd5e1; font-size: 12px; background: #fff; }
  823. .pending-upload-stack { margin-top: 14px; padding: 14px; background: #eaf7ff; border: 1px dashed #8dcefa; border-radius: 8px; font-size: 12px; }
  824. .pending-stack-head { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin-bottom: 8px; }
  825. .file-chips-wrap { display: flex; flex-wrap: wrap; gap: 6px; }
  826. .file-chip { background: #ffffff; border: 1px solid #a7dcff; color: #075f9b; font-weight: 600; padding: 3px 8px; border-radius: 4px; font-size: 11px; }
  827. .delivery-notes-label { display: flex; flex-direction: column; gap: 8px; margin-top: 18px; font-size: 13px; color: #1e293b; font-weight: 600; }
  828. .delivery-notes-label textarea { width: 100%; border: 1px solid #cbd5e1; border-radius: 8px; padding: 10px 12px; font: inherit; font-size: 13px; outline: none; box-sizing: border-box; }
  829. .delivery-notes-label textarea:focus { border-color: var(--blue); box-shadow: 0 0 0 3px rgba(85,176,247,.1); }
  830. .admin-delivery-footer { margin-top: 16px; }
  831. .deliver-confirm-btn { min-height: 44px; font-size: 15px; font-weight: 700; }
  832. /* ==================== 分集讲稿与素材面板 ==================== */
  833. .admin-episodes-list { display: flex; flex-direction: column; gap: 12px; }
  834. .admin-episode-card { border: 1px solid #e2e8f0; border-radius: 10px; overflow: hidden; background: #ffffff; box-shadow: 0 1px 3px rgba(0,0,0,.02); transition: .15s; }
  835. .admin-episode-card:hover { border-color: #cbd5e1; }
  836. .admin-ep-header { display: flex; justify-content: space-between; align-items: center; padding: 12px 16px; background: #f8fafc; cursor: pointer; user-select: none; }
  837. .admin-ep-header .header-left { display: flex; align-items: center; gap: 10px; }
  838. .ep-badge-pill { font-size: 11px; font-weight: 700; padding: 3px 8px; background: #eaf7ff; color: var(--blue); border-radius: 6px; border: 1px solid #a7dcff; }
  839. .ep-card-title { font-size: 14px; font-weight: 600; color: #0f172a; }
  840. .admin-ep-header .header-right { display: flex; align-items: center; gap: 8px; }
  841. .text-pill { font-size: 11px; color: #475569; background: #ffffff; padding: 3px 8px; border: 1px solid #e2e8f0; border-radius: 4px; }
  842. .admin-ep-body { padding: 16px; border-top: 1px solid #e2e8f0; background: #ffffff; }
  843. .notes-label-row { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
  844. .notes-label { display: flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 700; color: #1e293b; }
  845. .copy-notes-btn { display: inline-flex; align-items: center; gap: 4px; font-size: 11px; font-weight: 600; color: #1684ce; background: #eaf7ff; border: 1px solid #a7dcff; padding: 2px 7px; border-radius: 4px; cursor: pointer; transition: .15s; }
  846. .copy-notes-btn:hover { background: #1684ce; color: #fff; }
  847. .copy-notes-btn.copied { background: #16a34a; color: #fff; border-color: #16a34a; }
  848. .notes-pre-content { margin: 0; padding: 12px 14px; background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 8px; font-family: inherit; font-size: 13px; line-height: 1.7; color: #0f172a; white-space: pre-wrap; word-break: break-word; max-height: 240px; overflow-y: auto; }
  849. .admin-ep-assets-wrap { margin-top: 14px; }
  850. .ep-assets-label { font-size: 12px; font-weight: 600; color: #475569; display: block; margin-bottom: 8px; }
  851. .admin-ep-assets-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 8px; }
  852. .admin-mini-asset-card { display: flex; align-items: center; gap: 8px; padding: 8px 10px; background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 6px; }
  853. .mini-asset-info { flex: 1; min-width: 0; display: flex; flex-direction: column; }
  854. .mini-asset-info strong { font-size: 12px; font-weight: 600; color: #1e293b; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  855. .mini-asset-info small { color: #64748b; font-size: 10px; }
  856. .download-mini-btn { padding: 3px 8px; font-size: 11px; }
  857. .admin-global-assets-section { margin-top: 24px; padding-top: 18px; border-top: 1px solid #e2e8f0; }
  858. .sub-section-title { font-size: 14px; font-weight: 700; color: #1e293b; margin: 0 0 12px; }
  859. .asset-download-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px; }
  860. .asset-download-card { background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 8px; padding: 12px 14px; display: flex; align-items: center; gap: 12px; }
  861. .asset-download-info { flex: 1; min-width: 0; }
  862. .asset-download-info strong { display: block; font-size: 13px; color: #0f172a; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  863. .asset-download-info small { color: #64748b; font-size: 11px; }
  864. /* ==================== 右侧侧边栏卡片 ==================== */
  865. .admin-sidebar-card { background: #ffffff; border: 1px solid #e2e8f0; border-radius: 14px; padding: 22px; margin-bottom: 20px; box-shadow: 0 2px 6px rgba(0,0,0,.02); }
  866. .admin-sidebar-card .form-title { margin-bottom: 14px; }
  867. .admin-sidebar-card .form-title h4 { margin: 2px 0 0; font-size: 16px; font-weight: 700; color: #0f172a; }
  868. .creator-sidebar-card { border-top: 3px solid var(--blue); }
  869. .user-profile-summary { display: flex; align-items: center; gap: 14px; margin-bottom: 16px; padding-bottom: 14px; border-bottom: 1px solid #f1f5f9; }
  870. .user-avatar-large { width: 48px; height: 48px; border-radius: 50%; background: #eaf7ff; color: var(--blue); border: 1.5px solid #a7dcff; display: grid; place-items: center; flex-shrink: 0; }
  871. .sidebar-user-name { display: block; font-size: 16px; font-weight: 700; color: #0f172a; }
  872. .sidebar-user-org { display: block; color: #475569; font-size: 12px; font-weight: 500; margin-top: 1px; }
  873. .sidebar-user-role { display: inline-block; font-size: 10px; font-weight: 600; color: #1684ce; background: #eaf7ff; padding: 2px 6px; border-radius: 4px; margin-top: 3px; }
  874. .contact-list { display: flex; flex-direction: column; gap: 10px; font-size: 13px; }
  875. .contact-item { display: flex; justify-content: space-between; align-items: center; color: #475569; }
  876. .contact-label { color: #64748b; font-size: 12px; }
  877. .contact-val-wrap { display: flex; align-items: center; gap: 6px; }
  878. .mini-copy-link { border: 0; background: transparent; color: var(--blue); font-size: 11px; font-weight: 600; cursor: pointer; text-decoration: underline; padding: 0; }
  879. .contact-item strong { color: #0f172a; font-weight: 600; }
  880. .contact-item.flex-col { flex-direction: column; align-items: flex-start; gap: 6px; margin-top: 6px; }
  881. .contact-item p { margin: 0; font-size: 12px; color: #334155; line-height: 1.5; background: #f8fafc; padding: 10px 12px; border-radius: 6px; border: 1px solid #e2e8f0; width: 100%; box-sizing: border-box; }
  882. .sidebar-episode-outline { display: flex; flex-direction: column; gap: 8px; max-height: 280px; overflow-y: auto; }
  883. .outline-row { display: flex; align-items: center; gap: 10px; padding: 8px 10px; background: #f8fafc; border-radius: 6px; border: 1px solid #f1f5f9; }
  884. .outline-badge { font-size: 10px; font-weight: 700; color: var(--blue); background: #eaf7ff; padding: 2px 6px; border-radius: 4px; }
  885. .outline-info { flex: 1; min-width: 0; }
  886. .outline-info strong { display: block; font-size: 12px; color: #1e293b; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  887. .outline-info small { color: #64748b; font-size: 11px; }
  888. .course-full-desc { font-size: 13px; color: #334155; line-height: 1.7; margin: 0 0 16px; white-space: pre-line; background: #f8fafc; padding: 12px; border-radius: 8px; border: 1px solid #e2e8f0; }
  889. .time-meta-box { display: flex; flex-direction: column; gap: 8px; padding: 12px; background: #f8fafc; border-radius: 8px; font-size: 11px; color: #64748b; border: 1px solid #f1f5f9; }
  890. .time-meta-box div { display: flex; justify-content: space-between; }
  891. .time-meta-box span { font-weight: 600; color: #1e293b; }
  892. .instructor-sidebar-list { display: flex; flex-direction: column; gap: 14px; }
  893. .inst-card-detail { display: flex; gap: 12px; padding-bottom: 14px; border-bottom: 1px solid #f1f5f9; }
  894. .inst-card-detail:last-child { border-bottom: 0; padding-bottom: 0; }
  895. .inst-photo { width: 56px; height: 68px; object-fit: cover; border-radius: 6px; flex-shrink: 0; border: 1px solid #e2e8f0; }
  896. .inst-info strong { display: block; font-size: 13px; color: #0f172a; font-weight: 700; }
  897. .inst-info small { color: #64748b; font-size: 11px; display: block; margin: 2px 0 6px; }
  898. .inst-info p { margin: 0; font-size: 11px; color: #475569; line-height: 1.5; }
  899. @media (max-width:960px) {
  900. .admin-detail-grid { grid-template-columns:1fr; }
  901. .admin-topbar nav { display:none; }
  902. }
  903. /* ==================== ADMIN 专属登录页样式 ==================== */
  904. .admin-login-page { min-height:100vh; display:grid; place-items:center; background:radial-gradient(circle at 22% 28%,rgba(85,176,247,.10),transparent 38%),#f5f7fb; padding:24px; }
  905. .admin-login-card { width:min(440px,100%); background:#fff; border:1px solid var(--line); border-radius:14px; padding:44px 38px; box-shadow:0 20px 60px rgba(40,57,90,.08); }
  906. .admin-login-head { text-align:center; margin-bottom:28px; }
  907. .admin-login-brand { display:flex; justify-content:center; margin-bottom:18px; }
  908. .admin-login-badge { display:inline-flex; align-items:center; gap:6px; background:#eaf7ff; color:var(--blue); font-size:11px; font-weight:600; padding:4px 11px; border-radius:20px; letter-spacing:.08em; margin-bottom:14px; }
  909. .admin-login-head h2 { margin:0 0 8px; font-size:24px; font-weight:500; color:var(--ink); }
  910. .admin-login-head p { margin:0; font-size:13px; color:var(--muted); }
  911. .admin-login-form label { display:flex; flex-direction:column; gap:8px; font-size:12px; color:#59657b; margin-bottom:20px; }
  912. .admin-login-form input { width:100%; border:1px solid #dfe4ec; border-radius:7px; padding:12px 14px 12px 42px; background:#fbfcfe; color:#253149; font-size:14px; outline:none; transition:.2s; }
  913. .admin-login-form input:focus { border-color:#8dcfff; box-shadow:0 0 0 3px rgba(85,176,247,.08); background:#fff; }
  914. .admin-login-form .input-with-icon svg { color:#64748b; top:14px; }
  915. .admin-login-footer { margin-top:24px; text-align:center; display:flex; flex-direction:column; gap:14px; }
  916. .admin-tip-box { background:#f7f9fc; border:1px solid #edf0f5; border-radius:8px; padding:8px 12px; font-size:11px; color:#8b96a9; display:inline-flex; align-items:center; justify-content:center; gap:6px; }
  917. .back-to-client-link { font-size:12px; color:var(--blue); transition:.15s; }
  918. .back-to-client-link:hover { color:var(--blue-dark); text-decoration:underline; }
  919. /* ==================== 课程创建页 - 示例模板与示范卡片 ==================== */
  920. .new-course-layout {
  921. grid-template-columns: minmax(340px, 480px) minmax(420px, 620px);
  922. gap: clamp(30px, 5vw, 60px);
  923. }
  924. .new-course-aside {
  925. padding-top: 10px;
  926. }
  927. .aside-subtext {
  928. color: #7b889d;
  929. font-size: 13px;
  930. line-height: 1.7;
  931. margin: 16px 0 24px;
  932. }
  933. .template-showcase-box {
  934. background: #ffffff;
  935. border: 1px solid #dfe5f0;
  936. border-radius: 14px;
  937. padding: 20px;
  938. box-shadow: 0 10px 30px rgba(30, 48, 80, 0.05);
  939. margin-top: 10px;
  940. }
  941. .template-box-header {
  942. display: flex;
  943. justify-content: space-between;
  944. align-items: center;
  945. margin-bottom: 14px;
  946. padding-bottom: 12px;
  947. border-bottom: 1px solid #edf1f7;
  948. }
  949. .header-left {
  950. display: flex;
  951. align-items: center;
  952. gap: 8px;
  953. font-size: 13px;
  954. color: #1a253c;
  955. }
  956. .flame-icon { color: var(--blue); }
  957. .sample-count-tag {
  958. font-size: 11px;
  959. color: #64748b;
  960. background: #f1f5f9;
  961. padding: 3px 8px;
  962. border-radius: 12px;
  963. }
  964. .template-pills {
  965. display: flex;
  966. gap: 8px;
  967. margin-bottom: 16px;
  968. overflow-x: auto;
  969. padding-bottom: 2px;
  970. }
  971. .template-pill {
  972. border: 1px solid #e2e8f0;
  973. background: #f8fafc;
  974. color: #475569;
  975. font-size: 12px;
  976. font-weight: 500;
  977. padding: 6px 12px;
  978. border-radius: 20px;
  979. display: inline-flex;
  980. align-items: center;
  981. gap: 6px;
  982. transition: all 0.2s ease;
  983. white-space: nowrap;
  984. }
  985. .template-pill:hover {
  986. border-color: #cbd5e1;
  987. background: #f1f5f9;
  988. }
  989. .template-pill.active {
  990. background: #eaf7ff;
  991. border-color: #55b0f7;
  992. color: #0875bd;
  993. font-weight: 600;
  994. box-shadow: 0 2px 8px rgba(85, 176, 247, 0.12);
  995. }
  996. .pill-badge {
  997. background: #d3edff;
  998. color: #075f9b;
  999. font-size: 9px;
  1000. padding: 1px 5px;
  1001. border-radius: 4px;
  1002. }
  1003. .selected-template-card {
  1004. background: linear-gradient(180deg, #fbfcfe 0%, #f8fafc 100%);
  1005. border: 1px solid #e2e8f0;
  1006. border-radius: 10px;
  1007. padding: 16px;
  1008. }
  1009. .card-tags {
  1010. display: flex;
  1011. flex-wrap: wrap;
  1012. gap: 6px;
  1013. margin-bottom: 10px;
  1014. }
  1015. .sample-tag {
  1016. font-size: 10px;
  1017. font-weight: 500;
  1018. color: #1684ce;
  1019. background: #eef4ff;
  1020. border: 1px solid #dbe6fe;
  1021. padding: 2px 7px;
  1022. border-radius: 4px;
  1023. }
  1024. .sample-title {
  1025. margin: 0 0 6px;
  1026. font-size: 16px;
  1027. font-weight: 600;
  1028. color: #0f172a;
  1029. }
  1030. .sample-desc {
  1031. margin: 0 0 14px;
  1032. font-size: 12px;
  1033. line-height: 1.6;
  1034. color: #64748b;
  1035. }
  1036. .specs-grid {
  1037. display: grid;
  1038. grid-template-columns: 1fr 1fr;
  1039. gap: 8px;
  1040. margin-bottom: 14px;
  1041. background: #ffffff;
  1042. padding: 10px 12px;
  1043. border-radius: 8px;
  1044. border: 1px solid #edf2f7;
  1045. }
  1046. .spec-item {
  1047. display: flex;
  1048. align-items: flex-start;
  1049. gap: 8px;
  1050. font-size: 11px;
  1051. color: #475569;
  1052. }
  1053. .spec-item svg {
  1054. color: #55b0f7;
  1055. margin-top: 2px;
  1056. flex-shrink: 0;
  1057. }
  1058. .spec-item small {
  1059. display: block;
  1060. font-size: 10px;
  1061. color: #94a3b8;
  1062. }
  1063. .spec-item span {
  1064. display: block;
  1065. font-weight: 500;
  1066. color: #1e293b;
  1067. line-height: 1.3;
  1068. }
  1069. .preset-assets-strip {
  1070. margin-bottom: 14px;
  1071. background: #f1f5f9;
  1072. border-radius: 8px;
  1073. padding: 10px 12px;
  1074. }
  1075. .strip-title {
  1076. display: flex;
  1077. align-items: center;
  1078. gap: 6px;
  1079. font-size: 11px;
  1080. font-weight: 600;
  1081. color: #334155;
  1082. margin-bottom: 8px;
  1083. }
  1084. .preset-pill-list {
  1085. display: flex;
  1086. flex-direction: column;
  1087. gap: 4px;
  1088. }
  1089. .asset-minitag {
  1090. display: inline-flex;
  1091. align-items: center;
  1092. gap: 5px;
  1093. font-size: 11px;
  1094. color: #475569;
  1095. background: #ffffff;
  1096. padding: 4px 8px;
  1097. border-radius: 4px;
  1098. border: 1px solid #e2e8f0;
  1099. overflow: hidden;
  1100. text-overflow: ellipsis;
  1101. white-space: nowrap;
  1102. }
  1103. .asset-minitag svg {
  1104. color: #64748b;
  1105. flex-shrink: 0;
  1106. }
  1107. .template-actions {
  1108. display: grid;
  1109. grid-template-columns: 1fr 1fr;
  1110. gap: 10px;
  1111. margin-bottom: 10px;
  1112. }
  1113. .action-btn {
  1114. width: 100%;
  1115. padding: 0 10px;
  1116. }
  1117. .highlight-sample-btn { background:var(--blue-action); color:#fff; box-shadow:none; }
  1118. .highlight-sample-btn:hover:not(:disabled) { background:var(--blue-dark); color:#fff; }
  1119. .template-card-footer {
  1120. text-align: center;
  1121. padding-top: 6px;
  1122. }
  1123. .detail-link-btn {
  1124. border: 0;
  1125. background: transparent;
  1126. color: #1684ce;
  1127. font-size: 11px;
  1128. font-weight: 500;
  1129. display: inline-flex;
  1130. align-items: center;
  1131. gap: 4px;
  1132. padding: 4px 8px;
  1133. border-radius: 4px;
  1134. transition: all 0.15s;
  1135. }
  1136. .detail-link-btn:hover {
  1137. background: #eaf7ff;
  1138. text-decoration: underline;
  1139. }
  1140. /* 表单顶部快速载入按钮 */
  1141. .title-left {
  1142. display: flex;
  1143. flex-direction: column;
  1144. }
  1145. .quick-sample-pill-btn {
  1146. border: 1px solid #a7dcff;
  1147. background: #eaf7ff;
  1148. color: #0875bd;
  1149. font-size: 11px;
  1150. font-weight: 500;
  1151. padding: 5px 10px;
  1152. border-radius: 20px;
  1153. display: inline-flex;
  1154. align-items: center;
  1155. gap: 5px;
  1156. transition: all 0.15s;
  1157. }
  1158. .quick-sample-pill-btn:hover {
  1159. background: #d3edff;
  1160. border-color: #8dcefa;
  1161. }
  1162. .form-title {
  1163. display: flex;
  1164. justify-content: space-between;
  1165. align-items: flex-end;
  1166. }
  1167. .new-course-main .form-title h2 {
  1168. margin: 0;
  1169. font-size: 21px;
  1170. font-weight: 600;
  1171. color: #1e293b;
  1172. }
  1173. .optional-tag {
  1174. color: #94a3b8;
  1175. font-size: 13px;
  1176. font-weight: 400;
  1177. margin-left: 2px;
  1178. }
  1179. .filled-toast {
  1180. display: flex;
  1181. align-items: center;
  1182. gap: 8px;
  1183. background: #f0fdf4;
  1184. border: 1px solid #bbf7d0;
  1185. color: #15803d;
  1186. padding: 10px 14px;
  1187. border-radius: 8px;
  1188. font-size: 12px;
  1189. margin-bottom: 16px;
  1190. animation: fadeIn 0.25s ease-out;
  1191. }
  1192. @keyframes fadeIn {
  1193. from { opacity: 0; transform: translateY(-4px); }
  1194. to { opacity: 1; transform: translateY(0); }
  1195. }
  1196. /* ==================== 制作任务书弹窗 Modal ==================== */
  1197. .modal-backdrop {
  1198. position: fixed;
  1199. inset: 0;
  1200. background: rgba(15, 23, 42, 0.55);
  1201. backdrop-filter: blur(4px);
  1202. z-index: 999;
  1203. display: grid;
  1204. place-items: center;
  1205. padding: 20px;
  1206. animation: fadeIn 0.2s ease-out;
  1207. }
  1208. .modal-dialog.brief-modal {
  1209. width: min(720px, 95vw);
  1210. max-height: 88vh;
  1211. background: #ffffff;
  1212. border-radius: 16px;
  1213. box-shadow: 0 25px 60px rgba(0, 0, 0, 0.2);
  1214. display: flex;
  1215. flex-direction: column;
  1216. overflow: hidden;
  1217. border: 1px solid #e2e8f0;
  1218. }
  1219. .modal-header {
  1220. padding: 20px 24px;
  1221. border-bottom: 1px solid #edf2f7;
  1222. display: flex;
  1223. justify-content: space-between;
  1224. align-items: center;
  1225. background: #f8fafc;
  1226. }
  1227. .modal-header h3 {
  1228. margin: 4px 0 0;
  1229. font-size: 18px;
  1230. font-weight: 600;
  1231. color: #0f172a;
  1232. }
  1233. .modal-badge {
  1234. font-size: 10px;
  1235. color: #0875bd;
  1236. background: #d3edff;
  1237. padding: 2px 7px;
  1238. border-radius: 4px;
  1239. font-weight: 600;
  1240. }
  1241. .close-modal-btn {
  1242. border: 0;
  1243. background: transparent;
  1244. color: #64748b;
  1245. padding: 6px;
  1246. border-radius: 6px;
  1247. display: grid;
  1248. place-items: center;
  1249. }
  1250. .close-modal-btn:hover {
  1251. background: #e2e8f0;
  1252. color: #0f172a;
  1253. }
  1254. .modal-body.brief-modal-content {
  1255. padding: 22px 24px;
  1256. overflow-y: auto;
  1257. display: flex;
  1258. flex-direction: column;
  1259. gap: 18px;
  1260. }
  1261. .brief-section {
  1262. background: #f8fafc;
  1263. border: 1px solid #e2e8f0;
  1264. border-radius: 10px;
  1265. padding: 16px 18px;
  1266. }
  1267. .brief-section.focus-card {
  1268. background: #fffbeb;
  1269. border-color: #fde68a;
  1270. }
  1271. .brief-section.focus-card h4 {
  1272. color: #92400e;
  1273. }
  1274. .brief-section h4 {
  1275. margin: 0 0 10px;
  1276. font-size: 14px;
  1277. font-weight: 600;
  1278. color: #1e293b;
  1279. display: flex;
  1280. align-items: center;
  1281. gap: 8px;
  1282. }
  1283. .brief-section ul {
  1284. margin: 0;
  1285. padding-left: 20px;
  1286. display: flex;
  1287. flex-direction: column;
  1288. gap: 6px;
  1289. font-size: 13px;
  1290. color: #334155;
  1291. line-height: 1.6;
  1292. }
  1293. .brief-preset-grid {
  1294. display: grid;
  1295. grid-template-columns: 1fr 1fr;
  1296. gap: 12px;
  1297. }
  1298. .brief-subcard {
  1299. background: #ffffff;
  1300. border: 1px solid #e2e8f0;
  1301. border-radius: 8px;
  1302. padding: 12px;
  1303. }
  1304. .brief-subcard strong {
  1305. display: block;
  1306. font-size: 12px;
  1307. color: #0f172a;
  1308. margin-bottom: 8px;
  1309. padding-bottom: 6px;
  1310. border-bottom: 1px solid #f1f5f9;
  1311. }
  1312. .inst-subrow, .asset-subrow {
  1313. margin-bottom: 8px;
  1314. }
  1315. .inst-subrow span, .asset-subrow span {
  1316. display: block;
  1317. font-size: 12px;
  1318. font-weight: 600;
  1319. color: #1e293b;
  1320. }
  1321. .inst-subrow small, .asset-subrow small {
  1322. display: block;
  1323. font-size: 11px;
  1324. color: #64748b;
  1325. margin: 2px 0;
  1326. }
  1327. .inst-subrow p {
  1328. margin: 0;
  1329. font-size: 11px;
  1330. color: #475569;
  1331. line-height: 1.4;
  1332. }
  1333. .modal-footer {
  1334. padding: 16px 24px;
  1335. border-top: 1px solid #edf2f7;
  1336. display: flex;
  1337. justify-content: flex-end;
  1338. gap: 12px;
  1339. background: #f8fafc;
  1340. }
  1341. /* ==================== 新建用户弹窗 ==================== */
  1342. .modal-dialog.create-user-modal {
  1343. width: min(520px, calc(100vw - 40px));
  1344. max-height: min(720px, calc(100vh - 40px));
  1345. background: #ffffff;
  1346. border: 1px solid #e2e8f0;
  1347. border-radius: 16px;
  1348. box-shadow: 0 25px 60px rgba(15, 23, 42, 0.24);
  1349. overflow: hidden;
  1350. }
  1351. .create-user-modal form {
  1352. display: flex;
  1353. min-height: 0;
  1354. flex-direction: column;
  1355. }
  1356. .create-user-body {
  1357. display: flex;
  1358. flex-direction: column;
  1359. gap: 18px;
  1360. padding: 24px;
  1361. overflow-y: auto;
  1362. }
  1363. .create-user-body .notice {
  1364. margin: 0;
  1365. }
  1366. .create-user-field {
  1367. display: flex;
  1368. min-width: 0;
  1369. flex-direction: column;
  1370. gap: 8px;
  1371. color: #334155;
  1372. font-size: 13px;
  1373. font-weight: 600;
  1374. }
  1375. .create-user-field.required > span::after {
  1376. content: " *";
  1377. color: #ef4444;
  1378. }
  1379. .create-user-field input {
  1380. width: 100%;
  1381. min-width: 0;
  1382. box-sizing: border-box;
  1383. border: 1px solid #cbd5e1;
  1384. border-radius: 9px;
  1385. background: #f8fafc;
  1386. padding: 11px 13px;
  1387. color: #0f172a;
  1388. font: inherit;
  1389. font-size: 14px;
  1390. font-weight: 400;
  1391. transition: border-color .15s ease, background .15s ease, box-shadow .15s ease;
  1392. }
  1393. .create-user-field input::placeholder {
  1394. color: #94a3b8;
  1395. }
  1396. .create-user-field input:focus {
  1397. outline: none;
  1398. border-color: #55b0f7;
  1399. background: #ffffff;
  1400. box-shadow: 0 0 0 3px rgba(85, 176, 247, .12);
  1401. }
  1402. .create-user-field small,
  1403. .create-user-hint {
  1404. margin: 0;
  1405. color: #64748b;
  1406. font-size: 12px;
  1407. font-weight: 400;
  1408. line-height: 1.55;
  1409. }
  1410. .create-user-grid {
  1411. display: grid;
  1412. grid-template-columns: repeat(2, minmax(0, 1fr));
  1413. gap: 16px;
  1414. }
  1415. .password-generate-row {
  1416. display: grid;
  1417. grid-template-columns: minmax(0, 1fr) auto;
  1418. gap: 10px;
  1419. }
  1420. .password-generate-row .secondary-button {
  1421. white-space: nowrap;
  1422. }
  1423. .login-credentials {
  1424. overflow: hidden;
  1425. border: 1px solid #dbe4ef;
  1426. border-radius: 10px;
  1427. background: #f8fafc;
  1428. }
  1429. .login-credentials > div {
  1430. display: grid;
  1431. grid-template-columns: 88px minmax(0, 1fr);
  1432. align-items: center;
  1433. gap: 14px;
  1434. padding: 13px 16px;
  1435. }
  1436. .login-credentials > div + div {
  1437. border-top: 1px solid #e2e8f0;
  1438. }
  1439. .login-credentials span {
  1440. color: #64748b;
  1441. font-size: 12px;
  1442. }
  1443. .login-credentials strong {
  1444. overflow-wrap: anywhere;
  1445. color: #0f172a;
  1446. font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
  1447. font-size: 14px;
  1448. }
  1449. .copy-login-button {
  1450. align-self: stretch;
  1451. justify-content: center;
  1452. }
  1453. @media (max-width: 540px) {
  1454. .modal-backdrop {
  1455. align-items: end;
  1456. padding: 12px;
  1457. }
  1458. .modal-dialog.create-user-modal {
  1459. width: 100%;
  1460. max-height: calc(100vh - 24px);
  1461. border-radius: 14px;
  1462. }
  1463. .create-user-modal .modal-header,
  1464. .create-user-modal .modal-footer,
  1465. .create-user-body {
  1466. padding-left: 18px;
  1467. padding-right: 18px;
  1468. }
  1469. .create-user-grid {
  1470. grid-template-columns: 1fr;
  1471. }
  1472. .password-generate-row {
  1473. grid-template-columns: 1fr;
  1474. }
  1475. .password-generate-row .secondary-button {
  1476. justify-content: center;
  1477. }
  1478. }
  1479. /* ==================== 讲师出镜照片上传与规范示例 ==================== */
  1480. .instructor-image-field-wrapper {
  1481. margin: 18px 0;
  1482. display: flex;
  1483. flex-direction: column;
  1484. gap: 10px;
  1485. }
  1486. .field-label-row {
  1487. display: flex;
  1488. justify-content: space-between;
  1489. align-items: center;
  1490. }
  1491. .field-main-label {
  1492. display: flex;
  1493. align-items: center;
  1494. gap: 6px;
  1495. font-size: 13px;
  1496. font-weight: 500;
  1497. color: #334155;
  1498. margin: 0 !important;
  1499. }
  1500. .field-sub-label {
  1501. font-size: 11px;
  1502. color: #94a3b8;
  1503. font-weight: normal;
  1504. }
  1505. .guide-toggle-btn {
  1506. border: 0;
  1507. background: transparent;
  1508. color: #1684ce;
  1509. font-size: 11px;
  1510. display: inline-flex;
  1511. align-items: center;
  1512. gap: 4px;
  1513. cursor: pointer;
  1514. padding: 2px 6px;
  1515. border-radius: 4px;
  1516. transition: all 0.15s ease;
  1517. }
  1518. .guide-toggle-btn:hover {
  1519. background: #eaf7ff;
  1520. color: #0875bd;
  1521. }
  1522. /* 上传虚线框 */
  1523. .instructor-upload-zone {
  1524. border: 1.5px dashed #cbd5e1;
  1525. border-radius: 10px;
  1526. background: #ffffff;
  1527. padding: 20px 16px;
  1528. display: flex;
  1529. flex-direction: column;
  1530. align-items: center;
  1531. justify-content: center;
  1532. text-align: center;
  1533. cursor: pointer;
  1534. transition: all 0.2s ease;
  1535. gap: 8px;
  1536. }
  1537. .instructor-upload-zone:hover,
  1538. .instructor-upload-zone.dragging {
  1539. border-color: #55b0f7;
  1540. background: #eaf7ff;
  1541. transform: translateY(-1px);
  1542. }
  1543. .upload-zone-icon {
  1544. width: 44px;
  1545. height: 44px;
  1546. border-radius: 50%;
  1547. background: #eaf7ff;
  1548. color: #1684ce;
  1549. display: grid;
  1550. place-items: center;
  1551. transition: transform 0.2s ease;
  1552. }
  1553. .instructor-upload-zone:hover .upload-zone-icon {
  1554. transform: scale(1.08);
  1555. }
  1556. .upload-zone-text strong {
  1557. display: block;
  1558. font-size: 13px;
  1559. font-weight: 600;
  1560. color: #1e293b;
  1561. margin-bottom: 3px;
  1562. }
  1563. .upload-zone-text span {
  1564. font-size: 11px;
  1565. color: #64748b;
  1566. }
  1567. /* 已选图片预览卡片 */
  1568. .instructor-image-preview-card {
  1569. display: flex;
  1570. align-items: center;
  1571. gap: 12px;
  1572. padding: 10px 14px;
  1573. background: #ffffff;
  1574. border: 1px solid #8dcefa;
  1575. border-radius: 10px;
  1576. box-shadow: 0 1px 3px rgba(85, 176, 247, 0.08);
  1577. }
  1578. .preview-thumbnail {
  1579. width: 52px;
  1580. height: 64px;
  1581. object-fit: cover;
  1582. border-radius: 6px;
  1583. border: 1px solid #e2e8f0;
  1584. background: #f1f5f9;
  1585. flex-shrink: 0;
  1586. }
  1587. .preview-info {
  1588. display: flex;
  1589. flex-direction: column;
  1590. min-width: 0;
  1591. flex: 1;
  1592. }
  1593. .preview-info .file-name {
  1594. font-size: 13px;
  1595. font-weight: 500;
  1596. color: #0f172a;
  1597. white-space: nowrap;
  1598. overflow: hidden;
  1599. text-overflow: ellipsis;
  1600. }
  1601. .preview-info .file-size {
  1602. font-size: 11px;
  1603. color: #16a34a;
  1604. margin-top: 3px;
  1605. font-weight: 500;
  1606. }
  1607. .preview-actions {
  1608. display: flex;
  1609. align-items: center;
  1610. gap: 8px;
  1611. }
  1612. .preview-actions .change-btn {
  1613. border: 1px solid #cbd5e1;
  1614. background: #ffffff;
  1615. color: #334155;
  1616. font-size: 11px;
  1617. padding: 5px 10px;
  1618. border-radius: 6px;
  1619. cursor: pointer;
  1620. transition: all 0.15s ease;
  1621. }
  1622. .preview-actions .change-btn:hover {
  1623. background: #f1f5f9;
  1624. border-color: #94a3b8;
  1625. }
  1626. .preview-actions .remove-btn {
  1627. border: 0;
  1628. background: #fee2e2;
  1629. color: #ef4444;
  1630. width: 28px;
  1631. height: 28px;
  1632. border-radius: 6px;
  1633. display: grid;
  1634. place-items: center;
  1635. cursor: pointer;
  1636. transition: all 0.15s ease;
  1637. }
  1638. .preview-actions .remove-btn:hover {
  1639. background: #fecaca;
  1640. color: #dc2626;
  1641. }
  1642. /* 规范示例展示区域 */
  1643. .sample-guide-section {
  1644. background: #ffffff;
  1645. border: 1px solid #e2e8f0;
  1646. border-radius: 10px;
  1647. padding: 14px;
  1648. display: flex;
  1649. flex-direction: column;
  1650. gap: 12px;
  1651. }
  1652. .sample-guide-header {
  1653. display: flex;
  1654. justify-content: space-between;
  1655. align-items: center;
  1656. }
  1657. .guide-title {
  1658. display: flex;
  1659. align-items: center;
  1660. gap: 6px;
  1661. font-size: 12px;
  1662. font-weight: 600;
  1663. color: #1e293b;
  1664. }
  1665. .guide-icon {
  1666. color: #1684ce;
  1667. }
  1668. .guide-tag {
  1669. font-size: 10px;
  1670. background: #dcfce7;
  1671. color: #15803d;
  1672. font-weight: 600;
  1673. padding: 2px 7px;
  1674. border-radius: 4px;
  1675. }
  1676. /* 示例卡片两列布局 */
  1677. .sample-cards-grid {
  1678. display: grid;
  1679. grid-template-columns: 1fr 1fr;
  1680. gap: 10px;
  1681. }
  1682. .sample-card {
  1683. background: #f8fafc;
  1684. border: 1px solid #e2e8f0;
  1685. border-radius: 8px;
  1686. overflow: hidden;
  1687. cursor: pointer;
  1688. transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
  1689. display: flex;
  1690. flex-direction: column;
  1691. }
  1692. .sample-card:hover {
  1693. transform: translateY(-2px);
  1694. border-color: #8dcefa;
  1695. box-shadow: 0 6px 16px rgba(85, 176, 247, 0.08);
  1696. }
  1697. .sample-img-box {
  1698. position: relative;
  1699. width: 100%;
  1700. aspect-ratio: 4 / 3;
  1701. background: #000000;
  1702. overflow: hidden;
  1703. }
  1704. .sample-img-box img {
  1705. width: 100%;
  1706. height: 100%;
  1707. object-fit: cover;
  1708. object-position: top center;
  1709. transition: transform 0.3s ease;
  1710. }
  1711. .sample-card:hover .sample-img-box img {
  1712. transform: scale(1.05);
  1713. }
  1714. .sample-pose-badge {
  1715. position: absolute;
  1716. top: 6px;
  1717. left: 6px;
  1718. background: rgba(15, 23, 42, 0.7);
  1719. backdrop-filter: blur(4px);
  1720. color: #ffffff;
  1721. font-size: 10px;
  1722. font-weight: 600;
  1723. padding: 2px 6px;
  1724. border-radius: 4px;
  1725. }
  1726. .zoom-hint {
  1727. position: absolute;
  1728. inset: 0;
  1729. background: rgba(15, 23, 42, 0.45);
  1730. backdrop-filter: blur(2px);
  1731. color: #ffffff;
  1732. font-size: 11px;
  1733. font-weight: 500;
  1734. display: flex;
  1735. align-items: center;
  1736. justify-content: center;
  1737. gap: 4px;
  1738. opacity: 0;
  1739. transition: opacity 0.2s ease;
  1740. }
  1741. .sample-card:hover .zoom-hint {
  1742. opacity: 1;
  1743. }
  1744. .sample-card-desc {
  1745. padding: 8px 10px;
  1746. display: flex;
  1747. flex-direction: column;
  1748. gap: 3px;
  1749. }
  1750. .sample-card-desc strong {
  1751. font-size: 12px;
  1752. color: #0f172a;
  1753. font-weight: 600;
  1754. }
  1755. .sample-card-desc p {
  1756. margin: 0;
  1757. font-size: 10.5px;
  1758. color: #64748b;
  1759. line-height: 1.4;
  1760. }
  1761. /* 文字要求清单 */
  1762. .guide-requirements-list {
  1763. display: flex;
  1764. flex-direction: column;
  1765. gap: 8px;
  1766. border-top: 1px dashed #e2e8f0;
  1767. padding-top: 10px;
  1768. }
  1769. .req-item {
  1770. display: flex;
  1771. gap: 8px;
  1772. align-items: flex-start;
  1773. }
  1774. .req-icon {
  1775. width: 18px;
  1776. height: 18px;
  1777. border-radius: 50%;
  1778. display: grid;
  1779. place-items: center;
  1780. flex-shrink: 0;
  1781. margin-top: 1px;
  1782. }
  1783. .green-dot {
  1784. color: #16a34a;
  1785. background: #dcfce7;
  1786. }
  1787. .blue-dot {
  1788. color: #1684ce;
  1789. background: #d3edff;
  1790. }
  1791. .amber-dot {
  1792. color: #d97706;
  1793. background: #fef3c7;
  1794. }
  1795. .red-dot {
  1796. color: #dc2626;
  1797. background: #fee2e2;
  1798. }
  1799. .req-content {
  1800. display: flex;
  1801. flex-direction: column;
  1802. gap: 2px;
  1803. }
  1804. .req-content strong {
  1805. font-size: 11.5px;
  1806. color: #1e293b;
  1807. font-weight: 600;
  1808. }
  1809. .req-content p {
  1810. margin: 0;
  1811. font-size: 11px;
  1812. color: #475569;
  1813. line-height: 1.45;
  1814. }
  1815. /* 示例大图弹窗 Modal */
  1816. .sample-modal-overlay {
  1817. position: fixed;
  1818. inset: 0;
  1819. background: rgba(15, 23, 42, 0.65);
  1820. backdrop-filter: blur(6px);
  1821. z-index: 1000;
  1822. display: grid;
  1823. place-items: center;
  1824. padding: 20px;
  1825. animation: fadeIn 0.2s ease-out;
  1826. }
  1827. .sample-modal-box {
  1828. width: min(820px, 95vw);
  1829. max-height: 90vh;
  1830. background: #ffffff;
  1831. border-radius: 16px;
  1832. box-shadow: 0 25px 60px rgba(0, 0, 0, 0.25);
  1833. display: flex;
  1834. flex-direction: column;
  1835. overflow: hidden;
  1836. border: 1px solid #cbd5e1;
  1837. }
  1838. .sample-modal-header {
  1839. padding: 16px 22px;
  1840. background: #f8fafc;
  1841. border-bottom: 1px solid #e2e8f0;
  1842. display: flex;
  1843. justify-content: space-between;
  1844. align-items: center;
  1845. }
  1846. .modal-title-group {
  1847. display: flex;
  1848. flex-direction: column;
  1849. gap: 3px;
  1850. }
  1851. .modal-title-group h3 {
  1852. margin: 0;
  1853. font-size: 17px;
  1854. font-weight: 600;
  1855. color: #0f172a;
  1856. }
  1857. .modal-sub-tag {
  1858. font-size: 11px;
  1859. color: #1684ce;
  1860. font-weight: 500;
  1861. }
  1862. .modal-close-btn {
  1863. border: 0;
  1864. background: transparent;
  1865. color: #64748b;
  1866. width: 32px;
  1867. height: 32px;
  1868. border-radius: 8px;
  1869. display: grid;
  1870. place-items: center;
  1871. cursor: pointer;
  1872. transition: all 0.15s ease;
  1873. }
  1874. .modal-close-btn:hover {
  1875. background: #e2e8f0;
  1876. color: #0f172a;
  1877. }
  1878. .sample-modal-body {
  1879. display: grid;
  1880. grid-template-columns: 340px 1fr;
  1881. padding: 20px 24px;
  1882. gap: 24px;
  1883. overflow-y: auto;
  1884. align-items: start;
  1885. }
  1886. @media (max-width: 720px) {
  1887. .sample-modal-body {
  1888. grid-template-columns: 1fr;
  1889. }
  1890. }
  1891. .sample-modal-view {
  1892. background: #0f172a;
  1893. border-radius: 12px;
  1894. overflow: hidden;
  1895. display: flex;
  1896. align-items: center;
  1897. justify-content: center;
  1898. height: 400px;
  1899. box-shadow: inset 0 0 20px rgba(0, 0, 0, 0.4);
  1900. }
  1901. .modal-large-img {
  1902. max-width: 100%;
  1903. max-height: 100%;
  1904. object-fit: contain;
  1905. }
  1906. .sample-modal-spec {
  1907. display: flex;
  1908. flex-direction: column;
  1909. gap: 14px;
  1910. }
  1911. .sample-modal-spec h4 {
  1912. margin: 0;
  1913. font-size: 15px;
  1914. font-weight: 600;
  1915. color: #0f172a;
  1916. }
  1917. .spec-checklist {
  1918. list-style: none;
  1919. padding: 0;
  1920. margin: 0;
  1921. display: flex;
  1922. flex-direction: column;
  1923. gap: 12px;
  1924. }
  1925. .spec-checklist li {
  1926. position: relative;
  1927. padding-left: 18px;
  1928. font-size: 12.5px;
  1929. color: #334155;
  1930. line-height: 1.5;
  1931. }
  1932. .spec-checklist li::before {
  1933. content: "•";
  1934. position: absolute;
  1935. left: 4px;
  1936. color: #1684ce;
  1937. font-size: 18px;
  1938. line-height: 1;
  1939. }
  1940. .spec-checklist strong {
  1941. color: #0f172a;
  1942. }
  1943. .sample-modal-switch {
  1944. margin-top: 12px;
  1945. padding: 12px 14px;
  1946. background: #f1f5f9;
  1947. border-radius: 10px;
  1948. display: flex;
  1949. flex-direction: column;
  1950. gap: 8px;
  1951. }
  1952. .switch-label {
  1953. font-size: 11.5px;
  1954. font-weight: 600;
  1955. color: #475569;
  1956. }
  1957. .switch-buttons {
  1958. display: flex;
  1959. gap: 8px;
  1960. }
  1961. .switch-btn {
  1962. flex: 1;
  1963. padding: 8px 12px;
  1964. border: 1px solid #cbd5e1;
  1965. background: #ffffff;
  1966. border-radius: 6px;
  1967. font-size: 12px;
  1968. font-weight: 500;
  1969. color: #334155;
  1970. cursor: pointer;
  1971. transition: all 0.15s ease;
  1972. }
  1973. .switch-btn:hover {
  1974. border-color: #8dcefa;
  1975. color: #1684ce;
  1976. }
  1977. .switch-btn.active {
  1978. background: #1684ce;
  1979. color: #ffffff;
  1980. border-color: #1684ce;
  1981. font-weight: 600;
  1982. }
  1983. .sample-modal-footer {
  1984. padding: 14px 22px;
  1985. background: #f8fafc;
  1986. border-top: 1px solid #e2e8f0;
  1987. display: flex;
  1988. justify-content: flex-end;
  1989. }
  1990. /* 讲师表单操作按钮 */
  1991. .instructor-form-actions {
  1992. display: flex;
  1993. gap: 10px;
  1994. margin-top: 16px;
  1995. }
  1996. .instructor-form-actions .cancel-btn {
  1997. flex: 1;
  1998. height: 40px;
  1999. border: 1px solid #cbd5e1;
  2000. background: #ffffff;
  2001. color: #475569;
  2002. border-radius: 8px;
  2003. font-size: 13px;
  2004. font-weight: 500;
  2005. cursor: pointer;
  2006. transition: all 0.15s ease;
  2007. }
  2008. .instructor-form-actions .cancel-btn:hover {
  2009. background: #f1f5f9;
  2010. color: #1e293b;
  2011. }
  2012. .instructor-form-actions .primary-button {
  2013. flex: 2;
  2014. margin-top: 0;
  2015. height: 40px;
  2016. }
  2017. /* ==================== 讲师添加弹窗 Modal ==================== */
  2018. .modal-dialog.instructor-modal {
  2019. width: min(680px, 95vw);
  2020. max-height: 90vh;
  2021. background: #ffffff;
  2022. border-radius: 16px;
  2023. box-shadow: 0 25px 60px rgba(0, 0, 0, 0.22);
  2024. display: flex;
  2025. flex-direction: column;
  2026. overflow: hidden;
  2027. border: 1px solid #e2e8f0;
  2028. }
  2029. .modal-form-content {
  2030. display: flex;
  2031. flex-direction: column;
  2032. overflow: hidden;
  2033. flex: 1;
  2034. }
  2035. .instructor-modal-body {
  2036. padding: 22px 24px;
  2037. overflow-y: auto;
  2038. display: flex;
  2039. flex-direction: column;
  2040. gap: 16px;
  2041. flex: 1;
  2042. }
  2043. .instructor-modal-body .form-group-row {
  2044. display: grid;
  2045. grid-template-columns: 1fr 1fr;
  2046. gap: 16px;
  2047. }
  2048. @media (max-width: 600px) {
  2049. .instructor-modal-body .form-group-row {
  2050. grid-template-columns: 1fr;
  2051. }
  2052. }
  2053. .instructor-modal-body .form-label {
  2054. display: flex;
  2055. flex-direction: column;
  2056. gap: 8px;
  2057. font-size: 13px;
  2058. font-weight: 500;
  2059. color: #334155;
  2060. }
  2061. .instructor-modal-body .form-label span {
  2062. display: flex;
  2063. align-items: center;
  2064. gap: 4px;
  2065. }
  2066. .instructor-modal-body .form-label.required span::after {
  2067. content: " *";
  2068. color: #ef4444;
  2069. }
  2070. .instructor-modal-body input,
  2071. .instructor-modal-body textarea {
  2072. width: 100%;
  2073. border: 1px solid #cbd5e1;
  2074. border-radius: 8px;
  2075. padding: 10px 14px;
  2076. background: #f8fafc;
  2077. font-size: 14px;
  2078. color: #0f172a;
  2079. transition: all 0.15s ease;
  2080. box-sizing: border-box;
  2081. font-family: inherit;
  2082. }
  2083. .instructor-modal-body input:focus,
  2084. .instructor-modal-body textarea:focus {
  2085. outline: none;
  2086. border-color: #55b0f7;
  2087. background: #ffffff;
  2088. box-shadow: 0 0 0 3px rgba(85, 176, 247, 0.12);
  2089. }
  2090. .instructor-modal-body textarea {
  2091. resize: vertical;
  2092. min-height: 76px;
  2093. line-height: 1.5;
  2094. }
  2095. .instructor-modal-body .instructor-image-field-wrapper {
  2096. margin: 4px 0 0;
  2097. }
  2098. /* 侧边栏空讲师状态 */
  2099. .empty-instructor-box {
  2100. padding: 22px 16px;
  2101. background: #f8fafc;
  2102. border: 1px dashed #cbd5e1;
  2103. border-radius: 10px;
  2104. text-align: center;
  2105. display: flex;
  2106. flex-direction: column;
  2107. align-items: center;
  2108. gap: 10px;
  2109. margin-top: 10px;
  2110. }
  2111. .empty-instructor-box p {
  2112. margin: 0;
  2113. font-size: 12px;
  2114. color: #64748b;
  2115. }
  2116. .add-instructor-trigger-btn {
  2117. display: inline-flex;
  2118. align-items: center;
  2119. gap: 6px;
  2120. padding: 6px 14px;
  2121. font-size: 12px;
  2122. font-weight: 500;
  2123. border-radius: 6px;
  2124. color: #1684ce;
  2125. background: #eaf7ff;
  2126. border: 1px solid #a7dcff;
  2127. cursor: pointer;
  2128. transition: all 0.15s ease;
  2129. }
  2130. .add-instructor-trigger-btn:hover {
  2131. background: #d3edff;
  2132. color: #0875bd;
  2133. border-color: #8dcefa;
  2134. }
  2135. .add-instructor-btn:hover {
  2136. background: #f1f5f9 !important;
  2137. color: #1684ce;
  2138. border-color: #cbd5e1 !important;
  2139. }
  2140. /* ==================== 课程分集与素材管理 UI ==================== */
  2141. .workspace-grid {
  2142. display: grid;
  2143. grid-template-columns: minmax(0, 1fr) 340px;
  2144. gap: 24px;
  2145. align-items: start;
  2146. width: 100%;
  2147. margin-top: 20px;
  2148. }
  2149. .episodes-workspace-main {
  2150. display: flex;
  2151. flex-direction: column;
  2152. gap: 20px;
  2153. }
  2154. .episodes-header-panel {
  2155. padding: 24px 28px;
  2156. background: #ffffff;
  2157. border-radius: 14px;
  2158. border: 1px solid #e2e8f0;
  2159. box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);
  2160. }
  2161. .panel-heading-row {
  2162. display: flex;
  2163. justify-content: space-between;
  2164. align-items: flex-start;
  2165. gap: 20px;
  2166. }
  2167. .panel-intro {
  2168. color: #64748b;
  2169. font-size: 13px;
  2170. margin: 6px 0 0 0;
  2171. line-height: 1.5;
  2172. }
  2173. .episodes-actions-toolbar {
  2174. display: flex;
  2175. align-items: center;
  2176. gap: 10px;
  2177. flex-shrink: 0;
  2178. }
  2179. .episodes-metrics-bar {
  2180. display: flex;
  2181. align-items: center;
  2182. gap: 48px;
  2183. margin-top: 20px;
  2184. padding: 14px 18px;
  2185. background: #f8fafc;
  2186. border-radius: 10px;
  2187. border: 1px solid #edf2f7;
  2188. }
  2189. .metric-item {
  2190. display: flex;
  2191. flex-direction: column;
  2192. gap: 2px;
  2193. }
  2194. .metric-num {
  2195. font-size: 20px;
  2196. font-weight: 700;
  2197. color: #0f172a;
  2198. letter-spacing: -0.02em;
  2199. }
  2200. .metric-item small {
  2201. font-size: 12px;
  2202. color: #64748b;
  2203. }
  2204. .expand-collapse-strip {
  2205. display: flex;
  2206. justify-content: space-between;
  2207. align-items: center;
  2208. margin-top: 16px;
  2209. padding-top: 14px;
  2210. border-top: 1px dashed #e2e8f0;
  2211. font-size: 12px;
  2212. color: #475569;
  2213. }
  2214. .expand-links {
  2215. display: flex;
  2216. align-items: center;
  2217. gap: 6px;
  2218. }
  2219. .expand-links button {
  2220. background: transparent;
  2221. border: 0;
  2222. color: #1684ce;
  2223. font-size: 12px;
  2224. cursor: pointer;
  2225. padding: 0;
  2226. font-weight: 500;
  2227. }
  2228. .expand-links button:hover {
  2229. text-decoration: underline;
  2230. }
  2231. /* 分集卡片容器 */
  2232. .episodes-list-container {
  2233. display: flex;
  2234. flex-direction: column;
  2235. gap: 14px;
  2236. }
  2237. .episode-card {
  2238. background: #ffffff;
  2239. border-radius: 12px;
  2240. border: 1px solid #e2e8f0;
  2241. box-shadow: 0 1px 3px rgba(0, 0, 0, 0.03);
  2242. overflow: hidden;
  2243. transition: all 0.2s ease;
  2244. }
  2245. .episode-card:hover {
  2246. border-color: #cbd5e1;
  2247. box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
  2248. }
  2249. .episode-card.expanded {
  2250. border-color: #8dcefa;
  2251. box-shadow: 0 4px 16px rgba(85, 176, 247, 0.08);
  2252. }
  2253. .episode-card-header {
  2254. display: flex;
  2255. justify-content: space-between;
  2256. align-items: center;
  2257. padding: 14px 18px;
  2258. cursor: pointer;
  2259. user-select: none;
  2260. background: #ffffff;
  2261. transition: background 0.15s ease;
  2262. }
  2263. .episode-card.expanded .episode-card-header {
  2264. background: #f8fbff;
  2265. border-bottom: 1px solid #e2e8f0;
  2266. }
  2267. .header-left {
  2268. display: flex;
  2269. align-items: center;
  2270. gap: 12px;
  2271. flex: 1;
  2272. min-width: 0;
  2273. }
  2274. .ep-toggle-arrow {
  2275. color: #64748b;
  2276. display: flex;
  2277. align-items: center;
  2278. }
  2279. .ep-number-tag {
  2280. display: inline-flex;
  2281. align-items: center;
  2282. padding: 3px 8px;
  2283. font-size: 11px;
  2284. font-weight: 700;
  2285. color: #0875bd;
  2286. background: #eaf7ff;
  2287. border-radius: 6px;
  2288. border: 1px solid #a7dcff;
  2289. flex-shrink: 0;
  2290. letter-spacing: 0.02em;
  2291. }
  2292. .ep-title {
  2293. margin: 0;
  2294. font-size: 15px;
  2295. font-weight: 600;
  2296. color: #1e293b;
  2297. overflow: hidden;
  2298. text-overflow: ellipsis;
  2299. white-space: nowrap;
  2300. }
  2301. .header-right {
  2302. display: flex;
  2303. align-items: center;
  2304. gap: 8px;
  2305. flex-shrink: 0;
  2306. }
  2307. .tag-pill {
  2308. display: inline-flex;
  2309. align-items: center;
  2310. padding: 3px 8px;
  2311. border-radius: 4px;
  2312. font-size: 11px;
  2313. font-weight: 500;
  2314. }
  2315. .tag-pill-success {
  2316. background: #f0fdf4;
  2317. color: #166534;
  2318. border: 1px solid #bbf7d0;
  2319. }
  2320. .tag-pill-dim {
  2321. background: #f1f5f9;
  2322. color: #64748b;
  2323. border: 1px solid #e2e8f0;
  2324. }
  2325. .tag-pill-info {
  2326. background: #eaf7ff;
  2327. color: #075f9b;
  2328. border: 1px solid #d3edff;
  2329. }
  2330. .icon-action-btn {
  2331. display: inline-flex;
  2332. align-items: center;
  2333. justify-content: center;
  2334. width: 28px;
  2335. height: 28px;
  2336. border-radius: 6px;
  2337. border: 1px solid transparent;
  2338. background: transparent;
  2339. color: #64748b;
  2340. cursor: pointer;
  2341. transition: all 0.15s ease;
  2342. }
  2343. .icon-action-btn:hover {
  2344. background: #f1f5f9;
  2345. color: #1e293b;
  2346. border-color: #e2e8f0;
  2347. }
  2348. .icon-action-btn.delete-btn:hover {
  2349. background: #fef2f2;
  2350. color: #dc2626;
  2351. border-color: #fecaca;
  2352. }
  2353. /* 展开后的分集主体 */
  2354. .episode-card-body {
  2355. padding: 18px 20px;
  2356. background: #ffffff;
  2357. }
  2358. .episode-content-heading {
  2359. display: flex;
  2360. align-items: center;
  2361. margin: 2px 0 12px;
  2362. }
  2363. .episode-content-heading > div {
  2364. display: flex;
  2365. align-items: baseline;
  2366. gap: 10px;
  2367. }
  2368. .episode-content-heading strong {
  2369. color: #1e293b;
  2370. font-size: 14px;
  2371. }
  2372. .episode-content-heading span {
  2373. color: #94a3b8;
  2374. font-size: 12px;
  2375. }
  2376. .ep-body-grid {
  2377. display: flex;
  2378. flex-direction: column;
  2379. gap: 12px;
  2380. }
  2381. .ep-notes-box,
  2382. .ep-assets-box {
  2383. display: flex;
  2384. flex-direction: column;
  2385. background: #fbfcfe;
  2386. border: 1px solid #e2e8f0;
  2387. border-radius: 10px;
  2388. padding: 14px 16px;
  2389. }
  2390. .ep-assets-box {
  2391. padding-bottom: 12px;
  2392. }
  2393. .box-title-row {
  2394. display: flex;
  2395. justify-content: space-between;
  2396. align-items: center;
  2397. margin-bottom: 10px;
  2398. }
  2399. .box-title-row .title-left {
  2400. display: flex;
  2401. flex-direction: row;
  2402. align-items: center;
  2403. gap: 6px;
  2404. color: #1e293b;
  2405. font-size: 13px;
  2406. font-weight: 600;
  2407. }
  2408. .optional-label,
  2409. .asset-count-label {
  2410. padding: 2px 6px;
  2411. border-radius: 999px;
  2412. background: #f1f5f9;
  2413. color: #64748b;
  2414. font-size: 10px;
  2415. font-weight: 500;
  2416. }
  2417. .asset-count-label {
  2418. background: #eaf7ff;
  2419. color: #1684ce;
  2420. }
  2421. .dirty-badge {
  2422. font-size: 11px;
  2423. padding: 2px 6px;
  2424. background: #fef3c7;
  2425. color: #b45309;
  2426. border-radius: 4px;
  2427. font-weight: 600;
  2428. }
  2429. .ep-notes-textarea {
  2430. width: 100%;
  2431. border: 1px solid #cbd5e1;
  2432. border-radius: 6px;
  2433. padding: 10px 12px;
  2434. font-size: 13px;
  2435. line-height: 1.6;
  2436. color: #1e293b;
  2437. background: #ffffff;
  2438. resize: vertical;
  2439. min-height: 120px;
  2440. transition: border-color 0.15s ease;
  2441. }
  2442. .ep-notes-textarea:focus {
  2443. outline: none;
  2444. border-color: #1684ce;
  2445. box-shadow: 0 0 0 3px rgba(85, 176, 247, 0.12);
  2446. }
  2447. .lecture-preview { max-height: 130px; overflow: auto; padding: 10px 12px; background: #fff; border: 1px solid #e2e8f0; border-radius: 6px; font-size: 13px; line-height: 1.7; overflow-wrap: anywhere; }
  2448. .lecture-preview p { margin: 0 0 8px; }
  2449. .lecture-preview ul, .lecture-preview ol { padding-left: 24px; }
  2450. .lecture-count { color: #64748b; margin-top: 8px; }
  2451. .modal-dialog.lecture-dialog { width: min(960px, calc(100vw - 32px)); height: min(88vh, 900px); max-height: calc(100dvh - 32px); display: flex; flex-direction: column; overflow: hidden; background: #fff; border: 1px solid #dbe4ee; border-radius: 12px; box-shadow: 0 24px 64px rgba(15, 23, 42, .24); }
  2452. .lecture-dialog .modal-header { flex: none; padding: 18px 24px; }
  2453. .lecture-dialog .modal-header small { display: block; margin-top: 5px; color: #64748b; }
  2454. .lecture-toolbar { display: flex; flex: none; gap: 6px; padding: 10px 20px; border-bottom: 1px solid #e2e8f0; background: #fff; }
  2455. .lecture-toolbar button { display: grid; place-items: center; width: 36px; height: 36px; border: 1px solid #dbe4ee; border-radius: 6px; background: #fff; color: #334155; cursor: pointer; }
  2456. .lecture-toolbar button:hover { background: #eaf7ff; color: #0875bd; }
  2457. .lecture-editor { flex: 1; min-height: 0; overflow: auto; margin: 16px 20px; padding: 18px; border: 1px solid #cbd5e1; border-radius: 8px; background: #fff; font-size: 15px; line-height: 1.8; outline: none; overflow-wrap: anywhere; white-space: pre-wrap; }
  2458. .lecture-editor:focus { border-color: #0875bd; box-shadow: 0 0 0 3px rgba(85,176,247,.12); }
  2459. .lecture-editor:empty::before { content: attr(data-placeholder); color: #94a3b8; }
  2460. .lecture-dialog-footer { flex: none; padding: 14px 20px 18px; display: flex; align-items: center; justify-content: space-between; gap: 12px; background: #fff; border-top: 1px solid #edf2f7; }
  2461. .lecture-dialog-footer small { color: #64748b; }
  2462. .lecture-dialog-footer > div { display: flex; gap: 8px; }
  2463. .lecture-dialog-footer .lecture-stats { display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 12px; color: #334155; }
  2464. .lecture-stats strong { color: #0875bd; font-size: 15px; }
  2465. .lecture-stats span { font-size: 13px; }
  2466. .lecture-stats small { display: block; width: 100%; font-size: 11px; }
  2467. @media (max-width: 600px) { .modal-dialog.lecture-dialog { height: calc(100dvh - 24px); max-height: none; } .lecture-dialog .modal-header { padding: 14px 16px; } .lecture-toolbar { padding: 8px 12px; } .lecture-editor { margin: 12px; padding: 12px; } .lecture-dialog-footer { align-items: stretch; flex-direction: column; padding: 10px 12px 14px; } .lecture-dialog-footer > div { justify-content: flex-end; } }
  2468. .asset-preview-backdrop { position: fixed; inset: 0; z-index: 1100; display: grid; place-items: center; padding: 12px; background: rgba(15,23,42,.88); }
  2469. .asset-preview-dialog { width: min(1450px, 100%); height: min(100%, 1000px); display: flex; flex-direction: column; overflow: hidden; border-radius: 10px; background: #f1f5f9; box-shadow: 0 24px 72px rgba(0,0,0,.3); }
  2470. .asset-preview-header, .asset-preview-footer { flex: none; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 18px; background: #fff; }
  2471. .asset-preview-header { border-bottom: 1px solid #e2e8f0; }
  2472. .asset-preview-header > div { min-width: 0; display: flex; flex-direction: column; }
  2473. .asset-preview-header strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 15px; }
  2474. .asset-preview-header span { color: #64748b; font-size: 12px; }
  2475. .asset-preview-header .asset-preview-warning { color: #9a5b16; }
  2476. .asset-preview-header button, .asset-preview-footer button { display: inline-flex; align-items: center; justify-content: center; gap: 5px; border: 1px solid #dbe4ee; border-radius: 6px; padding: 7px 10px; background: #fff; color: #334155; cursor: pointer; }
  2477. .asset-preview-header button { border: 0; }
  2478. .asset-preview-footer { border-top: 1px solid #e2e8f0; }
  2479. .asset-preview-footer > div { display: flex; align-items: center; gap: 10px; }
  2480. .asset-preview-footer button:disabled { opacity: .45; cursor: default; }
  2481. .asset-preview-stage { position: relative; flex: 1; min-height: 0; display: flex; align-items: center; justify-content: center; overflow: auto; padding: 20px; background: #e8edf3; }
  2482. .asset-preview-canvas { max-width: 100%; height: auto; margin: auto; background: #fff; box-shadow: 0 4px 20px rgba(15,23,42,.15); }
  2483. .asset-preview-media { max-width: 100%; max-height: 100%; object-fit: contain; }
  2484. .asset-preview-message { text-align: center; color: #475569; }
  2485. .asset-preview-rendering { position: absolute; bottom: 16px; left: 50%; transform: translateX(-50%); padding: 5px 12px; border-radius: 20px; background: #334155; color: #fff; font-size: 12px; }
  2486. .asset-preview-action { flex: none; border: 1px solid #bee4ff; border-radius: 6px; padding: 5px 9px; background: #eff8ff; color: #0875bd; cursor: pointer; font-size: 12px; }
  2487. .asset-preview-action:hover { background: #d3edff; }
  2488. .asset-row > button:not(:first-of-type) { margin-left: 0; }
  2489. .asset-row .asset-preview-action { border: 1px solid #bee4ff; background: #eff8ff; color: #0875bd; }
  2490. .asset-row .asset-preview-action:hover { background: #d3edff; color: #075f9b; }
  2491. @media (max-width: 600px) { .asset-preview-backdrop { padding: 0; } .asset-preview-dialog { height: 100dvh; border-radius: 0; } .asset-preview-stage { padding: 8px; } .asset-preview-footer { padding: 10px; } .asset-preview-footer > div { gap: 4px; font-size: 12px; } .asset-preview-footer button { padding: 6px; font-size: 12px; } }
  2492. .notes-footer-row {
  2493. display: flex;
  2494. justify-content: space-between;
  2495. align-items: center;
  2496. margin-top: 8px;
  2497. }
  2498. .notes-footer-row small {
  2499. font-size: 11px;
  2500. color: #94a3b8;
  2501. }
  2502. .save-notes-btn {
  2503. padding: 4px 12px;
  2504. font-size: 12px;
  2505. gap: 4px;
  2506. }
  2507. /* 分集素材列表 */
  2508. .ep-assets-list {
  2509. display: flex;
  2510. flex-direction: column;
  2511. gap: 6px;
  2512. margin-bottom: 0;
  2513. max-height: 160px;
  2514. overflow-y: auto;
  2515. }
  2516. .ep-asset-item {
  2517. display: flex;
  2518. align-items: center;
  2519. gap: 8px;
  2520. padding: 6px 10px;
  2521. background: #ffffff;
  2522. border: 1px solid #e2e8f0;
  2523. border-radius: 6px;
  2524. transition: all 0.15s ease;
  2525. }
  2526. .ep-asset-item:hover {
  2527. border-color: #cbd5e1;
  2528. background: #f8fafc;
  2529. }
  2530. .asset-item-icon {
  2531. color: #1684ce;
  2532. flex-shrink: 0;
  2533. }
  2534. .ep-asset-info {
  2535. flex: 1;
  2536. min-width: 0;
  2537. display: flex;
  2538. flex-direction: column;
  2539. }
  2540. .ep-asset-info strong {
  2541. font-size: 12px;
  2542. font-weight: 500;
  2543. color: #1e293b;
  2544. overflow: hidden;
  2545. text-overflow: ellipsis;
  2546. white-space: nowrap;
  2547. }
  2548. .ep-asset-info span {
  2549. font-size: 10px;
  2550. color: #94a3b8;
  2551. }
  2552. .ep-upload-zone {
  2553. margin-top: 8px;
  2554. }
  2555. .ep-file-label {
  2556. display: flex;
  2557. align-items: center;
  2558. justify-content: center;
  2559. gap: 6px;
  2560. padding: 8px 12px;
  2561. background: #eaf7ff;
  2562. border: 1px dashed #8dcefa;
  2563. border-radius: 6px;
  2564. font-size: 12px;
  2565. font-weight: 500;
  2566. color: #0875bd;
  2567. cursor: pointer;
  2568. transition: all 0.15s ease;
  2569. }
  2570. .ep-file-label:hover {
  2571. background: #d3edff;
  2572. border-color: #60a5fa;
  2573. }
  2574. .compact-upload-button {
  2575. flex: 0 0 auto;
  2576. padding: 6px 11px;
  2577. border-style: solid;
  2578. }
  2579. .ep-pending-files {
  2580. margin-top: 8px;
  2581. display: flex;
  2582. flex-direction: column;
  2583. gap: 6px;
  2584. }
  2585. .pending-chips {
  2586. display: flex;
  2587. flex-wrap: wrap;
  2588. gap: 4px;
  2589. }
  2590. .pending-chip {
  2591. display: inline-flex;
  2592. align-items: center;
  2593. gap: 4px;
  2594. padding: 3px 8px;
  2595. background: #f1f5f9;
  2596. border-radius: 4px;
  2597. font-size: 11px;
  2598. color: #334155;
  2599. }
  2600. .pending-chip button {
  2601. background: transparent;
  2602. border: 0;
  2603. color: #94a3b8;
  2604. cursor: pointer;
  2605. display: flex;
  2606. padding: 0;
  2607. }
  2608. .pending-chip button:hover {
  2609. color: #ef4444;
  2610. }
  2611. /* 空分集提示卡片 */
  2612. .episodes-empty-card {
  2613. display: flex;
  2614. flex-direction: column;
  2615. align-items: center;
  2616. justify-content: center;
  2617. padding: 48px 24px;
  2618. background: #ffffff;
  2619. border: 2px dashed #cbd5e1;
  2620. border-radius: 12px;
  2621. text-align: center;
  2622. }
  2623. .episodes-empty-card .empty-icon {
  2624. color: #94a3b8;
  2625. margin-bottom: 12px;
  2626. }
  2627. .episodes-empty-card h3 {
  2628. margin: 0 0 6px 0;
  2629. font-size: 16px;
  2630. color: #1e293b;
  2631. }
  2632. .episodes-empty-card p {
  2633. margin: 0 0 20px 0;
  2634. font-size: 13px;
  2635. color: #64748b;
  2636. max-width: 440px;
  2637. }
  2638. .empty-actions {
  2639. display: flex;
  2640. gap: 12px;
  2641. }
  2642. /* 全局资产卡片 */
  2643. .global-assets-panel {
  2644. padding: 24px 28px;
  2645. background: #ffffff;
  2646. border-radius: 14px;
  2647. border: 1px solid #e2e8f0;
  2648. }
  2649. /* 通用资产备注卡片 */
  2650. .asset-notes-card {
  2651. display: flex;
  2652. flex-direction: column;
  2653. background: #fbfcfe;
  2654. border: 1px solid #e2e8f0;
  2655. border-radius: 10px;
  2656. padding: 14px 16px;
  2657. margin-bottom: 14px;
  2658. }
  2659. .asset-notes-header {
  2660. display: flex;
  2661. justify-content: space-between;
  2662. align-items: center;
  2663. margin-bottom: 10px;
  2664. }
  2665. .asset-notes-header .notes-header-left {
  2666. display: flex;
  2667. align-items: center;
  2668. gap: 6px;
  2669. color: #1e293b;
  2670. font-size: 13px;
  2671. font-weight: 600;
  2672. }
  2673. .asset-notes-header .notes-actions {
  2674. display: flex;
  2675. align-items: center;
  2676. gap: 4px;
  2677. }
  2678. .asset-notes-text {
  2679. font-size: 13px;
  2680. line-height: 1.6;
  2681. color: #334155;
  2682. white-space: pre-wrap;
  2683. word-break: break-word;
  2684. background: #ffffff;
  2685. border: 1px solid #f1f5f9;
  2686. border-radius: 6px;
  2687. padding: 10px 12px;
  2688. }
  2689. .asset-notes-edit-box {
  2690. display: flex;
  2691. flex-direction: column;
  2692. gap: 8px;
  2693. }
  2694. .asset-notes-textarea {
  2695. width: 100%;
  2696. border: 1px solid #cbd5e1;
  2697. border-radius: 6px;
  2698. padding: 10px 12px;
  2699. font-size: 13px;
  2700. line-height: 1.6;
  2701. color: #1e293b;
  2702. background: #ffffff;
  2703. resize: vertical;
  2704. min-height: 90px;
  2705. transition: border-color 0.15s ease;
  2706. box-sizing: border-box;
  2707. }
  2708. .asset-notes-textarea:focus {
  2709. outline: none;
  2710. border-color: #0284c7;
  2711. box-shadow: 0 0 0 3px rgba(2, 132, 199, 0.12);
  2712. }
  2713. .add-asset-notes-btn {
  2714. display: inline-flex;
  2715. align-items: center;
  2716. gap: 5px;
  2717. }
  2718. .notes-btn-group {
  2719. display: flex;
  2720. align-items: center;
  2721. gap: 8px;
  2722. }
  2723. /* 提交统计提示 */
  2724. .submit-summary-info {
  2725. margin-bottom: 10px;
  2726. }
  2727. .submit-summary-info p {
  2728. margin: 0;
  2729. font-size: 12px;
  2730. color: #64748b;
  2731. line-height: 1.5;
  2732. }
  2733. /* ==================== 分集弹窗 EpisodeModal 样式 ==================== */
  2734. .modal-dialog.episode-modal {
  2735. width: min(680px, 95vw);
  2736. max-height: 90vh;
  2737. background: #ffffff;
  2738. border-radius: 16px;
  2739. box-shadow: 0 25px 60px rgba(0, 0, 0, 0.22);
  2740. display: flex;
  2741. flex-direction: column;
  2742. overflow: hidden;
  2743. border: 1px solid #e2e8f0;
  2744. }
  2745. .modal-tabs-header {
  2746. display: flex;
  2747. background: #f1f5f9;
  2748. padding: 6px 8px;
  2749. gap: 6px;
  2750. border-bottom: 1px solid #e2e8f0;
  2751. }
  2752. .modal-tab-btn {
  2753. flex: 1;
  2754. display: flex;
  2755. align-items: center;
  2756. justify-content: center;
  2757. gap: 7px;
  2758. padding: 8px 14px;
  2759. font-size: 13px;
  2760. font-weight: 500;
  2761. color: #64748b;
  2762. background: transparent;
  2763. border: 0;
  2764. border-radius: 7px;
  2765. cursor: pointer;
  2766. transition: all 0.15s ease;
  2767. }
  2768. .modal-tab-btn:hover {
  2769. color: #1e293b;
  2770. background: rgba(255, 255, 255, 0.6);
  2771. }
  2772. .modal-tab-btn.active {
  2773. background: #ffffff;
  2774. color: #1684ce;
  2775. font-weight: 600;
  2776. box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05);
  2777. }
  2778. .episode-modal-body {
  2779. padding: 22px 24px;
  2780. overflow-y: auto;
  2781. display: flex;
  2782. flex-direction: column;
  2783. gap: 16px;
  2784. flex: 1;
  2785. }
  2786. .grid-two-inputs {
  2787. display: grid;
  2788. grid-template-columns: 120px 1fr;
  2789. gap: 14px;
  2790. }
  2791. @media (max-width: 540px) {
  2792. .grid-two-inputs {
  2793. grid-template-columns: 1fr;
  2794. }
  2795. }
  2796. .episode-modal-body .form-label {
  2797. display: flex;
  2798. flex-direction: column;
  2799. gap: 8px;
  2800. font-size: 13px;
  2801. font-weight: 500;
  2802. color: #334155;
  2803. }
  2804. .episode-modal-body .form-label span {
  2805. display: flex;
  2806. align-items: center;
  2807. gap: 4px;
  2808. }
  2809. .episode-modal-body .form-label.required span::after {
  2810. content: " *";
  2811. color: #ef4444;
  2812. }
  2813. .episode-modal-body input,
  2814. .episode-modal-body textarea {
  2815. width: 100%;
  2816. border: 1px solid #cbd5e1;
  2817. border-radius: 8px;
  2818. padding: 10px 14px;
  2819. background: #f8fafc;
  2820. font-size: 14px;
  2821. color: #0f172a;
  2822. transition: all 0.15s ease;
  2823. box-sizing: border-box;
  2824. font-family: inherit;
  2825. }
  2826. .episode-modal-body input:focus,
  2827. .episode-modal-body textarea:focus {
  2828. outline: none;
  2829. border-color: #55b0f7;
  2830. background: #ffffff;
  2831. box-shadow: 0 0 0 3px rgba(85, 176, 247, 0.12);
  2832. }
  2833. .episode-modal-body textarea {
  2834. resize: vertical;
  2835. min-height: 100px;
  2836. line-height: 1.55;
  2837. }
  2838. .label-with-badge {
  2839. display: flex;
  2840. justify-content: space-between;
  2841. align-items: center;
  2842. flex-wrap: wrap;
  2843. gap: 8px;
  2844. }
  2845. .optional-fields-toggle {
  2846. display: flex;
  2847. justify-content: flex-start;
  2848. padding-top: 2px;
  2849. }
  2850. .toggle-optional-btn {
  2851. display: inline-flex;
  2852. align-items: center;
  2853. gap: 6px;
  2854. background: transparent;
  2855. border: 1px dashed #cbd5e1;
  2856. border-radius: 8px;
  2857. padding: 8px 14px;
  2858. font-size: 12.5px;
  2859. color: #64748b;
  2860. cursor: pointer;
  2861. transition: all 0.15s ease;
  2862. font-weight: 500;
  2863. width: 100%;
  2864. justify-content: center;
  2865. }
  2866. .toggle-optional-btn:hover {
  2867. background: #f8fafc;
  2868. border-color: #94a3b8;
  2869. color: #334155;
  2870. }
  2871. .optional-fields-container {
  2872. display: flex;
  2873. flex-direction: column;
  2874. gap: 14px;
  2875. padding: 14px;
  2876. background: #f8fafc;
  2877. border: 1px solid #e2e8f0;
  2878. border-radius: 10px;
  2879. animation: fadeIn 0.18s ease-out;
  2880. }
  2881. .lecture-stats-badge {
  2882. display: inline-flex;
  2883. align-items: center;
  2884. gap: 5px;
  2885. font-size: 11px;
  2886. color: #1684ce;
  2887. background: #eaf7ff;
  2888. border: 1px solid #d3edff;
  2889. padding: 3px 8px;
  2890. border-radius: 6px;
  2891. font-weight: 500;
  2892. }
  2893. .batch-notice-banner {
  2894. display: flex;
  2895. align-items: flex-start;
  2896. gap: 12px;
  2897. padding: 12px 14px;
  2898. background: #eaf7ff;
  2899. border: 1px solid #a7dcff;
  2900. border-radius: 10px;
  2901. color: #075f9b;
  2902. }
  2903. .batch-notice-banner svg {
  2904. flex-shrink: 0;
  2905. margin-top: 2px;
  2906. color: #1684ce;
  2907. }
  2908. .batch-notice-banner strong {
  2909. display: block;
  2910. font-size: 13px;
  2911. margin-bottom: 2px;
  2912. color: #1e3a8a;
  2913. }
  2914. .batch-notice-banner p {
  2915. margin: 0;
  2916. font-size: 12px;
  2917. color: #55b0f7;
  2918. line-height: 1.45;
  2919. }
  2920. .quick-count-tags {
  2921. display: flex;
  2922. align-items: center;
  2923. flex-wrap: wrap;
  2924. gap: 8px;
  2925. margin-top: 4px;
  2926. }
  2927. .count-pill {
  2928. padding: 6px 12px;
  2929. font-size: 12px;
  2930. font-weight: 600;
  2931. border-radius: 6px;
  2932. border: 1px solid #cbd5e1;
  2933. background: #ffffff;
  2934. color: #334155;
  2935. cursor: pointer;
  2936. transition: all 0.15s ease;
  2937. }
  2938. .count-pill:hover {
  2939. border-color: #94a3b8;
  2940. background: #f8fafc;
  2941. }
  2942. .count-pill.active {
  2943. background: #1684ce;
  2944. color: #ffffff;
  2945. border-color: #1684ce;
  2946. box-shadow: 0 2px 6px rgba(85, 176, 247, 0.25);
  2947. }
  2948. .batch-preview-box {
  2949. background: #f8fafc;
  2950. border: 1px solid #e2e8f0;
  2951. border-radius: 10px;
  2952. padding: 12px 16px;
  2953. }
  2954. .preview-title {
  2955. display: block;
  2956. font-size: 12px;
  2957. font-weight: 600;
  2958. color: #475569;
  2959. margin-bottom: 8px;
  2960. }
  2961. .batch-preview-list {
  2962. display: flex;
  2963. flex-direction: column;
  2964. gap: 6px;
  2965. max-height: 160px;
  2966. overflow-y: auto;
  2967. }
  2968. .preview-row {
  2969. display: flex;
  2970. align-items: center;
  2971. gap: 8px;
  2972. background: #ffffff;
  2973. border: 1px solid #edf2f7;
  2974. padding: 6px 10px;
  2975. border-radius: 6px;
  2976. }
  2977. .preview-ep-tag {
  2978. font-size: 10px;
  2979. font-weight: 700;
  2980. color: #1684ce;
  2981. background: #eaf7ff;
  2982. border: 1px solid #d3edff;
  2983. padding: 2px 6px;
  2984. border-radius: 4px;
  2985. flex-shrink: 0;
  2986. }
  2987. .preview-ep-title {
  2988. font-size: 12px;
  2989. color: #1e293b;
  2990. white-space: nowrap;
  2991. overflow: hidden;
  2992. text-overflow: ellipsis;
  2993. }
  2994. .preview-row-more {
  2995. font-size: 11px;
  2996. color: #94a3b8;
  2997. text-align: center;
  2998. padding: 4px 0;
  2999. }
  3000. /* ==================== 制作交付与管理后台分集面板 ==================== */
  3001. .deliverable-category-wrapper {
  3002. display: flex;
  3003. flex-direction: column;
  3004. gap: 14px;
  3005. }
  3006. .episode-deliverable-group {
  3007. background: #ffffff;
  3008. border: 1px solid #e2e8f0;
  3009. border-radius: 8px;
  3010. padding: 12px 14px;
  3011. }
  3012. .episode-deliverable-group .group-title {
  3013. margin: 0 0 10px 0;
  3014. font-size: 13px;
  3015. font-weight: 600;
  3016. color: #1e293b;
  3017. display: flex;
  3018. align-items: center;
  3019. gap: 8px;
  3020. }
  3021. .ep-badge-small {
  3022. font-size: 10px;
  3023. padding: 2px 6px;
  3024. background: #d3edff;
  3025. color: #075f9b;
  3026. border-radius: 4px;
  3027. font-weight: 700;
  3028. }
  3029. /* 管理员端分集列表与交付 */
  3030. .admin-deliv-group-card {
  3031. background: #f8fafc;
  3032. border: 1px solid #e2e8f0;
  3033. border-radius: 8px;
  3034. padding: 12px 14px;
  3035. margin-bottom: 10px;
  3036. }
  3037. .admin-deliv-group-card .group-header {
  3038. display: flex;
  3039. align-items: center;
  3040. gap: 8px;
  3041. margin-bottom: 8px;
  3042. }
  3043. .deliv-upload-row {
  3044. display: flex;
  3045. align-items: center;
  3046. gap: 14px;
  3047. flex-wrap: wrap;
  3048. }
  3049. .target-ep-select-label {
  3050. display: flex;
  3051. align-items: center;
  3052. gap: 6px;
  3053. font-size: 12px;
  3054. color: #475569;
  3055. }
  3056. .target-ep-select-label select {
  3057. padding: 6px 10px;
  3058. border-radius: 6px;
  3059. border: 1px solid #cbd5e1;
  3060. font-size: 12px;
  3061. background: #ffffff;
  3062. color: #1e293b;
  3063. }
  3064. .admin-episodes-list {
  3065. display: flex;
  3066. flex-direction: column;
  3067. gap: 10px;
  3068. margin-bottom: 16px;
  3069. }
  3070. .admin-episode-card {
  3071. border: 1px solid #e2e8f0;
  3072. border-radius: 8px;
  3073. overflow: hidden;
  3074. background: #ffffff;
  3075. }
  3076. .admin-ep-header {
  3077. display: flex;
  3078. justify-content: space-between;
  3079. align-items: center;
  3080. padding: 10px 14px;
  3081. background: #f8fafc;
  3082. cursor: pointer;
  3083. user-select: none;
  3084. }
  3085. .admin-ep-header .header-left {
  3086. display: flex;
  3087. align-items: center;
  3088. gap: 8px;
  3089. }
  3090. .ep-badge-pill {
  3091. font-size: 10px;
  3092. font-weight: 700;
  3093. padding: 2px 6px;
  3094. background: #eaf7ff;
  3095. color: var(--blue);
  3096. border-radius: 4px;
  3097. }
  3098. .text-pill {
  3099. font-size: 11px;
  3100. color: #64748b;
  3101. background: #ffffff;
  3102. padding: 2px 6px;
  3103. border: 1px solid #e2e8f0;
  3104. border-radius: 4px;
  3105. }
  3106. .admin-ep-body {
  3107. padding: 14px;
  3108. border-top: 1px solid #e2e8f0;
  3109. background: #ffffff;
  3110. }
  3111. .admin-ep-summary {
  3112. margin: 0 0 10px 0;
  3113. font-size: 12px;
  3114. color: #475569;
  3115. }
  3116. .admin-ep-notes-display {
  3117. margin-bottom: 12px;
  3118. }
  3119. .notes-label {
  3120. display: flex;
  3121. align-items: center;
  3122. gap: 6px;
  3123. font-size: 12px;
  3124. font-weight: 600;
  3125. color: #334155;
  3126. margin-bottom: 6px;
  3127. }
  3128. .notes-pre-content {
  3129. margin: 0;
  3130. padding: 10px 12px;
  3131. background: #f8fafc;
  3132. border: 1px solid #e2e8f0;
  3133. border-radius: 6px;
  3134. font-family: inherit;
  3135. font-size: 12px;
  3136. line-height: 1.6;
  3137. color: #1e293b;
  3138. white-space: pre-wrap;
  3139. word-break: break-word;
  3140. max-height: 200px;
  3141. overflow-y: auto;
  3142. }
  3143. .admin-ep-assets-grid {
  3144. display: grid;
  3145. grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  3146. gap: 8px;
  3147. }
  3148. .admin-mini-asset-card {
  3149. display: flex;
  3150. align-items: center;
  3151. gap: 8px;
  3152. padding: 8px 10px;
  3153. background: #f8fafc;
  3154. border: 1px solid #e2e8f0;
  3155. border-radius: 6px;
  3156. }
  3157. .mini-asset-info {
  3158. flex: 1;
  3159. min-width: 0;
  3160. display: flex;
  3161. flex-direction: column;
  3162. }
  3163. .mini-asset-info strong {
  3164. font-size: 11px;
  3165. font-weight: 500;
  3166. overflow: hidden;
  3167. text-overflow: ellipsis;
  3168. white-space: nowrap;
  3169. }
  3170. .mini-asset-info small {
  3171. font-size: 10px;
  3172. color: #94a3b8;
  3173. }
  3174. .sidebar-episode-outline {
  3175. display: flex;
  3176. flex-direction: column;
  3177. gap: 8px;
  3178. max-height: 260px;
  3179. overflow-y: auto;
  3180. }
  3181. .outline-row {
  3182. display: flex;
  3183. align-items: flex-start;
  3184. gap: 8px;
  3185. padding: 6px 8px;
  3186. background: #f8fafc;
  3187. border-radius: 6px;
  3188. border: 1px solid #edf2f7;
  3189. }
  3190. .outline-badge {
  3191. font-size: 10px;
  3192. font-weight: 700;
  3193. padding: 2px 5px;
  3194. background: #eaf7ff;
  3195. color: #0875bd;
  3196. border-radius: 4px;
  3197. flex-shrink: 0;
  3198. }
  3199. .outline-info {
  3200. display: flex;
  3201. flex-direction: column;
  3202. min-width: 0;
  3203. }
  3204. .outline-info strong {
  3205. font-size: 11px;
  3206. color: #1e293b;
  3207. overflow: hidden;
  3208. text-overflow: ellipsis;
  3209. white-space: nowrap;
  3210. }
  3211. .outline-info small {
  3212. font-size: 10px;
  3213. color: #94a3b8;
  3214. }
  3215. .sub-section-title {
  3216. margin: 16px 0 10px 0;
  3217. font-size: 13px;
  3218. color: #334155;
  3219. }
  3220. .ep-subrow {
  3221. display: flex;
  3222. flex-direction: column;
  3223. gap: 2px;
  3224. padding: 6px 8px;
  3225. background: #ffffff;
  3226. border-radius: 6px;
  3227. border: 1px solid #e2e8f0;
  3228. margin-bottom: 4px;
  3229. }
  3230. .ep-subrow span {
  3231. font-size: 12px;
  3232. font-weight: 600;
  3233. color: #1e293b;
  3234. }
  3235. .ep-subrow small {
  3236. font-size: 11px;
  3237. color: #64748b;
  3238. }
  3239. /* ==================== 底部辅助操作区 & 删除课程弹窗 ==================== */
  3240. .course-danger-section {
  3241. margin-top: 40px;
  3242. margin-bottom: 24px;
  3243. padding-top: 24px;
  3244. border-top: 1px dashed #e2e8f0;
  3245. }
  3246. .danger-zone-card {
  3247. background: #fbfcfd;
  3248. border: 1px solid #f1f5f9;
  3249. border-radius: 10px;
  3250. padding: 14px 18px;
  3251. display: flex;
  3252. justify-content: space-between;
  3253. align-items: center;
  3254. gap: 16px;
  3255. }
  3256. @media (max-width: 640px) {
  3257. .danger-zone-card {
  3258. flex-direction: column;
  3259. align-items: flex-start;
  3260. }
  3261. }
  3262. /* ==========================================================================
  3263. 公开营销首页
  3264. ========================================================================== */
  3265. .marketing-page { min-height:100vh; background:#f7f8fb; color:var(--ink); overflow:hidden; }
  3266. .marketing-nav { height:76px; max-width:1400px; margin:0 auto; padding:0 clamp(24px,5vw,76px); display:flex; align-items:center; border-bottom:1px solid rgba(220,225,235,.75); }
  3267. .marketing-nav nav { display:flex; gap:34px; margin-left:70px; font-size:13px; color:#6f7b90; }
  3268. .marketing-nav nav a:hover,.marketing-login:hover { color:var(--blue-action); }
  3269. .marketing-nav-actions { margin-left:auto; display:flex; align-items:center; gap:22px; }
  3270. .marketing-login { font-size:13px; color:#536077; }
  3271. .public-help-nav { width:100%; flex:0 0 76px; }
  3272. .marketing-hero { width:min(1400px,100%); min-height:660px; margin:0 auto; padding:90px clamp(24px,5vw,76px) 80px; display:grid; grid-template-columns:1.05fr .95fr; align-items:center; position:relative; }
  3273. .marketing-hero-copy { position:relative; z-index:2; max-width:650px; }
  3274. .marketing-kicker { display:flex; align-items:center; gap:10px; color:#0875bd; font-size:11px; font-weight:600; letter-spacing:.18em; margin:0 0 27px; }
  3275. .marketing-kicker span { width:22px; height:1px; background:#c09b57; }
  3276. .marketing-hero h1 { margin:0; font-family:"Songti SC","Noto Serif SC","Source Han Serif CN",serif; font-size:clamp(48px,5vw,72px); font-weight:500; line-height:1.23; letter-spacing:-.045em; }
  3277. .marketing-hero h1 em { color:var(--blue); font-style:normal; }
  3278. .marketing-lead { max-width:570px; margin:28px 0 32px; color:#748096; font-size:16px; line-height:1.9; }
  3279. .marketing-hero-actions { display:flex; align-items:center; gap:28px; }
  3280. .marketing-cta { min-height:49px; padding:0 23px; }
  3281. .marketing-text-link { font-size:13px; color:#647087; display:inline-flex; gap:8px; align-items:center; }
  3282. .marketing-text-link:hover { color:var(--blue); }
  3283. .marketing-trust { display:flex; gap:25px; margin-top:36px; color:#8994a7; font-size:11px; }
  3284. .marketing-trust span { display:flex; align-items:center; gap:6px; }
  3285. .marketing-trust svg { color:#b38b43; }
  3286. .marketing-visual { min-height:470px; position:relative; }
  3287. .visual-orbit { position:absolute; left:0; top:50%; border:1px solid rgba(87,105,138,.18); border-radius:50%; transform:translateY(-50%) rotate(-15deg); }
  3288. .visual-orbit-a { width:640px; height:320px; }
  3289. .visual-orbit-b { width:500px; height:245px; left:70px; border-color:rgba(85,176,247,.14); }
  3290. .visual-star { position:absolute; border-radius:50%; z-index:2; }
  3291. .star-a { width:9px; height:9px; background:#c09a54; left:42px; top:161px; box-shadow:0 0 0 5px rgba(192,154,84,.1); }
  3292. .star-b { width:7px; height:7px; background:#55b0f7; right:12px; bottom:123px; }
  3293. .course-preview-card { width:min(410px,82%); position:absolute; left:100px; top:82px; z-index:3; border:1px solid #e0e6f0; border-radius:16px; background:rgba(255,255,255,.88); backdrop-filter:blur(12px); padding:28px; box-shadow:0 30px 80px rgba(31,52,94,.12); transform:rotate(1.5deg); }
  3294. .preview-top { display:flex; justify-content:space-between; align-items:center; color:#94a0b3; font-size:10px; letter-spacing:.18em; }
  3295. .preview-top i { width:8px; height:8px; border-radius:50%; background:#d6ad61; box-shadow:0 0 0 5px #f8f3e8; }
  3296. .preview-lines { margin:34px 0 40px; display:flex; flex-direction:column; gap:12px; }
  3297. .preview-lines b { height:9px; border-radius:5px; background:#edf0f5; width:92%; }
  3298. .preview-lines b:first-child { height:18px; width:68%; background:#27334a; }
  3299. .preview-lines b:last-child { width:55%; }
  3300. .preview-progress { display:flex; justify-content:space-between; color:#707d92; font-size:11px; margin-bottom:10px; }
  3301. .preview-progress strong { color:var(--blue); font-size:12px; }
  3302. .preview-bar { height:5px; background:#edf1f6; border-radius:5px; overflow:hidden; }
  3303. .preview-bar i { display:block; width:75%; height:100%; background:linear-gradient(90deg,#55b0f7,#9cd6ff); }
  3304. .preview-stages { display:flex; justify-content:space-between; margin-top:25px; color:#a1aabb; font-size:10px; }
  3305. .preview-stages .done { color:#526582; }
  3306. .visual-note { position:absolute; right:-5px; bottom:24px; font-family:"Songti SC",serif; font-size:15px; line-height:1.8; color:#8993a5; letter-spacing:.08em; }
  3307. .marketing-process { width:min(1400px,100%); margin:0 auto; padding:100px clamp(24px,5vw,76px) 110px; border-top:1px solid var(--line); }
  3308. .marketing-section-heading { display:flex; align-items:end; justify-content:space-between; margin-bottom:46px; }
  3309. .marketing-section-heading>div>p,.marketing-final-cta>p { color:#6680b2; font-size:10px; font-weight:600; letter-spacing:.22em; margin:0 0 12px; }
  3310. .marketing-section-heading h2,.marketing-final-cta h2 { font-family:"Songti SC",serif; font-size:clamp(30px,3vw,43px); font-weight:500; margin:0; letter-spacing:-.03em; }
  3311. .marketing-section-heading>p { max-width:360px; color:#8a95a7; font-size:13px; line-height:1.8; margin:0; }
  3312. .process-grid { display:grid; grid-template-columns:repeat(4,1fr); border:1px solid #e1e6ef; border-radius:14px; overflow:hidden; background:rgba(255,255,255,.65); }
  3313. .process-card { min-height:260px; padding:28px; border-right:1px solid #e5e9f1; transition:.25s ease; }
  3314. .process-card:last-child { border-right:0; }
  3315. .process-card:hover { background:#fff; transform:translateY(-3px); box-shadow:0 16px 38px rgba(30,50,88,.07); }
  3316. .process-card-top { display:flex; justify-content:space-between; align-items:center; color:#9aa5b7; }
  3317. .process-card-top span { font-family:Georgia,serif; font-size:12px; color:#b18a45; }
  3318. .process-card-top svg { color:#6e88bb; }
  3319. .process-card h3 { margin:55px 0 14px; font-size:18px; font-weight:600; }
  3320. .process-card p { margin:0; color:#8390a4; font-size:13px; line-height:1.8; }
  3321. .marketing-final-cta { width:min(1248px,calc(100% - 48px)); margin:0 auto 95px; min-height:365px; border-radius:18px; overflow:hidden; position:relative; display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center; background:linear-gradient(145deg,#eaf7ff,#f8f9fc); border:1px solid #dce5f4; }
  3322. .marketing-final-cta>span { color:#7c899e; font-size:14px; margin:18px 0 27px; }
  3323. .final-orbit { position:absolute; width:700px; height:230px; border:1px solid rgba(53,92,171,.14); border-radius:50%; transform:rotate(-9deg); pointer-events:none; }
  3324. .final-orbit i { position:absolute; width:9px; height:9px; border-radius:50%; background:#c29b54; left:65px; top:36px; }
  3325. .marketing-final-cta>*:not(.final-orbit) { position:relative; z-index:1; }
  3326. @media (max-width:900px) {
  3327. .marketing-hero { grid-template-columns:1fr; padding-top:68px; }
  3328. .marketing-visual { margin-top:24px; min-height:430px; }
  3329. .process-grid { grid-template-columns:repeat(2,1fr); }
  3330. .process-card:nth-child(2) { border-right:0; }
  3331. .process-card:nth-child(-n+2) { border-bottom:1px solid #e5e9f1; }
  3332. }
  3333. @media (max-width:640px) {
  3334. .marketing-nav { height:68px; padding:0 18px; }
  3335. .public-help-nav { flex-basis:68px; }
  3336. .marketing-nav nav,.marketing-login { display:none; }
  3337. .marketing-nav-actions { gap:0; }
  3338. .marketing-hero { padding:58px 20px 50px; min-height:auto; }
  3339. .marketing-hero h1 { font-size:43px; }
  3340. .marketing-lead { font-size:14px; }
  3341. .marketing-hero-actions { align-items:flex-start; flex-direction:column; gap:18px; }
  3342. .marketing-trust { flex-direction:column; gap:9px; margin-top:28px; }
  3343. .marketing-visual { min-height:360px; margin-left:-15px; }
  3344. .visual-orbit-a { width:470px; height:245px; left:-65px; }
  3345. .visual-orbit-b { width:370px; height:185px; left:-15px; }
  3346. .course-preview-card { left:28px; top:68px; width:320px; padding:23px; }
  3347. .visual-note { display:none; }
  3348. .marketing-process { padding:72px 20px 80px; }
  3349. .marketing-section-heading { align-items:flex-start; flex-direction:column; gap:18px; }
  3350. .process-grid { grid-template-columns:1fr; }
  3351. .process-card { min-height:220px; border-right:0; border-bottom:1px solid #e5e9f1; }
  3352. .process-card:last-child { border-bottom:0; }
  3353. .process-card h3 { margin-top:38px; }
  3354. .marketing-final-cta { width:calc(100% - 32px); margin-bottom:60px; padding:40px 20px; }
  3355. }
  3356. .danger-zone-title-row {
  3357. display: flex;
  3358. align-items: center;
  3359. gap: 6px;
  3360. margin-bottom: 2px;
  3361. }
  3362. .danger-icon {
  3363. color: #94a3b8;
  3364. }
  3365. .danger-zone-info h4 {
  3366. margin: 0;
  3367. font-size: 13.5px;
  3368. font-weight: 500;
  3369. color: #475569;
  3370. }
  3371. .danger-zone-info p {
  3372. margin: 0;
  3373. font-size: 12px;
  3374. color: #94a3b8;
  3375. line-height: 1.5;
  3376. }
  3377. .danger-button-subtle {
  3378. background: transparent;
  3379. color: #64748b;
  3380. border: 1px solid #e2e8f0;
  3381. border-radius: var(--button-radius, 6px);
  3382. min-height: 32px;
  3383. padding: 0 12px;
  3384. font-size: 12px;
  3385. font-weight: 400;
  3386. display: inline-flex;
  3387. align-items: center;
  3388. justify-content: center;
  3389. gap: 6px;
  3390. cursor: pointer;
  3391. white-space: nowrap;
  3392. transition: all 0.2s ease;
  3393. }
  3394. .danger-button-subtle:hover:not(:disabled) {
  3395. background: #fef2f2;
  3396. color: #ef4444;
  3397. border-color: #fecaca;
  3398. }
  3399. .danger-button-subtle:active:not(:disabled) {
  3400. background: #fee2e2;
  3401. }
  3402. .danger-button-subtle:disabled,
  3403. .danger-button-subtle.disabled {
  3404. background: transparent !important;
  3405. border-color: #f1f5f9 !important;
  3406. color: #cbd5e1 !important;
  3407. opacity: 0.8 !important;
  3408. cursor: not-allowed !important;
  3409. box-shadow: none !important;
  3410. transform: none !important;
  3411. }
  3412. /* 删除课程弹窗 */
  3413. .modal-dialog.delete-course-modal {
  3414. width: min(480px, 95vw);
  3415. background: #ffffff;
  3416. border-radius: 14px;
  3417. box-shadow: 0 20px 50px rgba(0, 0, 0, 0.15);
  3418. display: flex;
  3419. flex-direction: column;
  3420. overflow: hidden;
  3421. border: 1px solid #e2e8f0;
  3422. animation: modalPop 0.22s cubic-bezier(0.16, 1, 0.3, 1);
  3423. }
  3424. .modal-header-simple-title h3 {
  3425. margin: 0;
  3426. font-size: 16px;
  3427. font-weight: 600;
  3428. color: #1e293b;
  3429. }
  3430. .delete-modal-body {
  3431. padding: 18px 22px;
  3432. display: flex;
  3433. flex-direction: column;
  3434. gap: 16px;
  3435. }
  3436. .danger-alert-card {
  3437. background: #fff8f8;
  3438. border: 1px solid #fee2e2;
  3439. border-radius: 8px;
  3440. padding: 12px 14px;
  3441. }
  3442. .danger-alert-card p {
  3443. margin: 0;
  3444. font-size: 13px;
  3445. color: #991b1b;
  3446. line-height: 1.55;
  3447. }
  3448. .target-course-name-box {
  3449. margin: 8px 0 10px 0;
  3450. padding: 8px 12px;
  3451. background: #f8fafc;
  3452. border: 1px dashed #cbd5e1;
  3453. border-radius: 6px;
  3454. user-select: all;
  3455. }
  3456. .target-course-name-box code {
  3457. color: #0f172a;
  3458. font-weight: 600;
  3459. font-size: 13px;
  3460. font-family: inherit;
  3461. word-break: break-all;
  3462. }
  3463. .delete-confirm-input {
  3464. width: 100%;
  3465. height: 38px;
  3466. border-radius: 6px;
  3467. border: 1px solid #cbd5e1;
  3468. padding: 0 12px;
  3469. font-size: 13.5px;
  3470. background: #ffffff;
  3471. color: #0f172a;
  3472. transition: border-color 0.2s, box-shadow 0.2s;
  3473. box-sizing: border-box;
  3474. }
  3475. .delete-confirm-input:focus {
  3476. border-color: #ef4444;
  3477. outline: none;
  3478. box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.12);
  3479. }
  3480. .danger-submit-btn {
  3481. background: #ef4444;
  3482. color: #ffffff;
  3483. border: 1px solid #dc2626;
  3484. border-radius: var(--button-radius, 6px);
  3485. min-height: 36px;
  3486. padding: 0 18px;
  3487. font-size: 13px;
  3488. font-weight: 500;
  3489. display: inline-flex;
  3490. align-items: center;
  3491. justify-content: center;
  3492. gap: 6px;
  3493. cursor: pointer;
  3494. white-space: nowrap;
  3495. transition: all 0.2s ease;
  3496. }
  3497. .danger-submit-btn:hover:not(:disabled) {
  3498. background: #dc2626;
  3499. border-color: #b91c1c;
  3500. }
  3501. .danger-submit-btn:disabled {
  3502. background: #f1f5f9 !important;
  3503. border-color: #e2e8f0 !important;
  3504. color: #94a3b8 !important;
  3505. opacity: 0.8 !important;
  3506. cursor: not-allowed !important;
  3507. }
  3508. /* ==================== 联系星痕 · 等待制作面板卡片样式 ==================== */
  3509. .success-panel-actions {
  3510. display: flex;
  3511. align-items: center;
  3512. justify-content: center;
  3513. gap: 14px;
  3514. margin-top: 32px;
  3515. }
  3516. .contact-support-card {
  3517. margin-top: 28px;
  3518. background: #f8fafc;
  3519. border: 1px solid #e2e8f0;
  3520. border-radius: 12px;
  3521. padding: 22px 24px;
  3522. text-align: left;
  3523. }
  3524. .contact-card-header {
  3525. display: flex;
  3526. align-items: center;
  3527. gap: 12px;
  3528. margin-bottom: 20px;
  3529. padding-bottom: 16px;
  3530. border-bottom: 1px solid #edf2f7;
  3531. }
  3532. .contact-icon-badge {
  3533. width: 38px;
  3534. height: 38px;
  3535. border-radius: 8px;
  3536. background: #eaf7ff;
  3537. color: #1684ce;
  3538. display: flex;
  3539. align-items: center;
  3540. justify-content: center;
  3541. flex-shrink: 0;
  3542. }
  3543. .contact-header-text h4 {
  3544. margin: 0 0 4px;
  3545. font-size: 15px;
  3546. font-weight: 600;
  3547. color: #0f172a;
  3548. }
  3549. .contact-header-text p {
  3550. margin: 0;
  3551. font-size: 12px;
  3552. color: #64748b;
  3553. line-height: 1.5;
  3554. }
  3555. .contact-card-body {
  3556. display: flex;
  3557. gap: 22px;
  3558. align-items: stretch;
  3559. }
  3560. .contact-qr-container {
  3561. display: flex;
  3562. flex-direction: column;
  3563. align-items: center;
  3564. gap: 8px;
  3565. background: #ffffff;
  3566. padding: 12px;
  3567. border-radius: 10px;
  3568. border: 1px solid #e2e8f0;
  3569. box-shadow: 0 4px 12px rgba(0, 0, 0, 0.03);
  3570. flex-shrink: 0;
  3571. }
  3572. .contact-qr-box {
  3573. width: 140px;
  3574. height: 140px;
  3575. border-radius: 6px;
  3576. overflow: hidden;
  3577. display: flex;
  3578. align-items: center;
  3579. justify-content: center;
  3580. background: #ffffff;
  3581. }
  3582. .contact-qr-image {
  3583. width: 100%;
  3584. height: 100%;
  3585. object-fit: contain;
  3586. display: block;
  3587. }
  3588. .contact-qr-caption {
  3589. font-size: 11px;
  3590. font-weight: 500;
  3591. color: #64748b;
  3592. }
  3593. .contact-card-steps {
  3594. flex: 1;
  3595. display: flex;
  3596. flex-direction: column;
  3597. justify-content: space-between;
  3598. gap: 10px;
  3599. }
  3600. .contact-step-row {
  3601. display: flex;
  3602. align-items: flex-start;
  3603. gap: 12px;
  3604. padding: 10px 14px;
  3605. background: #ffffff;
  3606. border: 1px solid #f1f5f9;
  3607. border-radius: 8px;
  3608. }
  3609. .step-circle {
  3610. width: 22px;
  3611. height: 22px;
  3612. border-radius: 50%;
  3613. background: #eaf7ff;
  3614. color: #1684ce;
  3615. font-size: 11px;
  3616. font-weight: 600;
  3617. display: flex;
  3618. align-items: center;
  3619. justify-content: center;
  3620. flex-shrink: 0;
  3621. margin-top: 1px;
  3622. }
  3623. .step-desc {
  3624. display: flex;
  3625. flex-direction: column;
  3626. gap: 2px;
  3627. }
  3628. .step-desc strong {
  3629. font-size: 13px;
  3630. font-weight: 600;
  3631. color: #1e293b;
  3632. }
  3633. .step-desc span {
  3634. font-size: 12px;
  3635. color: #64748b;
  3636. line-height: 1.4;
  3637. }
  3638. /* ==================== 联系星痕 · 弹窗样式 ==================== */
  3639. .modal-dialog.contact-modal {
  3640. width: min(560px, 95vw);
  3641. background: #ffffff;
  3642. border-radius: 14px;
  3643. box-shadow: 0 20px 50px rgba(0, 0, 0, 0.15);
  3644. display: flex;
  3645. flex-direction: column;
  3646. overflow: hidden;
  3647. border: 1px solid #e2e8f0;
  3648. animation: modalPop 0.22s cubic-bezier(0.16, 1, 0.3, 1);
  3649. }
  3650. .contact-modal-body {
  3651. padding: 20px 24px;
  3652. display: flex;
  3653. flex-direction: column;
  3654. gap: 16px;
  3655. }
  3656. .contact-modal-intro {
  3657. background: #f8fafc;
  3658. border: 1px solid #e2e8f0;
  3659. border-radius: 8px;
  3660. padding: 12px 16px;
  3661. font-size: 13px;
  3662. color: #475569;
  3663. line-height: 1.6;
  3664. }
  3665. .contact-modal-intro p {
  3666. margin: 0;
  3667. }
  3668. .contact-modal-intro strong {
  3669. color: #0f172a;
  3670. }
  3671. .contact-modal-qr-section {
  3672. display: flex;
  3673. gap: 16px;
  3674. align-items: stretch;
  3675. }
  3676. .contact-modal-qr-card {
  3677. display: flex;
  3678. flex-direction: column;
  3679. align-items: center;
  3680. gap: 8px;
  3681. background: #ffffff;
  3682. padding: 12px;
  3683. border-radius: 10px;
  3684. border: 1px solid #e2e8f0;
  3685. box-shadow: 0 4px 12px rgba(0, 0, 0, 0.04);
  3686. flex-shrink: 0;
  3687. }
  3688. .qr-image-wrapper {
  3689. width: 140px;
  3690. height: 140px;
  3691. border-radius: 6px;
  3692. overflow: hidden;
  3693. background: #ffffff;
  3694. display: flex;
  3695. align-items: center;
  3696. justify-content: center;
  3697. }
  3698. .contact-modal-qr-img {
  3699. width: 100%;
  3700. height: 100%;
  3701. object-fit: contain;
  3702. display: block;
  3703. }
  3704. .qr-badge-text {
  3705. display: inline-flex;
  3706. align-items: center;
  3707. gap: 5px;
  3708. font-size: 11px;
  3709. font-weight: 500;
  3710. color: #64748b;
  3711. }
  3712. .contact-modal-steps {
  3713. flex: 1;
  3714. display: flex;
  3715. flex-direction: column;
  3716. justify-content: space-between;
  3717. gap: 8px;
  3718. }
  3719. .contact-step-card {
  3720. display: flex;
  3721. align-items: flex-start;
  3722. gap: 10px;
  3723. padding: 8px 12px;
  3724. background: #f8fafc;
  3725. border-radius: 8px;
  3726. border: 1px solid #f1f5f9;
  3727. }
  3728. .step-badge-num {
  3729. width: 20px;
  3730. height: 20px;
  3731. border-radius: 50%;
  3732. background: #eaf7ff;
  3733. color: #1684ce;
  3734. font-size: 11px;
  3735. font-weight: 600;
  3736. display: flex;
  3737. align-items: center;
  3738. justify-content: center;
  3739. flex-shrink: 0;
  3740. margin-top: 1px;
  3741. }
  3742. .step-content strong {
  3743. display: block;
  3744. font-size: 12.5px;
  3745. font-weight: 600;
  3746. color: #1e293b;
  3747. margin-bottom: 2px;
  3748. }
  3749. .step-content p {
  3750. margin: 0;
  3751. font-size: 11.5px;
  3752. color: #64748b;
  3753. line-height: 1.4;
  3754. }
  3755. .contact-modal-footer-tip {
  3756. display: flex;
  3757. align-items: center;
  3758. gap: 8px;
  3759. font-size: 12px;
  3760. color: #475569;
  3761. background: #eaf7ff;
  3762. border: 1px solid #d3edff;
  3763. padding: 10px 14px;
  3764. border-radius: 8px;
  3765. }
  3766. .contact-modal-footer-tip svg {
  3767. color: #55b0f7;
  3768. flex-shrink: 0;
  3769. }
  3770. @media (max-width: 600px) {
  3771. .contact-card-body,
  3772. .contact-modal-qr-section {
  3773. flex-direction: column;
  3774. align-items: center;
  3775. }
  3776. .contact-card-steps,
  3777. .contact-modal-steps {
  3778. width: 100%;
  3779. }
  3780. }
  3781. /* ==========================================================================
  3782. 帮助中心 (Help & FAQ Page)
  3783. ========================================================================== */
  3784. .help-page {
  3785. padding-top: 32px;
  3786. max-width: 1100px;
  3787. }
  3788. .help-hero {
  3789. text-align: center;
  3790. padding: 30px 20px 48px;
  3791. margin-bottom: 24px;
  3792. border-bottom: 1px solid var(--line);
  3793. position: relative;
  3794. }
  3795. .help-hero-content {
  3796. max-width: 680px;
  3797. margin: 0 auto;
  3798. }
  3799. .help-hero-content .eyebrow {
  3800. justify-content: center;
  3801. margin-bottom: 14px !important;
  3802. }
  3803. .help-hero h1 {
  3804. font-size: clamp(28px, 3.6vw, 42px);
  3805. font-weight: 400;
  3806. color: var(--ink);
  3807. margin: 0 0 14px;
  3808. letter-spacing: -0.02em;
  3809. }
  3810. .help-hero-desc {
  3811. color: var(--muted);
  3812. font-size: 15px;
  3813. line-height: 1.7;
  3814. margin: 0 auto 32px;
  3815. max-width: 540px;
  3816. }
  3817. /* 搜索栏 */
  3818. .help-search-bar {
  3819. position: relative;
  3820. max-width: 580px;
  3821. margin: 0 auto;
  3822. display: flex;
  3823. align-items: center;
  3824. }
  3825. .help-search-bar .search-icon {
  3826. position: absolute;
  3827. left: 18px;
  3828. color: #94a3b8;
  3829. pointer-events: none;
  3830. }
  3831. .help-search-bar input {
  3832. width: 100%;
  3833. height: 52px;
  3834. padding: 0 70px 0 50px;
  3835. font-size: 15px;
  3836. background: #fff;
  3837. border: 1px solid #dbe2ee;
  3838. border-radius: 26px;
  3839. color: var(--ink);
  3840. box-shadow: 0 4px 20px rgba(85, 176, 247, 0.05);
  3841. transition: all 0.2s ease;
  3842. outline: none;
  3843. }
  3844. .help-search-bar input:focus {
  3845. border-color: var(--blue);
  3846. box-shadow: 0 0 0 4px rgba(85, 176, 247, 0.1);
  3847. }
  3848. .clear-search-btn {
  3849. position: absolute;
  3850. right: 16px;
  3851. background: none;
  3852. border: none;
  3853. font-size: 12px;
  3854. color: var(--muted);
  3855. padding: 4px 8px;
  3856. border-radius: 4px;
  3857. }
  3858. .clear-search-btn:hover {
  3859. color: var(--ink);
  3860. background: #f1f5f9;
  3861. }
  3862. .help-search-status {
  3863. min-height: 20px;
  3864. margin-top: 10px;
  3865. color: var(--muted);
  3866. font-size: 13px;
  3867. }
  3868. /* 页面小节通用头部 */
  3869. .help-section {
  3870. margin-bottom: 56px;
  3871. }
  3872. .help-section-header {
  3873. text-align: center;
  3874. margin-bottom: 32px;
  3875. }
  3876. .help-section-header h2 {
  3877. font-size: 24px;
  3878. font-weight: 500;
  3879. color: var(--ink);
  3880. margin: 6px 0 8px;
  3881. }
  3882. .help-section-header p {
  3883. color: var(--muted);
  3884. font-size: 14px;
  3885. margin: 0;
  3886. }
  3887. /* 核心特性 4 卡片 */
  3888. .help-feature-grid {
  3889. display: grid;
  3890. grid-template-columns: repeat(4, 1fr);
  3891. gap: 18px;
  3892. }
  3893. .help-feature-card {
  3894. background: #fff;
  3895. border: 1px solid var(--line);
  3896. border-radius: 12px;
  3897. padding: 24px 20px;
  3898. transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
  3899. display: flex;
  3900. flex-direction: column;
  3901. }
  3902. .help-feature-card:hover {
  3903. border-color: #cbd5e1;
  3904. transform: translateY(-2px);
  3905. box-shadow: 0 10px 28px rgba(30, 41, 59, 0.06);
  3906. }
  3907. .feature-icon-box {
  3908. width: 44px;
  3909. height: 44px;
  3910. border-radius: 10px;
  3911. background: #eaf7ff;
  3912. color: var(--blue);
  3913. display: flex;
  3914. align-items: center;
  3915. justify-content: center;
  3916. margin-bottom: 16px;
  3917. }
  3918. .help-feature-card h3 {
  3919. font-size: 16px;
  3920. font-weight: 600;
  3921. color: var(--ink);
  3922. margin: 0 0 8px;
  3923. }
  3924. .help-feature-card p {
  3925. font-size: 13px;
  3926. color: #64748b;
  3927. line-height: 1.65;
  3928. margin: 0;
  3929. }
  3930. /* 四步流程指南 */
  3931. .help-steps-grid {
  3932. display: grid;
  3933. grid-template-columns: repeat(4, 1fr);
  3934. gap: 16px;
  3935. }
  3936. .help-step-item {
  3937. background: #fff;
  3938. border: 1px solid var(--line);
  3939. border-radius: 12px;
  3940. padding: 22px 18px;
  3941. position: relative;
  3942. display: flex;
  3943. flex-direction: column;
  3944. }
  3945. .help-feature-grid.is-search-results,
  3946. .help-steps-grid.is-search-results {
  3947. grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  3948. }
  3949. .step-badge {
  3950. font-size: 20px;
  3951. font-weight: 700;
  3952. color: #8dcefa;
  3953. font-family: Inter, monospace;
  3954. margin-bottom: 12px;
  3955. line-height: 1;
  3956. }
  3957. .step-item-body h4 {
  3958. font-size: 15px;
  3959. font-weight: 600;
  3960. color: var(--ink);
  3961. margin: 0 0 6px;
  3962. }
  3963. .step-item-body p {
  3964. font-size: 12.5px;
  3965. color: #64748b;
  3966. line-height: 1.6;
  3967. margin: 0;
  3968. }
  3969. /* FAQ 分类切换 Tabs */
  3970. .faq-category-tabs {
  3971. display: flex;
  3972. justify-content: center;
  3973. flex-wrap: wrap;
  3974. gap: 8px;
  3975. margin-bottom: 24px;
  3976. }
  3977. .faq-tab-btn {
  3978. background: #fff;
  3979. border: 1px solid #dce2ed;
  3980. color: #4b5563;
  3981. padding: 8px 18px;
  3982. border-radius: 20px;
  3983. font-size: 13px;
  3984. font-weight: 500;
  3985. transition: all 0.2s ease;
  3986. }
  3987. .faq-tab-btn:hover {
  3988. border-color: #cbd5e1;
  3989. background: #f8fafc;
  3990. color: var(--ink);
  3991. }
  3992. .faq-tab-btn.active {
  3993. background: var(--blue-action);
  3994. color: #fff;
  3995. border-color: var(--blue-action);
  3996. box-shadow: none;
  3997. }
  3998. /* FAQ 手风琴列表 */
  3999. .faq-accordion-list {
  4000. display: flex;
  4001. flex-direction: column;
  4002. gap: 12px;
  4003. max-width: 860px;
  4004. margin: 0 auto;
  4005. }
  4006. .faq-accordion-item {
  4007. background: #fff;
  4008. border: 1px solid var(--line);
  4009. border-radius: 10px;
  4010. overflow: hidden;
  4011. transition: border-color 0.2s ease, box-shadow 0.2s ease;
  4012. }
  4013. .faq-accordion-item:hover {
  4014. border-color: #cbd5e1;
  4015. }
  4016. .faq-accordion-item.is-open {
  4017. border-color: #8dcefa;
  4018. box-shadow: 0 4px 18px rgba(85, 176, 247, 0.06);
  4019. }
  4020. .faq-question-btn {
  4021. width: 100%;
  4022. display: flex;
  4023. align-items: center;
  4024. justify-content: space-between;
  4025. text-align: left;
  4026. padding: 18px 22px;
  4027. background: transparent;
  4028. border: none;
  4029. font-size: 15px;
  4030. font-weight: 500;
  4031. color: var(--ink);
  4032. gap: 16px;
  4033. transition: background 0.15s ease;
  4034. }
  4035. .faq-question-btn:hover {
  4036. background: #f8fafc;
  4037. }
  4038. .faq-question-text {
  4039. flex: 1;
  4040. }
  4041. .faq-chevron-icon {
  4042. color: #94a3b8;
  4043. display: grid;
  4044. place-items: center;
  4045. flex-shrink: 0;
  4046. transition: color 0.15s ease;
  4047. }
  4048. .faq-accordion-item.is-open .faq-chevron-icon {
  4049. color: var(--blue);
  4050. }
  4051. .faq-answer-content {
  4052. border-top: 1px solid #f1f5f9;
  4053. background: #fafcff;
  4054. padding: 18px 22px;
  4055. font-size: 14px;
  4056. color: #475569;
  4057. line-height: 1.75;
  4058. }
  4059. .faq-answer-inner {
  4060. max-width: 100%;
  4061. }
  4062. .faq-empty-state {
  4063. text-align: center;
  4064. padding: 48px 20px;
  4065. background: #fff;
  4066. border: 1px dashed #cbd5e1;
  4067. border-radius: 12px;
  4068. color: #94a3b8;
  4069. }
  4070. .faq-empty-state svg {
  4071. margin-bottom: 12px;
  4072. color: #94a3b8;
  4073. }
  4074. .faq-empty-state h4 {
  4075. font-size: 16px;
  4076. color: var(--ink);
  4077. margin: 0 0 6px;
  4078. font-weight: 500;
  4079. }
  4080. .faq-empty-state p {
  4081. font-size: 13px;
  4082. margin: 0;
  4083. }
  4084. .help-search-empty {
  4085. max-width: 860px;
  4086. margin: 0 auto 56px;
  4087. }
  4088. .help-search-empty .secondary-button {
  4089. margin-top: 18px;
  4090. }
  4091. /* 底部联系卡片 Banner */
  4092. .help-contact-banner {
  4093. background: linear-gradient(135deg, #ffffff 0%, #eaf7ff 100%);
  4094. border: 1px solid #d4e2fc;
  4095. border-radius: 14px;
  4096. padding: 30px 36px;
  4097. display: flex;
  4098. align-items: center;
  4099. justify-content: space-between;
  4100. gap: 24px;
  4101. box-shadow: 0 8px 30px rgba(85, 176, 247, 0.06);
  4102. margin-top: 20px;
  4103. }
  4104. .contact-banner-content {
  4105. display: flex;
  4106. align-items: center;
  4107. gap: 18px;
  4108. }
  4109. .contact-banner-icon {
  4110. width: 52px;
  4111. height: 52px;
  4112. border-radius: 12px;
  4113. background: #fff;
  4114. color: var(--blue);
  4115. display: flex;
  4116. align-items: center;
  4117. justify-content: center;
  4118. flex-shrink: 0;
  4119. box-shadow: 0 4px 14px rgba(85, 176, 247, 0.12);
  4120. }
  4121. .contact-banner-content h3 {
  4122. font-size: 17px;
  4123. font-weight: 600;
  4124. color: var(--ink);
  4125. margin: 0 0 6px;
  4126. }
  4127. .contact-banner-content p {
  4128. font-size: 13.5px;
  4129. color: #64748b;
  4130. margin: 0;
  4131. line-height: 1.5;
  4132. }
  4133. .contact-banner-action {
  4134. flex-shrink: 0;
  4135. }
  4136. /* 响应式断点 */
  4137. @media (max-width: 960px) {
  4138. .help-feature-grid,
  4139. .help-steps-grid {
  4140. grid-template-columns: repeat(2, 1fr);
  4141. }
  4142. .help-contact-banner {
  4143. flex-direction: column;
  4144. text-align: center;
  4145. padding: 28px 24px;
  4146. }
  4147. .contact-banner-content {
  4148. flex-direction: column;
  4149. }
  4150. }
  4151. @media (max-width: 600px) {
  4152. .help-feature-grid,
  4153. .help-steps-grid {
  4154. grid-template-columns: 1fr;
  4155. }
  4156. .help-hero {
  4157. padding: 20px 10px 36px;
  4158. }
  4159. .faq-question-btn {
  4160. padding: 15px 16px;
  4161. font-size: 14px;
  4162. }
  4163. .faq-answer-content {
  4164. padding: 15px 16px;
  4165. font-size: 13.5px;
  4166. }
  4167. }
  4168. /* ==========================================================================
  4169. 全站页脚 (Site Footer)
  4170. ========================================================================== */
  4171. .auth-wrapper {
  4172. min-height: 100vh;
  4173. display: flex;
  4174. flex-direction: column;
  4175. }
  4176. .auth-wrapper .auth-page {
  4177. flex: 1;
  4178. min-height: auto;
  4179. }
  4180. .admin-shell {
  4181. min-height: 100vh;
  4182. display: flex;
  4183. flex-direction: column;
  4184. }
  4185. .admin-main {
  4186. flex: 1;
  4187. }
  4188. .production-queue-toolbar { display:flex; justify-content:space-between; align-items:center; gap:16px; margin-bottom:20px; flex-wrap:wrap; }
  4189. .production-queue-toolbar > strong { display:inline-flex; align-items:center; gap:8px; color:#075f9b; font-size:14px; }
  4190. .production-queue-tabs { display:flex; align-items:center; gap:8px; }
  4191. .production-queue-tabs button { border:1px solid #dce4ec; background:#fff; color:#516176; padding:8px 13px; border-radius:6px; cursor:pointer; }
  4192. .production-queue-tabs button.active { background:#0875bd; border-color:#0875bd; color:#fff; }
  4193. .production-queue-tabs strong { display:inline-flex; align-items:center; gap:5px; font-size:13px; color:#52627a; margin-left:8px; }
  4194. .production-queue-toolbar form { display:flex; align-items:center; gap:8px; background:#fff; border:1px solid #dbe3ec; border-radius:8px; padding:5px 6px 5px 12px; }
  4195. .production-queue-toolbar input { border:0; outline:0; min-width:220px; font:inherit; }
  4196. .production-queue-list { display:grid; gap:18px; }
  4197. .production-queue-card { background:#fff; border:1px solid #dfe5ed; border-radius:12px; padding:22px; }
  4198. .production-queue-card-head { display:flex; justify-content:space-between; align-items:start; gap:20px; }
  4199. .production-queue-card-head h3 { margin:5px 0 6px; font-size:21px; color:#172338; }
  4200. .production-queue-card-head p { margin:0; color:#607086; font-size:13px; line-height:1.55; }
  4201. .production-queue-index { font-size:12px; color:#0875bd; font-weight:700; }
  4202. .production-queue-meta { display:flex; flex-wrap:wrap; gap:8px 22px; padding:15px 0; margin:16px 0 0; border-top:1px solid #e9edf2; border-bottom:1px solid #e9edf2; color:#52627a; font-size:12px; }
  4203. .production-queue-meta span { display:inline-flex; align-items:center; gap:6px; }
  4204. .production-queue-grid { display:grid; grid-template-columns:1.1fr 1fr 1fr; gap:18px; padding-top:18px; }
  4205. .production-queue-grid section { min-width:0; }
  4206. .production-queue-grid h4 { margin:0 0 10px; font-size:13px; color:#243348; }
  4207. .production-queue-grid ul { list-style:none; margin:0; padding:0; max-height:190px; overflow:auto; }
  4208. .production-queue-grid li { display:flex; justify-content:space-between; gap:8px; padding:8px 0; border-top:1px solid #f0f2f5; font-size:12px; overflow-wrap:anywhere; }
  4209. .production-queue-grid li:first-child { border-top:0; }
  4210. .production-queue-grid li strong { font-weight:600; }
  4211. .production-queue-grid li span { color:#68768a; }
  4212. .production-queue-grid section:first-child li { display:grid; gap:3px; }
  4213. .production-queue-grid section > p,.production-instructor p { color:#69788d; font-size:12px; margin:0; }
  4214. .production-file-action { display:inline-flex; align-items:center; gap:4px; color:#0875bd; background:transparent; border:0; cursor:pointer; font-size:12px; text-align:left; }
  4215. .production-instructor { display:grid; gap:7px; font-size:12px; }
  4216. .production-instructor strong { font-size:14px; }
  4217. .production-instructor small { color:#637187; }
  4218. .production-instructor-photos { display:flex; gap:6px; overflow:auto; }
  4219. .production-instructor-photos img { width:54px; height:54px; object-fit:cover; border-radius:6px; border:1px solid #e4e8ee; }
  4220. .production-queue-more { border-top:1px solid #e9edf2; margin-top:18px; padding-top:14px; }
  4221. .production-queue-more summary { cursor:pointer; color:#0875bd; font-size:13px; font-weight:600; }
  4222. .production-queue-more-content { display:grid; grid-template-columns:220px 1fr; gap:24px; padding-top:16px; font-size:13px; }
  4223. .production-queue-more-content h4 { margin:0 0 8px; }
  4224. .production-queue-more-content p { margin:4px 0; white-space:pre-wrap; line-height:1.55; }
  4225. .production-queue-more-content section { border-top:1px solid #edf0f3; padding:10px 0; }
  4226. .production-queue-actions { display:flex; align-items:end; gap:10px; flex-wrap:wrap; border-top:1px solid #e9edf2; margin-top:18px; padding-top:16px; font-size:12px; }
  4227. .production-queue-actions label { display:grid; gap:5px; color:#52627a; }
  4228. .production-queue-actions input,.production-queue-actions textarea { border:1px solid #dce4ec; border-radius:6px; padding:8px; font:inherit; max-width:240px; }
  4229. .production-queue-actions textarea { min-width:210px; }
  4230. .production-deliverables { display:flex; flex-direction:column; align-items:start; gap:4px; max-width:220px; overflow-wrap:anywhere; }
  4231. @media (max-width:900px) { .production-queue-grid { grid-template-columns:1fr 1fr; } }
  4232. @media (max-width:650px) { .production-queue-card-head,.production-queue-toolbar { align-items:stretch; flex-direction:column; } .production-queue-grid,.production-queue-more-content { grid-template-columns:1fr; } .production-queue-toolbar form { width:100%; } .production-queue-toolbar input { min-width:0; flex:1; } }
  4233. .site-footer {
  4234. border-top: 1px solid rgba(226, 232, 240, 0.7);
  4235. background: rgba(248, 249, 252, 0.6);
  4236. backdrop-filter: blur(8px);
  4237. padding: 16px clamp(24px, 5vw, 76px);
  4238. margin-top: auto;
  4239. }
  4240. .site-footer-inner {
  4241. max-width: 1400px;
  4242. margin: 0 auto;
  4243. display: flex;
  4244. align-items: center;
  4245. justify-content: space-between;
  4246. gap: 14px;
  4247. flex-wrap: wrap;
  4248. font-size: 11.5px;
  4249. color: #94a3b8;
  4250. letter-spacing: 0.01em;
  4251. }
  4252. .site-footer-company {
  4253. display: inline-flex;
  4254. align-items: center;
  4255. gap: 6px;
  4256. font-weight: 400;
  4257. color: #94a3b8;
  4258. }
  4259. .site-footer-dot {
  4260. color: #cbd5e1;
  4261. user-select: none;
  4262. }
  4263. .site-footer-links {
  4264. display: flex;
  4265. align-items: center;
  4266. gap: 10px;
  4267. }
  4268. .site-footer-beian {
  4269. color: #94a3b8;
  4270. text-decoration: none;
  4271. transition: color 0.2s ease;
  4272. }
  4273. .site-footer-beian:hover {
  4274. color: #475569;
  4275. text-decoration: underline;
  4276. }
  4277. .site-footer-sep {
  4278. color: #e2e8f0;
  4279. user-select: none;
  4280. }
  4281. .site-footer-help-link {
  4282. color: #64748b;
  4283. font-weight: 400;
  4284. text-decoration: none;
  4285. transition: color 0.2s ease;
  4286. }
  4287. .site-footer-help-link:hover {
  4288. color: var(--blue);
  4289. text-decoration: underline;
  4290. }
  4291. @media (max-width: 640px) {
  4292. .site-footer {
  4293. padding: 14px 16px;
  4294. }
  4295. .site-footer-inner {
  4296. flex-direction: column;
  4297. justify-content: center;
  4298. text-align: center;
  4299. gap: 6px;
  4300. font-size: 11px;
  4301. }
  4302. }
  4303. .workspace-switcher { position: relative; display: inline-flex; align-items: center; min-width: 0; color: #16243e; }
  4304. .workspace-switcher-trigger, .workspace-switcher-current { display: inline-flex; align-items: center; gap: 7px; max-width: 220px; min-height: 36px; padding: 7px 10px; border-radius: 8px; color: #16243e; font-size: 14px; font-weight: 600; line-height: 1.3; }
  4305. .workspace-switcher-trigger { border: 1px solid transparent; background: transparent; cursor: pointer; transition: background .2s ease, border-color .2s ease; }
  4306. .workspace-switcher-trigger:hover, .workspace-switcher-trigger[aria-expanded="true"] { border-color: #d9e0ed; background: #fff; }
  4307. .workspace-switcher-trigger span, .workspace-switcher-current { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  4308. .workspace-switcher-trigger svg { flex: none; color: #667085; transition: transform .2s ease; }
  4309. .workspace-switcher-trigger[aria-expanded="true"] svg { transform: rotate(180deg); }
  4310. .workspace-switcher-menu { position: absolute; z-index: 30; top: calc(100% + 8px); left: 0; width: max-content; min-width: 180px; max-width: min(280px, calc(100vw - 32px)); padding: 6px; border: 1px solid #e1e7f0; border-radius: 10px; background: #fff; box-shadow: 0 12px 28px rgba(22,36,62,.14); }
  4311. .workspace-switcher-menu button { display: block; width: 100%; padding: 9px 10px; border: 0; border-radius: 6px; background: transparent; color: #475467; font: inherit; font-size: 13px; text-align: left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: pointer; }
  4312. .workspace-switcher-menu button:hover { background: #f3f6fb; color: #17213a; }
  4313. .workspace-switcher-menu button.active { background: #eaf7ff; color: var(--blue-action); font-weight: 600; }
  4314. .org-page { min-height: 60vh; padding-top: 48px; }
  4315. .org-page > .primary-button, .org-page > .secondary-button { margin-right: 12px; margin-top: 18px; }
  4316. .org-member-grid { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 18px; }
  4317. .org-member-grid span { padding: 10px 14px; border: 1px solid #dce5f1; border-radius: 9px; background: #f8fbff; }
  4318. .org-manage-shell { min-height: 100vh; }
  4319. .org-manage-topbar { justify-content: flex-start; }
  4320. .org-manage-back { display:inline-flex; align-items:center; color:#475569; font-size:14px; font-weight:600; text-decoration:none; }
  4321. .org-manage-back:hover { color:var(--blue); }
  4322. .org-inline-form { display: flex; align-items: end; flex-wrap: wrap; gap: 14px; margin: 18px 0; }
  4323. .org-inline-form label { display: grid; gap: 6px; color: #475467; font-size: 13px; }
  4324. .org-inline-form input, .org-inline-form select, .org-invite input { min-width: 200px; padding: 10px 12px; border: 1px solid #d9e0ed; border-radius: 8px; background: white; color: #16243e; font: inherit; }
  4325. .org-inline-form button { min-height: 40px; }
  4326. .org-invite { display: flex; gap: 10px; margin-top: 16px; }
  4327. .org-invite input { flex: 1; }
  4328. .org-invite-actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 18px; }
  4329. .org-invite-display { display: flex; align-items: center; gap: 24px; margin-top: 20px; padding: 18px; border: 1px solid #e2e8f0; border-radius: 10px; background: #f8fbff; }
  4330. .org-invite-link { flex: 1; min-width: 0; }
  4331. .org-invite-link label { display: block; margin-bottom: 8px; color: #475467; font-size: 12px; font-weight: 600; }
  4332. .org-invite-link > div { display: flex; align-items: center; gap: 8px; }
  4333. .org-invite-link input { min-width: 0; flex: 1; height: 36px; padding: 8px 10px; border: 1px solid #d9e0ed; border-radius: 7px; background: #fff; color: #344054; font: inherit; font-size: 12px; }
  4334. .org-invite-link .secondary-button { flex: none; }
  4335. .org-invite-qr { display: grid; flex: none; justify-items: center; gap: 7px; color: #667085; font-size: 11px; }
  4336. .org-invite-qr img { display: block; width: 132px; height: 132px; padding: 6px; border: 1px solid #e2e8f0; border-radius: 8px; background: #fff; }
  4337. .org-invite-legacy-note { color: #8b6b32; }
  4338. .org-created-login { display: flex; align-items: center; gap: 12px; margin: 12px 0; }
  4339. .org-list-row { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 12px 0; border-bottom: 1px solid #e8edf5; }
  4340. .org-list-row > div { display: flex; gap: 8px; }
  4341. .org-audit-event { border-bottom: 1px solid #e8edf5; padding: 12px 0; }
  4342. .org-audit-event summary { cursor: pointer; }
  4343. .org-audit-event pre { max-height: 320px; overflow: auto; padding: 12px; background: #f7f9fc; border-radius: 8px; font-size: 12px; white-space: pre-wrap; }
  4344. @media (max-width: 700px) { .workspace-switcher-trigger, .workspace-switcher-current { max-width: 180px; } .org-invite, .org-list-row, .org-invite-display { flex-direction: column; align-items: stretch; } .org-invite-qr { justify-items: start; } }
  4345. .org-guest-page {
  4346. display: flex;
  4347. justify-content: center;
  4348. align-items: center;
  4349. min-height: calc(70vh - 120px);
  4350. padding: 40px 16px;
  4351. }
  4352. .org-apply-card {
  4353. width: 100%;
  4354. max-width: 480px;
  4355. background: #ffffff;
  4356. border: 1px solid #e3e8f2;
  4357. border-radius: 16px;
  4358. box-shadow: 0 12px 32px rgba(15, 23, 42, 0.05);
  4359. padding: 40px 32px;
  4360. text-align: center;
  4361. }
  4362. .org-apply-header {
  4363. margin-bottom: 24px;
  4364. }
  4365. .org-apply-header .org-title {
  4366. font-size: 24px;
  4367. font-weight: 600;
  4368. color: #16243e;
  4369. letter-spacing: -0.01em;
  4370. margin: 0;
  4371. word-break: break-word;
  4372. }
  4373. .org-apply-actions {
  4374. margin-top: 24px;
  4375. display: flex;
  4376. justify-content: center;
  4377. }
  4378. .org-apply-actions .primary-button {
  4379. min-width: 160px;
  4380. height: 44px;
  4381. font-size: 15px;
  4382. }
  4383. .org-inactive-text {
  4384. color: #8c9ba5;
  4385. font-size: 14px;
  4386. margin: 0;
  4387. }
  4388. .topbar-role-badge {
  4389. display: inline-flex;
  4390. align-items: center;
  4391. gap: 3px;
  4392. background: #eaf7ff;
  4393. color: #0875bd;
  4394. border: 1px solid #a7dcff;
  4395. font-size: 11px;
  4396. font-weight: 600;
  4397. line-height: 1;
  4398. padding: 3px 7px;
  4399. border-radius: 9999px;
  4400. margin-left: 4px;
  4401. letter-spacing: 0.02em;
  4402. white-space: nowrap;
  4403. }
  4404. .topbar-role-badge svg {
  4405. color: #1684ce;
  4406. flex-shrink: 0;
  4407. }
  4408. .primary-button:focus-visible,.secondary-button:focus-visible,.highlight-button:focus-visible { outline:2px solid var(--blue); outline-offset:2px; }
  4409. /* 工作区数字讲师资产库与课程选择器 */
  4410. .digital-picker { margin: 20px 0; padding: 18px; border: 1px solid var(--border, #dce8f2); border-radius: 16px; background: #f8fbfe; }
  4411. .digital-picker-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; }
  4412. .digital-picker-help { margin: 12px 0 0; font-size: 13px; color: #64748b; }
  4413. .digital-picker-help a { color: var(--blue-dark, #167ac0); font-weight: 600; }
  4414. .digital-picker-options { display: grid; gap: 10px; max-height: 340px; overflow: auto; }
  4415. .digital-search { width: 100%; margin-bottom: 12px; }
  4416. .digital-picker-item { display: flex; align-items: center; gap: 12px; width: 100%; text-align: left; padding: 10px 12px; background: #fff; border: 1px solid #dce8f2; border-radius: 12px; cursor: pointer; }
  4417. .digital-picker-item.selected { border: 2px solid var(--blue, #55b0f7); }
  4418. .digital-picker-item:disabled { cursor: not-allowed; opacity: .62; }
  4419. .digital-picker-item img { width: 48px; height: 48px; border-radius: 9px; object-fit: cover; }
  4420. .digital-picker-item span:nth-child(2) { flex: 1; display: grid; gap: 3px; }
  4421. .digital-picker-item small { color: #64748b; }
  4422. .digital-create-form, .digital-edit-form { display: grid; gap: 10px; margin: 12px 0; }
  4423. .digital-library-heading { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
  4424. .digital-library-heading h1 { margin-bottom: 6px; }
  4425. .digital-library-heading p { margin: 0; color: #64748b; }
  4426. .digital-library-heading-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
  4427. .digital-search-toggle { white-space: nowrap; }
  4428. .digital-library-toolbar { display: flex; gap: 12px; flex-wrap: wrap; align-items: center; margin-top: 18px; padding: 16px; background: #f8fbff; border: 1px solid #dce8f2; border-radius: 14px; }
  4429. .digital-library-toolbar input { width: min(100%, 420px); min-width: 0; }
  4430. .digital-library-toolbar select { min-height: 42px; padding: 8px 12px; border: 1px solid #cbddea; border-radius: 8px; background: #fff; }
  4431. .digital-search-clear { border: 0; background: transparent; color: #176ca8; font-weight: 600; cursor: pointer; }
  4432. .digital-note-toggle { justify-self: start; padding: 7px 0; border: 0; background: transparent; color: #176ca8; font-weight: 600; cursor: pointer; }
  4433. .digital-note-toggle:focus-visible { outline: 3px solid #55b0f7; outline-offset: 2px; border-radius: 3px; }
  4434. @media (max-width: 600px) { .digital-library-heading-actions { width: 100%; } .digital-library-heading-actions > * { flex: 1; text-align: center; } .digital-library-toolbar input { width: 100%; } .digital-library-toolbar select { flex: 1; } }
  4435. .digital-editor-page { padding-top: 22px; }
  4436. .digital-editor-back { display: inline-flex; margin-bottom: 4px; color: #176ca8; font-weight: 600; font-size: 14px; }
  4437. .digital-editor-page .digital-create-panel { margin-bottom: 28px; }
  4438. .digital-create-panel { margin-top: 22px; padding: 28px; background: #fff; border: 1px solid #dce8f2; border-radius: 18px; box-shadow: 0 12px 32px rgba(30, 67, 110, .06); }
  4439. .digital-create-intro { display: flex; justify-content: space-between; gap: 24px; align-items: start; padding-bottom: 22px; border-bottom: 1px solid #e6edf4; }
  4440. .digital-create-eyebrow { display: inline-block; margin-bottom: 8px; color: #176ca8; font-size: 13px; font-weight: 700; }
  4441. .digital-create-intro h2 { margin: 0 0 8px; font-size: 24px; }
  4442. .digital-create-intro p { margin: 0; color: #5b6b7e; line-height: 1.6; }
  4443. .digital-close-button { border: 0; background: #f2f6fa; width: 32px; height: 32px; border-radius: 50%; font-size: 22px; color: #53687c; cursor: pointer; }
  4444. .digital-create-steps { display: grid; gap: 0; }
  4445. .digital-step { display: grid; grid-template-columns: minmax(190px, 270px) minmax(0, 1fr); gap: 28px; padding: 28px 0; border-bottom: 1px solid #e6edf4; }
  4446. .digital-step-title { display: flex; align-items: flex-start; gap: 12px; }
  4447. .digital-step-title > span { display: grid; place-items: center; flex: none; width: 34px; height: 34px; border-radius: 10px; background: #e7f4ff; color: #176ca8; font-size: 13px; font-weight: 800; }
  4448. .digital-step-title h3 { margin: 3px 0 7px; font-size: 17px; }
  4449. .digital-step-title p { margin: 0; line-height: 1.6; color: #667789; font-size: 13px; }
  4450. .digital-step-body { display: grid; gap: 14px; min-width: 0; }
  4451. .digital-field { display: grid; gap: 7px; font-size: 14px; font-weight: 600; }
  4452. .digital-field strong { display: inline; color: #186ba5; font-size: 12px; }
  4453. .digital-field span, .digital-field-hint { color: #718195; font-size: 12px; font-weight: 400; }
  4454. .digital-field input, .digital-field textarea { width: 100%; padding: 11px 13px; border: 1px solid #cddbe8; border-radius: 9px; background: #fff; font: inherit; }
  4455. .digital-field input:disabled { background: #f8fafc; color: #64748b; border-color: #dbe4ee; cursor: not-allowed; }
  4456. .digital-field textarea { resize: vertical; }
  4457. .digital-field input[aria-invalid="true"] { border-color: #ca4a47; }
  4458. .digital-field-error { color: #bd3734; font-size: 12px; margin: -6px 0 0; }
  4459. .digital-field-hint { margin: -6px 0 0; }
  4460. .digital-guidance { background: #f5f9fd; border: 1px solid #e2edf6; border-radius: 11px; padding: 13px 16px; font-size: 13px; line-height: 1.65; }
  4461. .digital-guidance strong { color: #245a80; }
  4462. .digital-guidance ul { margin: 5px 0 0; padding-left: 18px; color: #526273; }
  4463. .digital-guide-button { margin-top: 8px; padding: 4px 0; border: 0; background: transparent; color: #176ca8; font-size: 13px; font-weight: 700; cursor: pointer; }
  4464. .digital-reading-script { padding: 16px 18px; border: 1px solid #cfe4f4; border-radius: 11px; background: #f8fcff; }
  4465. .digital-reading-script > div { display: flex; justify-content: space-between; gap: 8px; flex-wrap: wrap; color: #245a80; }
  4466. .digital-reading-script span { color: #718195; font-size: 12px; }
  4467. .digital-reading-script p { margin: 10px 0 0; color: #28394c; line-height: 1.9; }
  4468. .digital-upload-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
  4469. .digital-upload-zone { display: grid; justify-items: center; gap: 5px; position: relative; padding: 23px 18px; border: 1.5px dashed #a9c9e4; border-radius: 11px; background: #fbfdff; color: #176ca8; text-align: center; cursor: pointer; }
  4470. .digital-upload-zone:hover { background: #f1f8fe; border-color: #55b0f7; }
  4471. .digital-upload-zone:focus-within { outline: 2px solid #3c96dd; outline-offset: 2px; }
  4472. .digital-upload-zone .digital-upload-icon { font-size: 25px; line-height: 1; }
  4473. .digital-upload-zone small { color: #718195; font-size: 12px; }
  4474. .digital-upload-zone input { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer; }
  4475. .digital-record-zone { display: grid; justify-items: center; align-content: center; gap: 5px; min-height: 120px; padding: 15px; border: 1px solid #d9e5ef; border-radius: 11px; background: #f9fbfe; text-align: center; color: #176ca8; }
  4476. .digital-record-zone small { color: #718195; font-size: 12px; }
  4477. .digital-record-zone button { border: 1px solid #9bc4e0; border-radius: 7px; background: #fff; color: #176ca8; min-height: 34px; padding: 5px 11px; font-size: 13px; font-weight: 600; }
  4478. .digital-record-actions { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 7px; margin-top: 5px; }
  4479. .digital-record-actions span { color: #bc423e; font-weight: 700; font-size: 13px; }
  4480. .digital-record-actions .digital-record-time-ready { color: #168047; }
  4481. .digital-record-actions .digital-record-countdown { display: grid; place-items: center; width: 42px; height: 42px; border-radius: 50%; background: #176ca8; color: #fff; font-size: 24px; }
  4482. .digital-photo-guide-dialog { position: relative; width: min(1120px, 100%); max-height: calc(100dvh - 40px); overflow: auto; padding: 20px; border-radius: 14px; background: #fff; }
  4483. .digital-photo-guide-dialog h3 { margin: 0 0 5px; }
  4484. .digital-photo-guide-dialog p { margin: 0 0 16px; color: #526273; }
  4485. .digital-photo-guide-dialog img { display: block; width: 100%; height: auto; }
  4486. .digital-guide-examples { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
  4487. .digital-guide-examples > div { display: grid; gap: 5px; min-width: 0; }
  4488. .digital-guide-examples strong { color: #168047; }
  4489. .digital-guide-examples > div + div strong { color: #bd3939; }
  4490. .digital-guide-examples span { color: #526273; font-size: 13px; }
  4491. .digital-guide-example-image { width: 100%; aspect-ratio: 4 / 3; border-radius: 9px; background-image: url('/guides/digital-instructor-photo-reference.png'); background-size: 397% 244%; background-repeat: no-repeat; }
  4492. .digital-guide-example-good { background-position: 58.3% 17.5%; }
  4493. .digital-guide-example-bad { background-position: 95.2% 17.5%; }
  4494. .digital-photo-guide-dialog details { margin-top: 20px; }
  4495. .digital-photo-guide-dialog summary { color: #176ca8; font-weight: 600; cursor: pointer; }
  4496. .digital-photo-guide-dialog details img { margin-top: 12px; }
  4497. @media (max-width: 600px) { .digital-guide-examples { grid-template-columns: 1fr; } .digital-photo-guide-dialog { box-sizing: border-box; } }
  4498. .digital-upload-preview, .digital-audio-preview { border: 1px solid #e2edf6; border-radius: 11px; padding: 12px; }
  4499. .digital-preview-heading, .digital-audio-preview > div { display: flex; align-items: center; justify-content: space-between; gap: 12px; font-size: 13px; }
  4500. .digital-preview-heading button, .digital-audio-preview button { border: 0; background: none; color: #176ca8; cursor: pointer; }
  4501. .digital-photo-list { display: flex; gap: 10px; overflow-x: auto; padding-top: 11px; }
  4502. .digital-photo-list > div { width: 110px; flex: none; }
  4503. .digital-photo-list > div { width: 130px; }
  4504. .digital-photo-list img { display: block; width: 110px; height: 92px; object-fit: cover; border-radius: 7px; background: #eef4f8; }
  4505. .digital-photo-list img { width: 130px; height: 104px; }
  4506. .digital-photo-list .digital-photo-open { display: block; width: 130px; height: 104px; margin: 0; padding: 0; overflow: hidden; border: 1px solid #e2edf6; border-radius: 8px; background: #f5f8fb; cursor: zoom-in; }
  4507. .digital-photo-list .digital-photo-open img { width: 100%; height: 100%; object-fit: contain; border-radius: 0; }
  4508. .digital-photo-list .digital-photo-open:focus-visible { outline: 3px solid #55b0f7; outline-offset: 2px; }
  4509. .digital-photo-lightbox { position: fixed; inset: 0; z-index: 1200; display: grid; place-items: center; padding: 20px; background: rgba(9, 22, 41, .9); }
  4510. .digital-photo-lightbox-content { position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; max-width: 100%; max-height: 100%; }
  4511. .digital-photo-lightbox-content img { display: block; max-width: min(100%, 1200px); max-height: calc(100dvh - 100px); width: auto; height: auto; object-fit: contain; }
  4512. .digital-photo-lightbox-content p { margin: 12px 0 0; color: #fff; text-align: center; overflow-wrap: anywhere; }
  4513. .digital-photo-lightbox-close { position: absolute; top: 0; right: 0; transform: translate(35%, -35%); width: 40px; height: 40px; border: 0; border-radius: 50%; background: #fff; color: #17233a; font-size: 28px; line-height: 1; cursor: pointer; }
  4514. .digital-photo-list span { display: block; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; padding-top: 4px; color: #667789; font-size: 11px; }
  4515. .digital-photo-list button { border: 0; background: none; color: #176ca8; padding: 3px 0; font-size: 11px; cursor: pointer; }
  4516. .digital-photo-list button + button { color: #b44c4c; margin-left: 8px; }
  4517. .digital-preview-heading span { color: #718195; font-size: 12px; }
  4518. .digital-field select { width: 100%; padding: 11px 13px; border: 1px solid #cddbe8; border-radius: 9px; background: #fff; }
  4519. .digital-audio-preview audio { display: block; width: 100%; margin-top: 10px; }
  4520. .digital-create-footer { display: flex; align-items: center; justify-content: space-between; gap: 20px; padding-top: 22px; }
  4521. .digital-create-footer p { margin: 0; max-width: 620px; color: #667789; font-size: 13px; line-height: 1.55; }
  4522. .digital-create-footer > div { display: flex; gap: 10px; flex: none; }
  4523. .digital-library-empty { margin-top: 20px; padding: 42px 24px; text-align: center; background: #fff; border: 1px dashed #cbddea; border-radius: 16px; }
  4524. .digital-library-empty h2 { margin: 0 0 8px; }
  4525. .digital-library-empty p { color: #64748b; }
  4526. .digital-create-form input, .digital-create-form textarea, .digital-edit-form input, .digital-edit-form textarea, .digital-edit-form select { width: 100%; }
  4527. .digital-create-form p, .digital-edit-form p { font-size: 13px; color: #64748b; margin: 0; }
  4528. .digital-library-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(275px, 1fr)); gap: 16px; margin-top: 22px; }
  4529. .digital-library-card { padding: 18px; border: 1px solid #dce8f2; border-radius: 16px; background: #fff; }
  4530. .digital-library-card > img { width: 100%; height: 185px; object-fit: cover; border-radius: 11px; }
  4531. .digital-asset-card { padding: 0; overflow: visible; display: flex; flex-direction: column; }
  4532. .digital-asset-photo { height: 194px; display: grid; place-items: center; overflow: hidden; border-radius: 15px 15px 0 0; background: #eff5fa; color: #7890a1; font-size: 13px; }
  4533. .digital-asset-photo img { width: 100%; height: 100%; object-fit: cover; }
  4534. .digital-asset-body { padding: 18px; display: flex; flex: 1; flex-direction: column; }
  4535. .digital-asset-title { display: flex; justify-content: space-between; align-items: start; gap: 10px; }
  4536. .digital-asset-title h2 { font-size: 18px; line-height: 1.35; margin: 0; overflow-wrap: anywhere; }
  4537. .digital-state-ready, .digital-state-incomplete { flex: none; padding: 4px 8px; border-radius: 999px; font-size: 11px; font-weight: 700; }
  4538. .digital-state-ready { background: #e8f6ed; color: #27754b; }
  4539. .digital-state-incomplete { background: #fff3df; color: #9c6118; }
  4540. .digital-asset-note { min-height: 40px; line-height: 1.55; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
  4541. .digital-asset-meta { margin: 3px 0; line-height: 1.5; }
  4542. .digital-asset-actions { display: flex; align-items: center; gap: 8px; margin-top: auto; padding-top: 14px; }
  4543. .digital-asset-actions .secondary-button { min-height: 38px; }
  4544. .digital-more-menu { position: relative; }
  4545. .digital-more-menu summary { list-style: none; cursor: pointer; border: 1px solid #cbddea; }
  4546. .digital-more-menu summary::-webkit-details-marker { display: none; }
  4547. .digital-more-menu > div { position: absolute; z-index: 5; top: calc(100% + 6px); left: 0; min-width: 230px; padding: 7px; border: 1px solid #dce8f2; border-radius: 10px; background: #fff; box-shadow: 0 12px 28px rgba(35, 64, 94, .16); }
  4548. .digital-more-menu button { display: block; width: 100%; padding: 9px 10px; border: 0; border-radius: 6px; background: none; text-align: left; font-size: 13px; }
  4549. .digital-more-menu button:hover:not(:disabled) { background: #eef7ff; }
  4550. .digital-more-menu button:disabled { color: #9aa7b4; cursor: not-allowed; }
  4551. .digital-more-menu .digital-danger-action { color: #b33e3b; }
  4552. .digital-copy-org { padding: 8px 5px; border-top: 1px solid #e9eef3; border-bottom: 1px solid #e9eef3; font-size: 12px; }
  4553. .digital-copy-org label { display: grid; gap: 5px; }
  4554. .digital-copy-org select { width: 100%; }
  4555. .digital-usage-link { display: inline-flex; align-self: start; padding: 0; border: 0; background: none; color: #176ca8; font-size: 12px; font-weight: 600; }
  4556. .digital-usage-list { display: grid; gap: 7px; padding: 10px; margin-top: 8px; border-radius: 8px; background: #f4f9fd; font-size: 12px; }
  4557. .digital-usage-list a { color: #176ca8; }
  4558. .digital-confirm-backdrop { position: fixed; z-index: 70; inset: 0; display: grid; place-items: center; padding: 20px; background: rgba(20,36,54,.46); }
  4559. .digital-confirm-dialog { width: min(430px,100%); padding: 24px; border-radius: 14px; background: #fff; box-shadow: 0 20px 50px rgba(20,36,54,.2); }
  4560. .digital-confirm-dialog h2 { margin: 0 0 10px; font-size: 20px; }
  4561. .digital-confirm-dialog p { color: #657589; line-height: 1.6; }
  4562. .digital-confirm-dialog > div { display: flex; justify-content: flex-end; gap: 8px; margin-top: 22px; }
  4563. .digital-danger-button { background: #b33e3b; }
  4564. .digital-library-card audio { display: block; width: 100%; margin: 10px 0; }
  4565. .digital-library-card h2 { font-size: 20px; margin: 12px 0 6px; }
  4566. .digital-library-card p { color: #64748b; font-size: 13px; }
  4567. .digital-library-card button { margin: 4px 8px 4px 0; }
  4568. .digital-library-card > button, .digital-library-card > div > button { padding: 7px 12px; border: 1px solid #cbddea; border-radius: 8px; background: #f8fbfe; cursor: pointer; }
  4569. .digital-library-card select, .digital-library-page > select { padding: 7px 10px; border: 1px solid #cbddea; border-radius: 8px; background: #fff; }
  4570. @media (max-width: 700px) { .digital-picker-head { align-items: flex-start; flex-direction: column; } .digital-picker-item { flex-wrap: wrap; } .digital-create-panel { padding: 20px; } .digital-step { grid-template-columns: 1fr; gap: 14px; padding: 23px 0; } .digital-create-footer { flex-direction: column; align-items: stretch; } .digital-create-footer > div { justify-content: flex-end; flex-wrap: wrap; } }
  4571. @media (max-width: 700px) { .digital-editor-page .digital-create-footer { position: sticky; bottom: 0; z-index: 4; margin: 0 -20px -20px; padding: 12px 20px; border-top: 1px solid #e6edf4; background: rgba(255,255,255,.97); } .digital-editor-page .digital-create-footer p { font-size: 11px; } .digital-editor-page .digital-create-footer .primary-button { flex: 1; } }
  4572. @media (max-width: 500px) { .digital-upload-actions { grid-template-columns: 1fr; } .digital-upload-zone, .digital-record-zone { min-height: 112px; } }
  4573. @media (min-width: 701px) { .digital-camera-zone { display: none; } }
  4574. @media (max-width: 700px) { .topbar { height: auto; min-height: 72px; flex-wrap: wrap; gap: 0 12px; padding: 8px 18px 0; } .topbar nav { order: 3; width: 100%; min-width: 0; height: 46px; margin-left: 0; gap: 20px; overflow-x: auto; white-space: nowrap; } .topbar nav a { flex: none; } .top-actions { gap: 5px; } .top-actions .user-link { padding: 6px; } .top-actions .user-link span { display: none; } .top-actions .points-balance-badge { padding: 5px 7px; font-size: 11px; } }