body{margin:0;font-family:Noto Sans TC,sans-serif;background:#f7f4ee;color:#1d1b16}.login-page{display:flex;justify-content:center;align-items:center;min-height:100vh}.login-card{background:#fff;padding:2.5rem;border-radius:24px;box-shadow:0 10px 30px #211c141a;width:100%;max-width:400px}.login-header h1{font-size:1.8rem;margin-bottom:.5rem;text-align:center}.login-header p{color:#6b6b63;text-align:center;margin-bottom:2rem}.input-group{display:flex;align-items:center;background:#fdfaf5;border:1px solid #e6dfd3;border-radius:12px;padding:0 1rem;margin-bottom:1rem}.input-group input{border:none;background:transparent;padding:.8rem;flex:1;outline:none}.primary-btn{width:100%;padding:.9rem;background:#2b7a78;color:#fff;border:none;border-radius:12px;font-weight:600;cursor:pointer;margin-top:1rem;transition:opacity .2s}.primary-btn:hover{opacity:.9}.info-box{padding:.8rem;background:#eaf3f2;border-radius:8px;margin-bottom:1rem;font-size:.9rem;color:#2b7a78;text-align:center}.mode-switch{text-align:center;margin-top:1.5rem}.mode-switch button{background:none;border:none;color:#6b6b63;cursor:pointer;display:flex;align-items:center;gap:.5rem;margin:0 auto}.dashboard-layout{display:flex;min-height:100vh}.sidebar{width:260px;background:#fff;border-right:1px solid #e6dfd3;padding:2rem 1rem;display:flex;flex-direction:column;position:sticky;top:0;height:100vh}.brand{font-size:1.4rem;font-weight:700;color:#2b7a78;margin-bottom:2.5rem;padding-left:.5rem}.sidebar nav{display:flex;flex-direction:column;gap:.5rem;flex:1}.sidebar nav button{display:flex;align-items:center;gap:.8rem;padding:.8rem 1rem;border:none;background:transparent;border-radius:12px;color:#6b6b63;cursor:pointer;font-weight:500;text-align:left;transition:all .2s}.sidebar nav button:hover{background:#fdfaf5;color:#2b7a78}.sidebar nav button.active{background:#2b7a78;color:#fff}.logout-footer{display:flex;align-items:center;gap:.8rem;padding:.8rem 1rem;border:none;background:transparent;color:#d95d39;cursor:pointer;font-weight:600;margin-top:auto}.main-content{flex:1;padding:2.5rem;overflow-y:auto}.main-content header{display:flex;justify-content:space-between;align-items:center;margin-bottom:2rem}.badge{background:#eaf3f2;color:#2b7a78;padding:.4rem 1rem;border-radius:999px;font-size:.85rem;font-weight:600}.card{background:#fff;padding:2rem;border-radius:20px;box-shadow:0 4px 20px #211c140d}.card.placeholder h3{margin-top:0;color:#2b7a78}.table-container{overflow-x:auto}table{width:100%;border-collapse:collapse;margin-top:1rem}th{text-align:left;padding:1rem;border-bottom:2px solid #f7f4ee;color:#6b6b63;font-weight:600}td{padding:1rem;border-bottom:1px solid #f7f4ee}.approve-btn{padding:.4rem .8rem;background:#2b7a78;color:#fff;border:none;border-radius:6px;cursor:pointer}.denied-page{display:flex;justify-content:center;align-items:center;min-height:100vh}.denied-card{background:#fff;padding:3rem;border-radius:24px;text-align:center;max-width:500px}.logout-btn{margin-top:1.5rem;padding:.8rem 2rem;background:#d95d39;color:#fff;border:none;border-radius:12px;cursor:pointer}.description{color:#6b6b63;margin-bottom:1.5rem;font-size:.95rem}.upload-box{border:2px dashed #e6dfd3;border-radius:20px;padding:3rem;text-align:center;background:#fdfaf5;transition:border-color .2s;cursor:pointer}.upload-box:hover{border-color:#2b7a78}.hidden-input{display:none}.upload-label{display:flex;flex-direction:column;align-items:center;gap:1rem;color:#6b6b63;cursor:pointer}.upload-label span{font-weight:500}.status-msg{margin-top:1.5rem;padding:1rem;border-radius:12px;display:flex;align-items:center;gap:.8rem;font-size:.95rem}.status-msg.success{background:#e6f4ea;color:#1b7f3b}.status-msg.error{background:#fdecea;color:#d62728}.status-msg.info{background:#e8f1fb;color:#4e79a7}.preview-area{margin-top:2rem;border-top:1px solid #f7f4ee;padding-top:1.5rem}.table-container.mini{background:#faf7f2;border-radius:12px;margin-bottom:1.5rem}.animate-spin{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1.5rem;margin-bottom:2rem;margin-top:1.5rem}.stat-card{background:#fff;padding:1.5rem;border-radius:16px;box-shadow:0 4px 12px #211c140d;display:flex;align-items:center;gap:1rem}.stat-card .icon{background:#fdfaf5;color:#2b7a78;width:44px;height:44px;border-radius:12px;display:flex;align-items:center;justify-content:center}.stat-card .label{display:block;font-size:.85rem;color:#6b6b63;margin-bottom:.2rem}.stat-card .value{display:block;font-size:1.4rem;font-weight:700;color:#1d1b16}.selector-group{display:flex;align-items:center;gap:1rem}.selector-group select{padding:.6rem 1rem;border:1px solid #e6dfd3;border-radius:8px;background:#fff;min-width:150px}.radar-container{min-height:500px;display:flex;flex-direction:column}.placeholder-radar{flex:1;display:flex;align-items:center;justify-content:center;background:#faf7f2;border-radius:16px;color:#6b6b63;font-style:italic;margin-top:1rem}.loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;height:300px;gap:1rem;color:#2b7a78}.card-header-flex{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem}.danger-text-btn{background:none;border:none;color:#d95d39;font-size:.85rem;display:flex;align-items:center;gap:.4rem;cursor:pointer;font-weight:500}.history-card{margin-top:2rem}.history-item{display:flex;align-items:center;gap:1rem;padding:1rem;border-bottom:1px solid #f7f4ee;color:#6b6b63}.history-item:last-child{border-bottom:none}.history-item .info{flex:1;display:flex;flex-direction:column}.history-item .filename{font-weight:600;color:#1d1b16}.history-item .meta{font-size:.8rem}.status-badge{font-size:.75rem;padding:.2rem .6rem;background:#eaf3f2;color:#2b7a78;border-radius:4px}.refresh-btn{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:#fdfaf5;border:1px solid #e6dfd3;border-radius:8px;color:#2b7a78;cursor:pointer;font-size:.9rem}.empty-msg{text-align:center;color:#6b6b63;padding:2rem}.stats-row{margin-bottom:1.5rem}.stat-card-mini{display:flex;align-items:center;gap:1rem;padding:1rem 1.5rem!important;width:fit-content}.stat-card-mini .label{font-size:.8rem;color:#6b6b63}.stat-card-mini .value{font-size:1.2rem;font-weight:700;color:#2b7a78;display:block}.empty-row{text-align:center;color:#6b6b63;padding:3rem!important;font-style:italic}.current-data-card{margin-top:2rem}
