.loading-spinner{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px}.loading-spinner--small{gap:8px}.loading-spinner--large{gap:16px}.spinner{border:2px solid rgba(0,0,0,.1);border-radius:50%;border-top:2px solid #007AFF;animation:spin 1s linear infinite}.loading-spinner--small .spinner{width:20px;height:20px;border-width:1.5px}.loading-spinner--medium .spinner{width:32px;height:32px;border-width:2px}.loading-spinner--large .spinner{width:48px;height:48px;border-width:3px}.loading-text{font-size:14px;color:#666;text-align:center;line-height:1.4}.loading-spinner--small .loading-text{font-size:12px}.loading-spinner--large .loading-text{font-size:16px}.loading-overlay{position:fixed;inset:0;background-color:#fffc;display:flex;align-items:center;justify-content:center;z-index:9999;padding:20px;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}@media(prefers-color-scheme:dark){.loading-overlay{background-color:#000c}.loading-text{color:#ccc}.spinner{border-color:#ffffff1a}}.error-boundary{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px;background-color:#f8f9fa}.error-container{background:#fff;border-radius:16px;padding:32px 24px;text-align:center;max-width:400px;width:100%;box-shadow:0 4px 20px #0000001a;animation:slideUp .3s ease-out}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.error-icon{font-size:48px;margin-bottom:16px}.error-title{font-size:20px;font-weight:600;color:#333;margin:0 0 12px}.error-message{font-size:14px;color:#666;line-height:1.5;margin:0 0 24px}.error-details{background:#f8f9fa;border:1px solid #e9ecef;border-radius:8px;padding:12px;margin:16px 0;text-align:left}.error-details summary{cursor:pointer;font-size:14px;color:#495057;font-weight:500;margin-bottom:8px}.error-stack{font-size:12px;color:#6c757d;white-space:pre-wrap;word-break:break-all;margin:8px 0 0;max-height:200px;overflow-y:auto}.error-actions{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}.retry-button,.refresh-button{padding:12px 24px;border:none;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease;min-width:80px}.retry-button{background:#007aff;color:#fff}.retry-button:hover{background:#0056cc;transform:translateY(-1px)}.retry-button:active{transform:translateY(0)}.refresh-button{background:#f8f9fa;color:#495057;border:1px solid #dee2e6}.refresh-button:hover{background:#e9ecef;transform:translateY(-1px)}.refresh-button:active{transform:translateY(0)}@media(max-width:480px){.error-container{padding:24px 20px}.error-icon{font-size:40px}.error-title{font-size:18px}.error-actions{flex-direction:column}.retry-button,.refresh-button{width:100%}}@media(prefers-color-scheme:dark){.error-boundary{background-color:#000}.error-container{background:#1c1c1e;box-shadow:0 4px 20px #0000004d}.error-title{color:#fff}.error-message{color:#98989f}.error-details{background:#2c2c2e;border-color:#38383a}.error-details summary{color:#ebebf5}.error-stack{color:#98989f}.refresh-button{background:#2c2c2e;color:#ebebf5;border-color:#38383a}.refresh-button:hover{background:#38383a}}.confirm-dialog-overlay{position:fixed;inset:0;background-color:#00000080;display:flex;align-items:center;justify-content:center;z-index:10000;padding:20px;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);animation:fadeIn .2s ease-out}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.confirm-dialog{background:#fff;border-radius:16px;max-width:320px;width:100%;box-shadow:0 12px 40px #00000026;animation:slideUp .3s ease-out;overflow:hidden}@keyframes slideUp{0%{opacity:0;transform:translateY(20px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.confirm-dialog-header{padding:20px 20px 0}.confirm-dialog-title{font-size:18px;font-weight:600;color:#333;margin:0;text-align:center}.confirm-dialog-body{padding:16px 20px}.confirm-dialog-message{font-size:16px;color:#666;line-height:1.5;margin:0;text-align:center}.confirm-dialog-footer{display:flex;border-top:1px solid #f0f0f0}.confirm-dialog-button{flex:1;padding:16px;border:none;background:none;font-size:16px;font-weight:500;cursor:pointer;transition:all .2s ease;position:relative}.confirm-dialog-button:active{transform:scale(.98)}.cancel-button{color:#666;border-right:1px solid #f0f0f0}.cancel-button:hover{background-color:#f8f9fa}.confirm-button{color:#007aff;font-weight:600}.confirm-button:hover{background-color:#007aff1a}.confirm-button.danger{color:#ff3b30}.confirm-button.danger:hover{background-color:#ff3b301a}.confirm-button.warning{color:#ff9500}.confirm-button.warning:hover{background-color:#ff95001a}@media(max-width:480px){.confirm-dialog-overlay{padding:16px}.confirm-dialog{max-width:280px}.confirm-dialog-title{font-size:16px}.confirm-dialog-message{font-size:14px}.confirm-dialog-button{padding:14px;font-size:14px}}@media(prefers-color-scheme:dark){.confirm-dialog{background:#1c1c1e;box-shadow:0 12px 40px #0006}.confirm-dialog-title{color:#fff}.confirm-dialog-message{color:#ebebf5}.confirm-dialog-footer{border-top-color:#38383a}.cancel-button{color:#ebebf5;border-right-color:#38383a}.cancel-button:hover{background-color:#2c2c2e}.confirm-button{color:#0a84ff}.confirm-button:hover{background-color:#0a84ff1a}.confirm-button.danger{color:#ff453a}.confirm-button.danger:hover{background-color:#ff453a1a}.confirm-button.warning{color:#ff9f0a}.confirm-button.warning:hover{background-color:#ff9f0a1a}}.admin-navigation{flex:0 0 60px;background:#fff;box-shadow:0 -2px 10px #0000001a;padding-bottom:env(safe-area-inset-bottom)}.nav-container{display:flex;justify-content:space-around;align-items:center;height:100%;max-width:600px;margin:0 auto}.nav-item{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;height:100%;background:none;border:none;cursor:pointer;transition:all .3s ease;padding:8px 4px;position:relative}.nav-item:active{transform:scale(.95)}.nav-item.active{color:#007aff}.nav-item:not(.active){color:#8e8e93}.nav-icon{font-size:20px;line-height:1;margin-bottom:2px}.nav-label{font-size:10px;line-height:1;font-weight:500;white-space:nowrap}.nav-item.active:before{content:"";position:absolute;top:0;left:50%;transform:translate(-50%);width:20px;height:2px;background:#007aff;border-radius:1px}@media(max-width:320px){.nav-label{font-size:9px}.nav-icon{font-size:18px}}@media(prefers-color-scheme:dark){.admin-navigation{background:#1c1c1e;box-shadow:0 -2px 10px #0000004d}.nav-item.active{color:#0a84ff}.nav-item:not(.active){color:#8e8e93}}.app-header{flex:0 0 44px;padding-top:env(safe-area-inset-top);box-shadow:0 1px #0000001a;transition:background-color .3s ease,color .3s ease}.header-container{display:flex;align-items:center;justify-content:space-between;height:44px;padding:0 16px;max-width:100%}.header-left,.header-right{flex:0 0 auto;width:60px;display:flex;align-items:center}.header-left{justify-content:flex-start}.header-right{justify-content:flex-end}.header-center{flex:1;display:flex;justify-content:center;align-items:center;min-width:0}.header-title{font-size:17px;font-weight:600;text-align:center;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.back-button{background:none;border:none;padding:8px;margin:-8px;cursor:pointer;border-radius:8px;transition:background-color .2s ease;display:flex;align-items:center;justify-content:center;color:inherit}.back-button:hover{background-color:#0000000d}.back-button:active{background-color:#0000001a;transform:scale(.95)}.back-button svg{display:block}@media(max-width:320px){.header-container{padding:0 12px}.header-title{font-size:16px}}@media(prefers-color-scheme:dark){.app-header{box-shadow:0 1px #ffffff1a}.back-button:hover{background-color:#ffffff0d}.back-button:active{background-color:#ffffff1a}}.login-container{min-height:100vh;background:linear-gradient(135deg,#667eea,#764ba2);display:flex;flex-direction:column;justify-content:center;padding:20px;padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom)}.login-card{background:#fff;border-radius:20px;box-shadow:0 20px 60px #00000026;padding:32px 24px;width:100%;max-width:400px;margin:0 auto;animation:slideUp .6s cubic-bezier(.16,1,.3,1)}@keyframes slideUp{0%{opacity:0;transform:translateY(40px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.login-header{text-align:center;margin-bottom:32px}.login-header h1{color:#333;font-size:24px;font-weight:700;margin-bottom:8px;letter-spacing:-.5px}.login-header p{color:#666;font-size:14px;margin:0;font-weight:400}.login-form{display:flex;flex-direction:column;gap:24px}.form-group{display:flex;flex-direction:column;gap:8px}.form-group label{color:#333;font-size:14px;font-weight:600;letter-spacing:-.2px}.form-group input{padding:16px;border:1.5px solid #e1e5e9;border-radius:12px;font-size:16px;transition:all .3s cubic-bezier(.4,0,.2,1);outline:none;background:#fafafa;-webkit-appearance:none}.form-group input:focus{border-color:#667eea;background:#fff;box-shadow:0 0 0 4px #667eea1a;transform:translateY(-1px)}.form-group input:disabled{background-color:#f8f9fa;cursor:not-allowed;opacity:.6}.error-message{background:linear-gradient(135deg,#ff6b6b,#ff5252);color:#fff;padding:14px 16px;border-radius:12px;font-size:14px;font-weight:500;animation:shake .6s cubic-bezier(.36,.07,.19,.97);box-shadow:0 4px 12px #ff6b6b4d}@keyframes shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.login-button{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;border:none;border-radius:12px;padding:16px 24px;font-size:16px;font-weight:600;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1);margin-top:8px;letter-spacing:.5px;box-shadow:0 4px 15px #667eea4d}.login-button:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 25px #667eea66}.login-button:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 10px #667eea4d}.login-button:disabled{opacity:.7;cursor:not-allowed;transform:none;box-shadow:none}.login-footer{text-align:center;margin-top:32px;padding-top:24px;border-top:1px solid #f0f0f0}.login-footer p{color:#999;font-size:12px;margin:0;line-height:1.4}@media(max-width:480px){.login-container{padding:16px}.login-card{padding:28px 20px;border-radius:16px}.login-header h1{font-size:22px}.form-group input{font-size:16px;padding:14px}.login-button{padding:14px 20px;font-size:15px}}@media(min-width:768px){.login-container{align-items:center;justify-content:center}}@media(prefers-color-scheme:dark){.login-container{background:linear-gradient(135deg,#2c3e50,#34495e)}.login-card{background:#1c1c1e;box-shadow:0 20px 60px #0006}.login-header h1{color:#fff}.login-header p{color:#98989f}.form-group label{color:#ebebf5}.form-group input{background:#2c2c2e;border-color:#38383a;color:#fff}.form-group input:focus{border-color:#0a84ff;background:#1c1c1e;box-shadow:0 0 0 4px #0a84ff1a}.login-footer{border-top-color:#38383a}}.pull-to-refresh-indicator{position:absolute;top:0;left:0;right:0;height:80px;display:flex;align-items:center;justify-content:center;gap:12px;pointer-events:none;z-index:100}.pull-icon{display:flex;align-items:center;justify-content:center}.pull-text{font-size:14px;color:#666;-webkit-user-select:none;user-select:none}.spinner{width:24px;height:24px;border:3px solid rgba(0,0,0,.1);border-top-color:#1890ff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.home-container{min-height:100vh;background-color:#f5f5f5;padding-bottom:60px}.home-main{padding:16px 16px 20px;max-width:600px;margin:0 auto;width:100%}.home-content{animation:fadeInUp .6s cubic-bezier(.16,1,.3,1);position:relative;min-height:100%}.pull-to-refresh-indicator{position:absolute;top:-50px;left:0;right:0;height:50px;display:flex;align-items:center;justify-content:center;gap:8px;color:#666;font-size:14px;pointer-events:none;transition:transform .3s cubic-bezier(.4,0,.2,1)}.pull-icon{width:24px;height:24px;display:flex;align-items:center;justify-content:center}.pull-text{font-size:14px;color:#666}.home-content-inner{transition:opacity .3s ease}.home-content-inner.refreshing{opacity:.5}@keyframes fadeInUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.welcome-section{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:20px;padding:32px 24px;text-align:center;color:#fff;margin-bottom:24px;box-shadow:0 8px 32px #667eea4d}.welcome-icon{font-size:48px;margin-bottom:16px;animation:wave 2s ease-in-out infinite}@keyframes wave{0%,to{transform:rotate(0)}25%{transform:rotate(-10deg)}75%{transform:rotate(10deg)}}.welcome-title{font-size:28px;font-weight:700;margin:0 0 8px;letter-spacing:-.5px}.welcome-subtitle{font-size:16px;margin:0;opacity:.9;font-weight:400}.quick-stats{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;margin-bottom:32px}.stat-card{background:#fff;border-radius:16px;padding:20px;display:flex;align-items:center;gap:16px;box-shadow:0 2px 12px #00000014;transition:all .3s cubic-bezier(.4,0,.2,1);cursor:pointer}.stat-card:hover{transform:translateY(-2px);box-shadow:0 8px 25px #0000001f}.stat-card:active{transform:translateY(0)}.stat-icon{font-size:32px;width:48px;height:48px;display:flex;align-items:center;justify-content:center;background:#f8f9fa;border-radius:12px}.stat-info{flex:1}.stat-number{font-size:24px;font-weight:700;color:#333;line-height:1;margin-bottom:4px}.stat-label{font-size:12px;color:#666;font-weight:500}.section-title{font-size:18px;font-weight:600;color:#333;margin:0 0 16px;letter-spacing:-.2px}.action-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.action-button{background:#fff;border:none;border-radius:16px;padding:24px 16px;display:flex;flex-direction:column;align-items:center;gap:12px;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 12px #00000014}.action-button:hover{transform:translateY(-2px);box-shadow:0 8px 25px #0000001f}.action-button:active{transform:translateY(0)}.action-icon{font-size:32px;width:56px;height:56px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#f8f9fa,#e9ecef);border-radius:16px}.action-label{font-size:14px;font-weight:600;color:#333;text-align:center}.header-logout-btn{background:none;border:none;padding:8px;border-radius:8px;cursor:pointer;transition:all .2s ease;color:inherit;display:flex;align-items:center;justify-content:center}.header-logout-btn:hover{background-color:#0000000d}.header-logout-btn:active{background-color:#0000001a;transform:scale(.95)}@media(max-width:480px){.home-main{padding:12px 12px 20px}.welcome-section{padding:28px 20px;border-radius:16px}.welcome-title{font-size:24px}.welcome-subtitle{font-size:14px}.quick-stats{gap:12px}.stat-card{padding:16px;border-radius:12px}.stat-icon{font-size:28px;width:44px;height:44px}.stat-number{font-size:20px}.action-grid{gap:10px}.action-button{padding:20px 12px;border-radius:12px}.action-icon{font-size:28px;width:48px;height:48px}.action-label{font-size:13px}}@media(max-width:320px){.quick-stats,.action-grid{grid-template-columns:1fr}}@media(prefers-color-scheme:dark){.home-container{background-color:#000}.stat-card,.action-button{background:#1c1c1e;box-shadow:0 2px 12px #0000004d}.stat-card:hover,.action-button:hover{box-shadow:0 8px 25px #0006}.stat-number,.action-label,.section-title{color:#fff}.stat-label{color:#98989f}.stat-icon,.action-icon{background:#2c2c2e}.header-logout-btn:hover{background-color:#ffffff0d}.header-logout-btn:active{background-color:#ffffff1a}}.device-list-container{background-color:#f5f5f5;min-height:100vh;padding:16px}.loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px;gap:16px}.spinner{width:40px;height:40px;border:3px solid #f3f3f3;border-top:3px solid #1890ff;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px;text-align:center}.error-state svg{margin-bottom:16px}.error-state p{color:#ff4d4f;font-size:14px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px;text-align:center}.empty-state svg{margin-bottom:16px}.empty-state p{color:#8c8c8c;font-size:14px}.device-list{display:flex;flex-direction:column;gap:12px}.device-item{background:#fff;border-radius:12px;overflow:hidden;box-shadow:0 2px 8px #0000000f;transition:all .3s ease}.device-card{padding:16px;cursor:pointer;transition:background-color .2s ease}.device-card:active{background-color:#fafafa}.device-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px}.device-title{flex:1}.device-name{font-size:16px;font-weight:600;color:#262626;margin-bottom:4px}.device-no{font-size:13px;color:#8c8c8c}.device-status-badges{display:flex;gap:6px}.status-badge{padding:4px 10px;font-size:12px;font-weight:600;border-radius:12px}.online-badge.online{background:#f6ffed;color:#52c41a}.online-badge.offline{background:#f5f5f5;color:#8c8c8c}.working-badge.working{background:#e6f7ff;color:#1890ff}.working-badge.idle{background:#fff7e6;color:#fa8c16}.device-info{display:flex;flex-direction:column;gap:8px}.info-row{display:flex;justify-content:space-between;padding:8px;background:#fafafa;border-radius:8px}.info-label{font-size:13px;color:#8c8c8c}.info-value{font-size:13px;font-weight:500;color:#262626}.device-footer{display:flex;justify-content:space-between;align-items:center;margin-top:8px;padding-top:12px;border-top:1px solid #f0f0f0}.power-supply-count{font-size:12px;color:#8c8c8c}.device-expand-icon{display:flex;align-items:center;justify-content:center;padding:4px;color:#8c8c8c}.power-supply-section{padding:0 16px 16px;border-top:1px solid #f0f0f0;background:#fafafa}.empty-power-supply{padding:20px;text-align:center;color:#8c8c8c;font-size:14px}.power-supply-list{display:flex;flex-direction:column;gap:12px}.power-supply-card{background:#fff;padding:12px;border-radius:8px;box-shadow:0 1px 4px #0000000a}.power-supply-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid #f0f0f0}.power-supply-title{flex:1}.power-supply-name{font-size:14px;font-weight:600;color:#262626;margin-bottom:4px}.power-supply-no{font-size:12px;color:#8c8c8c}.power-supply-status-badges{display:flex;gap:4px}.power-supply-details{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-bottom:12px}.detail-row{display:flex;justify-content:space-between;padding:6px 8px;background:#fafafa;border-radius:6px}.detail-label{font-size:12px;color:#8c8c8c}.detail-value{font-size:12px;font-weight:500;color:#262626}.detail-value.remark{grid-column:span 2;color:#666}.power-supply-realtime{padding:12px;background:#f6ffed;border-radius:8px;margin-bottom:12px}.realtime-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.realtime-item{display:flex;flex-direction:column;gap:4px}.realtime-item.total-power{grid-column:span 3;flex-direction:row;justify-content:space-between;padding:8px;background:#52c41a1a;border-radius:6px}.realtime-label{font-size:11px;color:#8c8c8c}.realtime-value{font-size:13px;font-weight:600;color:#262626}.total-power .realtime-value{font-size:15px;color:#52c41a}.power-supply-actions{display:flex;gap:8px;align-items:center}.control-disabled-hint{display:flex;align-items:center;gap:6px;padding:8px 12px;background:#fff7e6;color:#fa8c16;font-size:12px;border-radius:6px;flex:1}.control-btn{flex:1;padding:10px 16px;border:none;border-radius:6px;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s ease;min-width:80px}.control-btn:disabled{opacity:.4;cursor:not-allowed}.control-btn.loading{opacity:.7;cursor:wait}.control-btn-close{background:#fff0f6;color:#fa541c;border:1px solid #ffccc7}.control-btn-close:not(:disabled):active{background:#ffccc7}.control-btn-open{background:#f6ffed;color:#52c41a;border:1px solid #b7eb8f}.control-btn-open:not(:disabled):active{background:#b7eb8f}@media(max-width:480px){.power-supply-details{grid-template-columns:1fr}.detail-value.remark{grid-column:span 1}.realtime-grid{grid-template-columns:repeat(2,1fr)}.realtime-item.total-power{grid-column:span 2}}@media(prefers-color-scheme:dark){.device-list-container{background-color:#000}.device-item,.power-supply-card{background:#1c1c1e}.device-card:active{background-color:#2c2c2e}.device-name,.device-no,.info-value,.power-supply-name,.power-supply-header h3,.status-text{color:#fff}.device-info{background:#2c2c2e}.info-label,.power-supply-no,.power-supply-remark{color:#8e8e93}.power-supply-section{background:#1c1c1e;border-top-color:#2c2c2e}}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#f5f5f5}#root{min-height:100vh}.app-layout{display:flex;flex-direction:column;height:100vh;max-width:768px;margin:0 auto;background-color:#fff;position:relative;overflow:hidden}.app-content{flex:1;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch}.empty-placeholder{display:flex;align-items:center;justify-content:center;height:100%;color:#8c8c8c;font-size:16px}button,input{font-family:inherit}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:#f1f1f1}::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#a8a8a8}
