@import "https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&family=Inter:wght@400;500;600;700&display=swap";:root{--primary:#005b87;--primary-light:#2374a5;--primary-container:#cce8f4;--primary-on:#fff;--secondary:#006e1c;--secondary-container:#b6f2be;--secondary-on:#fff;--tertiary:#923357;--tertiary-container:#ffd9e4;--error:#ba1a1a;--error-container:#ffdad6;--surface:#f8fafb;--surface-container-low:#f2f4f5;--surface-container-lowest:#fff;--surface-container-high:#e6e8e9;--surface-dim:#d8dadb;--on-surface:#191c1d;--on-surface-variant:#40493d;--outline-variant:#40493d33;--bottom-nav-height:72px;--header-height:60px;--shadow-ambient:0 8px 32px #191c1d0d;--shadow-float:0 16px 40px #191c1d0f;--shadow-dialog:0 24px 60px #191c1d1f;--bg:var(--surface);--surface-white:var(--surface-container-lowest);--border:var(--outline-variant);--text-primary:var(--on-surface);--text-secondary:var(--on-surface-variant);--text-muted:#8a9390;--danger:var(--error);--warning:#b45309;--info:var(--primary)}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;margin:0;padding:0}html{height:100%;font-size:16px}body{background:var(--surface-container-low);color:var(--on-surface);overscroll-behavior:none;-webkit-overflow-scrolling:touch;min-height:100vh;font-family:Inter,Apple SD Gothic Neo,Malgun Gothic,맑은 고딕,sans-serif;line-height:1.6}#root{flex-direction:column;min-height:100%;display:flex}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--surface-dim);border-radius:4px}.app-layout{background:var(--surface-container-low);flex-direction:column;flex:1;width:100%;max-width:480px;min-height:100vh;margin:0 auto;display:flex;position:relative;box-shadow:0 0 60px #00000026}.main-content{flex-direction:column;flex:1;min-height:0;display:flex}.page-content{padding:0 0 calc(var(--bottom-nav-height) + env(safe-area-inset-bottom,0px) + 8px) 0;-webkit-overflow-scrolling:touch;scroll-behavior:smooth;flex:1}.header{height:var(--header-height);background:var(--surface-container-lowest);z-index:10;flex-shrink:0;justify-content:space-between;align-items:center;padding:0 20px;display:flex;position:relative}.header-logo{align-items:center;gap:10px;display:flex}.header-logo-icon{background:linear-gradient(135deg, var(--primary), var(--primary-light));border-radius:10px;justify-content:center;align-items:center;width:32px;height:32px;font-size:16px;display:flex}.header-logo h1{color:var(--on-surface);letter-spacing:-.3px;font-family:Manrope,sans-serif;font-size:17px;font-weight:800}.header-title{color:var(--on-surface);font-family:Manrope,sans-serif;font-size:17px;font-weight:700}.header-actions{align-items:center;gap:8px;display:flex}.bottom-nav{width:100%;max-width:480px;height:calc(var(--bottom-nav-height) + env(safe-area-inset-bottom,0px));-webkit-backdrop-filter:blur(20px);padding-bottom:env(safe-area-inset-bottom,0px);z-index:100;background:#f8fafbf2;border-top:1px solid #40493d14;align-items:stretch;display:flex;position:fixed;bottom:0;left:50%;transform:translate(-50%);box-shadow:0 -2px 16px #0000000f}.bottom-nav-item{cursor:pointer;color:var(--on-surface-variant);background:0 0;border:none;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:4px;padding:8px 4px 4px;text-decoration:none;transition:all .2s;display:flex;position:relative}.bottom-nav-item .nav-icon-wrap{border-radius:16px;justify-content:center;align-items:center;width:32px;height:28px;font-size:20px;transition:all .2s;display:flex}.bottom-nav-item.active .nav-icon-wrap{background:var(--primary-container);width:64px}.bottom-nav-item .nav-label{color:var(--on-surface-variant);font-family:Inter,sans-serif;font-size:10px;font-weight:500;transition:all .2s}.bottom-nav-item.active .nav-label{color:var(--primary);font-weight:700}.bottom-nav-badge{background:var(--error);color:#fff;border:2px solid var(--surface-container-lowest);border-radius:8px;justify-content:center;align-items:center;min-width:16px;height:16px;padding:0 4px;font-size:9px;font-weight:800;display:flex;position:absolute;top:6px;right:calc(50% - 24px)}.page-hero{background:var(--surface-container-lowest);padding:20px 20px 24px;position:relative}.page-hero-eyebrow{text-transform:uppercase;letter-spacing:.8px;color:var(--primary);margin-bottom:4px;font-size:11px;font-weight:600}.page-hero-title{color:var(--on-surface);letter-spacing:-.5px;font-family:Manrope,sans-serif;font-size:26px;font-weight:800;line-height:1.2}.page-hero-subtitle{color:var(--on-surface-variant);margin-top:6px;font-size:13px}.page-section{padding:24px 20px 0}.page-section+.page-section{padding-top:32px}.section-header{justify-content:space-between;align-items:center;margin-bottom:14px;display:flex}.section-title{color:var(--on-surface);letter-spacing:-.2px;font-family:Manrope,sans-serif;font-size:15px;font-weight:700}.section-action{color:var(--primary);cursor:pointer;background:0 0;border:none;padding:0;font-size:12px;font-weight:600}.card{background:var(--surface-container-lowest);border-radius:16px;padding:20px;transition:box-shadow .2s}.card:hover{box-shadow:var(--shadow-ambient)}.card-sm{border-radius:14px;padding:14px 16px}.card-title{color:var(--on-surface);margin-bottom:4px;font-family:Manrope,sans-serif;font-size:15px;font-weight:700}.card-subtitle{color:var(--on-surface-variant);font-size:12px}.surface-group{background:var(--surface-container-low);border-radius:20px;padding:16px}.card-hero{background:linear-gradient(135deg, var(--primary) 0%, var(--primary-light) 100%);color:var(--primary-on);border-radius:20px;padding:22px 20px;position:relative;overflow:hidden}.card-hero:before{content:"";background:#ffffff14;border-radius:50%;width:120px;height:120px;position:absolute;top:-30px;right:-20px}.card-hero:after{content:"";background:#ffffff0d;border-radius:50%;width:80px;height:80px;position:absolute;bottom:-20px;right:30px}.stat-card{background:var(--surface-container-lowest);border-radius:16px;align-items:flex-start;gap:12px;padding:16px;display:flex}.stat-icon{border-radius:12px;flex-shrink:0;justify-content:center;align-items:center;width:44px;height:44px;font-size:20px;display:flex}.stat-value{color:var(--on-surface);font-family:Manrope,sans-serif;font-size:26px;font-weight:800;line-height:1}.stat-label{color:var(--on-surface-variant);margin-top:4px;font-size:12px}.stat-change{margin-top:6px;font-size:11px;font-weight:600}.stat-change.up{color:var(--secondary)}.stat-change.down{color:var(--error)}.item-card{background:var(--surface-container-lowest);cursor:pointer;border-radius:14px;align-items:center;gap:12px;padding:14px 16px;transition:all .15s;display:flex}.item-card:active{background:var(--surface-container-high)}.item-icon-box{background:var(--surface-container-low);border-radius:12px;flex-shrink:0;justify-content:center;align-items:center;width:44px;height:44px;font-size:22px;display:flex}.status-glow{background:var(--secondary-container);color:var(--secondary);border-radius:20px;align-items:center;gap:4px;padding:3px 10px;font-size:11px;font-weight:600;display:inline-flex}.status-glow:before{content:"";background:currentColor;border-radius:50%;width:5px;height:5px;box-shadow:0 0 4px}.iot-card{background:var(--surface-container-lowest);border-radius:16px;padding:18px;transition:all .2s}.iot-card.online{background:linear-gradient(135deg,#006e1c0a,#006e1c05)}.iot-toggle{background:var(--surface-dim);cursor:pointer;border:none;border-radius:14px;flex-shrink:0;width:48px;height:27px;transition:background .2s;position:relative}.iot-toggle.on{background:var(--secondary)}.iot-toggle:after{content:"";background:#fff;border-radius:50%;width:21px;height:21px;transition:transform .2s;position:absolute;top:3px;left:3px;box-shadow:0 2px 6px #00000026}.iot-toggle.on:after{transform:translate(21px)}.icon-circle{border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:56px;height:56px;font-size:26px;display:flex}.icon-rect{border-radius:14px;flex-shrink:0;justify-content:center;align-items:center;width:48px;height:48px;font-size:22px;display:flex}.bg-blue-soft{background:#dbeafe}.bg-green-soft{background:#dcfce7}.bg-orange-soft{background:#ffedd5}.bg-red-soft{background:#fee2e2}.bg-purple-soft{background:#f3e8ff}.bg-yellow-soft{background:#fef9c3}.bg-teal-soft{background:#ccfbf1}.bg-pink-soft{background:#fce7f3}.bg-primary-soft{background:var(--primary-container)}.bg-secondary-soft{background:var(--secondary-container)}.btn{cursor:pointer;-webkit-user-select:none;user-select:none;border:none;border-radius:24px;justify-content:center;align-items:center;gap:8px;padding:12px 24px;font-family:Inter,sans-serif;font-size:14px;font-weight:600;text-decoration:none;transition:all .2s;display:inline-flex}.btn-primary{background:linear-gradient(135deg, var(--primary) 0%, var(--primary-light) 100%);color:#fff;box-shadow:0 4px 16px #005b874d}.btn-primary:hover,.btn-primary:active{transform:translateY(-1px);box-shadow:0 6px 20px #005b8766}.btn-secondary{background:var(--surface-container-high);color:var(--on-surface-variant)}.btn-secondary:hover,.btn-secondary:active{background:var(--surface-dim)}.btn-ghost{color:var(--primary);background:0 0;padding:8px 16px}.btn-danger{background:var(--error-container);color:var(--error)}.btn-sm{border-radius:20px;padding:8px 16px;font-size:12px}.btn-lg{padding:16px 32px;font-size:16px}.btn-block{width:100%}.btn-icon{background:var(--surface-container-low);cursor:pointer;width:36px;height:36px;color:var(--on-surface-variant);border:none;border-radius:50%;justify-content:center;align-items:center;transition:all .15s;display:flex}.btn-icon:hover,.btn-icon:active{background:var(--primary-container);color:var(--primary)}.form-group{margin-bottom:16px}.form-label{color:var(--on-surface-variant);text-transform:uppercase;letter-spacing:.4px;margin-bottom:6px;font-size:12px;font-weight:600;display:block}.form-input,.form-select,.form-textarea{background:var(--surface-container-low);width:100%;color:var(--on-surface);appearance:none;border:none;border-radius:12px;padding:12px 16px;font-family:Inter,sans-serif;font-size:14px;transition:all .15s}.form-input:focus,.form-select:focus,.form-textarea:focus{background:var(--surface-container-highest,#dde1e2);outline:none;box-shadow:0 0 0 2px #005b8733}.form-textarea{resize:vertical;min-height:88px}.badge{border-radius:20px;align-items:center;padding:3px 10px;font-size:11px;font-weight:600;display:inline-flex}.badge-active{background:var(--secondary-container);color:var(--secondary)}.badge-warning{color:#92400e;background:#fef3c7}.badge-danger{background:var(--error-container);color:var(--error)}.badge-info,.badge-primary{background:var(--primary-container);color:var(--primary)}.badge-gray{background:var(--surface-container-high);color:var(--on-surface-variant)}.badge-tertiary{background:var(--tertiary-container);color:var(--tertiary)}.status-badge{border-radius:20px;align-items:center;gap:4px;padding:3px 10px;font-size:11px;font-weight:600;display:inline-flex}.status-badge.active{background:var(--secondary-container);color:var(--secondary)}.status-badge.inactive{background:var(--error-container);color:var(--error)}.status-badge.warning{color:#854d0e;background:#fef9c3}.modal-overlay{z-index:1000;background:#191c1d80;justify-content:center;align-items:flex-end;padding:0;animation:.15s fadeIn;display:flex;position:fixed;inset:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}.modal{background:var(--surface-container-lowest);width:100%;max-width:480px;max-height:90vh;box-shadow:var(--shadow-dialog);padding-bottom:env(safe-area-inset-bottom,16px);border-radius:24px 24px 0 0;animation:.25s cubic-bezier(.25,.46,.45,.94) slideUp;overflow-y:auto}.modal-handle{background:var(--surface-dim);border-radius:2px;width:36px;height:4px;margin:12px auto 0}.modal-header{justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.modal-title{color:var(--on-surface);font-family:Manrope,sans-serif;font-size:17px;font-weight:700}.modal-body{padding:4px 20px 16px}.modal-footer{flex-direction:column;gap:10px;padding:12px 20px 16px;display:flex}.alert{border-radius:12px;align-items:center;gap:10px;padding:12px 16px;font-size:13px;font-weight:500;display:flex}.alert-warning{color:#92400e;background:#fef3c7}.alert-danger{background:var(--error-container);color:#b91c1c}.alert-success{background:var(--secondary-container);color:#14532d}.alert-info{background:var(--primary-container);color:var(--primary)}.grid-2{grid-template-columns:1fr 1fr;gap:12px;display:grid}.grid-3{grid-template-columns:repeat(3,1fr);gap:12px;display:grid}.grid-4{grid-template-columns:repeat(4,1fr);gap:10px;display:grid}.auth-page{background:linear-gradient(160deg, var(--primary) 0%, var(--primary-light) 100%);justify-content:center;align-items:center;min-height:100%;padding:32px 20px;display:flex}.auth-card{background:var(--surface-container-lowest);width:100%;max-width:420px;box-shadow:var(--shadow-dialog);border-radius:28px;padding:36px 28px}.auth-logo{text-align:center;margin-bottom:32px}.auth-logo .logo-circle{background:linear-gradient(135deg, var(--primary), var(--primary-light));border-radius:20px;justify-content:center;align-items:center;width:64px;height:64px;margin:0 auto 14px;font-size:28px;display:flex}.auth-logo h1{color:var(--on-surface);font-family:Manrope,sans-serif;font-size:22px;font-weight:800}.auth-logo p{color:var(--on-surface-variant);margin-top:4px;font-size:13px}.loading-spinner{justify-content:center;align-items:center;height:200px;display:flex}.spinner{border:3px solid var(--surface-container-high);border-top-color:var(--primary);border-radius:50%;width:36px;height:36px;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.empty-state{text-align:center;color:var(--on-surface-variant);padding:48px 24px}.empty-state-icon{margin-bottom:16px;font-size:52px}.empty-state h3{color:var(--on-surface);margin-bottom:8px;font-family:Manrope,sans-serif;font-size:16px;font-weight:700}.empty-state p{font-size:13px}.onboarding-card{background:linear-gradient(135deg, var(--primary) 0%, var(--primary-light) 100%);color:#fff;text-align:center;border-radius:20px;padding:32px 24px}.onboarding-card h2{margin-bottom:8px;font-family:Manrope,sans-serif;font-size:20px;font-weight:800}.onboarding-card p{opacity:.85;margin-bottom:24px;font-size:14px;line-height:1.6}.divider{background:var(--outline-variant);height:1px;margin:16px 0}.ghost-border{box-shadow:inset 0 0 0 1px var(--outline-variant)}.scroll-row{-webkit-overflow-scrolling:touch;scrollbar-width:none;gap:10px;padding-bottom:4px;display:flex;overflow-x:auto}.scroll-row::-webkit-scrollbar{display:none}.page-header{margin-bottom:20px}.page-title{color:var(--on-surface);letter-spacing:-.5px;margin-bottom:4px;font-family:Manrope,sans-serif;font-size:24px;font-weight:800}.page-subtitle{color:var(--on-surface-variant);font-size:13px}.notification-badge{background:var(--error);color:#fff;border:2px solid var(--surface-container-lowest);border-radius:8px;justify-content:center;align-items:center;min-width:16px;height:16px;padding:0 3px;font-size:9px;font-weight:800;display:flex;position:absolute;top:-3px;right:-3px}.chip{cursor:pointer;white-space:nowrap;background:var(--surface-container-low);color:var(--on-surface-variant);border:none;border-radius:20px;align-items:center;gap:5px;padding:6px 14px;font-size:12px;font-weight:600;transition:all .15s;display:inline-flex}.chip.active{background:var(--primary-container);color:var(--primary)}.fab{bottom:calc(var(--bottom-nav-height) + 16px);background:linear-gradient(135deg, var(--primary), var(--primary-light));color:#fff;cursor:pointer;z-index:90;border:none;border-radius:16px;justify-content:center;align-items:center;width:52px;height:52px;font-size:22px;transition:all .2s;display:flex;position:fixed;right:20px;box-shadow:0 8px 24px #005b8759}.fab:active{transform:scale(.93)}.app-layout .fab{bottom:calc(var(--bottom-nav-height) + 16px);position:absolute;right:16px}.list-item{align-items:center;gap:14px;padding:14px 0;display:flex}.list-item+.list-item{margin-top:4px}.data-table{border-collapse:collapse;width:100%}.data-table th{background:var(--surface-container-low);text-align:left;color:var(--on-surface-variant);text-transform:uppercase;letter-spacing:.4px;padding:10px 12px;font-size:11px;font-weight:600}.data-table td{color:var(--on-surface);padding:12px;font-size:13px}.data-table tbody tr+tr td{border-top:1px solid var(--outline-variant)}.data-table tbody tr:hover{background:var(--surface-container-low)}.card-hover{cursor:pointer;transition:transform .2s,box-shadow .2s}.card-hover:hover{box-shadow:var(--shadow-float);transform:translateY(-2px)}.space-sm{height:12px}.space-md{height:24px}.space-lg{height:32px}.space-xl{height:48px}.pb-nav{padding-bottom:calc(var(--bottom-nav-height) + 16px)}
