:root{--green:#2e4a35;--green2:#466b50;--bg:#f4f6f4;--line:#dfe6e0;--text:#1f2d24;--muted:#6f7c73;--danger:#a33a3a;--ok:#2d7c4c;--warn:#9a6a12}*{box-sizing:border-box}body{margin:0;font-family:Inter,Segoe UI,Arial,sans-serif;background:var(--bg);color:var(--text)}a{color:inherit}.sidebar{position:fixed;inset:0 auto 0 0;width:240px;background:var(--green);color:#fff;padding:22px 16px;display:flex;flex-direction:column;z-index:20}.brand{font-weight:800;font-size:22px;letter-spacing:.06em;padding:0 8px 18px}.brand span{display:block;font-size:12px;font-weight:500;opacity:.75;letter-spacing:.02em}.sidebar nav{display:grid;gap:5px}.sidebar nav a{padding:11px 12px;border-radius:9px;text-decoration:none;color:#eef5ef}.sidebar nav a:hover,.sidebar nav a.active{background:#ffffff18}.userbox{margin-top:auto;padding:14px 10px;border-top:1px solid #ffffff2a}.userbox strong,.userbox small{display:block}.userbox small{opacity:.7;margin:4px 0 10px}.userbox a{font-size:13px}.main{margin-left:240px;min-height:100vh}.guest-main{margin-left:0}.top{height:72px;display:flex;align-items:center;padding:0 28px;background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:10}.top h1{font-size:22px;margin:0}.wrap{padding:24px 28px;max-width:1600px}.grid{display:grid;gap:16px}.grid.cards{grid-template-columns:repeat(4,minmax(0,1fr))}.card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:18px}.stat b{font-size:32px;display:block;margin-top:8px}.stat small{color:var(--muted)}.toolbar{display:flex;gap:10px;align-items:center;justify-content:space-between;margin-bottom:16px;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--line);background:#fff;color:var(--text);padding:10px 14px;border-radius:9px;text-decoration:none;cursor:pointer;font-weight:600}.btn.primary{background:var(--green);border-color:var(--green);color:#fff}.btn.danger{background:#fff0f0;color:var(--danger);border-color:#f0caca}.btn.small{padding:6px 9px;font-size:12px}.table-wrap{overflow:auto;background:#fff;border:1px solid var(--line);border-radius:14px}table{border-collapse:collapse;width:100%;min-width:760px}th,td{padding:12px 14px;text-align:left;border-bottom:1px solid #edf0ed;vertical-align:top}th{background:#fafbfa;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}tr:last-child td{border-bottom:0}label{display:grid;gap:6px;font-weight:600;font-size:14px}input,select,textarea{width:100%;border:1px solid #cfd8d1;border-radius:9px;padding:10px 11px;font:inherit;background:#fff;color:var(--text)}textarea{min-height:120px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.form-grid .full{grid-column:1/-1}.alert{padding:12px 14px;border-radius:10px;margin-bottom:14px;background:#eef3ef}.alert.success{background:#e7f5ec;color:#1d6a3c}.alert.error{background:#fdecec;color:#8b2e2e}.alert.warning{background:#fff4db;color:#7c5611}.badge{display:inline-block;padding:4px 8px;border-radius:99px;font-size:12px;background:#eef2ef}.badge.success{background:#dff2e6;color:#226d40}.badge.failed{background:#fbe4e4;color:#9a3333}.badge.open{background:#e8f0ea;color:#315a3c}.login-card{max-width:430px;margin:8vh auto;background:#fff;border:1px solid var(--line);border-radius:18px;padding:28px;box-shadow:0 20px 50px #0000000d}.login-card form{display:grid;gap:14px}.hint{margin-top:16px;color:var(--muted);font-size:12px}.split{display:grid;grid-template-columns:1.1fr .9fr;gap:18px}.qr-card{text-align:center}.qr-box{display:flex;justify-content:center;margin:12px}.qr-print-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.qr-ticket{background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px;text-align:center;break-inside:avoid}.scanner{max-width:700px;margin:auto}.scanner #reader{background:#fff;border-radius:14px;overflow:hidden}.result-card{margin-top:16px;padding:22px;border-radius:14px;background:#fff;border:1px solid var(--line)}.result-card.ok{border-color:#a7d9b8}.result-card.dup{border-color:#e3c783}.muted{color:var(--muted)}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;white-space:pre-wrap;word-break:break-word}.pill{padding:3px 7px;border-radius:20px;background:#edf1ed;font-size:12px}.kpi-row{display:flex;gap:8px;flex-wrap:wrap}.actions{display:flex;gap:6px;flex-wrap:wrap}@media(max-width:1000px){.grid.cards{grid-template-columns:repeat(2,1fr)}.split{grid-template-columns:1fr}.qr-print-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:760px){.sidebar{position:static;width:auto;height:auto}.sidebar nav{grid-template-columns:repeat(2,1fr)}.userbox{display:none}.main{margin-left:0}.top{position:static;padding:0 16px}.wrap{padding:16px}.form-grid,.grid.cards{grid-template-columns:1fr}.qr-print-grid{grid-template-columns:1fr}.top h1{font-size:18px}}@media print{.sidebar,.top,.toolbar,.no-print{display:none!important}.main{margin:0}.wrap{padding:0}.qr-print-grid{grid-template-columns:repeat(3,1fr)}.qr-ticket{border:1px solid #bbb}}

/* Dashboard realtime */
.realtime-status{display:flex;align-items:center;gap:8px;font-size:13px;color:#52615a}
.live-dot{width:10px;height:10px;border-radius:50%;background:#1e9f57;display:inline-block;box-shadow:0 0 0 0 rgba(30,159,87,.45);animation:livePulse 1.6s infinite}
.live-dot.offline{background:#c0392b;animation:none;box-shadow:none}
.dashboard-head{display:flex;justify-content:space-between;align-items:center;gap:12px}
.stat-pop{animation:statPop .45s ease}
.row-new:first-child{animation:rowFlash 1.2s ease}
@keyframes livePulse{0%{box-shadow:0 0 0 0 rgba(30,159,87,.45)}70%{box-shadow:0 0 0 8px rgba(30,159,87,0)}100%{box-shadow:0 0 0 0 rgba(30,159,87,0)}}
@keyframes statPop{0%{transform:scale(1)}45%{transform:scale(1.15)}100%{transform:scale(1)}}
@keyframes rowFlash{0%{background:#dff7e8}100%{background:transparent}}

/* V2.4 - Check-in feedback */
.checkin-overlay{position:fixed;inset:0;background:rgba(18,31,23,.72);backdrop-filter:blur(4px);z-index:9999;display:flex;align-items:center;justify-content:center;padding:18px;opacity:0;visibility:hidden;transition:.18s ease}
.checkin-overlay.show{opacity:1;visibility:visible}
.checkin-modal{width:min(560px,100%);background:#fff;border-radius:24px;padding:30px 24px;text-align:center;box-shadow:0 28px 80px rgba(0,0,0,.3);transform:scale(.92);transition:.18s ease;border:5px solid #d7ded9}
.checkin-overlay.show .checkin-modal{transform:scale(1)}
.checkin-modal.success{border-color:#33a35c;background:#f3fff7}
.checkin-modal.duplicate{border-color:#e2a92f;background:#fffaf0}
.checkin-modal.error{border-color:#d64e4e;background:#fff5f5}
.checkin-icon{width:104px;height:104px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 18px;font-size:64px;font-weight:900;color:#fff;background:#77827a}
.checkin-modal.success .checkin-icon{background:#23964f}
.checkin-modal.duplicate .checkin-icon{background:#d79412}
.checkin-modal.error .checkin-icon{background:#c93f3f}
.checkin-title{font-size:29px;font-weight:900;letter-spacing:.02em}
.checkin-modal.success .checkin-title{color:#176b39}
.checkin-modal.duplicate .checkin-title{color:#8c5a05}
.checkin-modal.error .checkin-title{color:#982f2f}
.checkin-guest{font-size:32px;font-weight:800;margin-top:14px}
.checkin-meta{font-size:17px;line-height:1.6;margin-top:9px}
.checkin-zns{font-size:13px;color:#667168;margin-top:12px}
.checkin-next{margin-top:22px;min-width:220px;background:#2e4a35!important;color:#fff!important;border-color:#2e4a35!important}
.checkin-countdown{font-size:12px;color:#7a857d;margin-top:10px}
@media(max-width:600px){
  .checkin-modal{padding:26px 18px;border-radius:20px}
  .checkin-icon{width:88px;height:88px;font-size:54px}
  .checkin-title{font-size:24px}
  .checkin-guest{font-size:27px}
  .checkin-meta{font-size:16px}
}

/* V2.5 - Search guest check-in fallback */
.checkin-search-card{border:1px solid #dfe7e1}
.guest-search-results{display:grid;gap:10px;margin-top:14px}
.guest-search-item{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px;border:1px solid #dde5df;border-radius:14px;background:#fff}
.guest-search-item.is-checked{background:#f7f8f7;opacity:.78}
.guest-search-main{min-width:0}
.guest-search-name{font-size:17px;font-weight:800;color:#26372d}
.guest-search-meta{font-size:13px;color:#657068;margin-top:3px}
.guest-search-checked{font-size:13px;font-weight:700;color:#267a47;margin-top:6px}
.guest-checkin-btn{white-space:nowrap}
@media(max-width:640px){
  .guest-search-item{align-items:stretch;flex-direction:column}
  .guest-checkin-btn{width:100%;min-height:46px}
}
