:root{--navy:#0A1628;--teal:#24B5CB;--teal2:#1a9ab0;--bg:#F0F4F8;--white:#FFFFFF;--border:#D1DCE8;--green:#22C55E;--red:#EF4444;--amber:#F59E0B;--text:#0A1628;--muted:#64748B}*,:after,:before{box-sizing:border-box;margin:0;padding:0}html{font-size:18px}body{font-family:-apple-system,Noto Sans TC,sans-serif;background:var(--bg);color:var(--text);-webkit-text-size-adjust:100%}.page,body{min-height:100vh}.page{max-width:480px;margin:0 auto;padding:1rem}h1{font-size:1.5rem;font-weight:700}h1,h2{color:var(--navy)}h2{font-size:1.15rem;font-weight:600}.card{background:var(--white);border-radius:16px;padding:1.25rem;margin-bottom:1rem;border:1px solid var(--border)}.btn{display:block;width:100%;padding:1rem;border:none;border-radius:12px;font-size:1rem;font-weight:600;cursor:pointer;transition:opacity .15s;min-height:56px;text-align:center}.btn:disabled{opacity:.45;cursor:not-allowed}.btn:active:not(:disabled){opacity:.8}.btn-primary{background:var(--teal);color:#fff}.btn-navy{background:var(--navy);color:#fff}.btn-ghost{background:transparent;color:var(--teal);border:2px solid var(--teal)}.btn-danger{background:var(--red);color:#fff}label{display:block;font-size:.85rem;font-weight:600;color:var(--muted);margin-bottom:.35rem;text-transform:uppercase;letter-spacing:.05em}input,select{width:100%;padding:.75rem 1rem;border:1.5px solid var(--border);border-radius:10px;font-size:1rem;background:var(--white);color:var(--text);outline:none;min-height:52px;-moz-appearance:none;appearance:none;-webkit-appearance:none}input:focus,select:focus{border-color:var(--teal)}input[type=number]{font-size:1.5rem;font-weight:700;text-align:center}.badge{display:inline-block;padding:.2rem .65rem;border-radius:999px;font-size:.75rem;font-weight:700;letter-spacing:.05em}.badge-shadow{background:#FEF3C7;color:#92400E}.badge-online{background:#DCFCE7;color:#166534}.badge-offline{background:#FEE2E2;color:#991B1B}.status-bar{display:flex;align-items:center;justify-content:space-between;padding:.6rem 1rem;background:var(--navy);color:#fff;font-size:.82rem;border-radius:10px;margin-bottom:1rem}.divider{border:none;border-top:1px solid var(--border);margin:1rem 0}.row{display:flex;gap:.75rem;align-items:center}.grow{flex:1 1}.text-muted{color:var(--muted);font-size:.85rem}.text-green{color:var(--green)}.text-red{color:var(--red)}.text-center{text-align:center}.mt-1{margin-top:.5rem}.mt-2{margin-top:1rem}.mb-1{margin-bottom:.5rem}.mb-2{margin-bottom:1rem}.gap-1{gap:.5rem}