mixer-fleet-saas 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/assets/AIAnalysis-B72xP247.js +1 -0
  2. package/dist/assets/AlarmCenter-BXG9KGDz.js +1 -0
  3. package/dist/assets/AlarmCenter-Czx19Tz0.css +1 -0
  4. package/dist/assets/Dashboard-CzDG19QP.js +1 -0
  5. package/dist/assets/DispatchCenter-CVEUKvRg.js +1 -0
  6. package/dist/assets/DriverView-s0dPZfR2.js +1 -0
  7. package/dist/assets/GeoFenceManager-CA0xN86V.js +1 -0
  8. package/dist/assets/GeoFenceManager-DvJ2wJrC.css +1 -0
  9. package/dist/assets/LoginView-BEVVJ0LE.css +1 -0
  10. package/dist/assets/LoginView-DOWsZFRb.js +1 -0
  11. package/dist/assets/MixerPumpBoard-CoZIvC8C.js +1 -0
  12. package/dist/assets/NotificationCenter-76QmpN-V.js +1 -0
  13. package/dist/assets/OrderManager-A3Ve7uqU.js +1 -0
  14. package/dist/assets/OrderManager-zLpKlv20.css +1 -0
  15. package/dist/assets/PumpMonitor-BaiicxGn.js +1 -0
  16. package/dist/assets/RealtimeMonitor-C8DVeOGh.js +6 -0
  17. package/dist/assets/ReportStats-_tEI6F6B.js +1 -0
  18. package/dist/assets/SmartDispatch-Dku4FMuz.js +5 -0
  19. package/dist/assets/StatsBar-dmdFex0_.js +1 -0
  20. package/dist/assets/StatusBadge-kISgaxfW.js +1 -0
  21. package/dist/assets/SystemSettings-DHobRs1O.js +1 -0
  22. package/dist/assets/TBoxManager-Db-20bHT.css +1 -0
  23. package/dist/assets/TBoxManager-jNHaSMgA.js +1 -0
  24. package/dist/assets/UserManager-BJih20EP.js +1 -0
  25. package/dist/assets/VehicleProfile-BQCwo2z_.css +1 -0
  26. package/dist/assets/VehicleProfile-CUo83gvc.js +95 -0
  27. package/dist/assets/VehicleTypeManager-Q8OMaue6.js +1 -0
  28. package/dist/assets/_plugin-vue_export-helper-S3RvzygF.js +1 -0
  29. package/dist/assets/deepseek-kuCyKxoN.js +14 -0
  30. package/dist/assets/export-LCWayDfi.js +10 -0
  31. package/dist/assets/index-CNJwmlwe.css +2 -0
  32. package/dist/assets/index-CTrnN2TM.js +9 -0
  33. package/dist/favicon.svg +1 -0
  34. package/dist/icons.svg +24 -0
  35. package/dist/index.html +27 -0
  36. package/dist/manifest.json +17 -0
  37. package/dist/offline.html +98 -0
  38. package/dist/sw.js +124 -0
  39. package/package.json +38 -0
  40. package/server/src/db.js +273 -0
  41. package/server/src/index.js +748 -0
  42. package/start.mjs +102 -0
@@ -0,0 +1,95 @@
1
+ import{$ as e,A as t,B as n,E as r,F as i,G as a,I as o,J as s,K as c,L as ee,M as l,N as u,Q as d,R as f,T as p,U as m,X as h,d as g,et as _,k as v,nt as y,o as b,z as x}from"./index-CTrnN2TM.js";import{c as S,l as C}from"./export-LCWayDfi.js";import{t as w}from"./_plugin-vue_export-helper-S3RvzygF.js";import{t as T}from"./deepseek-kuCyKxoN.js";var E={class:`bg-white rounded-lg border shadow-sm`},D={key:0,class:`border-b bg-gradient-to-r from-purple-50 to-blue-50`},O={key:0,class:`text-xs bg-purple-200 text-purple-800 px-1.5 py-0.5 rounded-full`},k={class:`text-xs text-purple-400`},A={key:0,class:`px-4 pb-3 space-y-2`},j=[`disabled`],M={class:`flex items-center gap-2`},N=[`disabled`],P={key:0,class:`inline-flex items-center gap-1`},F={key:1},I={class:`border-b px-4 flex gap-1 overflow-x-auto`},L=[`onClick`],R={class:`p-4 space-y-3 max-h-[60vh] overflow-y-auto`},te={key:0,class:`grid grid-cols-2 gap-3`},z=[`disabled`],ne=[`disabled`],re=[`disabled`],B=[`value`],V=[`disabled`],H=[`disabled`],U=[`disabled`],ie=[`disabled`],ae=[`disabled`],oe=[`disabled`],se=[`disabled`],ce=[`disabled`],le={key:1,class:`grid grid-cols-2 gap-3`},ue=[`disabled`],de=[`disabled`],fe=[`disabled`],pe=[`disabled`],me=[`disabled`],he=[`disabled`],ge=[`disabled`],_e=[`disabled`],ve=[`disabled`],ye=[`disabled`],be=[`disabled`],xe=[`disabled`],Se=[`disabled`],Ce=[`disabled`],we=[`disabled`],Te=[`disabled`],Ee=[`disabled`],De=[`disabled`],Oe=[`disabled`],ke={key:2,class:`grid grid-cols-2 gap-3`},Ae=[`disabled`],je=[`disabled`],Me=[`disabled`],Ne=[`disabled`],Pe=[`value`],Fe=[`disabled`],Ie=[`value`],Le=[`disabled`],Re=[`disabled`],ze=[`disabled`],Be=[`disabled`],Ve=[`disabled`],He=[`disabled`],Ue=[`disabled`],We=[`disabled`],Ge={key:3,class:`grid grid-cols-2 gap-3`},Ke=[`disabled`],qe=[`disabled`],Je=[`disabled`],Ye=[`disabled`],Xe=[`disabled`],Ze=[`disabled`],Qe=[`disabled`],$e=[`disabled`],et=[`disabled`],tt=[`disabled`],nt=[`disabled`],rt=[`disabled`],it=[`disabled`],at=[`disabled`],ot=[`disabled`],st=[`disabled`],ct=[`disabled`],lt=[`disabled`],ut={key:4,class:`grid grid-cols-2 gap-3`},dt=[`disabled`],ft=[`disabled`],pt=[`disabled`],mt=[`disabled`],ht=[`disabled`],gt=[`disabled`],_t=[`disabled`],vt=[`disabled`],yt={key:5,class:`grid grid-cols-2 gap-3`},bt=[`disabled`],xt=[`disabled`],St=[`value`],Ct=[`value`],wt=[`value`],Tt={key:1,class:`border-t px-4 py-3 flex justify-end gap-3 bg-gray-50 rounded-b-lg`},Et=`粘贴车辆完整文本信息,AI 将自动识别并填表。支持格式示例:
2
+
3
+ 【方式一:行驶证信息】
4
+ 品牌:沃尔沃
5
+ 整车型号:FM460 64T
6
+ 车辆识别代号:YV2RTY0CXHB123456
7
+ 发动机号:D13C460EU6-789012
8
+ 车牌号:京A12345
9
+ 整备质量:18000kg
10
+ 总质量:46000kg
11
+ 外廓尺寸:6980×2495×3560mm
12
+ 轴数:4
13
+ 轮胎规格:12R22.5
14
+ 制造年月:2022.05
15
+
16
+ 【方式二:自由文本】
17
+ 一台2022年5月出厂的沃尔沃FM460搅拌车,VIN是YV2RTY0CXHB123456,
18
+ 发动机是D13C460,排量12.8升,柴油国六,最大功率346kW,
19
+ 上装是中集瑞江12方罐,液压系统ZF,材质高强度钢。
20
+ 车牌京A12345,整备质量18吨,总质量46吨。`,W=w(n({__name:`VehicleForm`,props:{vehicle:{},editMode:{type:Boolean}},emits:[`save`,`cancel`],setup(e,{emit:n}){let m=e,g=n,v=d(`basic`),x=d({vin:``,tbox_id:``,plate_number:``,vehicle_type:`搅拌车`,engine_sn:``,station_id:``,bind_time:0,status:`offline`,last_gps:null,last_update:Date.now(),created_at:Date.now(),updated_at:Date.now()}),S=d(``);function C(e){if(!e)return``;let t=new Date(e);return`${t.getFullYear()}.${String(t.getMonth()+1).padStart(2,`0`)}`}function w(e){let t=e.match(/^(\d{4})\.(\d{1,2})$/);return t?new Date(+t[1],t[2]-1,1).getTime():0}s(()=>m.vehicle,e=>{e&&(x.value=JSON.parse(JSON.stringify(e)),S.value=C(x.value.production_date))},{immediate:!0}),s(S,e=>{x.value.production_date=e?w(e):void 0});let W=d(!1),G=d(``),K=d(`idle`),q=d(``),J=d(0),Y=d(new Set),X=null,Dt=`vin.tbox_id.plate_number.vehicle_type.engine_sn.brand.model_name.internal_no.manufacture_country.driving_license_no.insurance_company.vehicle_model.chassis_model.product_no.chassis_brand.vehicle_series.cab_type.length_mm.width_mm.height_mm.axle_count.wheelbase_mm.tire_spec.tire_count.curb_weight.gross_weight.max_towing_mass.max_design_static_load.max_speed.production_date.transmission_model.engine_brand.engine_series.engine_model.fuel_type.emission_standard.fuel_system.cylinder_count.bore_mm.compression_ratio.displacement_l.rated_rpm.max_power_kw.torque_nm.body_type.body_model.body_sn.body_brand.manufacturer.spec_volume_m3.max_volume_m3.max_load_kg.body_weight_kg.material.hydraulic_system.control_system.oil_pump_model.multi_valve_model.pto_model.generator_model.motor_model.battery_model.station_id`.split(`.`),Z=new Set([`length_mm`,`width_mm`,`height_mm`,`axle_count`,`tire_count`,`curb_weight`,`gross_weight`,`max_towing_mass`,`max_design_static_load`,`max_speed`,`cylinder_count`,`bore_mm`,`displacement_l`,`rated_rpm`,`max_power_kw`,`torque_nm`,`spec_volume_m3`,`max_volume_m3`,`max_load_kg`,`body_weight_kg`]);function Q(e){return Y.value.has(e)}async function Ot(){let e=G.value.trim();if(!e){q.value=`请先粘贴车辆文本信息`,K.value=`error`;return}if(!T.enabled){q.value=`DeepSeek API 未配置,请在系统设置中配置 API Key`,K.value=`error`;return}K.value=`loading`,q.value=`AI 正在分析车辆信息...`,J.value=0;try{let t=await T.chat([{role:`system`,content:`你是混凝土搅拌车车辆档案解析助手。根据用户提供的车辆文本信息,提取所有可识别的字段。
21
+
22
+ 输出严格 JSON 格式,仅包含能从文本中确定提取的字段(不要猜测或编造缺失字段)。
23
+ 字段名使用英文 key(与数据库字段一致),值使用正确的数据类型。
24
+
25
+ 字段说明(仅提取能从文本中识别的,忽略未提及的):
26
+ - vin: VIN/车辆识别代号 (字符串)
27
+ - plate_number: 车牌号 (字符串)
28
+ - vehicle_type: 车辆类型,仅限:搅拌车/泵车/自卸车/牵引车/其他 (字符串)
29
+ - engine_sn: 发动机号/发动机序列号 (字符串)
30
+ - brand: 品牌,如"沃尔沃""重汽""三一" (字符串)
31
+ - model_name: 车型名称 (字符串)
32
+ - vehicle_model: 整车型号 (字符串)
33
+ - internal_no: 内部编号 (字符串)
34
+ - manufacture_country: 制造国,如"瑞典""中国" (字符串)
35
+ - driving_license_no: 行驶证编号 (字符串)
36
+ - insurance_company: 保险公司 (字符串)
37
+ - chassis_model: 底盘型号 (字符串)
38
+ - product_no: 产品编号 (字符串)
39
+ - chassis_brand: 底盘品牌 (字符串)
40
+ - vehicle_series: 车系 (字符串)
41
+ - cab_type: 驾驶室类型 (字符串)
42
+ - transmission_model: 变速箱型号 (字符串)
43
+ - length_mm: 长 mm (数字)
44
+ - width_mm: 宽 mm (数字)
45
+ - height_mm: 高 mm (数字)
46
+ - axle_count: 轴数 (数字)
47
+ - wheelbase_mm: 轴距 mm (字符串)
48
+ - tire_spec: 轮胎规格 (字符串)
49
+ - tire_count: 轮胎数量 (数字)
50
+ - curb_weight: 整备质量 kg (数字)
51
+ - gross_weight: 总质量 kg (数字)
52
+ - max_towing_mass: 最大允许牵引质量 kg (数字)
53
+ - max_speed: 最高车速 km/h (数字)
54
+ - production_date: 制造年月 (字符串,格式YYYY.MM,如"2022.05")
55
+ - engine_brand: 发动机品牌 (字符串)
56
+ - engine_series: 发动机系列 (字符串)
57
+ - engine_model: 发动机型号 (字符串)
58
+ - fuel_type: 燃料类型,仅限:柴油/天然气/电动/混合动力 (字符串)
59
+ - emission_standard: 排放标准,仅限:国三/国四/国五/国六 (字符串)
60
+ - fuel_system: 燃油系统 (字符串)
61
+ - cylinder_count: 缸数 (数字)
62
+ - bore_mm: 缸径 mm (数字)
63
+ - compression_ratio: 压缩比 (字符串)
64
+ - displacement_l: 排量 L (数字)
65
+ - rated_rpm: 额定转速 rpm (数字)
66
+ - max_power_kw: 最大功率 kW (数字)
67
+ - torque_nm: 最大扭矩 Nm (数字)
68
+ - body_type: 上装类型 (字符串)
69
+ - body_model: 上装型号 (字符串)
70
+ - body_sn: 上装序列号 (字符串)
71
+ - body_brand: 上装品牌 (字符串)
72
+ - manufacturer: 制造商 (字符串)
73
+ - spec_volume_m3: 标称容积 m³ (数字)
74
+ - max_volume_m3: 最大容积 m³ (数字)
75
+ - max_load_kg: 最大载重 kg (数字)
76
+ - body_weight_kg: 上装重量 kg (数字)
77
+ - material: 材质 (字符串)
78
+ - hydraulic_system: 液压系统 (字符串)
79
+ - control_system: 控制系统 (字符串)
80
+ - oil_pump_model: 油泵型号 (字符串)
81
+ - multi_valve_model: 多路阀型号 (字符串)
82
+ - pto_model: PTO型号 (字符串)
83
+ - generator_model: 发电机型号 (字符串)
84
+ - motor_model: 电机型号 (字符串)
85
+ - battery_model: 电池型号 (字符串)
86
+ - station_id: 所属搅拌站 (字符串)
87
+
88
+ 规则:
89
+ 1. 外廓尺寸如"6980×2495×3560mm" → length_mm=6980, width_mm=2495, height_mm=3560
90
+ 2. 质量单位吨(吨/t) → 转换为 kg (乘以1000),如"18吨" → 18000
91
+ 3. 排量单位 L/升 → 保持数字,如"12.8升" → 12.8
92
+ 4. 功率单位 马力/PS → 转换为 kW (乘以0.735),如"460马力" → 338
93
+ 5. 制造年月多种格式统一为"YYYY.MM"
94
+ 6. 描述性文本如"2022年5月出厂" → production_date: "2022.05"
95
+ 7. 仅返回能从文本中确定的信息,不要编造`},{role:`user`,content:`请从以下车辆文本中提取所有可识别字段:\n\n${e}`}],{temperature:.1,maxTokens:2048,jsonMode:!0,disableThinking:!0}),n;try{n=JSON.parse(t)}catch{let e=t.match(/\{[\s\S]*\}/);if(e)n=JSON.parse(e[0]);else throw Error(`AI 返回格式异常`)}let r=0,i=new Set;for(let[e,t]of Object.entries(n))if(!(t==null||t===``)&&Dt.includes(e)){if(e===`production_date`){S.value=String(t),i.add(e),r++;continue}if(Z.has(e)){let n=Number(t);isNaN(n)||(x.value[e]=n,i.add(e),r++)}else x.value[e]=t,i.add(e),r++}Y.value=i,X&&clearTimeout(X),X=setTimeout(()=>{Y.value=new Set},5e3),J.value=r,K.value=`success`,q.value=`✅ AI 已识别并填充 ${r} 个字段`}catch(e){console.error(`[VehicleForm] AI 解析失败:`,e),K.value=`error`,q.value=`❌ AI 解析失败: ${e instanceof Error?e.message:`未知错误`}`}}function kt(){W.value=!1,G.value=``,K.value=`idle`,q.value=``,J.value=0,Y.value=new Set}let $=b(),At=l(()=>$.typeOptions),jt=l(()=>$.isPumpType(x.value.vehicle_type));l(()=>x.value.vehicle_type===`搅拌车`);let Mt=[`柴油`,`天然气`,`电动`,`混合动力`],Nt=[`国三`,`国四`,`国五`,`国六`],Pt=[{key:`basic`,label:`📋 基本信息`,icon:`📋`},{key:`chassis`,label:`🔧 底盘信息`,icon:`🔧`},{key:`engine`,label:`⚙️ 发动机`,icon:`⚙️`},{key:`body`,label:`🚛 上装信息`,icon:`🚛`},{key:`pump`,label:`⚡ 泵送参数`,icon:`⚡`,pumpOnly:!0},{key:`system`,label:`💻 系统`,icon:`💻`}],Ft=l(()=>Pt.filter(e=>!e.pumpOnly||jt.value));function It(){x.value.updated_at=Date.now(),g(`save`,JSON.parse(JSON.stringify(x.value)))}return(n,s)=>(a(),o(`div`,E,[e.editMode?(a(),o(`div`,D,[u(`button`,{class:`w-full px-4 py-2.5 flex items-center gap-2 text-sm text-purple-700 hover:bg-purple-100/50 transition-colors`,onClick:s[0]||=e=>W.value=!W.value},[s[75]||=u(`span`,{class:`text-lg`},`🤖`,-1),s[76]||=u(`span`,{class:`font-medium`},`AI 智能填表`,-1),J.value>0?(a(),o(`span`,O,y(J.value)+` 字段 `,1)):i(``,!0),s[77]||=u(`span`,{class:`flex-1`},null,-1),u(`span`,k,y(W.value?`收起 ▲`:`展开 ▼`),1)]),W.value?(a(),o(`div`,A,[s[79]||=u(`p`,{class:`text-xs text-gray-400`},` 粘贴车辆文本信息(行驶证、技术参数表、自由描述等),AI 自动识别并填充表单 `,-1),h(u(`textarea`,{"onUpdate:modelValue":s[1]||=e=>G.value=e,placeholder:Et,rows:`5`,class:`w-full border rounded-lg px-3 py-2 text-sm resize-y focus:border-purple-400 focus:ring-1 focus:ring-purple-200 outline-none`,disabled:K.value===`loading`},null,8,j),[[r,G.value]]),u(`div`,M,[u(`button`,{class:_([`px-4 py-1.5 text-sm text-white rounded-lg transition-colors disabled:opacity-50`,K.value===`loading`?`bg-purple-400 cursor-wait`:`bg-purple-600 hover:bg-purple-700`]),disabled:K.value===`loading`||!G.value.trim(),onClick:Ot},[K.value===`loading`?(a(),o(`span`,P,[...s[78]||=[u(`span`,{class:`animate-spin inline-block w-3.5 h-3.5 border-2 border-white border-t-transparent rounded-full`},null,-1),f(` 解析中... `,-1)]])):(a(),o(`span`,F,`🔍 AI 解析填表`))],10,N),u(`button`,{class:`px-3 py-1.5 text-sm text-gray-500 hover:text-gray-700 transition-colors`,onClick:kt},` 清空关闭 `)]),q.value?(a(),o(`div`,{key:0,class:_([`text-xs px-3 py-1.5 rounded-lg`,{"bg-green-50 text-green-700":K.value===`success`,"bg-red-50 text-red-600":K.value===`error`,"bg-purple-50 text-purple-600":K.value===`loading`}])},y(q.value),3)):i(``,!0)])):i(``,!0)])):i(``,!0),u(`div`,I,[(a(!0),o(t,null,c(Ft.value,e=>(a(),o(`button`,{key:e.key,class:_([`px-4 py-2.5 text-sm whitespace-nowrap border-b-2 transition-colors -mb-px`,v.value===e.key?`border-blue-500 text-blue-600 font-medium`:`border-transparent text-gray-500 hover:text-gray-700`]),onClick:t=>v.value=e.key},y(e.label),11,L))),128)),s[80]||=u(`div`,{class:`flex-1`},null,-1)]),u(`div`,R,[v.value===`basic`?(a(),o(`div`,te,[u(`div`,{class:_({"ai-field-highlight":Q(`vin`)})},[s[81]||=u(`label`,{class:`text-xs text-gray-500`},[f(`VIN `),u(`span`,{class:`text-red-400`},`*`)],-1),h(u(`input`,{"onUpdate:modelValue":s[2]||=e=>x.value.vin=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50 disabled:text-gray-400`,maxlength:`17`},null,8,z),[[r,x.value.vin]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`tbox_id`)})},[s[82]||=u(`label`,{class:`text-xs text-gray-500`},`TBox IMEI`,-1),h(u(`input`,{"onUpdate:modelValue":s[3]||=e=>x.value.tbox_id=e,disabled:``,class:`w-full border rounded-lg px-3 py-2 text-sm bg-gray-50 text-gray-400`},null,512),[[r,x.value.tbox_id]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`plate_number`)})},[s[83]||=u(`label`,{class:`text-xs text-gray-500`},[f(`车牌号 `),u(`span`,{class:`text-red-400`},`*`)],-1),h(u(`input`,{"onUpdate:modelValue":s[4]||=e=>x.value.plate_number=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`,placeholder:`京A00001`},null,8,ne),[[r,x.value.plate_number]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`vehicle_type`)})},[s[84]||=u(`label`,{class:`text-xs text-gray-500`},[f(`车辆类型 `),u(`span`,{class:`text-red-400`},`*`)],-1),h(u(`select`,{"onUpdate:modelValue":s[5]||=e=>x.value.vehicle_type=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},[(a(!0),o(t,null,c(At.value,e=>(a(),o(`option`,{key:e.value,value:e.value},y(e.label),9,B))),128))],8,re),[[p,x.value.vehicle_type]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`engine_sn`)})},[s[85]||=u(`label`,{class:`text-xs text-gray-500`},[f(`发动机序列号 `),u(`span`,{class:`text-red-400`},`*`)],-1),h(u(`input`,{"onUpdate:modelValue":s[6]||=e=>x.value.engine_sn=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,V),[[r,x.value.engine_sn]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`internal_no`)})},[s[86]||=u(`label`,{class:`text-xs text-gray-500`},`内部编号`,-1),h(u(`input`,{"onUpdate:modelValue":s[7]||=e=>x.value.internal_no=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,H),[[r,x.value.internal_no]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`brand`)})},[s[87]||=u(`label`,{class:`text-xs text-gray-500`},`品牌`,-1),h(u(`input`,{"onUpdate:modelValue":s[8]||=e=>x.value.brand=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,U),[[r,x.value.brand]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`model_name`)})},[s[88]||=u(`label`,{class:`text-xs text-gray-500`},`车型名称`,-1),h(u(`input`,{"onUpdate:modelValue":s[9]||=e=>x.value.model_name=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,ie),[[r,x.value.model_name]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`vehicle_model`)})},[s[89]||=u(`label`,{class:`text-xs text-gray-500`},`整车型号`,-1),h(u(`input`,{"onUpdate:modelValue":s[10]||=e=>x.value.vehicle_model=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,ae),[[r,x.value.vehicle_model]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`manufacture_country`)})},[s[90]||=u(`label`,{class:`text-xs text-gray-500`},`制造国`,-1),h(u(`input`,{"onUpdate:modelValue":s[11]||=e=>x.value.manufacture_country=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`,placeholder:`瑞典`},null,8,oe),[[r,x.value.manufacture_country]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`driving_license_no`)})},[s[91]||=u(`label`,{class:`text-xs text-gray-500`},`行驶证编号`,-1),h(u(`input`,{"onUpdate:modelValue":s[12]||=e=>x.value.driving_license_no=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,se),[[r,x.value.driving_license_no]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`insurance_company`)})},[s[92]||=u(`label`,{class:`text-xs text-gray-500`},`保险公司`,-1),h(u(`input`,{"onUpdate:modelValue":s[13]||=e=>x.value.insurance_company=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,ce),[[r,x.value.insurance_company]])],2)])):i(``,!0),v.value===`chassis`?(a(),o(`div`,le,[u(`div`,{class:_({"ai-field-highlight":Q(`chassis_model`)})},[s[93]||=u(`label`,{class:`text-xs text-gray-500`},`底盘型号`,-1),h(u(`input`,{"onUpdate:modelValue":s[14]||=e=>x.value.chassis_model=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,ue),[[r,x.value.chassis_model]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`product_no`)})},[s[94]||=u(`label`,{class:`text-xs text-gray-500`},`产品编号`,-1),h(u(`input`,{"onUpdate:modelValue":s[15]||=e=>x.value.product_no=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,de),[[r,x.value.product_no]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`chassis_brand`)})},[s[95]||=u(`label`,{class:`text-xs text-gray-500`},`底盘品牌`,-1),h(u(`input`,{"onUpdate:modelValue":s[16]||=e=>x.value.chassis_brand=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,fe),[[r,x.value.chassis_brand]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`vehicle_series`)})},[s[96]||=u(`label`,{class:`text-xs text-gray-500`},`车系`,-1),h(u(`input`,{"onUpdate:modelValue":s[17]||=e=>x.value.vehicle_series=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,pe),[[r,x.value.vehicle_series]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`cab_type`)})},[s[97]||=u(`label`,{class:`text-xs text-gray-500`},`驾驶室类型`,-1),h(u(`input`,{"onUpdate:modelValue":s[18]||=e=>x.value.cab_type=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,me),[[r,x.value.cab_type]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`transmission_model`)})},[s[98]||=u(`label`,{class:`text-xs text-gray-500`},`变速箱型号`,-1),h(u(`input`,{"onUpdate:modelValue":s[19]||=e=>x.value.transmission_model=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,he),[[r,x.value.transmission_model]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`length_mm`)})},[s[99]||=u(`label`,{class:`text-xs text-gray-500`},`长 (mm)`,-1),h(u(`input`,{"onUpdate:modelValue":s[20]||=e=>x.value.length_mm=e,disabled:!e.editMode,type:`number`,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,ge),[[r,x.value.length_mm,void 0,{number:!0}]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`width_mm`)})},[s[100]||=u(`label`,{class:`text-xs text-gray-500`},`宽 (mm)`,-1),h(u(`input`,{"onUpdate:modelValue":s[21]||=e=>x.value.width_mm=e,disabled:!e.editMode,type:`number`,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,_e),[[r,x.value.width_mm,void 0,{number:!0}]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`height_mm`)})},[s[101]||=u(`label`,{class:`text-xs text-gray-500`},`高 (mm)`,-1),h(u(`input`,{"onUpdate:modelValue":s[22]||=e=>x.value.height_mm=e,disabled:!e.editMode,type:`number`,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,ve),[[r,x.value.height_mm,void 0,{number:!0}]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`axle_count`)})},[s[102]||=u(`label`,{class:`text-xs text-gray-500`},`轴数`,-1),h(u(`input`,{"onUpdate:modelValue":s[23]||=e=>x.value.axle_count=e,disabled:!e.editMode,type:`number`,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,ye),[[r,x.value.axle_count,void 0,{number:!0}]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`wheelbase_mm`)})},[s[103]||=u(`label`,{class:`text-xs text-gray-500`},`轴距 (mm)`,-1),h(u(`input`,{"onUpdate:modelValue":s[24]||=e=>x.value.wheelbase_mm=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,be),[[r,x.value.wheelbase_mm]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`curb_weight`)})},[s[104]||=u(`label`,{class:`text-xs text-gray-500`},`整备质量 (kg)`,-1),h(u(`input`,{"onUpdate:modelValue":s[25]||=e=>x.value.curb_weight=e,disabled:!e.editMode,type:`number`,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,xe),[[r,x.value.curb_weight,void 0,{number:!0}]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`gross_weight`)})},[s[105]||=u(`label`,{class:`text-xs text-gray-500`},`总质量 (kg)`,-1),h(u(`input`,{"onUpdate:modelValue":s[26]||=e=>x.value.gross_weight=e,disabled:!e.editMode,type:`number`,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,Se),[[r,x.value.gross_weight,void 0,{number:!0}]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`max_towing_mass`)})},[s[106]||=u(`label`,{class:`text-xs text-gray-500`},`最大允许牵引质量 (kg)`,-1),h(u(`input`,{"onUpdate:modelValue":s[27]||=e=>x.value.max_towing_mass=e,disabled:!e.editMode,type:`number`,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`,placeholder:`37000`},null,8,Ce),[[r,x.value.max_towing_mass,void 0,{number:!0}]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`max_design_static_load`)})},[s[107]||=u(`label`,{class:`text-xs text-gray-500`},`牵引座最大静载荷 (kg)`,-1),h(u(`input`,{"onUpdate:modelValue":s[28]||=e=>x.value.max_design_static_load=e,disabled:!e.editMode,type:`number`,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`,placeholder:`17000`},null,8,we),[[r,x.value.max_design_static_load,void 0,{number:!0}]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`production_date`)})},[s[108]||=u(`label`,{class:`text-xs text-gray-500`},`制造年月`,-1),h(u(`input`,{"onUpdate:modelValue":s[29]||=e=>S.value=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`,placeholder:`2016.05`},null,8,Te),[[r,S.value]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`max_speed`)})},[s[109]||=u(`label`,{class:`text-xs text-gray-500`},`最高车速 (km/h)`,-1),h(u(`input`,{"onUpdate:modelValue":s[30]||=e=>x.value.max_speed=e,disabled:!e.editMode,type:`number`,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,Ee),[[r,x.value.max_speed,void 0,{number:!0}]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`tire_spec`)})},[s[110]||=u(`label`,{class:`text-xs text-gray-500`},`轮胎规格`,-1),h(u(`input`,{"onUpdate:modelValue":s[31]||=e=>x.value.tire_spec=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,De),[[r,x.value.tire_spec]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`tire_count`)})},[s[111]||=u(`label`,{class:`text-xs text-gray-500`},`轮胎数量`,-1),h(u(`input`,{"onUpdate:modelValue":s[32]||=e=>x.value.tire_count=e,disabled:!e.editMode,type:`number`,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,Oe),[[r,x.value.tire_count,void 0,{number:!0}]])],2)])):i(``,!0),v.value===`engine`?(a(),o(`div`,ke,[u(`div`,{class:_({"ai-field-highlight":Q(`engine_brand`)})},[s[112]||=u(`label`,{class:`text-xs text-gray-500`},`发动机品牌`,-1),h(u(`input`,{"onUpdate:modelValue":s[33]||=e=>x.value.engine_brand=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,Ae),[[r,x.value.engine_brand]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`engine_series`)})},[s[113]||=u(`label`,{class:`text-xs text-gray-500`},`发动机系列`,-1),h(u(`input`,{"onUpdate:modelValue":s[34]||=e=>x.value.engine_series=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,je),[[r,x.value.engine_series]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`engine_model`)})},[s[114]||=u(`label`,{class:`text-xs text-gray-500`},`发动机型号`,-1),h(u(`input`,{"onUpdate:modelValue":s[35]||=e=>x.value.engine_model=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,Me),[[r,x.value.engine_model]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`fuel_type`)})},[s[116]||=u(`label`,{class:`text-xs text-gray-500`},`燃料类型`,-1),h(u(`select`,{"onUpdate:modelValue":s[36]||=e=>x.value.fuel_type=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},[s[115]||=u(`option`,{value:``},`--`,-1),(a(),o(t,null,c(Mt,e=>u(`option`,{key:e,value:e},y(e),9,Pe)),64))],8,Ne),[[p,x.value.fuel_type]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`emission_standard`)})},[s[118]||=u(`label`,{class:`text-xs text-gray-500`},`排放标准`,-1),h(u(`select`,{"onUpdate:modelValue":s[37]||=e=>x.value.emission_standard=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},[s[117]||=u(`option`,{value:``},`--`,-1),(a(),o(t,null,c(Nt,e=>u(`option`,{key:e,value:e},y(e),9,Ie)),64))],8,Fe),[[p,x.value.emission_standard]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`fuel_system`)})},[s[119]||=u(`label`,{class:`text-xs text-gray-500`},`燃油系统`,-1),h(u(`input`,{"onUpdate:modelValue":s[38]||=e=>x.value.fuel_system=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,Le),[[r,x.value.fuel_system]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`cylinder_count`)})},[s[120]||=u(`label`,{class:`text-xs text-gray-500`},`缸数`,-1),h(u(`input`,{"onUpdate:modelValue":s[39]||=e=>x.value.cylinder_count=e,disabled:!e.editMode,type:`number`,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,Re),[[r,x.value.cylinder_count,void 0,{number:!0}]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`displacement_l`)})},[s[121]||=u(`label`,{class:`text-xs text-gray-500`},`排量 (L)`,-1),h(u(`input`,{"onUpdate:modelValue":s[40]||=e=>x.value.displacement_l=e,disabled:!e.editMode,type:`number`,step:`0.1`,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,ze),[[r,x.value.displacement_l,void 0,{number:!0}]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`rated_rpm`)})},[s[122]||=u(`label`,{class:`text-xs text-gray-500`},`额定转速 (rpm)`,-1),h(u(`input`,{"onUpdate:modelValue":s[41]||=e=>x.value.rated_rpm=e,disabled:!e.editMode,type:`number`,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,Be),[[r,x.value.rated_rpm,void 0,{number:!0}]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`max_power_kw`)})},[s[123]||=u(`label`,{class:`text-xs text-gray-500`},`最大功率 (kW)`,-1),h(u(`input`,{"onUpdate:modelValue":s[42]||=e=>x.value.max_power_kw=e,disabled:!e.editMode,type:`number`,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,Ve),[[r,x.value.max_power_kw,void 0,{number:!0}]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`torque_nm`)})},[s[124]||=u(`label`,{class:`text-xs text-gray-500`},`最大扭矩 (Nm)`,-1),h(u(`input`,{"onUpdate:modelValue":s[43]||=e=>x.value.torque_nm=e,disabled:!e.editMode,type:`number`,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,He),[[r,x.value.torque_nm,void 0,{number:!0}]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`bore_mm`)})},[s[125]||=u(`label`,{class:`text-xs text-gray-500`},`缸径 (mm)`,-1),h(u(`input`,{"onUpdate:modelValue":s[44]||=e=>x.value.bore_mm=e,disabled:!e.editMode,type:`number`,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,Ue),[[r,x.value.bore_mm,void 0,{number:!0}]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`compression_ratio`)})},[s[126]||=u(`label`,{class:`text-xs text-gray-500`},`压缩比`,-1),h(u(`input`,{"onUpdate:modelValue":s[45]||=e=>x.value.compression_ratio=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,We),[[r,x.value.compression_ratio]])],2)])):i(``,!0),v.value===`body`?(a(),o(`div`,Ge,[u(`div`,{class:_({"ai-field-highlight":Q(`body_type`)})},[s[127]||=u(`label`,{class:`text-xs text-gray-500`},`上装类型`,-1),h(u(`input`,{"onUpdate:modelValue":s[46]||=e=>x.value.body_type=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,Ke),[[r,x.value.body_type]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`body_model`)})},[s[128]||=u(`label`,{class:`text-xs text-gray-500`},`上装型号`,-1),h(u(`input`,{"onUpdate:modelValue":s[47]||=e=>x.value.body_model=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,qe),[[r,x.value.body_model]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`body_sn`)})},[s[129]||=u(`label`,{class:`text-xs text-gray-500`},`上装序列号`,-1),h(u(`input`,{"onUpdate:modelValue":s[48]||=e=>x.value.body_sn=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,Je),[[r,x.value.body_sn]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`body_brand`)})},[s[130]||=u(`label`,{class:`text-xs text-gray-500`},`上装品牌`,-1),h(u(`input`,{"onUpdate:modelValue":s[49]||=e=>x.value.body_brand=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,Ye),[[r,x.value.body_brand]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`manufacturer`)})},[s[131]||=u(`label`,{class:`text-xs text-gray-500`},`制造商`,-1),h(u(`input`,{"onUpdate:modelValue":s[50]||=e=>x.value.manufacturer=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,Xe),[[r,x.value.manufacturer]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`spec_volume_m3`)})},[s[132]||=u(`label`,{class:`text-xs text-gray-500`},`标称容积 (m³)`,-1),h(u(`input`,{"onUpdate:modelValue":s[51]||=e=>x.value.spec_volume_m3=e,disabled:!e.editMode,type:`number`,step:`0.1`,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,Ze),[[r,x.value.spec_volume_m3,void 0,{number:!0}]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`max_volume_m3`)})},[s[133]||=u(`label`,{class:`text-xs text-gray-500`},`最大容积 (m³)`,-1),h(u(`input`,{"onUpdate:modelValue":s[52]||=e=>x.value.max_volume_m3=e,disabled:!e.editMode,type:`number`,step:`0.1`,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,Qe),[[r,x.value.max_volume_m3,void 0,{number:!0}]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`max_load_kg`)})},[s[134]||=u(`label`,{class:`text-xs text-gray-500`},`最大载重 (kg)`,-1),h(u(`input`,{"onUpdate:modelValue":s[53]||=e=>x.value.max_load_kg=e,disabled:!e.editMode,type:`number`,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,$e),[[r,x.value.max_load_kg,void 0,{number:!0}]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`body_weight_kg`)})},[s[135]||=u(`label`,{class:`text-xs text-gray-500`},`上装重量 (kg)`,-1),h(u(`input`,{"onUpdate:modelValue":s[54]||=e=>x.value.body_weight_kg=e,disabled:!e.editMode,type:`number`,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,et),[[r,x.value.body_weight_kg,void 0,{number:!0}]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`material`)})},[s[136]||=u(`label`,{class:`text-xs text-gray-500`},`材质`,-1),h(u(`input`,{"onUpdate:modelValue":s[55]||=e=>x.value.material=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,tt),[[r,x.value.material]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`hydraulic_system`)})},[s[137]||=u(`label`,{class:`text-xs text-gray-500`},`液压系统`,-1),h(u(`input`,{"onUpdate:modelValue":s[56]||=e=>x.value.hydraulic_system=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,nt),[[r,x.value.hydraulic_system]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`control_system`)})},[s[138]||=u(`label`,{class:`text-xs text-gray-500`},`控制系统`,-1),h(u(`input`,{"onUpdate:modelValue":s[57]||=e=>x.value.control_system=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,rt),[[r,x.value.control_system]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`oil_pump_model`)})},[s[139]||=u(`label`,{class:`text-xs text-gray-500`},`油泵型号`,-1),h(u(`input`,{"onUpdate:modelValue":s[58]||=e=>x.value.oil_pump_model=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,it),[[r,x.value.oil_pump_model]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`multi_valve_model`)})},[s[140]||=u(`label`,{class:`text-xs text-gray-500`},`多路阀型号`,-1),h(u(`input`,{"onUpdate:modelValue":s[59]||=e=>x.value.multi_valve_model=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,at),[[r,x.value.multi_valve_model]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`pto_model`)})},[s[141]||=u(`label`,{class:`text-xs text-gray-500`},`PTO 型号`,-1),h(u(`input`,{"onUpdate:modelValue":s[60]||=e=>x.value.pto_model=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,ot),[[r,x.value.pto_model]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`generator_model`)})},[s[142]||=u(`label`,{class:`text-xs text-gray-500`},`发电机型号`,-1),h(u(`input`,{"onUpdate:modelValue":s[61]||=e=>x.value.generator_model=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,st),[[r,x.value.generator_model]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`motor_model`)})},[s[143]||=u(`label`,{class:`text-xs text-gray-500`},`电机型号`,-1),h(u(`input`,{"onUpdate:modelValue":s[62]||=e=>x.value.motor_model=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,ct),[[r,x.value.motor_model]])],2),u(`div`,{class:_({"ai-field-highlight":Q(`battery_model`)})},[s[144]||=u(`label`,{class:`text-xs text-gray-500`},`电池型号`,-1),h(u(`input`,{"onUpdate:modelValue":s[63]||=e=>x.value.battery_model=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,lt),[[r,x.value.battery_model]])],2)])):i(``,!0),v.value===`pump`?(a(),o(`div`,ut,[u(`div`,null,[s[145]||=u(`label`,{class:`text-xs text-gray-500`},`最大泵送压力 (MPa)`,-1),h(u(`input`,{"onUpdate:modelValue":s[64]||=e=>x.value.pump_max_pressure_mpa=e,type:`number`,step:`0.1`,min:`0`,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`,placeholder:`21`},null,8,dt),[[r,x.value.pump_max_pressure_mpa,void 0,{number:!0}]])]),u(`div`,null,[s[146]||=u(`label`,{class:`text-xs text-gray-500`},`理论最大排量 (m³/h)`,-1),h(u(`input`,{"onUpdate:modelValue":s[65]||=e=>x.value.pump_displacement_m3h=e,type:`number`,step:`1`,min:`0`,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`,placeholder:`180`},null,8,ft),[[r,x.value.pump_displacement_m3h,void 0,{number:!0}]])]),u(`div`,null,[s[147]||=u(`label`,{class:`text-xs text-gray-500`},`臂架节数`,-1),h(u(`input`,{"onUpdate:modelValue":s[66]||=e=>x.value.boom_sections=e,type:`number`,step:`1`,min:`0`,max:`8`,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`,placeholder:`6`},null,8,pt),[[r,x.value.boom_sections,void 0,{number:!0}]])]),u(`div`,null,[s[148]||=u(`label`,{class:`text-xs text-gray-500`},`臂架最大高度 (m)`,-1),h(u(`input`,{"onUpdate:modelValue":s[67]||=e=>x.value.boom_max_height_m=e,type:`number`,step:`0.1`,min:`0`,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`,placeholder:`55.8`},null,8,mt),[[r,x.value.boom_max_height_m,void 0,{number:!0}]])]),u(`div`,null,[s[149]||=u(`label`,{class:`text-xs text-gray-500`},`臂架最大长度 (m)`,-1),h(u(`input`,{"onUpdate:modelValue":s[68]||=e=>x.value.boom_max_length_m=e,type:`number`,step:`0.1`,min:`0`,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`,placeholder:`52.6`},null,8,ht),[[r,x.value.boom_max_length_m,void 0,{number:!0}]])]),u(`div`,null,[s[150]||=u(`label`,{class:`text-xs text-gray-500`},`液压油温上限 (°C)`,-1),h(u(`input`,{"onUpdate:modelValue":s[69]||=e=>x.value.hydraulic_oil_temp_max=e,type:`number`,step:`1`,min:`0`,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`,placeholder:`80`},null,8,gt),[[r,x.value.hydraulic_oil_temp_max,void 0,{number:!0}]])]),u(`div`,null,[s[152]||=u(`label`,{class:`text-xs text-gray-500`},`支腿状态`,-1),h(u(`select`,{"onUpdate:modelValue":s[70]||=e=>x.value.outrigger_status=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},[...s[151]||=[u(`option`,{value:0},`0 - 未展开`,-1),u(`option`,{value:1},`1 - 展开中`,-1),u(`option`,{value:2},`2 - 已展开`,-1),u(`option`,{value:3},`3 - 收拢中`,-1)]],8,_t),[[p,x.value.outrigger_status,void 0,{number:!0}]])]),u(`div`,null,[s[153]||=u(`label`,{class:`text-xs text-gray-500`},`累计泵送方量 (m³)`,-1),h(u(`input`,{"onUpdate:modelValue":s[71]||=e=>x.value.pump_total_volume_m3=e,type:`number`,step:`0.1`,min:`0`,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`,placeholder:`0`},null,8,vt),[[r,x.value.pump_total_volume_m3,void 0,{number:!0}]])])])):i(``,!0),v.value===`system`?(a(),o(`div`,yt,[u(`div`,{class:_({"ai-field-highlight":Q(`station_id`)})},[s[154]||=u(`label`,{class:`text-xs text-gray-500`},`所属搅拌站`,-1),h(u(`input`,{"onUpdate:modelValue":s[72]||=e=>x.value.station_id=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},null,8,bt),[[r,x.value.station_id]])],2),u(`div`,null,[s[156]||=u(`label`,{class:`text-xs text-gray-500`},`状态`,-1),h(u(`select`,{"onUpdate:modelValue":s[73]||=e=>x.value.status=e,disabled:!e.editMode,class:`w-full border rounded-lg px-3 py-2 text-sm disabled:bg-gray-50`},[...s[155]||=[ee(`<option value="idle" data-v-bfbe3e7b>待命</option><option value="loading" data-v-bfbe3e7b>装料中</option><option value="transporting" data-v-bfbe3e7b>运输中</option><option value="arrived" data-v-bfbe3e7b>已到达</option><option value="discharging" data-v-bfbe3e7b>卸料中</option><option value="returning" data-v-bfbe3e7b>返回中</option><option value="offline" data-v-bfbe3e7b>离线</option>`,7)]],8,xt),[[p,x.value.status]])]),u(`div`,null,[s[157]||=u(`label`,{class:`text-xs text-gray-500`},`绑定时间`,-1),u(`input`,{value:x.value.bind_time?new Date(x.value.bind_time).toLocaleString():`-`,disabled:``,class:`w-full border rounded-lg px-3 py-2 text-sm bg-gray-50 text-gray-400`},null,8,St)]),u(`div`,null,[s[158]||=u(`label`,{class:`text-xs text-gray-500`},`最后更新`,-1),u(`input`,{value:new Date(x.value.last_update).toLocaleString(),disabled:``,class:`w-full border rounded-lg px-3 py-2 text-sm bg-gray-50 text-gray-400`},null,8,Ct)]),u(`div`,null,[s[159]||=u(`label`,{class:`text-xs text-gray-500`},`创建时间`,-1),u(`input`,{value:new Date(x.value.created_at).toLocaleString(),disabled:``,class:`w-full border rounded-lg px-3 py-2 text-sm bg-gray-50 text-gray-400`},null,8,wt)])])):i(``,!0)]),e.editMode?(a(),o(`div`,Tt,[u(`button`,{class:`px-4 py-2 text-sm text-gray-600 bg-white border rounded-lg hover:bg-gray-100`,onClick:s[74]||=e=>g(`cancel`)},` 取消 `),u(`button`,{class:`px-4 py-2 text-sm text-white bg-blue-600 rounded-lg hover:bg-blue-700`,onClick:It},` 保存档案 `)])):i(``,!0)]))}}),[[`__scopeId`,`data-v-bfbe3e7b`]]),G={class:`space-y-4`},K={class:`flex items-center justify-between`},q={class:`flex items-center gap-3`},J={class:`text-sm text-gray-400`},Y={class:`flex flex-col md:flex-row gap-3 md:gap-4`},X={class:`w-full md:w-80 shrink-0 space-y-3`},Dt={key:0,class:`flex items-center gap-2 text-xs text-gray-500 px-1`},Z={class:`flex items-center gap-1 cursor-pointer select-none`},Q=[`checked`],Ot={class:`bg-white rounded-lg border shadow-sm divide-y max-h-[70vh] overflow-y-auto`},kt={key:0,class:`p-8 text-center text-gray-400 text-sm`},$=[`checked`,`onChange`],At=[`title`],jt=[`onClick`],Mt={class:`flex items-center gap-2`},Nt={class:`font-medium text-sm text-gray-700`},Pt={key:0,class:`text-[10px] text-blue-500 bg-blue-50 rounded px-1.5 py-0.5 font-mono`},Ft={class:`text-xs text-gray-400 mt-0.5`},It={key:0,class:`text-xs text-gray-400`},Lt=[`onClick`],Rt={class:`flex-1 min-w-0`},zt={key:0,class:`bg-white rounded-lg border shadow-sm p-12 text-center text-gray-400`},Bt={key:1,class:`space-y-3`},Vt={class:`bg-white rounded-lg border shadow-sm px-4 py-3 flex items-center justify-between`},Ht={class:`font-semibold text-lg`},Ut={key:0,class:`text-sm text-gray-400 ml-2`},Wt={class:`flex items-center gap-2`},Gt={class:`bg-white rounded-xl shadow-2xl w-full max-w-sm p-6`},Kt={class:`text-center`},qt={class:`text-sm text-gray-500 mb-4`},Jt={class:`flex justify-center gap-3`},Yt=n({__name:`VehicleProfile`,setup(n){let s=g(),p=d([]),b=d(null),w=d(!1),T=d(!1),E=d(``),D=d(new Set),O=d(null),k=d(!1);m(async()=>{await s.load(),p.value=s.vehicles});function A(e){return e.tbox_id?s.isVehicleOnline(e)?{color:`bg-green-500`,label:`在线`,title:`TBox 在线`}:{color:`bg-gray-400`,label:`离线`,title:`TBox 离线`}:{color:`bg-gray-400`,label:`未绑定`,title:`未绑定 TBox`}}function j(){let e=Date.now();return{vin:``,tbox_id:``,plate_number:``,vehicle_type:`搅拌车`,engine_sn:``,station_id:``,bind_time:0,status:`idle`,last_gps:null,last_update:e,created_at:e,updated_at:e,pump_max_pressure_mpa:void 0,pump_displacement_m3h:void 0,boom_sections:void 0,boom_max_height_m:void 0,boom_max_length_m:void 0,outrigger_status:void 0,hydraulic_oil_temp_max:void 0,pump_total_volume_m3:void 0}}function M(e){return e.vin.startsWith(`TEMP_`)}let N=l(()=>{let e=p.value.filter(e=>!M(e));if(!E.value)return e;let t=E.value.toLowerCase();return e.filter(e=>e.vin.toLowerCase().includes(t)||e.plate_number.toLowerCase().includes(t)||e.internal_no&&e.internal_no.toLowerCase().includes(t))}),P=l(()=>b.value?p.value.find(e=>e.vin===b.value)??null:null);function F(e){b.value=e,w.value=!1}function I(){b.value=null,T.value=!0,w.value=!0}function L(){w.value=!0}async function R(e){await s.upsert(e),p.value=s.vehicles,T.value&&(T.value=!1,b.value=e.vin),w.value=!1}function te(){w.value=!1,T.value=!1}let z=l(()=>D.value.size);function ne(e){let t=new Set(D.value);t.has(e)?t.delete(e):t.add(e),D.value=t}function re(){D.value.size===N.value.length?D.value=new Set:D.value=new Set(N.value.map(e=>e.vin))}function B(e,t){O.value={vin:e,label:t}}function V(){O.value=null}async function H(){O.value&&(await s.remove(O.value.vin),p.value=s.vehicles,b.value===O.value.vin&&(b.value=null),D.value=new Set,V())}async function U(){let e=[...D.value];if(!(e.length===0||!confirm(`确定删除选中的 ${e.length} 台车辆吗?此操作不可撤销。`))){for(let t of e)await s.remove(t),b.value===t&&(b.value=null);p.value=s.vehicles,D.value=new Set,k.value=!1}}return(n,s)=>(a(),o(`div`,G,[u(`div`,K,[s[8]||=u(`h1`,{class:`text-2xl font-bold`},`🚛 车辆档案`,-1),u(`div`,q,[u(`span`,J,y(N.value.length)+` 台`,1),z.value>0?(a(),o(`button`,{key:0,class:`px-3 py-1 text-sm text-white bg-red-600 rounded-lg hover:bg-red-700`,onClick:s[0]||=e=>U()},` 🗑 删除选中 (`+y(z.value)+`) `,1)):(a(),o(`button`,{key:1,class:`px-3 py-1 text-xs text-gray-500 border rounded-lg hover:bg-gray-100`,onClick:s[1]||=e=>k.value=!k.value},y(k.value?`取消`:`☐ 批量操作`),1)),u(`button`,{class:`px-3 py-1 text-sm text-white bg-green-600 rounded-lg hover:bg-green-700`,onClick:I},`+ 新增车辆`),u(`button`,{class:`px-2 py-0.5 text-xs text-blue-600 border border-blue-200 rounded hover:bg-blue-50`,onClick:s[2]||=t=>e(C)(p.value)},`JSON`),u(`button`,{class:`px-2 py-0.5 text-xs text-green-600 border border-green-200 rounded hover:bg-green-50`,onClick:s[3]||=t=>e(S)(p.value)},`CSV`)])]),u(`div`,Y,[u(`div`,X,[h(u(`input`,{"onUpdate:modelValue":s[4]||=e=>E.value=e,type:`text`,placeholder:`搜索 VIN / 车牌 / 编号...`,class:`w-full border rounded-lg px-3 py-2 text-sm`},null,512),[[r,E.value]]),s[11]||=ee(`<div class="flex items-center gap-3 text-[10px] text-gray-400 px-1"><span class="flex items-center gap-1"><span class="w-2 h-2 rounded-full bg-green-500"></span>TBox 在线</span><span class="flex items-center gap-1"><span class="w-2 h-2 rounded-full bg-gray-400"></span>TBox 离线</span></div>`,1),k.value&&N.value.length>0?(a(),o(`div`,Dt,[u(`label`,Z,[u(`input`,{type:`checkbox`,checked:z.value===N.value.length,onChange:re},null,40,Q),s[9]||=f(` 全选 `,-1)]),s[10]||=u(`span`,{class:`text-gray-300`},`|`,-1),u(`span`,null,`已选 `+y(z.value)+` 台`,1)])):i(``,!0),u(`div`,Ot,[N.value.length===0?(a(),o(`div`,kt,` 暂无车辆档案 `)):i(``,!0),(a(!0),o(t,null,c(N.value,e=>(a(),o(`div`,{key:e.vin,class:_([`px-4 py-3 cursor-pointer hover:bg-blue-50 transition-colors flex items-start gap-2`,b.value===e.vin?`bg-blue-50 border-l-2 border-blue-500`:``])},[k.value?(a(),o(`input`,{key:0,type:`checkbox`,class:`mt-1 shrink-0`,checked:D.value.has(e.vin),onClick:s[5]||=v(()=>{},[`stop`]),onChange:t=>ne(e.vin)},null,40,$)):i(``,!0),u(`span`,{class:_([`mt-1 shrink-0 w-2.5 h-2.5 rounded-full`,A(e).color]),title:A(e).title},null,10,At),u(`div`,{class:`flex-1 min-w-0`,onClick:t=>F(e.vin)},[u(`div`,Mt,[u(`span`,Nt,y(e.plate_number||e.vin.slice(-8)),1),e.tbox_id?(a(),o(`span`,Pt,y(e.tbox_id.length>8?e.tbox_id.slice(0,4)+`…`+e.tbox_id.slice(-4):e.tbox_id),1)):i(``,!0),u(`span`,{class:_([`text-[10px]`,A(e).color===`bg-green-500`?`text-green-600`:`text-gray-400`])},` (`+y(A(e).label)+`) `,3)]),u(`div`,Ft,` VIN: `+y(e.vin.slice(-6))+` · `+y(e.vehicle_type),1),e.internal_no?(a(),o(`div`,It,` 编号: `+y(e.internal_no),1)):i(``,!0)],8,jt),u(`button`,{class:`shrink-0 text-gray-300 hover:text-red-500 transition-colors text-xs mt-1`,title:`删除此车辆`,onClick:v(t=>B(e.vin,e.plate_number||e.vin.slice(-8)),[`stop`])},` ✕ `,8,Lt)],2))),128))])]),u(`div`,Rt,[!P.value&&!T.value?(a(),o(`div`,zt,[...s[12]||=[u(`div`,{class:`text-4xl mb-3`},`🚛`,-1),u(`p`,{class:`text-sm`},`选择左侧车辆查看档案,或点击「+ 新增车辆」`,-1)]])):(a(),o(`div`,Bt,[u(`div`,Vt,[u(`div`,null,[u(`span`,Ht,y(T.value?`🆕 新增车辆`:P.value?.plate_number||`未上牌`),1),T.value?i(``,!0):(a(),o(`span`,Ut,`VIN: `+y(P.value?.vin),1))]),u(`div`,Wt,[T.value?i(``,!0):(a(),o(`button`,{key:0,class:`px-3 py-1.5 text-xs text-red-600 border border-red-200 rounded-lg hover:bg-red-50`,onClick:s[6]||=e=>B(P.value.vin,P.value.plate_number||P.value.vin.slice(-8))},` 🗑 删除 `)),w.value?i(``,!0):(a(),o(`button`,{key:1,class:`px-4 py-1.5 text-sm text-white bg-blue-600 rounded-lg hover:bg-blue-700`,onClick:L},` ✏️ 编辑档案 `))])]),x(W,{vehicle:T.value?j():P.value,"edit-mode":w.value,onSave:R,onCancel:te},null,8,[`vehicle`,`edit-mode`])]))])]),O.value?(a(),o(`div`,{key:0,class:`fixed inset-0 bg-black/30 z-50 flex items-center justify-center`,onClick:v(V,[`self`])},[u(`div`,Gt,[u(`div`,Kt,[s[17]||=u(`div`,{class:`text-4xl mb-3`},`⚠️`,-1),s[18]||=u(`h3`,{class:`text-lg font-semibold text-gray-800 mb-2`},`确认删除`,-1),u(`p`,qt,[s[13]||=f(` 确定要删除车辆 `,-1),u(`strong`,null,y(O.value.label),1),s[14]||=f(` 吗?`,-1),s[15]||=u(`br`,null,null,-1),s[16]||=f(` 此操作不可撤销,车辆的订单/告警/轨迹等关联数据也将一并移除。 `,-1)]),u(`div`,Jt,[u(`button`,{class:`px-4 py-2 text-sm text-gray-600 bg-white border rounded-lg hover:bg-gray-100`,onClick:V},` 取消 `),u(`button`,{class:`px-4 py-2 text-sm text-white bg-red-600 rounded-lg hover:bg-red-700`,onClick:s[7]||=e=>H()},` 确认删除 `)])])])])):i(``,!0)]))}});export{Yt as default};
@@ -0,0 +1 @@
1
+ import{$ as e,A as t,B as n,C as r,E as i,F as a,G as o,I as s,K as c,M as l,N as u,Q as d,R as f,T as p,U as m,X as h,a as g,et as _,k as v,nt as y,o as b}from"./index-CTrnN2TM.js";var x={class:`space-y-4`},S={class:`flex gap-3 items-center`},C=[`value`],w={class:`text-xs text-gray-400`},T={class:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3`},E={key:0,class:`col-span-full bg-white rounded-lg border p-12 text-center text-gray-400`},D={class:`flex items-start justify-between mb-2`},O={class:`flex items-center gap-2`},ee={key:0,class:`text-xs bg-yellow-50 text-yellow-700 px-1.5 py-0.5 rounded`},te={class:`flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity`},k=[`onClick`],A=[`onClick`],j={class:`text-base font-semibold text-gray-800`},M={key:0,class:`text-xs text-gray-400 mt-1`},N={class:`flex items-center gap-4 mt-3 text-xs text-gray-400`},P={key:0},F={class:`bg-white rounded-xl shadow-2xl w-full max-w-md p-6`},I={class:`text-lg font-semibold mb-4`},L=[`value`],R={class:`grid grid-cols-2 gap-3`},z={class:`flex items-center gap-2 cursor-pointer`},B=n({__name:`VehicleTypeManager`,setup(n){let B=b(),V=d([]),H=d(!1),U=d(null),W=d(``),G=d(``),K=d(``),q=d(`mixer`),J=d(``),Y=d(void 0),X=d(!1),Z=d(100),Q=l(()=>{let e=V.value;if(W.value&&(e=e.filter(e=>e.category===W.value)),G.value){let t=G.value.toLowerCase();e=e.filter(e=>e.name.toLowerCase().includes(t)||e.description&&e.description.toLowerCase().includes(t))}return e});async function ne(){await B.load(),V.value=B.sortedTypes}function re(){U.value=null,K.value=``,q.value=`mixer`,J.value=``,Y.value=void 0,X.value=!1,Z.value=100,H.value=!0}function ie(e){U.value={...e},K.value=e.name,q.value=e.category,J.value=e.description??``,Y.value=e.default_spec_volume,X.value=e.is_pump,Z.value=e.sort_order,H.value=!0}function $(){H.value=!1,U.value=null}async function ae(){if(!K.value.trim())return;let e=Date.now(),t={id:U.value?.id??`vt_${q.value}_${Date.now().toString(36)}`,name:K.value.trim(),category:q.value,description:J.value||void 0,default_spec_volume:Y.value,is_pump:X.value,sort_order:Z.value,created_at:U.value?.created_at??e,updated_at:e};await B.upsert(t),V.value=B.sortedTypes,$()}async function oe(e){if(e.id.startsWith(`vt_mixer_12`)||e.id===`vt_other`){alert(`"${e.name}" 是系统默认类型,不可删除`);return}confirm(`确定删除车辆类型 "${e.name}" 吗?\n已分配此类型的车辆将不受影响。`)&&(await B.remove(e.id),V.value=B.sortedTypes)}return m(ne),(n,l)=>(o(),s(`div`,x,[u(`div`,{class:`flex items-center justify-between`},[l[8]||=u(`div`,null,[u(`h1`,{class:`text-2xl font-bold`},`🏷️ 车辆类型管理`),u(`p`,{class:`text-xs text-gray-400 mt-1`},`管理系统中可选的车辆类型,新增/编辑/删除后将在车辆档案表单中生效`)],-1),u(`button`,{class:`px-4 py-2 text-sm bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors`,onClick:re},` + 新建类型 `)]),u(`div`,S,[h(u(`input`,{"onUpdate:modelValue":l[0]||=e=>G.value=e,type:`text`,placeholder:`搜索类型名称...`,class:`border rounded-lg px-3 py-1.5 text-sm w-48`},null,512),[[i,G.value]]),h(u(`select`,{"onUpdate:modelValue":l[1]||=e=>W.value=e,class:`border rounded-lg px-3 py-1.5 text-sm`},[l[9]||=u(`option`,{value:``},`全部大类`,-1),(o(!0),s(t,null,c(e(g),(e,t)=>(o(),s(`option`,{key:t,value:t},y(e),9,C))),128))],512),[[p,W.value]]),u(`span`,w,`共 `+y(Q.value.length)+` 种类型`,1)]),u(`div`,T,[Q.value.length===0?(o(),s(`div`,E,[...l[10]||=[u(`div`,{class:`text-3xl mb-2`},`🏷️`,-1),u(`p`,{class:`text-sm`},`暂无车辆类型,点击「+ 新建类型」添加`,-1)]])):a(``,!0),(o(!0),s(t,null,c(Q.value,t=>(o(),s(`div`,{key:t.id,class:`bg-white rounded-lg border shadow-sm p-4 hover:shadow-md transition-shadow group`},[u(`div`,D,[u(`div`,O,[u(`span`,{class:_([`text-xs font-medium px-2 py-0.5 rounded-full`,{"bg-blue-50 text-blue-700":t.category===`mixer`,"bg-purple-50 text-purple-700":t.category===`pump`,"bg-orange-50 text-orange-700":t.category===`dump`,"bg-teal-50 text-teal-700":t.category===`tractor`,"bg-gray-50 text-gray-600":t.category===`other`}])},y(e(g)[t.category]),3),t.is_pump?(o(),s(`span`,ee,`⚡泵送`)):a(``,!0)]),u(`div`,te,[u(`button`,{class:`text-xs text-blue-600 hover:bg-blue-50 px-2 py-0.5 rounded`,onClick:e=>ie(t)},`编辑`,8,k),u(`button`,{class:`text-xs text-red-500 hover:bg-red-50 px-2 py-0.5 rounded`,onClick:e=>oe(t)},`删除`,8,A)])]),u(`div`,j,y(t.name),1),t.description?(o(),s(`div`,M,y(t.description),1)):a(``,!0),u(`div`,N,[t.default_spec_volume&&t.default_spec_volume>0?(o(),s(`span`,P,` 📐 `+y(t.default_spec_volume)+` m³ `,1)):a(``,!0),u(`span`,null,`排序: `+y(t.sort_order),1)])]))),128))]),H.value?(o(),s(`div`,{key:0,class:`fixed inset-0 bg-black/30 z-50 flex items-center justify-center`,onClick:v($,[`self`])},[u(`div`,F,[u(`h3`,I,y(U.value?`编辑车辆类型`:`新建车辆类型`),1),u(`form`,{class:`space-y-3`,onSubmit:v(ae,[`prevent`])},[u(`div`,null,[l[11]||=u(`label`,{class:`text-xs text-gray-500`},[f(`类型名称 `),u(`span`,{class:`text-red-400`},`*`)],-1),h(u(`input`,{"onUpdate:modelValue":l[2]||=e=>K.value=e,type:`text`,class:`w-full border rounded-lg px-3 py-2 text-sm`,placeholder:`如:搅拌车、56米臂架泵车`},null,512),[[i,K.value]])]),u(`div`,null,[l[12]||=u(`label`,{class:`text-xs text-gray-500`},`大类`,-1),h(u(`select`,{"onUpdate:modelValue":l[3]||=e=>q.value=e,class:`w-full border rounded-lg px-3 py-2 text-sm`},[(o(!0),s(t,null,c(e(g),(e,t)=>(o(),s(`option`,{key:t,value:t},y(e),9,L))),128))],512),[[p,q.value]])]),u(`div`,null,[l[13]||=u(`label`,{class:`text-xs text-gray-500`},`描述说明`,-1),h(u(`input`,{"onUpdate:modelValue":l[4]||=e=>J.value=e,type:`text`,class:`w-full border rounded-lg px-3 py-2 text-sm`,placeholder:`如:混凝土搅拌运输车`},null,512),[[i,J.value]])]),u(`div`,R,[u(`div`,null,[l[14]||=u(`label`,{class:`text-xs text-gray-500`},`默认方量 (m³)`,-1),h(u(`input`,{"onUpdate:modelValue":l[5]||=e=>Y.value=e,type:`number`,step:`0.1`,min:`0`,class:`w-full border rounded-lg px-3 py-2 text-sm`,placeholder:`0`},null,512),[[i,Y.value,void 0,{number:!0}]])]),u(`div`,null,[l[15]||=u(`label`,{class:`text-xs text-gray-500`},`排序权重`,-1),h(u(`input`,{"onUpdate:modelValue":l[6]||=e=>Z.value=e,type:`number`,min:`1`,class:`w-full border rounded-lg px-3 py-2 text-sm`},null,512),[[i,Z.value,void 0,{number:!0}]])])]),u(`div`,null,[u(`label`,z,[h(u(`input`,{"onUpdate:modelValue":l[7]||=e=>X.value=e,type:`checkbox`,class:`rounded`},null,512),[[r,X.value]]),l[16]||=u(`span`,{class:`text-sm text-gray-600`},`泵送设备 (影响车辆档案显示泵送参数 Tab)`,-1)])]),u(`div`,{class:`flex justify-end gap-3 pt-3`},[u(`button`,{type:`button`,class:`px-4 py-2 text-sm text-gray-600 bg-white border rounded-lg hover:bg-gray-100`,onClick:$},` 取消 `),l[17]||=u(`button`,{type:`submit`,class:`px-4 py-2 text-sm text-white bg-blue-600 rounded-lg hover:bg-blue-700`},` 保存 `,-1)])],32)])])):a(``,!0)]))}});export{B as default};
@@ -0,0 +1 @@
1
+ var e=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n};export{e as t};
@@ -0,0 +1,14 @@
1
+ import{p as e}from"./index-CTrnN2TM.js";var t=new class{get config(){return e.config.deepseek}get enabled(){return this.config.enabled&&!!this.config.apiKey}async chat(e,t){let n=this.config,r={model:n.model,messages:e,temperature:t?.temperature??.3,max_tokens:t?.maxTokens??n.maxTokens,stream:!1};t?.jsonMode&&(r.response_format={type:`json_object`}),t?.disableThinking&&(r.thinking={type:`disabled`});let i=`${n.baseUrl}/chat/completions`,a=await fetch(i,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${n.apiKey}`},body:JSON.stringify(r)});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error(`DeepSeek API error ${a.status}: ${e.error?.message??a.statusText}`)}return(await a.json()).choices[0]?.message?.content??``}async recognizeIntent(e,t){let n=`你是混凝土搅拌车队调度助手。分析用户指令并提取意图和实体。
2
+
3
+ 已知工地列表:${t.join(`、`)||`无`}
4
+
5
+ 用户输入:"${e}"
6
+
7
+ 请返回 JSON:
8
+ {
9
+ "intent": "material_enough|stop_supply|need_more|pump_broken|pump_fixed|resume_delivery|request_more|unknown",
10
+ "explanation": "简短解释(10字以内)",
11
+ "siteName": "工地名称(如果能识别)或null",
12
+ "volume": 方量数值或null,
13
+ "confidence": 0.0-1.0
14
+ }`;try{let e=await this.chat([{role:`system`,content:`你是混凝土搅拌车队调度专家。只返回JSON,不要其他内容。`},{role:`user`,content:n}],{temperature:.1,maxTokens:300,jsonMode:!0,disableThinking:!0}),t=JSON.parse(e);return{intent:t.intent??`unknown`,siteName:t.siteName??null,volume:typeof t.volume==`number`?t.volume:null,confidence:t.confidence??.5}}catch(e){return console.error(`[DeepSeek] Intent recognition failed:`,e),{intent:`unknown`,siteName:null,volume:null,confidence:0}}}async generateReply(e,t){if(t.message)return t.message;try{return await this.chat([{role:`system`,content:`你是混凝土搅拌车队调度助手。用简洁的中文回复调度结果。`},{role:`user`,content:`意图=${e}, 成功=${t.success}, 涉及订单=${t.orders?.join(`,`)??`无`}。请生成一句调度确认回复。`}],{temperature:.5,maxTokens:100,disableThinking:!0})}catch{return t.success?`✅ 调度指令已执行`:`❌ 执行失败`}}};export{t};
@@ -0,0 +1,10 @@
1
+ import{m as e}from"./index-CTrnN2TM.js";function t(e,t,n){let r=new Blob([``+t],{type:n}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=e,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(i)}function n(e,t){let n=new Date;return`${e}_${[n.getFullYear(),String(n.getMonth()+1).padStart(2,`0`),String(n.getDate()).padStart(2,`0`),String(n.getHours()).padStart(2,`0`),String(n.getMinutes()).padStart(2,`0`)].join(``)}.${t}`}function r(e,n){t(e,JSON.stringify(n,null,2),`application/json`)}function i(e,t){let n=t.map(e=>e.label).join(`,`),r=e.map(e=>t.map(t=>{let n=e[t.key];if(n==null)return``;let r=typeof n==`object`?JSON.stringify(n):String(n);return r.includes(`,`)||r.includes(`"`)||r.includes(`
2
+ `)?`"${r.replace(/"/g,`""`)}"`:r}).join(`,`)).join(`
3
+ `);return n+`
4
+ `+r}function a(e,n,r){t(e,i(n,r),`text/csv;charset=utf-8`)}var o=[{key:`order_id`,label:`订单ID`},{key:`vin`,label:`VIN`},{key:`station_id`,label:`搅拌站`},{key:`destination_name`,label:`目的地`},{key:`concrete_grade`,label:`标号`},{key:`volume_m3`,label:`方量(m³)`},{key:`slump`,label:`坍落度(mm)`},{key:`status`,label:`状态`},{key:`created_at`,label:`创建时间`},{key:`loaded_at`,label:`装料时间`},{key:`departed_at`,label:`发车时间`},{key:`arrived_at`,label:`到达时间`},{key:`completed_at`,label:`完成时间`}];function s(e){let t=e.map(e=>({...e,created_at:e.created_at?new Date(e.created_at).toISOString():null,loaded_at:e.loaded_at?new Date(e.loaded_at).toISOString():null,departed_at:e.departed_at?new Date(e.departed_at).toISOString():null,arrived_at:e.arrived_at?new Date(e.arrived_at).toISOString():null,completed_at:e.completed_at?new Date(e.completed_at).toISOString():null}));r(n(`orders`,`json`),t)}function c(e){let t=e=>e?new Date(e).toLocaleString(`zh-CN`):``;a(n(`orders`,`csv`),e.map(e=>({...e,created_at:t(e.created_at),loaded_at:t(e.loaded_at),departed_at:t(e.departed_at),arrived_at:t(e.arrived_at),completed_at:t(e.completed_at)})),o)}var l=[{key:`alarm_id`,label:`告警ID`},{key:`vin`,label:`VIN`},{key:`alarm_type`,label:`类型`},{key:`severity`,label:`严重程度`},{key:`description`,label:`描述`},{key:`status`,label:`状态`},{key:`occurred_at`,label:`发生时间`},{key:`handled_at`,label:`处理时间`}];function u(e){r(n(`alarms`,`json`),e)}function d(e){let t=e=>e?new Date(e).toLocaleString(`zh-CN`):``;a(n(`alarms`,`csv`),e.map(e=>({...e,occurred_at:t(e.occurred_at),handled_at:t(e.handled_at)})),l)}var f=[{key:`vin`,label:`VIN`},{key:`lng`,label:`经度`},{key:`lat`,label:`纬度`},{key:`speed`,label:`速度(km/h)`},{key:`heading`,label:`方向(°)`},{key:`altitude`,label:`高度(m)`},{key:`satellites`,label:`卫星数`},{key:`timestamp`,label:`时间`}];async function p(t){let i=await e.getByVin(t);r(n(`track_${t.slice(-6)}`,`json`),i)}async function m(t){let r=await e.getByVin(t);a(n(`track_${t.slice(-6)}`,`csv`),r.map(e=>({...e,timestamp:new Date(e.timestamp).toLocaleString(`zh-CN`)})),f)}var h=[{key:`vin`,label:`VIN`},{key:`plate_number`,label:`车牌号`},{key:`vehicle_type`,label:`车辆类型`},{key:`brand`,label:`品牌`},{key:`model_name`,label:`车型`},{key:`station_id`,label:`搅拌站`},{key:`status`,label:`状态`},{key:`tbox_id`,label:`TBox`},{key:`engine_sn`,label:`发动机号`},{key:`bind_time`,label:`绑定时间`}];function g(e){r(n(`vehicles`,`json`),e)}function _(e){a(n(`vehicles`,`csv`),e.map(e=>({...e,bind_time:e.bind_time?new Date(e.bind_time).toLocaleString(`zh-CN`):``,last_gps:e.last_gps?`${e.last_gps.lng.toFixed(6)},${e.last_gps.lat.toFixed(6)}`:``})),h)}function v(e){let t=document.createElement(`style`);if(t.textContent=`
5
+ @media print {
6
+ body * { visibility: hidden !important; }
7
+ .pdf-print-area, .pdf-print-area * { visibility: visible !important; }
8
+ .pdf-print-area { position: absolute; left: 0; top: 0; width: 100%; }
9
+ }
10
+ `,document.head.appendChild(t),!document.querySelector(`.pdf-print-area`)){alert(`未找到可导出的报表内容`),document.head.removeChild(t);return}let n=document.title;document.title=e,window.print(),document.title=n,setTimeout(()=>document.head.removeChild(t),1e3)}export{c as a,_ as c,p as i,g as l,u as n,s as o,m as r,v as s,d as t};
@@ -0,0 +1,2 @@
1
+ /*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-orange-50:oklch(98% .016 73.684);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-200:oklch(90.1% .076 70.697);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-teal-50:oklch(98.4% .014 180.72);--color-teal-100:oklch(95.3% .051 180.801);--color-teal-500:oklch(70.4% .14 182.503);--color-teal-600:oklch(60% .118 184.704);--color-teal-700:oklch(51.1% .096 186.391);--color-cyan-100:oklch(95.6% .045 203.388);--color-cyan-700:oklch(52% .105 223.128);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-700:oklch(50% .134 242.749);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-200:oklch(87% .065 274.039);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-800:oklch(43.8% .218 303.724);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.-top-1{top:calc(var(--spacing) * -1)}.top-0{top:calc(var(--spacing) * 0)}.top-1\/2{top:50%}.top-4{top:calc(var(--spacing) * 4)}.top-full{top:100%}.-right-1{right:calc(var(--spacing) * -1)}.right-0{right:calc(var(--spacing) * 0)}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.bottom-2{bottom:calc(var(--spacing) * 2)}.left-0{left:calc(var(--spacing) * 0)}.left-2{left:calc(var(--spacing) * 2)}.left-3{left:calc(var(--spacing) * 3)}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.z-\[9998\]{z-index:9998}.z-\[10000\]{z-index:10000}.col-span-full{grid-column:1/-1}.float-left{float:left}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.m-1{margin:calc(var(--spacing) * 1)}.m-2{margin:calc(var(--spacing) * 2)}.m-3{margin:calc(var(--spacing) * 3)}.m-4{margin:calc(var(--spacing) * 4)}.m-5{margin:calc(var(--spacing) * 5)}.mx-1{margin-inline:calc(var(--spacing) * 1)}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mx-5{margin-inline:calc(var(--spacing) * 5)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing) * 1)}.my-2{margin-block:calc(var(--spacing) * 2)}.my-3{margin-block:calc(var(--spacing) * 3)}.my-4{margin-block:calc(var(--spacing) * 4)}.my-5{margin-block:calc(var(--spacing) * 5)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-1\.5{margin-right:calc(var(--spacing) * 1.5)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-3{margin-right:calc(var(--spacing) * 3)}.mr-4{margin-right:calc(var(--spacing) * 4)}.mr-5{margin-right:calc(var(--spacing) * 5)}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-5{margin-left:calc(var(--spacing) * 5)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.contents\!{display:contents!important}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.h-0\.5{height:calc(var(--spacing) * .5)}.h-1{height:calc(var(--spacing) * 1)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-9{height:calc(var(--spacing) * 9)}.h-14{height:calc(var(--spacing) * 14)}.h-24{height:calc(var(--spacing) * 24)}.h-40{height:calc(var(--spacing) * 40)}.h-48{height:calc(var(--spacing) * 48)}.h-64{height:calc(var(--spacing) * 64)}.h-96{height:calc(var(--spacing) * 96)}.h-\[600px\]{height:600px}.h-full{height:100%}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-\[60vh\]{max-height:60vh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[95vh\]{max-height:95vh}.min-h-\[36px\]{min-height:36px}.min-h-\[44px\]{min-height:44px}.min-h-\[60px\]{min-height:60px}.min-h-screen{min-height:100vh}.w-0\.5{width:calc(var(--spacing) * .5)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-9{width:calc(var(--spacing) * 9)}.w-16{width:calc(var(--spacing) * 16)}.w-48{width:calc(var(--spacing) * 48)}.w-56{width:calc(var(--spacing) * 56)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-96{width:calc(var(--spacing) * 96)}.w-fit{width:fit-content}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-\[85\%\]{max-width:85%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[16px\]{min-width:16px}.min-w-\[44px\]{min-width:44px}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.border-collapse{border-collapse:collapse}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.transform\!{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)!important}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.touch-pan-x{--tw-pan-x:pan-x;touch-action:var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.appearance-none{appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-px{gap:1px}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-b-lg{border-bottom-right-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-amber-200{border-color:var(--color-amber-200)}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-600{border-color:var(--color-blue-600)}.border-gray-50{border-color:var(--color-gray-50)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-green-200{border-color:var(--color-green-200)}.border-indigo-200{border-color:var(--color-indigo-200)}.border-orange-200{border-color:var(--color-orange-200)}.border-orange-300{border-color:var(--color-orange-300)}.border-orange-400{border-color:var(--color-orange-400)}.border-red-200{border-color:var(--color-red-200)}.border-red-500{border-color:var(--color-red-500)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\/30{border-color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.border-white\/30{border-color:color-mix(in oklab, var(--color-white) 30%, transparent)}}.border-t-transparent{border-top-color:#0000}.border-t-white{border-top-color:var(--color-white)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.bg-black\/30{background-color:color-mix(in oklab, var(--color-black) 30%, transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab, red, red)){.bg-black\/40{background-color:color-mix(in oklab, var(--color-black) 40%, transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab, red, red)){.bg-black\/60{background-color:color-mix(in oklab, var(--color-black) 60%, transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/50{background-color:#eff6ff80}@supports (color:color-mix(in lab, red, red)){.bg-blue-50\/50{background-color:color-mix(in oklab, var(--color-blue-50) 50%, transparent)}}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-400{background-color:var(--color-blue-400)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-cyan-100{background-color:var(--color-cyan-100)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-50\/50{background-color:#f9fafb80}@supports (color:color-mix(in lab, red, red)){.bg-gray-50\/50{background-color:color-mix(in oklab, var(--color-gray-50) 50%, transparent)}}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-200{background-color:var(--color-purple-200)}.bg-purple-400{background-color:var(--color-purple-400)}.bg-purple-500{background-color:var(--color-purple-500)}.bg-purple-600{background-color:var(--color-purple-600)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-50\/30{background-color:#fef2f24d}@supports (color:color-mix(in lab, red, red)){.bg-red-50\/30{background-color:color-mix(in oklab, var(--color-red-50) 30%, transparent)}}.bg-red-100{background-color:var(--color-red-100)}.bg-red-400{background-color:var(--color-red-400)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-sky-100{background-color:var(--color-sky-100)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-500{background-color:var(--color-teal-500)}.bg-white{background-color:var(--color-white)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-50\/30{background-color:#fefce84d}@supports (color:color-mix(in lab, red, red)){.bg-yellow-50\/30{background-color:color-mix(in oklab, var(--color-yellow-50) 30%, transparent)}}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-blue-50{--tw-gradient-from:var(--color-blue-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-purple-50{--tw-gradient-from:var(--color-purple-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-blue-50{--tw-gradient-to:var(--color-blue-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-indigo-50{--tw-gradient-to:var(--color-indigo-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.mask-repeat{-webkit-mask-repeat:repeat;mask-repeat:repeat}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.p-12{padding:calc(var(--spacing) * 12)}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pr-5{padding-right:calc(var(--spacing) * 5)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pl-1{padding-left:calc(var(--spacing) * 1)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-9{padding-left:calc(var(--spacing) * 9)}.text-center{text-align:center}.text-justify{text-align:justify}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-wrap{text-wrap:wrap}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-cyan-700{color:var(--color-cyan-700)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-700{color:var(--color-orange-700)}.text-purple-400{color:var(--color-purple-400)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-sky-700{color:var(--color-sky-700)}.text-teal-600{color:var(--color-teal-600)}.text-teal-700{color:var(--color-teal-700)}.text-white{color:var(--color-white)}.text-yellow-500{color:var(--color-yellow-500)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.line-through{text-decoration-line:line-through}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.accent-blue-600{accent-color:var(--color-blue-600)}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a)) drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.sepia{--tw-sepia:sepia(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.peer-checked\:bg-blue-600:is(:where(.peer):checked~*){background-color:var(--color-blue-600)}.peer-focus\:ring-2:is(:where(.peer):focus~*){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.peer-focus\:ring-blue-300:is(:where(.peer):focus~*){--tw-ring-color:var(--color-blue-300)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:top-\[2px\]:after{content:var(--tw-content);top:2px}.after\:left-\[2px\]:after{content:var(--tw-content);left:2px}.after\:h-4:after{content:var(--tw-content);height:calc(var(--spacing) * 4)}.after\:w-4:after{content:var(--tw-content);width:calc(var(--spacing) * 4)}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.after\:bg-white:after{content:var(--tw-content);background-color:var(--color-white)}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.peer-checked\:after\:translate-x-full:is(:where(.peer):checked~*):after{content:var(--tw-content);--tw-translate-x:100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-100:hover{background-color:var(--color-blue-100)}.hover\:bg-blue-600:hover{background-color:var(--color-blue-600)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-300:hover{background-color:var(--color-gray-300)}.hover\:bg-green-50:hover{background-color:var(--color-green-50)}.hover\:bg-green-100:hover{background-color:var(--color-green-100)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-purple-100:hover{background-color:var(--color-purple-100)}.hover\:bg-purple-100\/50:hover{background-color:#f3e8ff80}@supports (color:color-mix(in lab, red, red)){.hover\:bg-purple-100\/50:hover{background-color:color-mix(in oklab, var(--color-purple-100) 50%, transparent)}}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:bg-red-100:hover{background-color:var(--color-red-100)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-yellow-100:hover{background-color:var(--color-yellow-100)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}}.focus\:border-purple-400:focus{border-color:var(--color-purple-400)}.focus\:border-transparent:focus{border-color:#0000}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-blue-400:focus{--tw-ring-color:var(--color-blue-400)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-purple-200:focus{--tw-ring-color:var(--color-purple-200)}.focus\:ring-red-400:focus{--tw-ring-color:var(--color-red-400)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:scale-\[0\.98\]:active{scale:.98}.disabled\:bg-gray-50:disabled{background-color:var(--color-gray-50)}.disabled\:text-gray-400:disabled{color:var(--color-gray-400)}.disabled\:opacity-50:disabled{opacity:.5}@media (width>=40rem){.sm\:w-64{width:calc(var(--spacing) * 64)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width>=48rem){.md\:static{position:static}.md\:hidden{display:none}.md\:w-80{width:calc(var(--spacing) * 80)}.md\:translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:gap-4{gap:calc(var(--spacing) * 4)}.md\:p-4{padding:calc(var(--spacing) * 4)}.md\:p-6{padding:calc(var(--spacing) * 6)}.md\:px-6{padding-inline:calc(var(--spacing) * 6)}.md\:py-6{padding-block:calc(var(--spacing) * 6)}}@media (width>=64rem){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:w-80{width:calc(var(--spacing) * 80)}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}}}:root{--color-primary:#1a73e8;--color-success:#34a853;--color-warning:#fbbc04;--color-danger:#ea4335;--color-info:#4285f4}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}#app{min-height:100vh}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-pan-x{syntax:"*";inherits:false}@property --tw-pan-y{syntax:"*";inherits:false}@property --tw-pinch-zoom{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}.critical-flash{animation:.8s ease-in-out 3 critical-pulse}@keyframes critical-pulse{0%,to{background-color:#0000}50%{background-color:#ef444426}}