body{margin:0;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}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.spinner{border:3px solid #f3f3f3;border-top-color:#3498db;border-radius:50%;width:16px;height:16px;animation:spin 1s linear infinite;display:inline-block;margin-left:10px;vertical-align:middle}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.upload-container{max-width:90%;margin:20px auto;font-family:Segoe UI,sans-serif;border:1px solid #ddd;padding:20px;border-radius:12px;box-shadow:0 0 10px rgba(16,184,38,.1)}.upload-container h2{font-size:1.2rem;margin-bottom:15px;display:flex;align-items:center}.upload-container input[type=file],.upload-container input[type=text]{width:100%;padding:8px;margin-bottom:10px;border-radius:6px;border:1px solid #ccc}.upload-container button{width:100%;padding:10px;background-color:#007bff;color:#fff;font-weight:700;border:none;border-radius:6px;cursor:pointer}.upload-container button:disabled{background-color:#ccc;cursor:not-allowed}.upload-container p{margin-top:10px;font-size:.9rem}input::placeholder{color:#aaa}.upload-section{margin-bottom:1.5rem;padding-bottom:1rem;border-bottom:1px solid #ddd}.upload-section:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.upload-container .upload-section select#theme{font-size:1.1rem;padding:.6em 1em;min-width:150px;height:2.4em;border:1px solid #ccc;border-radius:4px;background-color:#fafafa;box-shadow:0 0 4px rgba(0,0,0,.1)}.SingleAnalysis_app-container__uVlYP{padding:20px;background-color:#f5f7fa;min-height:100vh}.SingleAnalysis_app-header__1qTBt{text-align:center;margin-bottom:20px;padding:10px 0;background-color:#4caf50;color:#fff;border-radius:8px;box-shadow:0 2px 5px rgba(0,0,0,.2)}.SingleAnalysis_app-header__1qTBt h1{font-size:2.5rem;font-weight:700;margin:0;padding:10px;letter-spacing:1px}.SingleAnalysis_container__WcHEh{display:grid;grid-template-columns:4fr 6fr;grid-gap:20px;gap:20px}.SingleAnalysis_left-panel__1n20x,.SingleAnalysis_right-panel__2FQiD{background-color:#fff;padding:20px;border-radius:8px;box-shadow:0 2px 5px rgba(0,0,0,.1)}.SingleAnalysis_image-preview__1px9D{max-width:100%;max-height:400px;object-fit:contain;border-radius:8px;border:1px solid #ddd;box-shadow:0 2px 8px rgba(0,0,0,.1)}.SingleAnalysis_image-container__aPxRS{max-width:100%;max-height:400px;overflow:auto}.history-container{padding:20px;font-family:Noto Sans TC,sans-serif;max-width:960px;margin:0 auto}.history-container section{background-color:#f7f7f7;padding:16px 24px;margin-bottom:24px;border-radius:12px;box-shadow:0 2px 6px rgba(0,0,0,.08)}.history-container h2{font-size:20px;margin-bottom:12px;color:#333}.user-input-box{display:grid;grid-template-columns:160px 1fr;grid-column-gap:12px;column-gap:12px;grid-row-gap:12px;row-gap:12px;width:100%}.user-input-box .header-row{grid-column:1/-1;display:flex;justify-content:space-between;align-items:center;margin-bottom:.5em}.input-row{display:contents}.input-row label{justify-self:end;align-self:center;font-weight:700}.input-row input,.input-row select,.input-row span{justify-self:start;align-self:center;font-size:1rem}.input-row input,.input-row select{padding:8px 10px;border:1px solid #ccc;border-radius:4px;background-color:#fafafa;box-shadow:inset 0 0 4px rgba(0,0,0,.05);min-height:2.2em}.back-btn{padding:.6em 1.2em;font-size:1rem;border:1px solid #666;border-radius:4px;background:none;cursor:pointer;transition:background-color .2s}.back-btn:hover{background-color:rgba(0,0,0,.05)}.today-ratio .ratio-number{font-size:2.5rem;font-weight:700;color:#2c3e50;margin-top:10px}.latest-image img{border-radius:8px;border:1px solid #ccc;max-width:100%;height:auto}.trend-header{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;margin-bottom:10px}.tab-buttons{display:flex;grid-gap:4px;gap:4px;width:100%}.tab{flex:1 1;min-width:80px;padding:10px;text-align:center;font-weight:700;border:1px solid #ccc;border-bottom:none;border-radius:6px 6px 0 0;background-color:#f0f0f0;transition:background-color .2s;box-sizing:border-box}.tab:hover{background-color:#b7e6c2}.tab.active{background-color:#9aec93;border-color:#8884d8;color:#444}.history-container p{font-size:16px;color:#666}#chart-placeholder{height:300px;background-color:#e0e0e0;border-radius:8px;display:flex;color:#999;font-size:16px}#chart-placeholder,.login-wrapper{align-items:center;justify-content:center}.login-wrapper{min-height:100vh;display:flex!important;flex-direction:column;background:#f1f5f9}.login-card{padding:3rem 4rem;background:#fff;border-radius:12px;box-shadow:0 4px 16px rgba(0,0,0,.08);text-align:center}.login-title{font-size:2rem;margin-bottom:2rem;color:#111827}.login-btn{display:block;margin:0 auto;font-size:1.25rem;padding:.75rem 2.5rem;background:#2563eb;color:#fff;border:none;border-radius:8px;cursor:pointer;transition:transform .15s ease}.login-btn:hover{transform:translateY(-2px)}.signup-bar{position:fixed;bottom:30px;left:0;width:100%;display:flex;justify-content:flex-end;pointer-events:none}.signup-btn{pointer-events:all;margin-right:15%;font-size:.95rem;font-weight:600;text-decoration:none;text-align:center;color:#4caf50;background-color:#fff;border:2px solid #4caf50;border-radius:8px;padding:.4rem 1rem;cursor:pointer;transition:background-color .3s ease,color .3s ease}.signup-btn:hover{background-color:#4caf50;color:#fff}.signup-btn:focus{outline:none;box-shadow:0 0 0 3px rgba(76,175,80,.35)}.dash-wrapper{display:grid;grid-gap:1.25rem;gap:1.25rem;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));padding:1.5rem}.dash-card{background:#fff;border-radius:8px;padding:1.25rem 1.5rem;box-shadow:0 2px 8px rgba(0,0,0,.06)}.dash-card h2{margin-top:0;margin-bottom:1rem;font-size:1.25rem}.dash-stats{margin-top:1rem;display:flex;grid-gap:.5rem;gap:.5rem}.badge{background:#2563eb;color:#fff;padding:.15rem .55rem;border-radius:12px;font-size:.8rem}.group-block h3{margin:.75rem 0 .35rem;font-size:1.05rem}.role-tag{font-weight:400;font-size:.8rem;color:#555}.token-row{display:flex;align-items:center;grid-gap:.5rem;gap:.5rem;margin:.4rem 0}.token-label{flex:0 0 auto;font-weight:600}.token-text{display:inline-block;width:32ch;font-family:monospace;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.eye-btn{flex:0 0 auto;background:none;border:none;cursor:pointer;font-size:1.05rem;line-height:1;padding:0}.eye-btn:hover{opacity:.75}.group-header{display:flex;align-items:center}.group-header h2{margin:0 .5rem 0 0}.btn-manage-group{padding:.4rem .8rem;background:#2563eb;color:#fff;border-radius:4px;text-decoration:none;font-size:.9rem}.cam-wrapper{padding:1.5rem;display:grid;grid-gap:1.25rem;gap:1.25rem}.cam-form{padding:1rem 1.25rem;box-shadow:0 2px 8px rgba(0,0,0,.06);max-width:380px;border-radius:8px;overflow:hidden;background:#cfe2b7;border:1px solid #ddd}.cam-form h2{margin-top:0;font-size:1.2rem}.cam-form input{width:100%;margin:.4rem 0;padding:.4rem;border-radius:8px}.cam-form button{padding:.4rem 1rem;border-radius:8px}.cam-list{background:#fff;padding:1rem 1.25rem;border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,.06)}.cam-list h2{margin-top:0;font-size:1.2rem}table{width:100%;border-collapse:collapse}td,th{padding:.4rem .6rem}tr:nth-child(odd){background:#f9fafb}button{cursor:pointer}.modal-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.45);display:flex;justify-content:center;align-items:center;z-index:1000}.modal-card{background:#fff;padding:2rem 2.5rem;border-radius:12px;text-align:center;box-shadow:0 4px 16px rgba(0,0,0,.2);max-width:480px;width:90%}.token-block{display:block;margin:1rem auto;padding:.75rem 1rem;font-family:monospace;font-size:1rem;background:#f1f5f9;border-radius:6px;word-break:break-all;max-width:100%}.action-cell{display:flex;justify-content:center;align-items:center;grid-gap:2rem;gap:2rem}.refresh-action-btn{padding:.3rem .6rem;font-size:1rem;background:#0aafc5;cursor:pointer;transition:background .2s}.delete-action-btn,.refresh-action-btn{border-radius:8px;overflow:hidden;border:1px solid #ddd}.delete-action-btn{background:#f44336}.refresh-action-btn:hover{background:#434ab6}.delete-action-btn{padding:.3rem .6rem;font-size:1rem;border:none;background:#e96e66;cursor:pointer}.delete-action-btn:hover{background:#c62828}.gp-container{display:flex;grid-gap:1rem;gap:1rem}.gp-groups{flex:7 1}.gp-create{display:flex;align-items:center;grid-gap:.75rem;gap:.75rem;margin-bottom:1.25rem}.gp-create input{flex:0 0 50%;padding:.75rem;font-size:1rem;border:2px solid #ccc;border-radius:6px}.gp-create button{padding:.75rem 1.25rem;font-size:1rem;background:#29b6f6;color:#fff;border:none;border-radius:6px;cursor:pointer;transition:background .2s}.gp-create button:hover{background:#0288d1}.gp-group-card{padding:1rem;margin-bottom:.75rem;border:2px solid #ddd;border-radius:8px;cursor:pointer;transition:background-color .2s,border-color .2s,transform .1s}.gp-group-card:hover{transform:translateY(-2px);border-color:#bbb}.gp-group-card.selected{background-color:#f2f3f3;border-color:#ec1b1b}.gp-group-card.admin{background-color:#c3d425}.gp-group-card.member{background-color:#309789}.gp-group-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}.gp-group-name{font-weight:600}.gp-btn-del{background:transparent;border:none;color:#e53935;font-size:1.25rem;line-height:1;cursor:pointer;transition:color .2s}.gp-btn-del:hover{color:#b71c1c}.gp-bound-cams{display:flex;flex-wrap:wrap;grid-gap:.5rem;gap:.5rem}.gp-cam-chip{background:#eee;padding:.3rem .6rem;border-radius:16px;font-size:.85rem}.gp-cameras{flex:3 1;display:flex;flex-direction:column;grid-gap:1rem;gap:1rem}.cam-header{display:flex;justify-content:space-between;align-items:center}.manage-cameras-btn{text-decoration:none;padding:.4rem .8rem;background:#4caf50;color:#fff;border-radius:4px;transition:background .2s}.manage-cameras-btn:hover{background:#388e3c}.gp-cam-card{border:2px solid transparent;border-radius:6px;padding:.75rem;margin-bottom:.5rem;transition:background-color .2s,border-color .2s}.gp-cam-card.bound{background-color:#e8f5e9;border-color:#66bb6a}.gp-cam-card.unbound{background-color:#ffebee;border-color:#ef5350}.gp-cam-card:hover{opacity:.9}.gp-cam-nick{font-size:.9rem;color:#555}.gp-cam-status{font-size:.8rem;color:#333}.member-section{padding:1rem;border:1px solid #ddd;border-radius:6px;background:#fafafa}.member-section h4{margin-bottom:.5rem}.current-user{margin-bottom:.75rem;font-weight:700}.member-form{display:flex;grid-gap:.5rem;gap:.5rem;margin-bottom:1rem}.member-form input{flex:1 1;padding:.5rem;border:1px solid #ccc;border-radius:4px}.member-form button{padding:.5rem 1rem;background:#29b6f6;color:#fff;border:none;border-radius:4px;cursor:pointer;transition:background .2s}.member-form button:hover{background:#0288d1}.member-list{list-style:none;margin:0;padding:0}.member-item{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #eee;padding:.5rem 0}.member-del-btn{background:transparent;border:none;color:#e53935;cursor:pointer;transition:color .2s}.member-del-btn:hover{color:#b71c1c}.gp-cam-chip button{border:none;background:none;padding:0;margin:0;cursor:pointer;font:inherit;color:inherit}.gp-cam-chip button:hover{background-color:rgba(0,0,0,.1);color:#333;border-radius:4px}.button-like{display:inline-block;padding:.25em .75em;background:#eee;border:1px solid #ccc;border-radius:999px;text-decoration:none;cursor:pointer;font:inherit;color:#333;transition:background-color .2s,border-color .2s}.button-like:hover{background:#ddd;border-color:#bbb}.app-layout{display:flex;height:100vh}.sidebar{background:#fafafa;border-right:1px solid #e0e0e0;display:flex;flex-direction:column;transition:width .2s}.sidebar.open{width:10%}.sidebar.collapsed{width:2rem}.collapse-btn{background:none;border:none;padding:.75rem;cursor:pointer;font-size:1.5rem;display:flex;align-items:center;justify-content:center}.sidebar-nav{flex:1 1;display:flex;flex-direction:column;margin-top:2rem}.nav-link{display:flex;align-items:center;padding:.8rem;text-decoration:none;color:#333;font-size:1.1rem}.nav-icon{margin-right:.5rem;font-size:1.3rem}.nav-link.active{background-color:#e6f7ff;font-weight:600;border-left:3px solid #1890ff}.app-container{flex:1 1;flex-direction:column}.app-container,.app-header{display:flex;justify-content:space-between}.app-header{padding:1rem;border-bottom:1px solid #ddd;align-items:center}.logout-btn{background:none;border:none;color:#1890ff;cursor:pointer}.app-main{flex:1 1;padding:1rem;overflow-y:auto}.app-footer{padding:.5rem 1rem;text-align:center;font-size:.85rem;color:#999;border-top:1px solid #e0e0e0}
/*# sourceMappingURL=main.03a4b87c.chunk.css.map */