.monitor[data-v-2bdfbf9b],.video[data-v-291eb706]{width:100%;height:100%}.switch[data-v-291eb706]{display:flex;align-items:center;justify-content:center;gap:20px;background-color:#fff;border-radius:10px;box-shadow:0 0 8px #0000001a}.switch .switch-item[data-v-291eb706]{line-height:50px}.switch .switch-item.active[data-v-291eb706]{color:#129bff;border-bottom:2px solid #129BFF}.login-container[data-v-22f64f17]{min-height:100vh;display:flex;align-items:center;justify-content:center;background-image:linear-gradient(#0006,#0006),url(https://dcwl.etekj.com/assets/img-Bpn8eVca.png);background-size:cover;background-position:center;padding:20px}.login-card[data-v-22f64f17]{background:#ffffffa3;border-radius:20px;padding:40px;box-shadow:0 20px 40px #0000001a;width:100%;max-width:420px;animation:slideUp-22f64f17 .6s ease-out}@keyframes slideUp-22f64f17{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.login-header[data-v-22f64f17]{text-align:center;margin-bottom:40px}.login-title[data-v-22f64f17]{font-size:28px;font-weight:700;color:#333;margin:0 0 8px}.login-subtitle[data-v-22f64f17]{font-size:16px;color:#666;margin:0}.login-form[data-v-22f64f17]{display:flex;flex-direction:column;gap:24px}.form-group[data-v-22f64f17]{display:flex;flex-direction:column;gap:8px}.form-label[data-v-22f64f17]{font-size:14px;font-weight:600;color:#333}.form-input[data-v-22f64f17]{padding:16px;border:1px solid rgba(255,255,255,.3);border-radius:12px;font-size:16px;transition:all .3s ease;background:#fff3;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);color:#333}.form-input[data-v-22f64f17]::placeholder{color:#0009}.form-input[data-v-22f64f17]:focus{outline:none;border-color:#667eea99;background:#ffffff4d;box-shadow:0 0 0 3px #667eea1a}.form-input[data-v-22f64f17]:disabled{opacity:.6;cursor:not-allowed}.login-button[data-v-22f64f17]{padding:16px;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;border:none;border-radius:12px;font-size:16px;font-weight:600;cursor:pointer;transition:all .3s ease;margin-top:8px}.login-button[data-v-22f64f17]:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 25px #667eea4d}.login-button[data-v-22f64f17]:disabled{opacity:.6;cursor:not-allowed;transform:none;box-shadow:none}.error-message[data-v-22f64f17]{color:#e74c3c;font-size:14px;text-align:center;padding:12px;background:#fdf2f2;border:1px solid #fecaca;border-radius:8px;animation:shake-22f64f17 .5s ease-in-out}.success-message[data-v-22f64f17]{color:#27ae60;font-size:14px;text-align:center;padding:12px;background:#f8fff8;border:1px solid #c6f6d5;border-radius:8px;animation:fadeIn-22f64f17 .5s ease-in-out}@keyframes shake-22f64f17{0%,to{transform:translate(0)}25%{transform:translate(-5px)}75%{transform:translate(5px)}}@keyframes fadeIn-22f64f17{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 480px){.login-card[data-v-22f64f17]{padding:30px 20px;margin:10px}.login-title[data-v-22f64f17]{font-size:24px}.form-input[data-v-22f64f17],.login-button[data-v-22f64f17]{padding:14px}}.weather-info-container[data-v-3955f70c]{display:flex;align-items:center;gap:20px;background:linear-gradient(135deg,#129bff1a,#f4ab001a);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.3);border-radius:16px;padding:16px 20px;box-shadow:0 8px 32px #0000001a}.weather-main[data-v-3955f70c]{display:flex;align-items:center;gap:16px}.weather-icon[data-v-3955f70c]{width:60px;height:60px;display:flex;align-items:center;justify-content:center;background:#fff3;border-radius:12px;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);border:1px solid rgba(255,255,255,.3)}.weather-icon img[data-v-3955f70c]{width:48px;height:48px;object-fit:contain}.weather-icon-placeholder[data-v-3955f70c]{font-size:32px;filter:drop-shadow(0 2px 4px rgba(0,0,0,.2))}.weather-primary[data-v-3955f70c]{display:flex;flex-direction:column;gap:4px}.weather-temp[data-v-3955f70c]{font-size:28px;font-weight:700;color:#129bff;text-shadow:0 2px 4px rgba(0,0,0,.1)}.weather-desc[data-v-3955f70c]{font-size:16px;font-weight:500;color:#014a7f}.weather-details[data-v-3955f70c]{display:flex;flex-direction:column;gap:6px;flex:1;min-width:200px}.weather-row[data-v-3955f70c]{display:flex;align-items:center;gap:8px;font-size:14px;line-height:1.2}.weather-label[data-v-3955f70c]{font-weight:500;color:#666;white-space:nowrap}.weather-value[data-v-3955f70c]{font-weight:600;color:#014a7f}.logout-button[data-v-3955f70c]{margin-left:auto;padding:10px 20px;background:linear-gradient(135deg,#ff6b6b,#ee5a24);color:#fff;border:none;border-radius:12px;cursor:pointer;font-size:14px;font-weight:600;transition:all .3s ease;box-shadow:0 4px 12px #ff6b6b4d;white-space:nowrap}.logout-button[data-v-3955f70c]:hover{background:linear-gradient(135deg,#ee5a24,#ff6b6b);transform:translateY(-2px);box-shadow:0 6px 16px #ff6b6b66}.toast[data-v-3955f70c]{position:fixed;top:20px;right:20px;background:linear-gradient(135deg,#ff6b6b,#ee5a24);color:#fff;padding:16px 24px;border-radius:12px;box-shadow:0 8px 32px #ff6b6b4d;font-size:16px;font-weight:600;z-index:9999;max-width:400px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.2)}.toast-enter-active[data-v-3955f70c]{transition:all .3s cubic-bezier(.175,.885,.32,1.275)}.toast-leave-active[data-v-3955f70c]{transition:all .3s ease-in}.toast-enter-from[data-v-3955f70c],.toast-leave-to[data-v-3955f70c]{opacity:0;transform:translate(100%) scale(.8)}*{margin:0;padding:0;box-sizing:border-box}html{overflow-y:auto;-webkit-overflow-scrolling:touch}body{font-family:Source Han Sans SC,sans-serif;background:linear-gradient(180deg,#e2f3ff,#fff);min-height:100vh;color:#000;overflow-y:auto;-webkit-overflow-scrolling:touch}.dashboard{width:100%;max-width:750px;margin:0 auto;min-height:100vh;position:relative}.header{background:linear-gradient(180deg,#e2f3ff,#fff);padding:100px 28px 68px;box-shadow:0 4px 24px #0000001a}.header-content{display:flex;flex-direction:column;gap:4px;width:100%}.header-title{font-size:36px;font-weight:700;line-height:1.448;letter-spacing:5%;color:#000}.header-info{display:flex;align-items:center;gap:10px;font-size:18px;font-weight:400;line-height:1.448;letter-spacing:5%;color:#014a7f}.navigation{display:flex;align-items:center;gap:30px;margin-top:68px}.nav-item{display:flex;flex-direction:column;align-items:center;gap:8px;position:relative}.nav-item.active{color:#129bff}.nav-item.active:after{content:"";position:absolute;bottom:-8px;left:0;right:0;height:4px;background:#129bff}.nav-item:not(.active):after{content:"";position:absolute;bottom:-8px;left:0;right:0;height:4px;background:#dcdfe6}.nav-text{font-size:18px;font-weight:400;line-height:1.167;text-align:center;color:#676767;width:100px}.nav-text.active{font-weight:700;color:#129bff}.main-content{padding:32px 28px;display:flex;flex-direction:column;gap:32px}.section{background:#fff;border-radius:20px;padding:32px 28px;box-shadow:0 0 8px #0000001a;display:flex;flex-direction:column;gap:16px}.section-header{display:flex;align-items:center;gap:10px}.section-icon{width:44px;height:44px;border-radius:50%;background:#ffedb3;border:1px solid #F4AB00;display:flex;align-items:center;justify-content:center}.section-title{font-size:24px;font-weight:700;line-height:1.448;color:#000}.stats-grid{display:flex;gap:12px;flex-wrap:wrap}.stat-card{flex:1;min-width:200px;background:#f3faff;border-radius:12px;padding:24px;display:flex;flex-direction:column;gap:10px}.stat-label{font-size:18px;font-weight:400;line-height:1.448;color:#014a7f}.stat-value{display:flex;align-items:center;gap:10px}.stat-number{font-size:24px;font-weight:700;line-height:1.448;color:#000}.stat-unit{font-size:20px;font-weight:400;line-height:1.448;color:#014a7f}.chart-header{display:flex;align-items:center;gap:10px;margin-bottom:32px}.chart-title{font-size:24px;font-weight:700;line-height:1.448;color:#000}.chart-number{font-size:24px;font-weight:700;line-height:1.448;letter-spacing:5%;color:#f4ab00}.chart-container{background:#fff;padding:32px 16px 0;height:400px;display:flex;flex-direction:column}.chart-content{flex:1;display:flex;flex-direction:column;gap:16px}.chart-legend{display:flex;justify-content:center;align-items:center;gap:8px;margin-top:16px}.legend-item{display:flex;align-items:center;gap:4px}.legend-dot{width:8px;height:8px;border-radius:50%;background:#f4ab00}.legend-dot.cyan{background:#00b6b6}.legend-line{width:36px;height:2px;background:#f4ab00}.legend-line.cyan{background:#00b6b6}.legend-text{font-size:20px;font-weight:400;line-height:1.448;color:#000000b3}.visitor-total{display:flex;align-items:center;gap:10px;margin-bottom:32px}.visitor-total-number{font-size:24px;font-weight:700;line-height:1.448;letter-spacing:5%;color:#00b6b6}.ranking-section{display:flex;flex-direction:column;gap:8px;margin-bottom:32px}.ranking-item{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}.ranking-header{display:flex;align-items:center;gap:26px}.ranking-number{font-size:18px;font-weight:400;line-height:1.448;color:#014a7f;width:14px;text-align:center}.ranking-info{display:flex;justify-content:space-between;align-items:center;flex:1}.ranking-province{font-size:18px;font-weight:400;line-height:1.448;color:#014a7f}.ranking-percentage{font-size:18px;font-weight:400;line-height:1.448;color:#014a7f;text-align:right}.ranking-progress{position:relative;width:100%;height:16px;background:#c6f7f7;border-radius:4px;overflow:hidden;margin-left:40px}.ranking-progress-fill{height:100%;background:#00b6b6;border-radius:4px;transition:width .3s ease}.flight-stats{display:flex;gap:12px;margin-bottom:32px}.flight-card{flex:1;background:#f3faff;border-radius:12px;padding:24px;display:flex;flex-direction:column;gap:10px}.flight-header{display:flex;align-items:center;gap:8px}.flight-icon{width:20px;height:20px;display:flex;align-items:center;justify-content:center}.flight-label{font-size:18px;font-weight:400;line-height:1.448;color:#014a7f}.flight-value{display:flex;align-items:center;gap:10px}.flight-number{font-size:24px;font-weight:700;line-height:1.448;color:#000}.flight-unit{font-size:20px;font-weight:400;line-height:1.448;color:#014a7f}.alerts-section{display:flex;flex-direction:column;gap:12px}.alert-row{display:flex;gap:12px}.alert-card{flex:1;background:#f3faff;border-radius:12px;padding:24px;display:flex;flex-direction:column;gap:10px}.alert-label{font-size:18px;font-weight:400;line-height:1.448;color:#014a7f}.alert-value{font-size:24px;font-weight:700;line-height:1.448;color:#000}.cyan-icon{background:#c6f7f7;border:1px solid #00B6B6}.nav-item{cursor:pointer;transition:all .3s ease}.nav-item:hover{opacity:.8}.monitor-icon{background:#81caff;border:1px solid #129BFF}.monitor-content{display:flex;flex-direction:column;gap:16px}.search-box{display:flex;align-items:center;gap:8px;background:#f3faff;border:1px solid rgba(1,74,127,.5);border-radius:12px;padding:8px 24px;width:144px;height:52px;align-self:flex-end}.search-text{font-size:18px;font-weight:400;line-height:1.448;color:#014a7f}.device-stats{display:flex;gap:12px;margin-bottom:16px}.device-card{flex:1;background:#f3faff;border-radius:12px;padding:24px;display:flex;flex-direction:column;gap:10px}.device-label{font-size:18px;font-weight:400;line-height:1.448;color:#014a7f}.device-value{display:flex;align-items:center;gap:10px}.device-number{font-size:24px;font-weight:700;line-height:1.448;color:#000}.device-unit{font-size:16px;font-weight:400;line-height:1.448;color:#014a7f}.video-display{display:flex;flex-direction:column;width:100%}.video-area{width:100%;height:355px;background:#f0f0f0;border-radius:8px;overflow:hidden;margin-bottom:8px;position:relative}.video-placeholder{width:100%;height:100%;background:linear-gradient(135deg,#e3f2fd,#bbdefb);display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:500;color:#666;border:2px dashed #ccc}.video-label{background:#f3faff;border-radius:12px;padding:8px 24px;align-self:stretch;text-align:center}.video-label span{font-size:18px;font-weight:400;line-height:1.448;color:#014a7f}.video-grid{display:flex;flex-direction:column;gap:16px}@media (max-width: 768px){.dashboard{max-width:100%}.header{padding:60px 20px 40px}.header-title{font-size:28px}.navigation{gap:20px;margin-top:40px}.nav-text{font-size:16px;width:80px}.main-content{padding:20px;gap:20px}.section{padding:20px}.stats-grid{flex-direction:column}.stat-card{min-width:unset}.chart-container{height:300px;padding:20px 8px 0}.flight-stats,.alert-row{flex-direction:column}.ranking-progress{width:100%;margin-left:20px}.ranking-header{gap:15px}.ranking-province,.ranking-percentage{font-size:16px}.device-stats{flex-direction:column}.search-box{width:120px;height:40px;padding:6px 16px}.search-text{font-size:16px}.video-area{height:250px}.video-placeholder{font-size:16px}}.vehicle-data-page{padding:32px;background-color:#e2f3ff;display:flex;flex-direction:column;gap:32px}.vehicle-section{background:#fff;border-radius:20px;padding:32px 28px;box-shadow:0 0 8px #0000001a;display:flex;flex-direction:column;gap:16px}.vehicle-header{display:flex;align-items:center;gap:10px}.vehicle-icon{width:44px;height:44px;display:flex;align-items:center;justify-content:center;background:#81caff;border-radius:8px;border:1px solid #129BFF}.vehicle-title{display:flex;align-items:center;gap:8px}.vehicle-label{font-family:Source Han Sans SC,sans-serif;font-weight:700;font-size:24px;color:#000;line-height:1.448}.vehicle-total{font-family:Source Han Sans SC,sans-serif;font-weight:700;font-size:24px;color:#129bff;line-height:1.448;letter-spacing:.05em}.vehicle-types{display:flex;gap:12px;flex-wrap:wrap}.vehicle-type-card{background:#f3faff;border-radius:12px;padding:24px;display:flex;flex-direction:column;justify-content:center;gap:10px;width:202px;height:140px}.type-label{font-family:Source Han Sans SC,sans-serif;font-weight:400;font-size:18px;color:#014a7f;line-height:1.448}.type-stats{display:flex;align-items:center;gap:6px}.type-number{font-family:Source Han Sans SC,sans-serif;font-weight:700;font-size:24px;color:#000;line-height:1.448}.type-unit{font-family:Source Han Sans SC,sans-serif;font-weight:400;font-size:16px;color:#014a7f;line-height:1.448}.parking-section{background:#fff;border-radius:20px;padding:32px 28px;box-shadow:0 0 8px #0000001a;display:flex;flex-direction:column;gap:16px}.parking-header{display:flex;align-items:center;gap:10px}.parking-icon{width:44px;height:44px;display:flex;align-items:center;justify-content:center;background:#81caff;border-radius:8px;border:1px solid #129BFF}.parking-title{font-family:Source Han Sans SC,sans-serif;font-weight:700;font-size:24px;color:#000;line-height:1.448}.usage-rate-container{display:flex;justify-content:center;align-items:center;padding:16px 64px}.usage-rate-circle{position:relative;width:240px;height:240px;display:flex;align-items:center;justify-content:center}.usage-rate-text{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;display:flex;flex-direction:column;gap:4px}.usage-label{font-family:Source Han Sans SC,sans-serif;font-weight:400;font-size:18px;color:#014a7f;line-height:1.448}.usage-percent{font-family:Source Han Sans SC,sans-serif;font-weight:700;font-size:24px;color:#000;line-height:1.448}.parking-stats{display:flex;gap:12px;justify-content:stretch}.parking-stat-card{background:#f3faff;border-radius:12px;padding:24px;flex:1;display:flex;flex-direction:column;gap:10px}.parking-stat-label{font-family:Source Han Sans SC,sans-serif;font-weight:400;font-size:18px;color:#014a7f;line-height:1.448}.parking-stat-value{display:flex;align-items:center;gap:6px}.parking-stat-number{font-family:Source Han Sans SC,sans-serif;font-weight:700;font-size:24px;color:#000;line-height:1.448}.parking-stat-unit{font-family:Source Han Sans SC,sans-serif;font-weight:400;font-size:16px;color:#014a7f;line-height:1.448}@media (max-width: 768px){.vehicle-data-page{padding:16px}.vehicle-section,.parking-section{padding:24px 16px}.vehicle-label,.parking-title,.vehicle-total{font-size:20px}.vehicle-types{flex-direction:column;align-items:center}.vehicle-type-card{width:100%;max-width:300px}.usage-rate-container{padding:16px 32px}.usage-rate-circle{width:200px;height:200px}.usage-rate-circle svg{width:200px;height:200px}.parking-stats{flex-direction:column}}
