:root {
    --wine: #6d1021;
    --wine-deep: #390711;
    --signal: #ca2747;
    --blush: #f8e7e4;
    --paper: #fffdfa;
    --ink: #21191a;
    --muted: #736568;
    --line: #eadbd8;
    --good: #16835f;
    --shadow: 0 18px 55px rgba(57, 7, 17, .11);
}

* { box-sizing: border-box; }
body { min-width: 320px; background: var(--paper); color: var(--ink); font-family: 'Noto Sans Thai', sans-serif; }
.data, .brand-word, .timer, .stat-number { font-family: 'DM Mono', monospace; }
.app-shell { min-height: 100vh; }
.top-strip { height: 6px; background: linear-gradient(90deg, var(--wine-deep) 0 55%, var(--signal) 55% 72%, #eab0a5 72%); }
.resource-registry{max-width:1180px}.resource-hero{min-height:82px;padding:15px 20px;display:flex;align-items:center;justify-content:space-between;border-radius:12px;background:var(--wine-deep);color:#fffaf8}.resource-hero h1{margin:0;font-size:1.32rem;font-weight:800}.resource-hero p{margin:4px 0 0;color:#dfc7c7;font-size:.7rem}.resource-hero>b{color:#f4c2c2;font:500 1rem 'DM Mono'}.resource-table-panel{margin-top:12px;padding:0;overflow:hidden;border:1px solid #eee0dc;border-radius:12px;background:#fffdfb}.resource-table-head{display:flex;justify-content:space-between;align-items:center;padding:18px 21px;border-bottom:1px solid #f1e7e4;background:#fffaf9}.resource-table-head>div>span{color:#9d7379;font:.62rem 'DM Mono';letter-spacing:.12em}.resource-table-head .panel-title{margin:4px 0 0;font-size:1.16rem}.resource-table{margin:0}.resource-table th{padding:12px 20px;background:#fbf5f3;color:#9a7b7f;font:.62rem 'DM Mono';letter-spacing:.055em;text-transform:uppercase}.resource-table td{padding:14px 20px;border-color:#f1e7e4;font-size:.74rem}.resource-table td strong,.resource-table td small{display:block}.resource-table td small{margin-top:3px;color:#a28c8f;font:.58rem 'DM Mono'}.resource-icon{width:32px;height:32px;padding:0;border:1px solid #e3d3d0;border-radius:8px;color:#724c54}.resource-icon:hover{background:var(--wine);border-color:var(--wine);color:#fff}.resource-delete{margin-left:4px;color:#b34b58}.resource-delete:hover{background:#b62c42;border-color:#b62c42}.resource-empty{text-align:center!important;padding:40px!important;color:var(--muted)}.resource-modal{border:0;border-radius:12px;overflow:hidden}.resource-modal .modal-header{padding:22px 25px 0;border:0;background:#fff8f6}.resource-modal h2{margin:0;font-size:1.25rem;font-weight:800}.resource-modal .modal-body{padding:22px 25px}.resource-modal .modal-footer{padding:0 25px 22px;border:0}@media(max-width:640px){.resource-hero{padding:15px}.resource-hero h1{font-size:1.15rem}.resource-table-head{padding:16px}.resource-table th:nth-child(4),.resource-table td:nth-child(4){display:none}.resource-table td,.resource-table th{padding-left:13px;padding-right:13px}.resource-modal .modal-header{padding:20px}.resource-modal .modal-body{padding:20px}.resource-modal .modal-footer{padding:0 20px 20px}}
.landing-page { background: #fbf6f3; }.landing-nav { width:min(1240px, calc(100% - 64px)); margin:auto; min-height:88px; display:flex; align-items:center; justify-content:space-between; }.landing-nav .brand { color:var(--wine); padding:0; }.landing-nav .brand-mark { background:var(--wine); color:white; }.landing-nav .brand-word small { color:var(--muted); }.landing-nav nav { display:flex; align-items:center; gap:24px; }.landing-nav nav a { color:var(--muted); text-decoration:none; font-size:.78rem; font-weight:600; }.landing-nav nav a:hover { color:var(--wine); }.landing-nav .landing-admin-link { padding:9px 13px; border:1px solid var(--line); color:var(--wine); }.landing-hero { width:min(1240px, calc(100% - 64px)); margin:clamp(32px,7vh,86px) auto 0; display:grid; grid-template-columns:1.12fr .88fr; gap:clamp(35px,7vw,100px); align-items:center; }.landing-copy h1 { margin:11px 0 19px; font-size:clamp(3.1rem,6.3vw,6.25rem); line-height:.91; letter-spacing:-.085em; font-weight:800; }.landing-copy h1 em { font-style:normal; color:var(--signal); }.landing-copy>p { max-width:510px; font-size:1rem; line-height:1.85; color:var(--muted); }.landing-actions { display:flex; flex-wrap:wrap; gap:10px; margin-top:28px; }.landing-actions .btn { padding:13px 18px; }.landing-note { margin-top:46px; color:var(--muted); font-size:.73rem; }.landing-note .data { margin-left:9px; color:#9c8588; font-size:.65rem; }.landing-signal { min-height:475px; padding:24px; background:var(--wine-deep); color:white; position:relative; overflow:hidden; box-shadow:var(--shadow); }.landing-signal:before { content:''; position:absolute; width:550px; height:550px; border:1px solid rgba(255,255,255,.1); border-radius:50%; top:-270px; right:-235px; }.landing-signal-head { position:relative; display:flex; justify-content:space-between; align-items:center; }.landing-signal-head .eyebrow { color:#d8aeb0; }.landing-radar { height:255px; display:grid; place-items:center; position:relative; }.landing-radar:before,.landing-radar:after { content:''; position:absolute; border:1px solid rgba(255,255,255,.15); border-radius:50%; }.landing-radar:before { width:220px;height:220px; }.landing-radar:after { width:150px;height:150px; }.landing-radar-core { z-index:1; width:86px; height:86px; border-radius:50%; display:grid; place-items:center; background:var(--signal); box-shadow:0 0 0 10px rgba(202,39,71,.16),0 0 0 24px rgba(202,39,71,.06); font-size:2rem; }.radar-ping { position:absolute; width:5px; height:5px; border-radius:50%; background:#fdc0b8; box-shadow:0 0 0 5px rgba(253,192,184,.08); }.ping-one{top:50px;right:92px}.ping-two{bottom:42px;left:93px}.landing-signal-list { position:relative; border-top:1px solid rgba(255,255,255,.16); }.landing-signal-list div { display:grid; grid-template-columns:23px 1fr auto; gap:8px; align-items:center; padding:13px 0; font-size:.75rem; border-bottom:1px solid rgba(255,255,255,.1); }.landing-signal-list div:last-child { border:0; }.landing-signal-list i { color:#efaaa4; }.landing-signal-list b { font:.7rem 'DM Mono'; color:#eabfc0; }.landing-flow { width:min(1240px, calc(100% - 64px)); margin:clamp(80px,13vh,150px) auto 65px; padding-top:25px; border-top:1px solid var(--line); display:grid; grid-template-columns:.65fr 1.35fr; gap:55px; }.landing-flow h2 { margin:7px 0 0; font-size:1.8rem; letter-spacing:-.05em; font-weight:800; }.landing-steps { display:grid; grid-template-columns:repeat(3,1fr); gap:25px; }.landing-steps article { position:relative; padding-top:32px; }.landing-steps article>span { position:absolute; top:0; color:#b99da0; font:.65rem 'DM Mono'; }.landing-steps i { display:block; color:var(--wine); font-size:1.3rem; margin:13px 0; }.landing-steps h3 { font-size:.92rem; font-weight:800; margin:0 0 7px; }.landing-steps p { color:var(--muted); font-size:.73rem; line-height:1.7; margin:0; }
.public-page { background:var(--paper); }.public-nav { width:min(1240px,calc(100% - 64px)); min-height:78px; margin:auto; display:flex; align-items:center; justify-content:space-between; border-bottom:1px solid var(--line); }.public-nav .brand { padding:0; color:var(--wine); }.public-nav .brand-mark { background:var(--wine);color:white; }.public-nav .brand-word small { color:var(--muted); }.public-nav nav { display:flex; align-items:center; gap:8px; }.public-nav nav a { padding:8px 10px; color:#635154; font-size:.75rem; font-weight:700; text-decoration:none; }.public-nav nav a:hover { color:var(--wine); }.public-nav .public-admin-link { border-left:1px solid var(--line); margin-left:5px; padding-left:16px; color:var(--wine); }.public-main { min-height:calc(100vh - 84px); padding:34px 42px; }.public-main .screen { max-width:1160px; }
.nav-rail { width: 240px; height: 100vh; height: 100dvh; position: fixed; inset: 0 auto 0 0; z-index: 4; padding: 22px 18px 18px; background: var(--wine-deep); color: #fff7f4; display: flex; flex-direction: column; overflow-y:auto; scrollbar-width:thin; scrollbar-color:rgba(255,255,255,.32) rgba(255,255,255,.04); }
.brand { display: flex; gap: 10px; align-items: center; color: white; text-decoration: none; padding: 0 10px 30px; }
.brand-mark { width: 34px; height: 34px; display: grid; place-items: center; color: var(--wine); background: #fff7f4; border-radius: 50% 50% 6px 50%; font-size: 18px; transform: rotate(-45deg); }
.brand-mark i { transform: rotate(45deg); }
.brand-word { font-size: .86rem; line-height: 1.15; letter-spacing: .06em; }
.brand-word small { display: block; color: #dcb6b7; font-size: .61rem; letter-spacing: .13em; }
.rail-label, .eyebrow { color: #c89498; text-transform: uppercase; font-family: 'DM Mono', monospace; font-size: .65rem; letter-spacing: .13em; }
.rail-label { padding: 0 10px; margin: 12px 0 10px; }
.side-link { color: #dfc3c3; display: flex; align-items: center; gap: 11px; padding: 11px 10px; border-radius: 8px; text-decoration: none; font-size: .87rem; margin: 2px 0; }
.side-link i { font-size: 1.05rem; }
.side-link:hover, .side-link.active { background: rgba(255,255,255,.11); color: white; }
.rail-footer { margin-top: auto; border-top: 1px solid rgba(255,255,255,.15); padding: 18px 10px 0; color: #cba8a9; font-size: .72rem; }
.nav-rail>.brand{flex:none;padding-bottom:15px}.admin-nav-groups{flex:none;overflow:visible;padding:2px 3px 8px 0}.admin-nav-group{margin:0 0 9px}.admin-nav-group+.admin-nav-group{padding-top:9px;border-top:1px solid rgba(255,255,255,.09)}.admin-nav-group-label{display:flex;align-items:center;gap:7px;margin:0 8px 3px;color:#bd8e93;font:500 .55rem 'DM Mono';letter-spacing:.09em;text-transform:uppercase}.admin-nav-group-label i{font-size:.64rem}.admin-nav-group-links{display:grid;gap:1px}.admin-nav-group .side-link{min-height:34px;margin:0;padding:7px 10px;border-radius:7px;font-size:.74rem}.admin-nav-group .side-link>i{width:18px;font-size:.86rem;text-align:center}.admin-nav-group .side-link>span{min-width:0}.rail-footer{flex:none;margin-top:auto;padding:12px 8px 0}.rail-account{display:flex;align-items:center;gap:4px}.rail-account>.live-dot{flex:none}.rail-account b,.rail-account small{display:block}.rail-account b{max-width:165px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#f2d9da;font-size:.68rem}.rail-account small{margin-top:1px;color:#ac858a;font:.55rem 'DM Mono'}.rail-footer form{margin-top:8px}.rail-footer button,.admin-mobile-account button{display:inline-flex;align-items:center;gap:6px;padding:0;border:0;background:transparent;color:#cba8a9;font-size:.64rem}.rail-footer button:hover{color:#fff}
.admin-mobile-drawer{--bs-offcanvas-width:min(360px,92vw);background:#fffaf8}.admin-mobile-drawer .offcanvas-header{align-items:flex-start;padding:22px 21px 15px;border-bottom:1px solid var(--line)}.admin-mobile-drawer .offcanvas-header h2{margin:3px 0 0;font-size:1.12rem;font-weight:800;letter-spacing:-.035em}.admin-mobile-drawer .offcanvas-body{display:flex;flex-direction:column;padding:12px 15px 18px}.admin-mobile-drawer .admin-nav-groups{overflow:visible;padding:0}.admin-mobile-drawer .admin-nav-group{margin-bottom:12px}.admin-mobile-drawer .admin-nav-group+.admin-nav-group{padding-top:12px;border-color:#eee2df}.admin-mobile-drawer .admin-nav-group-label{margin-left:8px;color:#a16d75}.admin-mobile-drawer .side-link{color:#624d51;background:transparent}.admin-mobile-drawer .side-link:hover{background:#f8ebe8;color:var(--wine)}.admin-mobile-drawer .side-link.active{background:var(--wine);color:#fff;box-shadow:0 5px 13px rgba(109,16,33,.16)}.admin-mobile-account{margin-top:auto;padding:16px 8px 0;border-top:1px solid var(--line)}.admin-mobile-account>span{display:flex;align-items:center;gap:9px}.admin-mobile-account>span>i{color:var(--wine);font-size:1.3rem}.admin-mobile-account b,.admin-mobile-account small{display:block}.admin-mobile-account b{font-size:.72rem}.admin-mobile-account small{color:#91797d;font-size:.59rem}.admin-mobile-account form{margin-top:13px}.admin-mobile-account button{color:var(--wine);font-weight:700}
.live-dot { display: inline-block; width: 7px; height: 7px; border-radius: 99px; background: #67d9a1; margin-right: 6px; box-shadow: 0 0 0 4px rgba(103,217,161,.1); }
.main-area { margin-left: 240px; padding: 34px 42px; min-height: calc(100vh - 6px); }
.screen { display: none; max-width: 1320px; margin: auto; }
.screen.is-visible { display: block; }
.screen-head { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 30px; }
.screen-head h1 { font-size: clamp(1.65rem, 2.8vw, 2.45rem); font-weight: 800; letter-spacing: -.05em; margin: 5px 0 0; }
.screen-head p { color: var(--muted); font-size: .88rem; margin: 6px 0 0; }
.home-hub { max-width: 1100px; padding-top: clamp(20px, 7vh, 78px); }.home-intro { max-width: 690px; margin-bottom: 36px; }.home-intro h1 { font-size: clamp(2rem, 4vw, 3.35rem); line-height: 1.12; font-weight: 800; letter-spacing: -.065em; margin: 8px 0 12px; }.home-intro p { color: var(--muted); font-size: .94rem; margin: 0; }.home-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }.home-card { min-height: 270px; padding: 25px; background: #fff; border: 1px solid var(--line); display: flex; flex-direction: column; align-items: flex-start; }.home-card-primary { background: var(--wine); border-color: var(--wine); color: white; }.home-card-icon { width: 42px; height: 42px; display: grid; place-items: center; margin-bottom: 25px; border-radius: 7px; background: var(--blush); color: var(--wine); font-size: 1.3rem; }.home-card-primary .home-card-icon { background: rgba(255,255,255,.13); color: white; }.home-card h2 { font-size: 1.12rem; font-weight: 800; letter-spacing: -.035em; margin: 7px 0; }.home-card p { min-height: 48px; color: var(--muted); font-size: .78rem; line-height: 1.65; margin-bottom: 20px; }.home-card-primary p { color: #e7c8ca; }.home-card .btn { margin-top: auto; font-size: .76rem; font-weight: 700; }
.date-capsule { background: white; border: 1px solid var(--line); border-radius: 50px; padding: 10px 14px; font-size: .77rem; color: var(--muted); white-space: nowrap; }
.date-capsule i { color: var(--signal); margin-right: 6px; }
.panel { background: #fff; border: 1px solid var(--line); box-shadow: var(--shadow); }
.checkin-layout { display: grid; grid-template-columns: minmax(0, 1.45fr) minmax(280px, .85fr); gap: 22px; }
.scanner-panel { min-height: 615px; padding: 28px; border-radius: 16px; position: relative; overflow: hidden; background: #fff; }
.scanner-panel:after { content: ''; position: absolute; width: 450px; height: 450px; border: 1px solid var(--blush); border-radius: 50%; right: -250px; top: -250px; }
.scanner-top { display: flex; justify-content: space-between; gap: 20px; position: relative; z-index: 1; }
.scanner-title { font-size: 1.2rem; font-weight: 800; letter-spacing: -.03em; }
.status-pill { border-radius: 50px; padding: 7px 11px; background: #e7f6f0; color: var(--good); font-size: .7rem; font-weight: 700; white-space: nowrap; }
.signal-stage { min-height: 325px; position: relative; display: grid; place-items: center; margin: 12px 0 18px; background: linear-gradient(135deg, #fffaf9, #fdf1ee); border: 1px solid #f2e1de; overflow: hidden; }
.signal-stage:before, .signal-stage:after { content: ''; position: absolute; border: 1px solid rgba(109,16,33,.14); border-radius: 50%; }
.signal-stage:before { width: 270px; height: 270px; } .signal-stage:after { width: 205px; height: 205px; }
.scan-core { position: relative; z-index: 1; width: 119px; height: 119px; border-radius: 50%; display: grid; place-items: center; color: white; background: var(--wine); box-shadow: 0 0 0 11px rgba(109,16,33,.10), 0 0 0 27px rgba(109,16,33,.055); }
.scan-core i { font-size: 3.1rem; }
.scan-instruction { position: relative; z-index: 1; text-align: center; margin-top: -68px; }
.scan-instruction h2 { font-size: 1.2rem; font-weight: 800; margin: 0 0 5px; }
.scan-instruction p { color: var(--muted); font-size: .83rem; margin: 0; }
.scanner-bottom { display: flex; justify-content: space-between; border-top: 1px solid var(--line); padding-top: 20px; }
.scan-actions { display:flex; align-items:center; gap:12px; padding:0 0 18px; }.scan-actions .btn { font-size:.74rem; }.scan-actions span { color:var(--muted); font-size:.68rem; }
.location { font-size: .78rem; } .location strong { display: block; font-size: 1rem; margin-top: 3px; }
.reader { text-align: right; color: var(--muted); font-size: .69rem; }.reader strong { display: block; color: var(--ink); font-size: .8rem; }
.camera-card { background: #281316; border-radius: 16px; overflow: hidden; min-height: 342px; color: white; position: relative; }
.cam-noise { position:absolute; inset: 0; opacity: .23; background: repeating-linear-gradient(0deg, transparent 0 3px, rgba(255,255,255,.14) 3px 4px); }
.cam-frame { position: absolute; inset: 17px; border: 1px solid rgba(255,255,255,.32); }.cam-frame:before,.cam-frame:after { content:''; position:absolute;width:21px;height:21px;border-color:#ffb9ae;border-style:solid; }.cam-frame:before{top:-1px;left:-1px;border-width:2px 0 0 2px}.cam-frame:after{right:-1px;bottom:-1px;border-width:0 2px 2px 0}
.camera-copy { position: absolute; inset: 0; display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center; }.camera-copy i {font-size:2.15rem;color:#ffb1a8}.camera-copy strong{font-size:.84rem;margin-top:10px}.camera-copy span{font-size:.69rem;color:#d5babc;margin-top:3px}.camera-video { position:absolute; inset:0; z-index:1; width:100%; height:100%; object-fit:cover; transform:scaleX(-1); }.camera-card .recording,.camera-card .camera-time { z-index:2; }.camera-card .cam-frame { z-index:3; pointer-events:none; }
.recording { position: absolute; left: 18px; top: 18px; font: .63rem 'DM Mono'; letter-spacing: .08em; }.recording b{display:inline-block;width:7px;height:7px;border-radius:50%;background:#ff5c58;margin-right:5px}
.camera-time { position:absolute;bottom:17px;right:18px;font:.69rem 'DM Mono';color:#d7bfc0; }
.event-panel { margin-top: 22px; border-radius: 16px; overflow: hidden; }.event-head { display: flex; justify-content: space-between; padding: 14px 16px; border-bottom: 1px solid var(--line); font-weight: 700; font-size: .82rem; }.event-head a { color: var(--wine); text-decoration: none; font-size: .72rem; }.event-row { display:flex; gap: 11px; align-items:center; padding: 12px 16px; font-size: .77rem; }.event-row + .event-row{border-top:1px solid #f3eae8}.event-avatar{width:30px;height:30px;background:var(--blush);color:var(--wine);display:grid;place-items:center;border-radius:50%;font-weight:800;font-size:.68rem}.event-profile-photo{object-fit:cover;border:1px solid #e6cbc8}.event-capture-view{position:relative;width:42px;height:42px;flex:none;margin-left:auto;padding:0;border:1px solid #e6cbc8;border-radius:7px;overflow:hidden;background:#f6e9e6;cursor:zoom-in}.event-capture-view img{width:100%;height:100%;object-fit:cover;display:block}.event-capture-view i{position:absolute;inset:0;display:grid;place-items:center;background:rgba(57,7,17,.55);color:#fff;opacity:0;transition:opacity .16s ease;font-size:.88rem}.event-capture-view:hover i,.event-capture-view:focus-visible i{opacity:1}.event-name{font-weight:700;display:block}.event-detail{color:var(--muted);font-size:.67rem}.event-time{margin-left:auto;color:var(--muted);font: .66rem 'DM Mono';}.event-capture-view+.event-time{margin-left:0}
.auth-main { min-height: calc(100vh - 6px); padding: 34px 42px; }.login-wrap { min-height: calc(100vh - 74px); display:grid; grid-template-columns: 1.08fr .92fr; border:1px solid var(--line); background:#fff; box-shadow:var(--shadow); }.login-story{background:var(--wine-deep);color:white;padding:clamp(32px,6vw,78px);position:relative;overflow:hidden}.login-story:before{content:'';position:absolute;width:510px;height:510px;border:1px solid rgba(255,255,255,.14);border-radius:50%;right:-230px;top:-155px}.login-story h1{position:relative;font-size:clamp(2.3rem,4vw,4.25rem);font-weight:800;letter-spacing:-.07em;line-height:.96;margin:34px 0 20px}.login-story p{position:relative;color:#dec0c1;max-width:370px;font-size:.92rem;line-height:1.8}.login-circuit{position:absolute;bottom:43px;left:78px;display:flex;align-items:center;gap:8px;color:#eba9a1;font: .67rem 'DM Mono';letter-spacing:.11em}.login-circuit:before{content:'';width:46px;height:1px;background:#d67c78}.login-form{padding:clamp(30px,7vw,90px);display:flex;align-items:center}.form-inner{width:100%;max-width:370px;margin:auto}.form-inner h1,.form-inner h2{font-size:1.8rem;font-weight:800;letter-spacing:-.05em}.form-label{font-weight:700;font-size:.75rem;margin-bottom:7px}.form-control{border-color:var(--line);border-radius:5px;padding:12px;font-size:.86rem}.form-control:focus{border-color:var(--wine);box-shadow:0 0 0 .22rem rgba(109,16,33,.12)}.btn-wine{background:var(--wine);border-color:var(--wine);padding:11px 16px;font-weight:700;font-size:.84rem}.btn-wine:hover{background:var(--wine-deep);border-color:var(--wine-deep)}
.stats-grid { display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:24px }.stat-card{border:1px solid var(--line);background:white;padding:18px;min-height:130px;position:relative}.stat-card:before{content:'';position:absolute;top:0;left:0;width:4px;height:100%;background:var(--signal)}.stat-card:nth-child(2):before{background:#bb7b24}.stat-card:nth-child(3):before{background:var(--good)}.stat-card:nth-child(4):before{background:#8f647c}.stat-label{font-size:.7rem;color:var(--muted)}.stat-number{font-size:1.9rem;font-weight:600;letter-spacing:-.08em;margin-top:17px}.stat-change{font-size:.66rem;color:var(--good)}
.admin-grid {display:grid;grid-template-columns:1.3fr .7fr;gap:22px}.chart-panel,.table-panel,.point-panel,.history-panel{padding:23px;border:1px solid var(--line);background:#fff}.panel-title{font-size:1rem;font-weight:800;letter-spacing:-.03em}.panel-subtitle{color:var(--muted);font-size:.72rem;margin:3px 0 0}.chart-bars{height:220px;margin-top:28px;display:flex;gap:12px;align-items:flex-end;border-bottom:1px solid var(--line);padding:0 8px 0}.chart-bar{flex:1;min-width:18px;position:relative;background:linear-gradient(180deg,var(--signal),var(--wine));height:var(--height);opacity:.88}.chart-bar:after{content:attr(data-day);position:absolute;top:calc(100% + 8px);left:50%;transform:translateX(-50%);font:.61rem 'DM Mono';color:var(--muted)}.point-item{display:flex;align-items:center;gap:10px;padding:13px 0;border-bottom:1px solid var(--line)}.point-badge{width:34px;height:34px;border-radius:6px;background:var(--blush);color:var(--wine);display:grid;place-items:center}.point-name{font-size:.8rem;font-weight:700}.point-meta{font-size:.66rem;color:var(--muted)}.point-count{margin-left:auto;font:.77rem 'DM Mono';font-weight:700}.table-panel{margin-top:22px}.table{font-size:.75rem;margin:15px 0 0}.table thead th{border-bottom-color:var(--line);color:var(--muted);font-weight:600;font-size:.66rem;text-transform:uppercase;letter-spacing:.05em}.table td{vertical-align:middle;border-color:#f1e8e6;padding:12px 7px}.tag{padding:4px 8px;border-radius:20px;font-size:.64rem;font-weight:700}.tag-success{color:var(--good);background:#e7f6f0}.tag-wine{color:var(--wine);background:var(--blush)}
.history-head{padding:28px;background:var(--wine);color:white;position:relative;overflow:hidden}.history-head:after{content:'RFID';font:700 7rem 'DM Mono';letter-spacing:-.15em;color:rgba(255,255,255,.06);position:absolute;right:25px;bottom:-45px}.history-head h1,.history-head h2{position:relative;font-size:2.1rem;letter-spacing:-.06em;font-weight:800;margin:4px 0}.history-head p{position:relative;margin:0;color:#e1c1c2;font-size:.82rem}.history-metrics{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid var(--line);border-top:0;background:#fff}.history-metric{padding:17px 21px;border-right:1px solid var(--line)}.history-metric:last-child{border:0}.history-metric span{color:var(--muted);font-size:.65rem;display:block}.history-metric b{font:.98rem 'DM Mono';color:var(--wine);display:block;margin-top:5px}.filter-line{padding:18px 0;display:flex;gap:10px;align-items:center}.filter-line select{max-width:185px;font-size:.76rem}.timeline{position:relative;padding-left:28px}.timeline:before{content:'';position:absolute;left:7px;top:7px;bottom:12px;width:1px;background:var(--line)}.timeline-item{position:relative;padding:0 0 24px 20px}.timeline-item:before{content:'';position:absolute;left:-25px;top:5px;width:11px;height:11px;border-radius:50%;background:var(--signal);box-shadow:0 0 0 4px #f9e8e6}.timeline-day{font:.67rem 'DM Mono';color:var(--muted);margin-bottom:8px}.timeline-card{display:flex;align-items:center;padding:14px 16px;background:#fff;border:1px solid var(--line)}.timeline-card i{color:var(--wine);font-size:1.25rem;margin-right:12px}.timeline-card strong{font-size:.82rem}.timeline-card span{display:block;color:var(--muted);font-size:.68rem;margin-top:2px}.timeline-card time{margin-left:auto;font:.7rem 'DM Mono';color:var(--wine)}
.mobile-top { display:none; }
@media (max-width: 991px){.nav-rail{display:none}.main-area,.auth-main{margin-left:0;padding:20px}.mobile-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}.mobile-top .brand{color:var(--wine);padding:0}.mobile-top .brand-mark{background:var(--wine);color:white}.mobile-top .brand-word small{color:var(--muted)}.mobile-menu{border:1px solid var(--line);background:#fff;padding:8px 10px;border-radius:6px}.checkin-layout,.admin-grid,.login-wrap{grid-template-columns:1fr}.login-wrap{min-height:auto}.login-story{min-height:310px}.login-circuit{left:35px}.stats-grid{grid-template-columns:repeat(2,1fr)}}
@media (max-width: 575px){.main-area{padding:16px}.screen-head{margin-bottom:20px}.screen-head .date-capsule{display:none}.home-hub{padding-top:18px}.home-grid{grid-template-columns:1fr}.home-card{min-height:245px}.scanner-panel{padding:19px}.scanner-panel{min-height:560px}.signal-stage{min-height:290px}.stats-grid{grid-template-columns:1fr 1fr}.stat-card{padding:14px;min-height:110px}.stat-number{font-size:1.45rem;margin-top:13px}.history-metrics{grid-template-columns:1fr}.history-metric{border-right:0;border-bottom:1px solid var(--line)}.filter-line{align-items:stretch;flex-direction:column}.filter-line select{max-width:none}.timeline-card{padding:11px}.timeline-card time{font-size:.62rem}.login-story{padding:36px 29px}.login-form{padding:42px 25px}.event-panel{margin-top:16px}}
@media (prefers-reduced-motion: no-preference){.scan-core{animation:pulse 2.2s infinite}.side-link{transition:.2s ease}@keyframes pulse{50%{box-shadow:0 0 0 17px rgba(109,16,33,.06),0 0 0 31px rgba(109,16,33,.025)}}}
.scan-core.scan-success { background: var(--good); box-shadow:0 0 0 11px rgba(22,131,95,.10),0 0 0 27px rgba(22,131,95,.055); }
@media (max-width:575px){.scan-actions{align-items:flex-start;flex-direction:column;gap:7px}}
@media (max-width:991px){.landing-nav,.landing-hero,.landing-flow{width:min(calc(100% - 40px),720px)}.landing-hero,.landing-flow{grid-template-columns:1fr}.landing-hero{margin-top:38px}.landing-copy h1{font-size:clamp(3.1rem,11vw,5.6rem)}.landing-signal{min-height:420px}.landing-flow{gap:35px}.landing-steps{max-width:650px}}
@media (max-width:575px){.landing-nav,.landing-hero,.landing-flow{width:calc(100% - 32px)}.landing-nav{min-height:72px}.landing-nav nav{gap:12px}.landing-nav nav>a:not(.landing-admin-link){display:none}.landing-copy h1{font-size:3.2rem}.landing-copy>p{font-size:.87rem}.landing-signal{min-height:390px;padding:19px}.landing-radar{height:215px}.landing-flow{margin-top:68px}.landing-steps{grid-template-columns:1fr;gap:5px}.landing-steps article{padding:28px 0 12px}.landing-steps i{margin:7px 0}.landing-steps p{max-width:310px}}
.btn-wine { color:#fff; background-color:#7a1226; border-color:#7a1226; }.btn-wine:hover,.btn-wine:focus { color:#fff; background-color:#4f0b18; border-color:#4f0b18; box-shadow:0 0 0 .22rem rgba(122,18,38,.16); }.landing-secondary { color:#621023; background:#fffdfb; border:1px solid #8b3545; font-weight:700; }.landing-secondary:hover,.landing-secondary:focus { color:#fff; background:#6d1021; border-color:#6d1021; box-shadow:0 0 0 .22rem rgba(109,16,33,.12); }.landing-copy>p { color:#554346; }.landing-note { color:#594a4c; }.landing-note .data { color:#735e61; }.landing-nav .landing-admin-link:hover { color:#fff; background:var(--wine); border-color:var(--wine); }.landing-steps p { color:#5e4c4f; }
.landing-copy h1 { font-size:clamp(2.9rem,5.45vw,5.35rem); line-height:1.02; letter-spacing:-.045em; }.landing-copy>p { max-width:490px; font-size:.96rem; line-height:1.78; }.landing-actions .btn { font-size:.84rem; line-height:1.35; }.landing-signal-head .eyebrow { font-size:.62rem; }.landing-signal-list div { font-size:.78rem; }.landing-signal-list b { font-size:.72rem; }.landing-flow h2 { font-size:clamp(1.55rem,2.1vw,2rem); line-height:1.25; letter-spacing:-.035em; }.landing-steps h3 { font-size:.95rem; }.landing-steps p { font-size:.76rem; line-height:1.65; }.landing-radar-core i { transform:scaleX(.92); }
@media (max-width:991px){.landing-copy h1{font-size:clamp(3rem,10vw,4.9rem)}}
@media (max-width:575px){.landing-copy h1{font-size:3.15rem;line-height:1.03;letter-spacing:-.04em}.landing-copy>p{font-size:.88rem}}
.point-modal { border:0; border-radius:0; box-shadow:0 24px 80px rgba(57,7,17,.2); }.point-modal .modal-header { padding:30px 32px 0; align-items:flex-start; }.point-modal h2 { margin:5px 0 5px; font-size:1.55rem; font-weight:800; letter-spacing:-.045em; }.point-modal .modal-header p { color:var(--muted); font-size:.78rem; margin:0; }.point-modal .modal-body { padding:22px 32px 32px; }.point-choice-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:10px; }.point-choice { min-height:165px; padding:18px; display:flex; flex-direction:column; align-items:flex-start; text-decoration:none; color:var(--ink); border:1px solid var(--line); background:#fffdfa; transition:background .18s ease,border-color .18s ease,transform .18s ease; }.point-choice:hover,.point-choice:focus { color:var(--wine); border-color:var(--wine); background:var(--blush); transform:translateY(-2px); }.point-choice-icon { width:35px;height:35px;display:grid;place-items:center;background:var(--wine);color:white;margin-bottom:auto;font-size:1rem; }.point-choice strong { font-size:.82rem; font-weight:800; }.point-choice small { display:block; margin-top:3px; color:var(--muted); font:.63rem 'DM Mono'; }.point-choice>i { align-self:flex-end; color:var(--wine); font-size:1.25rem; margin-top:10px; }
@media (max-width:575px){.point-modal .modal-header{padding:24px 22px 0}.point-modal .modal-body{padding:18px 22px 24px}.point-choice-grid{grid-template-columns:1fr}.point-choice{min-height:96px;display:grid;grid-template-columns:43px 1fr auto;align-items:center;gap:10px}.point-choice-icon{margin:0}.point-choice>i{margin:0;align-self:center}}
.point-directory { max-width:1160px; }.point-directory-tools { display:flex; align-items:center; justify-content:space-between; gap:16px; margin:-7px 0 24px; }.point-directory-tools .input-group { width:min(100%,420px); }.point-directory-tools .form-control { padding:10px 12px; }.point-result-count { color:var(--muted); font:.7rem 'DM Mono'; }.point-directory-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:14px; }.directory-card { min-height:235px; padding:21px; display:flex; flex-direction:column; align-items:flex-start; position:relative; text-decoration:none; color:var(--ink); background:#fff; border:1px solid var(--line); transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease; }.directory-card:hover,.directory-card:focus { color:var(--ink); border-color:#bd7180; box-shadow:0 13px 35px rgba(57,7,17,.09); transform:translateY(-3px); }.directory-card-featured { border-color:var(--wine); background:linear-gradient(135deg,#fff 0%,#fff4f1 100%); }.directory-icon { width:38px;height:38px;display:grid;place-items:center;background:var(--blush);color:var(--wine);font-size:1.05rem; }.directory-card-featured .directory-icon { background:var(--wine);color:#fff; }.directory-status { position:absolute;right:17px;top:20px;color:var(--good);font-size:.64rem;font-weight:700; }.directory-status i { font-size:.48rem;margin-right:3px; }.directory-card h2 { margin:24px 0 4px;font-size:1.05rem;font-weight:800;letter-spacing:-.035em; }.directory-card p { color:var(--muted);font-size:.73rem;line-height:1.6;margin:0; }.directory-card>div { display:flex;gap:6px;flex-wrap:wrap;margin-top:auto; }.directory-card>div span { padding:4px 7px;background:#f7edeb;color:#795e62;font:.6rem 'DM Mono'; }.directory-card>b { display:block;margin-top:14px;color:var(--wine);font-size:.72rem; }.directory-card>b i { margin-left:4px; }.point-empty { padding:28px 0;color:var(--muted);font-size:.82rem; }
@media (max-width:991px){.point-directory-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:575px){.point-directory-tools{align-items:stretch;flex-direction:column;margin-bottom:16px}.point-directory-tools .input-group{width:100%}.point-directory-grid{grid-template-columns:1fr}.directory-card{min-height:210px}}
@media (max-width:991px){.public-nav{width:calc(100% - 40px)}.public-main{padding:26px 20px}}
@media (max-width:575px){.public-nav{width:calc(100% - 32px);min-height:70px}.public-nav nav{gap:1px}.public-nav nav a{padding:7px 6px;font-size:.66rem}.public-nav nav a i{display:none}.public-nav .public-admin-link{margin-left:2px;padding-left:9px}.public-main{padding:20px 16px}.public-main .screen-head{margin-top:4px}}
.brand { gap:12px; }.brand-mark { width:40px; height:40px; font-size:20px; }.brand-word { font-size:.92rem; line-height:1.1; letter-spacing:.055em; }.brand-word small { margin-top:2px; font-size:.59rem; letter-spacing:.12em; }.eyebrow { font-size:.67rem; letter-spacing:.11em; }.landing-copy h1 { font-size:clamp(2.8rem,5vw,4.85rem); line-height:1.06; letter-spacing:-.035em; }.landing-copy>p { max-width:500px; font-size:1rem; line-height:1.75; }.landing-actions { gap:12px; margin-top:30px; }.landing-actions .btn { min-height:48px; padding:12px 20px; font-size:.9rem; }.btn-wine { padding:12px 18px; font-size:.9rem; }.landing-note { font-size:.76rem; }.landing-note .data { font-size:.67rem; }.landing-nav nav a,.public-nav nav a { font-size:.8rem; }.public-nav .public-admin-link { padding-left:17px; }.screen-head h1 { letter-spacing:-.035em; }
@media (max-width:575px){.brand{gap:9px}.brand-mark{width:34px;height:34px;font-size:18px}.brand-word{font-size:.82rem}.brand-word small{font-size:.54rem}.landing-copy h1{font-size:3rem;line-height:1.07;letter-spacing:-.025em}.landing-actions .btn{min-height:44px;padding:10px 15px;font-size:.82rem}.public-nav nav a{font-size:.64rem}}
.checkin-layout { grid-template-columns:minmax(0,1fr) minmax(330px,.43fr); align-items:stretch; }.checkin-terminal-zone { display:grid; grid-template-columns:minmax(0,1.22fr) minmax(265px,.78fr); gap:22px; }.checkin-terminal-zone .scanner-panel,.checkin-terminal-zone .camera-card { min-height:570px; }.checkin-terminal-zone .camera-card { border-radius:16px; }.checkin-log-panel { min-height:570px; border-radius:16px; overflow:hidden; display:flex; flex-direction:column; }.checkin-log-panel .event-head { padding:18px; align-items:flex-start; }.checkin-log-panel .event-head small { display:block; margin-top:3px; color:var(--muted); font: .64rem 'DM Mono'; font-weight:400; }.event-scroll { overflow-y:auto; scrollbar-color:#c9959b #f8efed; scrollbar-width:thin; }.event-scroll::-webkit-scrollbar{width:7px}.event-scroll::-webkit-scrollbar-track{background:#f8efed}.event-scroll::-webkit-scrollbar-thumb{background:#c9959b;border-radius:9px}.checkin-log-panel .event-row { padding:14px 16px; }.checkin-log-panel .event-detail { max-width:160px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }.checkin-log-panel .event-time { flex-shrink:0; }
@media (max-width:991px){.checkin-terminal-zone{grid-template-columns:minmax(0,1.15fr) minmax(250px,.85fr)}.checkin-terminal-zone .scanner-panel,.checkin-terminal-zone .camera-card,.checkin-log-panel{min-height:500px}}
@media (max-width:767px){.checkin-layout,.checkin-terminal-zone{grid-template-columns:1fr}.checkin-terminal-zone .scanner-panel{min-height:520px}.checkin-terminal-zone .camera-card{min-height:300px}.checkin-log-panel{min-height:0;max-height:450px}.event-scroll{max-height:390px}}
.checkin-log-panel { height:570px; }.event-scroll { flex:1; }.event-scroll[tabindex] { outline:none; }
@media (max-width:991px){.checkin-log-panel{height:500px}}
@media (max-width:767px){.checkin-log-panel{height:auto;max-height:450px}}
@media (min-width:992px){.checkin-layout{grid-template-columns:minmax(0,1fr) minmax(340px,.46fr)}.checkin-terminal-zone{grid-template-columns:1fr;grid-template-rows:500px 270px}.checkin-terminal-zone .scanner-panel{min-height:500px}.checkin-terminal-zone .camera-card{min-height:270px}.checkin-log-panel{height:792px;min-height:792px}}
@media (max-width:991px){.checkin-terminal-zone{grid-template-columns:1fr}.checkin-terminal-zone .scanner-panel{min-height:470px}.checkin-terminal-zone .camera-card{min-height:270px}.checkin-log-panel{height:auto;min-height:430px;max-height:500px}}
@media (min-width:992px){.checkin-layout{grid-template-columns:repeat(2,minmax(0,1fr));gap:24px}.checkin-terminal-zone{grid-template-rows:480px 290px;gap:24px}.checkin-terminal-zone .scanner-panel{min-height:480px}.checkin-terminal-zone .camera-card{min-height:290px}.checkin-log-panel{height:794px;min-height:794px}}
@media (min-width:992px){.checkin-terminal-zone{grid-template-rows:290px 480px}.checkin-terminal-zone .camera-card{order:-1;min-height:290px}.checkin-terminal-zone .scanner-panel{min-height:480px}}
.checkin-terminal-zone .camera-card{order:-1}
@media (min-width:992px){.checkin-terminal-zone{grid-template-rows:385px 385px}.checkin-terminal-zone .camera-card,.checkin-terminal-zone .scanner-panel{min-height:385px}}
@media (min-width:992px){.checkin-terminal-zone .scanner-panel{height:385px;padding:20px}.checkin-terminal-zone .signal-stage{min-height:205px;margin:8px 0 10px}.checkin-terminal-zone .scan-core{width:88px;height:88px}.checkin-terminal-zone .scan-core i{font-size:2.3rem}.checkin-terminal-zone .scan-instruction{margin-top:-52px}.checkin-terminal-zone .scan-instruction h2{font-size:1rem}.checkin-terminal-zone .scan-instruction p{font-size:.72rem}.checkin-terminal-zone .scan-actions{padding-bottom:10px}.checkin-terminal-zone .scanner-bottom{padding-top:12px}}
.role-management{max-width:1180px}.role-table-panel{margin-top:0;padding:0;overflow:hidden}.role-table-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;padding:23px 23px 18px;border-bottom:1px solid var(--line)}.role-table-note{padding:7px 10px;background:#fff5df;color:#8a5a10;font-size:.69rem;border:1px solid #f0d59d}.role-table{margin:0}.role-table thead th{padding:14px 20px;background:#fcf8f7}.role-table td{padding:17px 20px}.role-avatar{display:inline-grid;place-items:center;width:34px;height:34px;background:var(--blush);color:var(--wine);vertical-align:middle}.role-table strong{font-size:.82rem}.role-table small{display:block;margin-top:3px;color:var(--muted);font:.6rem 'DM Mono';letter-spacing:.06em}.role-permission-list{display:flex;flex-wrap:wrap;gap:5px}.role-date{font-size:.67rem;color:var(--muted)}.role-empty{text-align:center!important;padding:55px!important;color:var(--muted)}.role-empty i,.role-empty strong,.role-empty span{display:block}.role-empty i{font-size:1.8rem;color:var(--wine);margin-bottom:10px}.role-empty strong{color:var(--ink);font-size:.88rem}.role-empty span{font-size:.72rem;margin-top:4px}.role-modal{border:0;border-radius:0;box-shadow:0 24px 80px rgba(57,7,17,.2)}.role-modal .modal-header{padding:30px 32px 0;border:0;align-items:flex-start}.role-modal h2{margin:5px 0;font-size:1.55rem;font-weight:800;letter-spacing:-.045em}.role-modal .modal-header p{margin:0;color:var(--muted);font-size:.78rem}.role-modal .modal-body{padding:25px 32px}.role-modal .modal-footer{padding:0 32px 30px;border:0}.permission-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.permission-option{position:relative;display:grid;grid-template-columns:22px 1fr;column-gap:9px;padding:14px;border:1px solid var(--line);cursor:pointer;background:#fffdfa;transition:.18s ease}.permission-option:hover{border-color:#bd7180;background:#fff7f5}.permission-option input{position:absolute;opacity:0}.permission-option>span{width:19px;height:19px;border:1px solid #c7b5b5;display:grid;place-items:center;color:transparent;grid-row:span 2}.permission-option b{font-size:.76rem}.permission-option small{color:var(--muted);font:.6rem 'DM Mono';margin-top:2px}.permission-option input:checked+span{background:var(--wine);border-color:var(--wine);color:#fff}.permission-option:has(input:focus-visible){outline:3px solid rgba(122,18,38,.2);outline-offset:2px}.swal2-popup{font-family:'Noto Sans Thai',sans-serif}.swal2-title{font-weight:800!important}.swal2-confirm,.swal2-cancel{font-weight:700!important}@media(max-width:767px){.role-table-head{padding:19px 16px;display:block}.role-table-note{display:inline-block;margin-top:12px}.role-table td,.role-table thead th{padding:14px 12px}.role-table th:nth-child(3),.role-table td:nth-child(3){display:none}.permission-grid{grid-template-columns:1fr}.role-modal .modal-header{padding:24px 22px 0}.role-modal .modal-body{padding:20px 22px}.role-modal .modal-footer{padding:0 22px 24px}}
.role-table-tools{display:flex;align-items:center;gap:10px;padding:14px 23px;border-bottom:1px solid var(--line);background:#fffdfa}.role-table-tools .input-group{max-width:430px}.role-table-tools .form-control{padding:9px 11px}.role-per-page{display:flex;align-items:center;gap:7px;margin-left:auto;white-space:nowrap;color:var(--muted);font-size:.72rem}.role-per-page .form-select{width:72px}.role-table-footer{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 23px;border-top:1px solid var(--line);color:var(--muted);font:.68rem 'DM Mono'}.role-pagination{gap:4px}.role-pagination .page-link{display:grid;place-items:center;min-width:32px;height:32px;padding:0;border-color:var(--line);color:var(--wine);font:500 .69rem 'DM Mono'}.role-pagination .page-item.active .page-link{background:var(--wine);border-color:var(--wine)}.role-pagination .page-item.disabled .page-link{color:#c9bdbd;background:#f8f3f2}@media(max-width:767px){.role-table-tools{padding:13px 16px;flex-wrap:wrap}.role-table-tools .input-group{max-width:none;flex-basis:100%}.role-per-page{margin-left:auto}.role-table-footer{padding:13px 16px;display:block}.role-pagination{margin-top:11px}.role-table-footer>span{font-size:.62rem}}
:root{--brand-primary:#7a1226;--brand-primary-hover:#5d0d1c;--brand-primary-rgb:122,18,38;--bs-primary:var(--brand-primary);--bs-primary-rgb:var(--brand-primary-rgb);--bs-primary-text-emphasis:#4a0916;--bs-primary-bg-subtle:#f8e7e4;--bs-primary-border-subtle:#e9bdc4;--bs-link-color:var(--brand-primary);--bs-link-hover-color:var(--brand-primary-hover);--bs-link-color-rgb:var(--brand-primary-rgb);--bs-link-hover-color-rgb:93,13,28}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:var(--brand-primary);--bs-btn-border-color:var(--brand-primary);--bs-btn-hover-color:#fff;--bs-btn-hover-bg:var(--brand-primary-hover);--bs-btn-hover-border-color:var(--brand-primary-hover);--bs-btn-focus-shadow-rgb:151,65,82;--bs-btn-active-color:#fff;--bs-btn-active-bg:#4a0916;--bs-btn-active-border-color:#4a0916;--bs-btn-disabled-bg:var(--brand-primary);--bs-btn-disabled-border-color:var(--brand-primary)}.btn-outline-primary{--bs-btn-color:var(--brand-primary);--bs-btn-border-color:var(--brand-primary);--bs-btn-hover-color:#fff;--bs-btn-hover-bg:var(--brand-primary);--bs-btn-hover-border-color:var(--brand-primary);--bs-btn-focus-shadow-rgb:var(--brand-primary-rgb);--bs-btn-active-color:#fff;--bs-btn-active-bg:var(--brand-primary-hover);--bs-btn-active-border-color:var(--brand-primary-hover);--bs-btn-disabled-color:var(--brand-primary);--bs-btn-disabled-border-color:var(--brand-primary)}.btn-link,.link-primary{--bs-btn-color:var(--brand-primary);--bs-btn-hover-color:var(--brand-primary-hover)}.text-primary{color:var(--brand-primary)!important}.bg-primary{background-color:var(--brand-primary)!important}.border-primary{border-color:var(--brand-primary)!important}.form-control:focus,.form-select:focus{border-color:#b75a69;box-shadow:0 0 0 .25rem rgba(var(--brand-primary-rgb),.16)}.form-check-input:checked{background-color:var(--brand-primary);border-color:var(--brand-primary)}.form-check-input:focus{border-color:#b75a69;box-shadow:0 0 0 .25rem rgba(var(--brand-primary-rgb),.16)}.nav-pills{--bs-nav-pills-link-active-bg:var(--brand-primary)}.dropdown-item.active,.dropdown-item:active{background-color:var(--brand-primary)}.list-group{--bs-list-group-active-bg:var(--brand-primary);--bs-list-group-active-border-color:var(--brand-primary)}.pagination{--bs-pagination-color:var(--brand-primary);--bs-pagination-hover-color:var(--brand-primary-hover);--bs-pagination-focus-color:var(--brand-primary-hover);--bs-pagination-focus-box-shadow:0 0 0 .25rem rgba(var(--brand-primary-rgb),.16);--bs-pagination-active-bg:var(--brand-primary);--bs-pagination-active-border-color:var(--brand-primary)}.progress-bar{background-color:var(--brand-primary)}
.dashboard-page{max-width:1120px}.dashboard-intro{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;padding:4px 0 26px;border-bottom:1px solid var(--line)}.dashboard-intro h1{margin:6px 0 3px;font-size:clamp(1.9rem,3.3vw,3rem);font-weight:800;letter-spacing:-.065em}.dashboard-intro p{margin:0;color:var(--muted);font-size:.84rem}.dashboard-session{display:grid;grid-template-columns:auto 1fr;align-items:center;column-gap:7px;padding-bottom:4px;color:#8c7175;font:.65rem 'DM Mono';letter-spacing:.08em;white-space:nowrap}.dashboard-session .live-dot{grid-row:span 2;margin:0}.dashboard-session b{grid-column:2;color:var(--wine);font-weight:500;letter-spacing:0}.dashboard-metrics{display:grid;grid-template-columns:repeat(3,1fr);margin:0 0 26px;border-bottom:1px solid var(--line)}.dashboard-metrics article{min-height:116px;padding:20px 23px 18px;border-right:1px solid var(--line);background:#fff}.dashboard-metrics article:first-child{border-left:1px solid var(--line)}.dashboard-metrics span,.dashboard-metrics small{display:block}.dashboard-metrics span{color:var(--muted);font-size:.68rem}.dashboard-metrics strong{display:block;margin:9px 0 5px;font:500 2rem 'DM Mono';letter-spacing:-.09em;color:var(--wine)}.dashboard-metrics small{font-size:.65rem;color:#8a7578}.dashboard-metrics .dashboard-metric-role strong{font:700 1rem 'Noto Sans Thai';letter-spacing:-.025em;padding-top:8px}.dashboard-content-grid{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(330px,.95fr);gap:18px}.access-card{padding:25px 26px;background:var(--wine-deep);color:#fff8f5;position:relative;overflow:hidden}.access-card:after{content:'GR';position:absolute;right:-10px;bottom:-44px;color:rgba(255,255,255,.04);font:700 10rem 'DM Mono';letter-spacing:-.16em}.access-card-head{display:flex;justify-content:space-between;align-items:flex-start;position:relative}.access-card-head .eyebrow{color:#d29ea3}.access-card h2,.dashboard-actions h2{margin:5px 0 0;font-size:1.2rem;font-weight:800;letter-spacing:-.04em}.access-card-head>i{font-size:1.4rem;color:#f4afb2}.access-card>p{position:relative;margin:28px 0 14px;color:#dfc0c2;font-size:.79rem}.access-card>p b{color:#fff}.access-permissions{position:relative;display:flex;flex-wrap:wrap;gap:6px}.access-permissions span{padding:5px 8px;border:1px solid rgba(255,255,255,.2);font:.62rem 'DM Mono';color:#f7d6d8}.dashboard-actions{border:1px solid var(--line);background:#fff}.dashboard-actions-head{padding:22px 23px 14px}.dashboard-actions a{display:grid;grid-template-columns:35px 1fr auto;align-items:center;gap:11px;padding:15px 23px;color:var(--ink);text-decoration:none;border-top:1px solid var(--line);transition:background .18s ease}.dashboard-actions a:hover{background:#fff6f4;color:var(--wine)}.dashboard-actions a>b,.dashboard-actions a>span small{display:block}.dashboard-actions a>b{font-size:.8rem}.dashboard-actions a small{margin-top:2px;color:var(--muted);font-size:.65rem}.dashboard-actions>a>i{font-size:.86rem;color:var(--wine)}.dashboard-action-icon{display:grid;place-items:center;width:35px;height:35px;background:var(--blush);color:var(--wine)}.dashboard-no-access{margin:0;padding:18px 23px;border-top:1px solid var(--line);color:var(--muted);font-size:.75rem}@media(max-width:767px){.dashboard-intro{display:block;padding-bottom:20px}.dashboard-session{margin-top:17px}.dashboard-metrics{grid-template-columns:1fr}.dashboard-metrics article,.dashboard-metrics article:first-child{min-height:auto;padding:16px;border-left:1px solid var(--line);border-bottom:1px solid var(--line)}.dashboard-metrics strong{display:inline-block;margin:7px 10px 0 0;font-size:1.55rem}.dashboard-metrics small{display:inline-block}.dashboard-metrics .dashboard-metric-role strong{padding:0;font-size:.95rem}.dashboard-content-grid{grid-template-columns:1fr}.access-card{padding:22px}.dashboard-actions-head{padding:19px}.dashboard-actions a{padding:14px 19px}}
.role-command-bar{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:25px;padding-bottom:22px;border-bottom:1px solid var(--line)}.role-command-copy h1{margin:5px 0 3px;font-size:clamp(1.85rem,3vw,2.65rem);font-weight:800;letter-spacing:-.06em}.role-command-copy p{margin:0;color:var(--muted);font-size:.83rem}.role-command-actions{display:flex;align-items:center;gap:8px}.role-count-chip{padding:8px 10px;background:#fff7f5;border:1px solid var(--line);color:#86686d;font:.65rem 'DM Mono';white-space:nowrap}.role-count-chip b{color:var(--wine);font-weight:500}.role-table-panel{box-shadow:0 14px 38px rgba(57,7,17,.045)}.role-table-head{padding:21px 24px 16px}.role-table-head .panel-title{font-size:1.05rem}.role-table-note{border:0;background:#f8efed;color:#89555d}.role-table thead th{padding:13px 20px;background:#fffaf9;color:#957a7e}.role-table td{padding:18px 20px}.role-data-row{transition:background .15s ease}.role-data-row:hover{background:#fff9f8}.role-avatar{width:37px;height:37px;background:#f7e3e0;border-radius:50% 50% 7px 50%;font-size:.95rem}.role-permission-list{max-width:290px}.role-user-count{display:inline-flex;align-items:center;gap:6px;padding:5px 8px;background:#f7f4f2;color:#6d575a;font:.67rem 'DM Mono'}.role-user-count i{color:var(--wine);font-size:.76rem}.role-date{display:block;color:#6c595c}.role-updated-by{display:block;margin-top:3px;color:#a28c8f;font:.6rem 'DM Mono'}.role-edit-button{border-color:#d8c5c6;color:#684c51}.role-edit-button:hover{background:var(--wine);border-color:var(--wine);color:#fff}@media(max-width:767px){.role-command-bar{display:block;margin-bottom:19px;padding-bottom:18px}.role-command-actions{margin-top:16px;flex-wrap:wrap}.role-table th:nth-child(3),.role-table td:nth-child(3){display:table-cell}.role-table th:nth-child(4),.role-table td:nth-child(4){display:none}.role-table td,.role-table thead th{padding:14px 11px}.role-permission-list{max-width:180px}.role-command-actions .btn{font-size:.74rem}}

/* Role registry: a compact, editorial access-control workspace. */
.role-registry{max-width:1180px}.role-registry .role-hero{position:relative;isolation:isolate;overflow:hidden;min-height:194px;padding:31px 34px;display:flex;align-items:flex-end;justify-content:space-between;gap:30px;border-radius:20px;background:linear-gradient(122deg,#31040d 0%,#641124 52%,#9e263e 100%);box-shadow:0 22px 52px rgba(57,7,17,.18);color:#fffaf8}.role-registry .role-hero:before{content:'';position:absolute;z-index:-1;inset:auto -115px -280px auto;width:490px;height:490px;border:1px solid rgba(255,255,255,.18);border-radius:50%;box-shadow:0 0 0 48px rgba(255,255,255,.035),0 0 0 110px rgba(255,255,255,.025)}.role-registry .role-hero:after{content:'ACCESS';position:absolute;z-index:-1;top:16px;right:30px;color:rgba(255,255,255,.055);font:700 clamp(3.5rem,9vw,8.2rem)/.8 'DM Mono';letter-spacing:-.11em}.role-hero-copy{position:relative;max-width:510px}.role-hero-kicker,.role-panel-kicker{display:inline-flex;align-items:center;gap:7px;color:#efb8bc;font:500 .65rem 'DM Mono';letter-spacing:.12em}.role-hero h1{margin:11px 0 9px;font-size:clamp(2.25rem,4vw,3.55rem);font-weight:800;letter-spacing:-.085em;line-height:.87}.role-hero h1 em{font-style:normal;color:#ffc7c5}.role-hero p{margin:0;color:#ead2d1;font-size:.82rem;line-height:1.7}.role-hero-meta{position:relative;display:flex;align-items:flex-end;gap:14px}.role-hero-stat{min-width:132px;padding:11px 13px 10px;border:1px solid rgba(255,255,255,.22);background:rgba(20,0,5,.16);backdrop-filter:blur(8px)}.role-hero-stat span,.role-hero-stat small{display:block;color:#e7bfc1;font:.59rem 'DM Mono';letter-spacing:.08em}.role-hero-stat b{display:block;margin:2px 0 -1px;font:500 1.8rem 'DM Mono';letter-spacing:-.09em;color:#fff}.role-hero-actions{display:flex;gap:7px}.role-hero-actions .btn{display:inline-flex;align-items:center;gap:7px;padding:10px 12px;border-radius:8px;font-size:.72rem;font-weight:800;white-space:nowrap}.role-export-button{border:1px solid rgba(255,255,255,.32);color:#fff;background:rgba(255,255,255,.06)}.role-export-button:hover{color:var(--wine);background:#fff}.role-create-button{border:1px solid #ffcac8;background:#fff4f3;color:#651125}.role-create-button:hover{border-color:#fff;background:#fff;color:#3a0711}.role-registry .role-registry-panel{position:relative;margin:-16px 18px 0;border:1px solid #eee0dc;border-radius:16px;overflow:hidden;background:#fffdfb;box-shadow:0 20px 45px rgba(57,7,17,.09)}.role-registry .role-table-head{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;padding:24px 26px 18px;background:linear-gradient(90deg,#fffdfb,#fff8f6)}.role-registry .panel-title{margin:4px 0 3px;font-size:1.16rem;font-weight:800;letter-spacing:-.045em}.role-registry .panel-subtitle{margin:0;color:#836f72;font-size:.73rem}.role-registry .role-table-note{display:inline-flex;align-items:center;gap:6px;margin:6px 0 0;padding:7px 9px;border:1px solid #f0dedd;background:#fff4f2;color:#8f535d;font-size:.64rem}.role-registry .role-table-tools{gap:12px;padding:13px 26px;border-top:1px solid #f2e6e2;border-bottom:1px solid #f2e6e2;background:#fff}.role-registry .role-search{height:38px;max-width:440px;flex:1 1 320px;display:flex;align-items:center;border:1px solid #e6d8d4;border-radius:8px;background:#fffdfc;overflow:hidden;transition:.2s ease}.role-registry .role-search:focus-within{border-color:#a24959;box-shadow:0 0 0 3px rgba(122,18,38,.11)}.role-registry .role-search>i{margin-left:12px;color:#927579;font-size:.82rem}.role-registry .role-search input{min-width:0;flex:1;padding:0 9px;border:0;outline:0;background:transparent;color:var(--ink);font-size:.76rem}.role-registry .role-search button{align-self:stretch;padding:0 13px;border:0;border-left:1px solid #eadbd8;background:#fff7f5;color:var(--wine);font-size:.69rem;font-weight:800}.role-registry .role-search button:hover{background:var(--wine);color:white}.role-clear-search{color:#8c6067;text-decoration:none;font-size:.68rem;font-weight:700}.role-clear-search:hover{color:var(--wine)}.role-registry .role-per-page{gap:9px;margin-left:auto;color:#887277;font-size:.68rem}.role-registry .role-per-page .form-select{height:31px;width:63px;border-color:#e4d5d1;color:var(--wine);font:500 .67rem 'DM Mono'}.role-registry .role-table thead th{padding:12px 20px;border:0;background:#fbf5f3;color:#9a7b7f;font:.62rem 'DM Mono';letter-spacing:.055em;text-transform:uppercase}.role-registry .role-table td{padding:17px 20px;border-color:#f1e7e4;background:transparent}.role-registry .role-data-row{transition:background .18s ease,transform .18s ease}.role-registry .role-data-row:hover{background:#fff8f7;box-shadow:inset 3px 0 0 var(--signal)}.role-registry .role-avatar{width:39px;height:39px;border:0;border-radius:13px 13px 5px 13px;background:linear-gradient(145deg,#f6dfdd,#f9efed);color:#7a1226;box-shadow:inset 0 0 0 1px rgba(122,18,38,.06)}.role-registry .role-avatar+div strong{font-size:.8rem;letter-spacing:-.015em}.role-registry .role-avatar+div small{display:block;margin-top:2px;color:#a18488;font:.57rem 'DM Mono';letter-spacing:.05em}.role-registry .role-permission-list{max-width:310px;gap:5px}.role-registry .tag.tag-wine{padding:4px 6px;border:1px solid #eed6d5;border-radius:4px;background:#fff5f3;color:#7b3641;font-size:.61rem}.role-registry .role-user-count{min-width:34px;justify-content:center;padding:5px 7px;border:1px solid #e9dedb;border-radius:999px;background:#fff;color:#6a5357;font:.65rem 'DM Mono'}.role-registry .role-date{font-size:.67rem}.role-registry .role-updated-by{font-size:.58rem}.role-registry .role-row-actions{padding-right:18px}.role-registry .role-icon-button{width:32px;height:32px;padding:0;border-radius:8px;border:1px solid #e3d3d0;background:#fff;color:#724c54;transition:.16s ease}.role-registry .role-icon-button:hover{transform:translateY(-1px);background:var(--wine);border-color:var(--wine);color:#fff}.role-registry .role-delete-button{margin-left:4px;border-color:#efdcda;color:#b34b58}.role-registry .role-delete-button:hover{background:#b62c42;border-color:#b62c42}.role-registry .role-empty{padding:54px 20px!important}.role-registry .role-table-footer{padding:14px 26px;background:#fffdfc;color:#8b7276}.role-registry .role-pagination .page-link{border-radius:6px}.role-modal{border:0;border-radius:18px;overflow:hidden;box-shadow:0 24px 70px rgba(57,7,17,.24)}.role-modal .modal-header{padding:27px 30px 0;background:linear-gradient(110deg,#fffdfb,#fff4f2)}.role-modal .modal-header h2{font-size:1.38rem}.role-modal .modal-body{padding:25px 30px}.role-modal .modal-footer{padding:0 30px 27px}.permission-option{border-radius:9px}.permission-option:has(input:checked){border-color:#b85b69;background:#fff7f5;box-shadow:0 5px 13px rgba(122,18,38,.07)}
@media(max-width:850px){.role-registry .role-hero{align-items:flex-start;flex-direction:column;min-height:0}.role-hero-meta{width:100%;justify-content:space-between}.role-registry .role-registry-panel{margin:-10px 10px 0}.role-registry .role-table-head{padding:22px}.role-registry .role-table-tools{padding:13px 22px}.role-registry .role-table td,.role-registry .role-table thead th{padding-left:14px;padding-right:14px}}
@media(max-width:640px){.role-registry .role-hero{padding:26px 22px;border-radius:15px}.role-registry .role-hero:after{right:14px;top:20px;font-size:4rem}.role-hero h1{font-size:2.5rem}.role-hero-meta{align-items:stretch;gap:9px;flex-wrap:wrap}.role-hero-stat{flex:1}.role-hero-actions{width:100%}.role-hero-actions .btn{flex:1;justify-content:center}.role-registry .role-registry-panel{margin:-8px 0 0;border-radius:13px}.role-registry .role-table-head{display:block;padding:20px 17px 15px}.role-registry .role-table-note{margin-top:11px}.role-registry .role-table-tools{padding:12px 17px;gap:10px}.role-registry .role-search{flex-basis:100%;max-width:none}.role-registry .role-per-page{margin-left:auto}.role-registry .role-table thead{display:none}.role-registry .role-table,.role-registry .role-table tbody{display:block}.role-registry .role-table tbody{padding:8px}.role-registry .role-table .role-data-row{display:block;margin-bottom:8px;border:1px solid #eee0dc;border-radius:10px;overflow:hidden;background:#fff}.role-registry .role-table .role-data-row:hover{box-shadow:inset 3px 0 0 var(--signal)}.role-registry .role-table td{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding:11px 13px;border:0;border-bottom:1px solid #f4ebe8;text-align:right!important}.role-registry .role-table td:first-child{display:block;text-align:left!important}.role-registry .role-table td:last-child{border-bottom:0;align-items:center}.role-registry .role-table td:before{content:attr(data-label);flex:none;color:#9b7f83;font:.58rem 'DM Mono';letter-spacing:.06em;text-align:left}.role-registry .role-table td:first-child:before{display:none}.role-registry .role-permission-list{justify-content:flex-end;max-width:210px}.role-registry .role-row-actions form{margin-left:3px}.role-registry .role-table-footer{padding:14px 17px}.role-modal .modal-header{padding:24px 22px 0}.role-modal .modal-body{padding:20px 22px}.role-modal .modal-footer{padding:0 22px 23px}}

/* Deliberately compact control bar: this is an operational table, not a landing page. */
.role-registry .role-hero{min-height:82px;padding:15px 20px;border-radius:12px;background:var(--wine-deep);box-shadow:0 10px 24px rgba(57,7,17,.12);align-items:center}.role-registry .role-hero:before,.role-registry .role-hero:after{display:none}.role-hero-copy{max-width:none;display:flex;align-items:baseline;gap:12px}.role-hero-kicker{display:none}.role-hero h1{margin:0;font-size:1.32rem;line-height:1.1;letter-spacing:-.045em}.role-hero h1 em{color:inherit}.role-hero p{margin:0;padding-left:12px;border-left:1px solid rgba(255,255,255,.23);font-size:.7rem;line-height:1.45;color:#dfc7c7}.role-hero-meta{align-items:center;gap:10px}.role-hero-stat{min-width:auto;display:flex;align-items:baseline;gap:5px;padding:0;border:0;background:transparent;backdrop-filter:none}.role-hero-stat span,.role-hero-stat small{display:none}.role-hero-stat b{margin:0;color:#f4c2c2;font-size:1rem;letter-spacing:-.04em}.role-hero-stat:after{content:'บทบาท';color:#dfc7c7;font-size:.66rem}.role-hero-actions .btn{padding:8px 10px;border-radius:6px;font-size:.67rem}.role-registry .role-registry-panel{margin:12px 0 0;border-radius:12px;box-shadow:0 8px 23px rgba(57,7,17,.06)}.role-registry .role-table-head{padding:18px 21px 13px}.role-registry .role-table-tools{padding:10px 21px}.role-registry .role-table td{padding-top:13px;padding-bottom:13px}.role-registry .role-table-footer{padding:11px 21px}.role-registry .role-empty{padding:38px 20px!important}.role-modal{border-radius:12px}.role-modal .modal-header{padding:22px 25px 0}.role-modal .modal-body{padding:20px 25px}.role-modal .modal-footer{padding:0 25px 22px}
@media(max-width:850px){.role-registry .role-hero{gap:14px}.role-hero-copy{display:block}.role-hero p{margin-top:3px;padding-left:0;border-left:0}.role-registry .role-registry-panel{margin-top:10px}}
@media(max-width:640px){.role-registry .role-hero{min-height:0;padding:15px;border-radius:10px;align-items:flex-start}.role-hero h1{font-size:1.15rem}.role-hero-meta{width:auto;gap:6px}.role-hero-stat{display:none}.role-hero-actions{width:auto}.role-hero-actions .btn{flex:none;padding:8px}.role-hero-actions .btn span{display:none}.role-registry .role-registry-panel{margin-top:8px}.role-registry .role-table-head{padding:16px}.role-registry .role-table-tools{padding:10px 16px}.role-registry .role-table-footer{padding:12px 16px}}

.role-table-head-actions{display:flex;align-items:center;justify-content:flex-end;gap:7px}.role-table-head-actions .btn{display:inline-flex;align-items:center;gap:6px;padding:8px 10px;border-radius:6px;font-size:.67rem;font-weight:800;white-space:nowrap}.role-table-head-actions .role-export-button{border:1px solid #dfcfcb;background:#fff;color:#704d53}.role-table-head-actions .role-export-button:hover{border-color:var(--wine);background:#fff4f2;color:var(--wine)}.role-table-head-actions .role-create-button{border:1px solid var(--wine);background:var(--wine);color:#fff}.role-table-head-actions .role-create-button:hover{border-color:var(--wine-deep);background:var(--wine-deep);color:#fff}@media(max-width:850px){.role-table-head-actions{flex-wrap:wrap}.role-table-head-actions .role-table-note{width:100%;margin:0 0 2px auto}}@media(max-width:640px){.role-table-head-actions{justify-content:flex-start;margin-top:12px}.role-table-head-actions .role-table-note{display:none}.role-table-head-actions .btn{padding:8px 9px}.role-table-head-actions .btn span{display:inline}}
.role-table-head-actions .role-import-button{border:1px solid #d9c9db;background:#fffafb;color:#6c3f73}.role-table-head-actions .role-import-button:hover{border-color:#6c3f73;background:#f8f0f9;color:#542b5b}.member-import-modal .modal-header{align-items:flex-start}.member-import-template{display:flex;align-items:center;justify-content:space-between;gap:13px;padding:12px;border:1px solid #ecdeda;border-radius:9px;background:#fff8f6}.member-import-template>div{display:flex;align-items:center;gap:9px}.member-import-template strong,.member-import-template small{display:block}.member-import-template strong{font-size:.73rem}.member-import-template small{margin-top:2px;color:#8b7175;font-size:.62rem}.member-import-icon{display:grid;place-items:center;width:31px;height:31px;border-radius:8px;background:#f4e2df;color:#8a2639}.member-import-template a{color:var(--wine);font-size:.66rem;font-weight:800;text-decoration:none;white-space:nowrap}.member-import-template a:hover{text-decoration:underline}.member-import-columns{display:flex;flex-wrap:wrap;gap:5px;margin-top:10px}.member-import-columns span{padding:4px 6px;border:1px solid #ecdeda;border-radius:4px;background:#fffdfc;color:#805d63;font:.59rem 'DM Mono'}@media(max-width:640px){.member-import-template{align-items:flex-start;flex-direction:column}.member-import-template a{padding-left:40px}}
.location-scan-button{display:inline-grid!important;place-items:center;margin-right:4px;border-color:#d9c9db!important;background:#fffafb!important;color:#6c3f73!important;vertical-align:middle}.location-scan-button i{display:block;line-height:1}.location-scan-button:hover{border-color:#6d1021!important;background:var(--wine)!important;color:#fff!important}
.status-pill-offline{background:#fff1ed!important;color:#aa4b3f!important}.checkin-scan-form{width:100%}.checkin-scan-form .input-group-text{border-color:#e6d8d4;background:#fff8f6;color:var(--wine)}.checkin-scan-form .form-control{min-width:0;border-color:#e6d8d4;font-family:'DM Mono',monospace}.checkin-scan-form .btn{white-space:nowrap}.checkin-photo-error{display:block;margin-top:7px;color:#b32e43;font-size:.68rem;font-weight:700}.checkin-camera .camera-copy{align-items:center;text-align:center}.checkin-camera .camera-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1}.checkin-camera .recording,.checkin-camera .camera-time{z-index:2}.event-empty{min-height:160px;display:grid;place-items:center;align-content:center;gap:9px;color:#92777b;font-size:.72rem}.event-empty i{font-size:1.55rem;color:#b26a74}@media(max-width:640px){.checkin-scan-form .input-group{display:grid;grid-template-columns:42px minmax(0,1fr)}.checkin-scan-form .input-group .btn{grid-column:1/-1;margin-top:7px;border-radius:6px}.checkin-scan-form .input-group-text{border-radius:6px 0 0 6px}.checkin-scan-form .form-control{border-radius:0 6px 6px 0}}
.checkin-input-panel{display:flex;flex-direction:column}.checkin-input-panel .checkin-input-area{display:block;margin:auto 0;padding:24px 0}.checkin-rfid-input.form-control{height:76px;padding:12px 18px;border:1px solid #dac8c5;border-radius:10px;background:#fffdfc;color:#591525;font:500 1.5rem 'DM Mono',monospace;letter-spacing:.08em;text-align:center;box-shadow:inset 0 0 0 3px #fff5f3}.checkin-rfid-input.form-control:focus{border-color:#9c4251;box-shadow:0 0 0 4px rgba(122,18,38,.1),inset 0 0 0 3px #fff5f3}@media(max-width:640px){.checkin-input-panel .checkin-input-area{padding:20px 0}.checkin-rfid-input.form-control{height:66px;font-size:1.15rem}}
.checkin-terminal-page{min-height:100vh;overflow:hidden;background:#fbf6f3}.checkin-terminal-main{box-sizing:border-box;height:100dvh;min-height:0;padding:clamp(14px,2.4vw,34px);display:flex;align-items:center;overflow:hidden}.checkin-terminal-screen{width:100%;height:100%;max-width:none;margin:auto}.checkin-terminal-screen .checkin-layout{height:100%;min-height:0;grid-template-columns:minmax(0,1.55fr) minmax(300px,.82fr);align-items:stretch}.checkin-terminal-screen .checkin-terminal-zone{min-height:0;grid-template-columns:1fr;grid-template-rows:minmax(172px,.46fr) minmax(0,1.54fr);gap:clamp(12px,1.7vw,22px)}.checkin-terminal-zone .checkin-camera{order:0}.checkin-terminal-screen .scanner-panel,.checkin-terminal-screen .camera-card,.checkin-terminal-screen .checkin-log-panel{height:auto;min-height:0}.checkin-terminal-screen .scanner-panel,.checkin-terminal-screen .camera-card{overflow:hidden}.checkin-terminal-screen .camera-card{aspect-ratio:auto}.checkin-terminal-screen .checkin-log-panel{height:100%;overflow:hidden}.checkin-terminal-screen .event-scroll{min-height:0;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#b46b75 #fbf3f0;scrollbar-gutter:stable}.checkin-terminal-screen .event-scroll::-webkit-scrollbar{width:8px}.checkin-terminal-screen .event-scroll::-webkit-scrollbar-track{background:#fbf3f0;border-left:1px solid #f0e3df}.checkin-terminal-screen .event-scroll::-webkit-scrollbar-thumb{background:#c58a91;border:2px solid #fbf3f0;border-radius:999px}.checkin-terminal-screen .event-scroll:hover::-webkit-scrollbar-thumb{background:#9c4251}
.checkin-terminal-screen .checkin-input-panel{container-type:size;display:grid;grid-template-rows:auto minmax(44px,1fr) auto;padding:clamp(.75rem,1.4cqw,1.15rem);row-gap:clamp(.45rem,3.2cqh,.75rem)}.checkin-terminal-screen .checkin-input-panel:after{width:250px;height:250px;right:-155px;top:-170px;pointer-events:none}.checkin-terminal-screen .scanner-top{align-items:flex-start;gap:.75rem;min-height:0}.checkin-terminal-screen .scanner-title{font-size:clamp(.82rem,5cqh,1.02rem);line-height:1.15;letter-spacing:-.02em}.checkin-terminal-screen .scanner-top small{font-size:clamp(.54rem,2.9cqh,.66rem);line-height:1.1}.checkin-terminal-screen .status-pill{padding:.22rem .5rem;font-size:clamp(.54rem,2.8cqh,.64rem);line-height:1.2}.checkin-terminal-screen .checkin-input-area{display:grid;place-items:center;margin:0;padding:0}.checkin-terminal-screen .checkin-scan-form{width:min(100%,18rem);max-width:18rem;margin-inline:auto}.checkin-terminal-screen .checkin-rfid-input.form-control{height:40px;min-height:0;padding:.35rem .65rem;border-radius:8px;font-size:.88rem;line-height:1.2;letter-spacing:.045em;box-shadow:inset 0 0 0 2px #fff5f3}.checkin-terminal-screen .checkin-rfid-input.form-control:focus{box-shadow:0 0 0 3px rgba(122,18,38,.1),inset 0 0 0 2px #fff5f3}.checkin-terminal-screen .scanner-bottom{position:relative;z-index:1;align-items:flex-end;gap:1rem;padding-top:.55rem;min-height:38px}.checkin-terminal-screen .location,.checkin-terminal-screen .reader{min-width:0;font-size:clamp(.56rem,3cqh,.68rem);line-height:1.25}.checkin-terminal-screen .location strong,.checkin-terminal-screen .reader strong{font-size:clamp(.66rem,3.7cqh,.84rem);line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.checkin-terminal-screen .reader{flex:none}
@media(max-width:767px){.checkin-terminal-main{height:auto;min-height:100dvh;overflow:auto}.checkin-terminal-screen,.checkin-terminal-screen .checkin-layout{height:auto}.checkin-terminal-screen .checkin-layout{grid-template-columns:1fr}.checkin-terminal-screen .checkin-terminal-zone{grid-template-rows:auto minmax(280px,42vh)}.checkin-terminal-screen .checkin-log-panel{height:auto;max-height:none;overflow:visible}.checkin-terminal-screen .event-scroll{overflow:visible}.checkin-terminal-screen .checkin-rfid-input.form-control{height:38px;font-size:.82rem}.checkin-terminal-screen .checkin-scan-form{width:min(100%,16rem);max-width:16rem}}

.role-registry .role-sort{display:inline-flex;align-items:center;gap:5px;color:inherit;text-decoration:none}.role-registry .role-sort i{color:#b59598;font-size:.66rem;transition:color .15s ease,transform .15s ease}.role-registry .role-sort:hover{color:var(--wine)}.role-registry .role-sort:hover i{color:var(--wine);transform:translateY(-1px)}.role-registry th[aria-sort="ascending"] .role-sort,.role-registry th[aria-sort="descending"] .role-sort{color:var(--wine)}.role-registry th[aria-sort="ascending"] .role-sort i,.role-registry th[aria-sort="descending"] .role-sort i{color:var(--wine)}

/* User directory follows the compact data-management pattern of the role registry. */
.user-registry{max-width:1180px}.user-hero{min-height:82px;padding:15px 20px;display:flex;align-items:center;justify-content:space-between;gap:18px;border-radius:12px;background:var(--wine-deep);box-shadow:0 10px 24px rgba(57,7,17,.12);color:#fffaf8}.user-hero-copy{display:flex;align-items:baseline;gap:12px}.user-hero h1{margin:0;font-size:1.32rem;font-weight:800;letter-spacing:-.045em}.user-hero p{margin:0;padding-left:12px;border-left:1px solid rgba(255,255,255,.23);color:#dfc7c7;font-size:.7rem;line-height:1.45}.user-hero-stat{display:flex;align-items:baseline;gap:5px;color:#dfc7c7;font-size:.66rem}.user-hero-stat b{color:#f4c2c2;font:500 1rem 'DM Mono';letter-spacing:-.04em}.user-table-panel{margin-top:12px;padding:0;overflow:hidden;border:1px solid #eee0dc;border-radius:12px;background:#fffdfb;box-shadow:0 8px 23px rgba(57,7,17,.06)}.user-table-head{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;padding:18px 21px 13px;background:linear-gradient(90deg,#fffdfb,#fff8f6)}.user-panel-kicker{display:inline-flex;color:#9d7379;font:500 .62rem 'DM Mono';letter-spacing:.12em}.user-table-head .panel-title{margin:4px 0 3px;font-size:1.16rem;font-weight:800;letter-spacing:-.045em}.user-table-head .panel-subtitle{margin:0;color:#836f72;font-size:.73rem}.user-table-head-actions{display:flex;align-items:center;justify-content:flex-end;gap:7px}.user-table-head-actions .btn{display:inline-flex;align-items:center;gap:6px;padding:8px 10px;border-radius:6px;font-size:.67rem;font-weight:800;white-space:nowrap}.user-table-note{display:inline-flex;align-items:center;gap:6px;margin:0;padding:7px 9px;border:1px solid #f0dedd;background:#fff4f2;color:#8f535d;font-size:.64rem}.user-export-button{border:1px solid #dfcfcb;background:#fff;color:#704d53}.user-export-button:hover{border-color:var(--wine);background:#fff4f2;color:var(--wine)}.user-create-button{border:1px solid var(--wine);background:var(--wine);color:#fff}.user-create-button:hover{border-color:var(--wine-deep);background:var(--wine-deep);color:#fff}.user-table-tools{display:flex;align-items:center;gap:12px;padding:10px 21px;border-top:1px solid #f2e6e2;border-bottom:1px solid #f2e6e2;background:#fff}.user-search{height:38px;max-width:440px;flex:1 1 320px;display:flex;align-items:center;border:1px solid #e6d8d4;border-radius:8px;background:#fffdfc;overflow:hidden;transition:.2s ease}.user-search:focus-within{border-color:#a24959;box-shadow:0 0 0 3px rgba(122,18,38,.11)}.user-search>i{margin-left:12px;color:#927579;font-size:.82rem}.user-search input{min-width:0;flex:1;padding:0 9px;border:0;outline:0;background:transparent;color:var(--ink);font-size:.76rem}.user-search button{align-self:stretch;padding:0 13px;border:0;border-left:1px solid #eadbd8;background:#fff7f5;color:var(--wine);font-size:.69rem;font-weight:800}.user-search button:hover{background:var(--wine);color:#fff}.user-clear-search{color:#8c6067;text-decoration:none;font-size:.68rem;font-weight:700}.user-clear-search:hover{color:var(--wine)}.user-per-page{display:flex;align-items:center;gap:9px;margin-left:auto;color:#887277;font-size:.68rem;white-space:nowrap}.user-per-page .form-select{height:31px;width:63px;border-color:#e4d5d1;color:var(--wine);font:500 .67rem 'DM Mono'}.user-table{margin:0}.user-table thead th{padding:12px 20px;border:0;background:#fbf5f3;color:#9a7b7f;font:.62rem 'DM Mono';letter-spacing:.055em;text-transform:uppercase}.user-table td{padding:13px 20px;border-color:#f1e7e4;background:transparent}.user-data-row{transition:background .18s ease}.user-data-row:hover{background:#fff8f7;box-shadow:inset 3px 0 0 var(--signal)}.user-avatar{display:inline-grid;place-items:center;width:39px;height:39px;border-radius:13px 13px 5px 13px;background:linear-gradient(145deg,#f6dfdd,#f9efed);color:#7a1226;vertical-align:middle;box-shadow:inset 0 0 0 1px rgba(122,18,38,.06)}.user-avatar+div strong{font-size:.8rem;letter-spacing:-.015em}.user-avatar+div small{display:block;margin-top:2px;color:#a18488;font:.57rem 'DM Mono';letter-spacing:.05em}.user-table .tag{padding:4px 6px;border:1px solid #eed6d5;border-radius:4px;background:#fff5f3;color:#7b3641;font-size:.61rem}.user-contact{display:inline-flex;align-items:center;gap:6px;color:#6b5559;font-size:.69rem}.user-contact i{color:#9b7076;font-size:.68rem}.user-date{display:block;color:#6c595c;font-size:.67rem}.user-updated-by{display:block;margin-top:3px;color:#a28c8f;font:.58rem 'DM Mono'}.user-row-actions{padding-right:18px}.user-icon-button{width:32px;height:32px;padding:0;border-radius:8px;border:1px solid #e3d3d0;background:#fff;color:#724c54;transition:.16s ease}.user-icon-button:hover{transform:translateY(-1px);background:var(--wine);border-color:var(--wine);color:#fff}.user-disable-button{margin-left:4px;border-color:#efdcda;color:#b34b58}.user-disable-button:hover{background:#b62c42;border-color:#b62c42}.user-empty{text-align:center!important;padding:38px 20px!important;color:var(--muted)}.user-empty i,.user-empty strong,.user-empty span{display:block}.user-empty i{margin-bottom:10px;color:var(--wine);font-size:1.8rem}.user-empty strong{color:var(--ink);font-size:.88rem}.user-empty span{margin-top:4px;font-size:.72rem}.user-table-footer{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:11px 21px;border-top:1px solid #f1e7e4;background:#fffdfc;color:#8b7276;font:.68rem 'DM Mono'}.user-pagination{gap:4px}.user-pagination .page-link{display:grid;place-items:center;min-width:32px;height:32px;padding:0;border-color:var(--line);border-radius:6px;color:var(--wine);font:500 .69rem 'DM Mono'}.user-pagination .page-item.active .page-link{border-color:var(--wine);background:var(--wine)}.user-pagination .page-item.disabled .page-link{color:#c9bdbd;background:#f8f3f2}.user-sort{display:inline-flex;align-items:center;gap:5px;color:inherit;text-decoration:none}.user-sort i{color:#b59598;font-size:.66rem;transition:color .15s ease,transform .15s ease}.user-sort:hover,.user-registry th[aria-sort="ascending"] .user-sort,.user-registry th[aria-sort="descending"] .user-sort{color:var(--wine)}.user-sort:hover i,.user-registry th[aria-sort="ascending"] .user-sort i,.user-registry th[aria-sort="descending"] .user-sort i{color:var(--wine)}.user-modal{border:0;border-radius:12px;overflow:hidden;box-shadow:0 24px 70px rgba(57,7,17,.24)}.user-modal .modal-header{padding:22px 25px 0;border:0;background:linear-gradient(110deg,#fffdfb,#fff4f2);align-items:flex-start}.user-modal .modal-header h2{margin:5px 0;font-size:1.38rem;font-weight:800;letter-spacing:-.045em}.user-modal .modal-header p{margin:0;color:var(--muted);font-size:.78rem}.user-modal .modal-body{padding:20px 25px}.user-modal .modal-footer{padding:0 25px 22px;border:0}.user-modal .form-text{color:#8b7175;font-size:.67rem}
@media(max-width:850px){.user-hero{gap:14px}.user-hero-copy{display:block}.user-hero p{margin-top:3px;padding-left:0;border-left:0}.user-table-head-actions{flex-wrap:wrap}.user-table-note{width:100%;margin:0 0 2px auto}.user-table td,.user-table thead th{padding-left:14px;padding-right:14px}}@media(max-width:640px){.user-hero{min-height:0;padding:15px;border-radius:10px;align-items:flex-start}.user-hero h1{font-size:1.15rem}.user-hero-stat{display:none}.user-table-panel{margin-top:8px;border-radius:13px}.user-table-head{display:block;padding:16px}.user-table-head-actions{justify-content:flex-start;margin-top:12px}.user-table-note{display:none}.user-table-head-actions .btn{padding:8px 9px}.user-table-tools{padding:10px 16px;gap:10px;flex-wrap:wrap}.user-search{max-width:none;flex-basis:100%}.user-per-page{margin-left:auto}.user-table thead{display:none}.user-table,.user-table tbody{display:block}.user-table tbody{padding:8px}.user-table .user-data-row{display:block;margin-bottom:8px;border:1px solid #eee0dc;border-radius:10px;overflow:hidden;background:#fff}.user-table .user-data-row:hover{box-shadow:inset 3px 0 0 var(--signal)}.user-table td{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding:11px 13px;border:0;border-bottom:1px solid #f4ebe8;text-align:right!important}.user-table td:first-child{display:block;text-align:left!important}.user-table td:last-child{align-items:center;border-bottom:0}.user-table td:before{content:attr(data-label);flex:none;color:#9b7f83;font:.58rem 'DM Mono';letter-spacing:.06em;text-align:left}.user-table td:first-child:before{display:none}.user-row-actions form{margin-left:3px}.user-table-footer{display:block;padding:12px 16px}.user-pagination{margin-top:11px}.user-modal .modal-header{padding:24px 22px 0}.user-modal .modal-body{padding:20px 22px}.user-modal .modal-footer{padding:0 22px 23px}}
.member-registry .role-hero-stat:after{content:'คน'}
.location-registry .role-hero-stat:after{content:'จุด'}
.member-photo-avatar{overflow:hidden}.member-photo-avatar img{width:100%;height:100%;object-fit:cover;display:block}.member-photo-preview{display:flex;align-items:center;gap:11px;margin-bottom:14px;padding:10px;border:1px solid #eedbd8;border-radius:10px;background:#fff8f6}.member-photo-preview img{width:48px;height:48px;border-radius:12px;object-fit:cover}.member-photo-preview span{color:#8b7175;font-size:.68rem;font-weight:700}
.member-card-list{max-width:260px}.member-rfid-entry{margin-top:14px;padding-top:14px;border-top:1px solid #f0e2df}.member-card-options{display:flex;flex-wrap:wrap;gap:8px;margin:3px 0 8px}.member-card-option{display:inline-grid;grid-template-columns:16px 1fr;column-gap:7px;align-items:center;padding:7px 9px;border:1px solid #eedbd8;border-radius:8px;background:#fff8f6;color:#734f55;font-size:.68rem}.member-card-option input{accent-color:var(--wine)}.member-card-option span{font-family:'DM Mono',monospace}.member-card-option small{grid-column:2;color:#a0868a;font-size:.57rem}
.member-rfid-button{display:inline-grid!important;place-items:center;margin-right:4px;border-color:#d9c9db!important;background:#fffafb!important;color:#6c3f73!important;vertical-align:middle}.member-rfid-button i{display:block;line-height:1}.member-rfid-button:hover{border-color:#6d1021!important;background:var(--wine)!important;color:#fff!important}.member-rfid-registry{max-width:1040px}.member-rfid-registry .role-hero-stat:after{content:'บัตร'}.member-rfid-person{display:flex;align-items:center;gap:11px}.member-rfid-person .role-avatar{flex:none}.member-rfid-person .panel-title{margin:3px 0 2px}.member-rfid-summary{display:flex;flex-wrap:wrap;gap:8px 20px;padding:11px 21px;border-bottom:1px solid #f2e6e2;background:#fffdfc;color:#876d72;font-size:.67rem}.member-rfid-summary span{display:inline-flex;align-items:center;gap:6px}.member-rfid-summary i{color:#9e5c68}.member-rfid-summary b{font-family:'DM Mono',monospace;color:#63313a}.member-rfid-index{display:inline-grid;place-items:center;width:28px;height:28px;border-radius:8px;background:#f8ebe8;color:#8a4753;font:500 .65rem 'DM Mono'}.member-rfid-number{display:inline-flex;align-items:center;gap:8px;padding:6px 9px;border:1px solid #ead7d4;border-radius:7px;background:#fff8f7;color:#61192a;font:500 .78rem 'DM Mono'}.member-rfid-number i{font-size:.72rem;color:#b04258}.member-rfid-textarea{font-family:'DM Mono',monospace;font-size:.78rem;line-height:1.65}@media(max-width:640px){.member-rfid-person{align-items:flex-start}.member-rfid-summary{padding:10px 16px;gap:7px}.member-rfid-summary span:last-child{display:none}.member-rfid-registry .role-row-actions{padding-top:8px!important;padding-bottom:8px!important}}
.member-rfid-registry{max-width:1180px}.member-rfid-registry .role-table-head{align-items:flex-start}.member-rfid-context{display:flex;align-items:center;justify-content:space-between;gap:18px;padding-top:10px!important;padding-bottom:10px!important}.member-rfid-context-person{display:flex;align-items:center;gap:9px}.member-rfid-context-person .role-avatar{flex:none}.member-rfid-context-person strong{display:block;font-size:.78rem}.member-rfid-context-person small{display:block;margin-top:2px;color:#a18488;font:.58rem 'DM Mono';letter-spacing:.05em}.member-rfid-context-meta{display:flex;align-items:center;gap:18px;color:#876d72;font-size:.67rem}.member-rfid-context-meta span{display:inline-flex;align-items:center;gap:6px}.member-rfid-context-meta i{color:#9e5c68}.member-rfid-context-meta b{font-family:'DM Mono',monospace;color:#63313a}.member-rfid-card-avatar{display:inline-grid!important;place-items:center;border-radius:13px 13px 5px 13px!important;color:#7a1226!important}.member-rfid-number{display:block;padding:0!important;border:0!important;border-radius:0!important;background:transparent!important;color:#61192a;font:500 .77rem 'DM Mono'}.member-rfid-status{display:inline-flex;align-items:center;gap:5px;padding:5px 7px;border:1px solid #cfe8dd;border-radius:999px;background:#f2fbf6;color:#16835f;font-size:.64rem;font-weight:700}.member-rfid-status i{font-size:.7rem}.member-rfid-registry .role-table td:first-child small{display:block;margin-top:2px;color:#a18488;font:.57rem 'DM Mono';letter-spacing:.05em}@media(max-width:640px){.member-rfid-context{align-items:flex-start;flex-direction:column;gap:9px}.member-rfid-context-meta{padding-left:48px;flex-wrap:wrap;gap:7px 14px}.member-rfid-registry .role-table td:first-child{display:block}.member-rfid-registry .role-table td:first-child .role-avatar{vertical-align:middle}.member-rfid-registry .role-table td:first-child>div{max-width:calc(100% - 52px)}.member-rfid-registry .role-table td:first-child .member-rfid-number{overflow-wrap:anywhere}.member-rfid-registry .role-table td:nth-child(2){align-items:center}.member-rfid-registry .role-table td:nth-child(2):before{padding-top:3px}}
.member-rfid-status-form{display:inline-flex;align-items:center;margin:0}.member-rfid-status-form .form-switch{display:flex;align-items:center;gap:8px;padding-left:0}.member-rfid-status-toggle.form-check-input{width:2.15em;height:1.16em;margin:0;cursor:pointer;border-color:#d7c7c5;background-color:#e7dfdd;background-position:left center;box-shadow:none}.member-rfid-status-toggle.form-check-input:checked{border-color:#16835f;background-color:#16835f;box-shadow:none}.member-rfid-status-toggle.form-check-input:focus{box-shadow:0 0 0 3px rgba(22,131,95,.13)}.member-rfid-status-form .form-check-label{min-width:58px;color:#8a7478;font-size:.66rem;font-weight:700;cursor:pointer}.member-rfid-status-form .form-check-input:checked+.form-check-label{color:#16835f}
.member-rfid-input{font:500 .8rem 'DM Mono',monospace;letter-spacing:.02em}
.member-field-section{display:flex;align-items:center;gap:8px;margin:0 0 12px;padding-bottom:8px;border-bottom:1px solid #f0e2df;color:#8b5c64;font:.62rem 'DM Mono';letter-spacing:.06em;text-transform:uppercase}.member-field-section:not(:first-child){margin-top:19px}.member-field-section i{color:var(--wine);font-size:.74rem}
.location-type-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.location-type-option{position:relative;cursor:pointer}.location-type-option input{position:absolute;opacity:0;pointer-events:none}.location-type-option span{display:grid;grid-template-columns:30px 1fr;column-gap:8px;align-items:center;min-height:67px;padding:10px;border:1px solid #e6d8d4;border-radius:9px;background:#fffdfc;color:#73575c;transition:.16s ease}.location-type-option i{grid-row:span 2;display:grid;place-items:center;width:30px;height:30px;border-radius:8px;background:#f7e7e4;color:#8a2639;font-size:.82rem}.location-type-option b,.location-type-option small{display:block}.location-type-option b{font-size:.72rem}.location-type-option small{margin-top:2px;color:#947c80;font-size:.59rem}.location-type-option input:checked+span{border-color:#a94c5c;background:#fff7f5;box-shadow:0 4px 12px rgba(122,18,38,.08)}.location-type-option input:checked+span i{background:var(--wine);color:#fff}.location-time-field{margin-top:13px;padding:11px 12px;border:1px solid #eedbd8;border-radius:9px;background:#fff9f7}.location-time-field[hidden]{display:none}.location-day-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}.location-day-option{cursor:pointer}.location-day-option input{position:absolute;opacity:0;pointer-events:none}.location-day-option span{display:grid;place-items:center;min-height:34px;padding:5px 3px;border:1px solid #e6d8d4;border-radius:7px;background:#fffdfc;color:#856c70;font-size:.62rem;font-weight:700;transition:.16s ease}.location-day-option input:checked+span{border-color:var(--wine);background:var(--wine);color:#fff;box-shadow:0 3px 9px rgba(109,16,33,.16)}@media(max-width:640px){.location-type-options{grid-template-columns:1fr}.location-day-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}
.location-status-form{display:inline-flex;align-items:center;margin:0}.location-status-form .form-switch{display:flex;align-items:center;gap:8px;padding-left:0}.location-status-toggle.form-check-input{width:2.15em;height:1.16em;margin:0;cursor:pointer;border-color:#d7c7c5;background-color:#e7dfdd;background-position:left center;box-shadow:none}.location-status-toggle.form-check-input:checked{border-color:#16835f;background-color:#16835f;box-shadow:none}.location-status-toggle.form-check-input:focus{box-shadow:0 0 0 3px rgba(22,131,95,.13)}.location-status-form .form-check-label{min-width:58px;color:#8a7478;font-size:.66rem;font-weight:700;cursor:pointer}.location-status-form .form-check-input:checked+.form-check-label{color:#16835f}
.checkin-registry .role-hero-stat:after{content:'รายการ'}.checkin-filter-tools{flex-wrap:wrap}.checkin-filter-tools .role-search{max-width:360px}.checkin-filter-field{display:flex;align-items:center;gap:7px;margin:0;color:#887277;font-size:.66rem;white-space:nowrap}.checkin-filter-field .form-control,.checkin-filter-field .form-select{height:31px;border-color:#e4d5d1;color:#6d1021;font:500 .67rem 'DM Mono'}.checkin-filter-field .form-control{width:136px}.checkin-filter-location .form-select{width:190px;font-family:'Noto Sans Thai',sans-serif}.checkin-filter-button{display:inline-flex;align-items:center;gap:5px;height:31px;padding:0 10px;border:1px solid var(--wine);border-radius:6px;background:var(--wine);color:#fff;font-size:.67rem;font-weight:800}.checkin-filter-button:hover{background:var(--wine-deep);border-color:var(--wine-deep);color:#fff}.checkin-table td{vertical-align:middle}.checkin-person{display:flex;align-items:center;gap:10px;min-width:220px}.checkin-person .role-avatar{flex:none}.checkin-person-photo{object-fit:cover;border:1px solid #e6cbc8}.checkin-person strong,.checkin-person small{display:block}.checkin-person strong{font-size:.78rem}.checkin-person small{margin-top:2px;color:#a18488;font:.57rem 'DM Mono';letter-spacing:.05em}.checkin-rfid-code{display:inline-flex;align-items:center;padding:6px 9px;border:1px solid #ead7d4;border-radius:7px;background:#fff8f7;color:#61192a;font:500 .75rem 'DM Mono';letter-spacing:.02em}.checkin-photo-button{position:relative;width:46px;height:46px;padding:0;border:1px solid #e6cbc8;border-radius:8px;overflow:hidden;background:#f6e9e6;cursor:zoom-in}.checkin-photo-button img{width:100%;height:100%;object-fit:cover;display:block}.checkin-photo-button i{position:absolute;inset:0;display:grid;place-items:center;background:rgba(57,7,17,.58);color:#fff;opacity:0;transition:opacity .16s ease;font-size:.92rem}.checkin-photo-button:hover i,.checkin-photo-button:focus-visible i{opacity:1}@media(max-width:900px){.checkin-filter-tools .role-search{max-width:none;flex-basis:100%}.checkin-filter-field{flex:1 1 160px}.checkin-filter-field .form-control,.checkin-filter-location .form-select{width:100%}.checkin-filter-button{flex:none}}@media(max-width:640px){.checkin-person{min-width:0}.checkin-filter-field{flex-basis:100%;align-items:flex-start;flex-direction:column;gap:4px}.checkin-filter-button{width:100%;justify-content:center}.checkin-table thead{display:none}.checkin-table,.checkin-table tbody{display:block}.checkin-table tbody{padding:8px}.checkin-table .role-data-row{display:block;margin-bottom:8px;border:1px solid #eee0dc;border-radius:10px;overflow:hidden;background:#fff}.checkin-table td{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:11px 13px!important;border:0;border-bottom:1px solid #f4ebe8;text-align:right!important}.checkin-table td:first-child{justify-content:flex-start;text-align:left!important}.checkin-table td:last-child{border-bottom:0}.checkin-table td:before{content:attr(data-label);flex:none;color:#9b7f83;font:.58rem 'DM Mono';letter-spacing:.06em;text-align:left}.checkin-table td:first-child:before{display:none}}

/* Operations dashboard: dense enough for decisions, calm enough for daily use. */
.dashboard-report-page{max-width:1280px}.dashboard-report-intro{padding-bottom:20px}.report-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;margin:0 0 18px;background:var(--line);border:1px solid var(--line)}.report-kpi{min-height:124px;display:flex;align-items:center;gap:15px;padding:20px;background:#fff}.report-kpi-primary{background:linear-gradient(135deg,#671022,#8d1d33);color:#fff}.report-kpi-icon{flex:none;display:grid;place-items:center;width:42px;height:42px;border-radius:12px;background:#f8e8e5;color:var(--wine);font-size:1rem}.report-kpi-primary .report-kpi-icon{background:rgba(255,255,255,.12);color:#ffd2d1}.report-kpi div>span,.report-kpi div>small{display:block}.report-kpi div>span{color:#8f777b;font-size:.67rem}.report-kpi-primary div>span{color:#eac9cc}.report-kpi strong{display:block;margin:5px 0 2px;color:var(--wine);font:500 2rem 'DM Mono';letter-spacing:-.09em}.report-kpi-primary strong{color:#fff}.report-kpi small{color:#9a8588;font-size:.61rem}.report-kpi-primary small{color:#f0cdd0}.report-kpi small.is-positive{color:#237a60}.report-kpi-primary small.is-positive{color:#d2f3e5}.report-kpi small.is-negative{color:#b4384d}.report-main-grid{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(300px,.75fr);gap:18px}.report-panel{border:1px solid var(--line);border-radius:12px;background:#fff;box-shadow:0 8px 25px rgba(57,7,17,.045);overflow:hidden}.report-panel-head,.report-directory-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding:19px 21px;border-bottom:1px solid #f0e5e2}.report-panel-head h2,.report-directory-head h2{margin:4px 0 0;font-size:1.04rem;font-weight:800;letter-spacing:-.04em}.report-panel-head>a{color:var(--wine);font-size:.66rem;font-weight:800;text-decoration:none}.report-panel-head>span{color:#9c7f84;font:.6rem 'DM Mono';letter-spacing:.07em}.report-chart{height:270px;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:12px;align-items:end;padding:25px 24px 13px;background:linear-gradient(180deg,#fff 0%,#fffaf9 100%)}.report-chart-column{height:100%;display:grid;grid-template-rows:20px 1fr 20px;gap:7px;align-items:end;text-align:center}.report-chart-value{color:#75595e;font:.62rem 'DM Mono'}.report-chart-track{height:100%;display:flex;align-items:flex-end;justify-content:center;border-bottom:1px solid #e8d9d6;background:repeating-linear-gradient(to top,transparent 0,transparent 24%,rgba(122,18,38,.045) 25%)}.report-chart-track i{display:block;width:min(34px,72%);min-height:3px;border-radius:6px 6px 1px 1px;background:linear-gradient(180deg,#b84c61,#771326);box-shadow:0 5px 14px rgba(122,18,38,.14);animation:report-rise .45s ease both}.report-chart-label{color:#927b7f;font-size:.59rem;white-space:nowrap}.report-chart-summary{display:flex;justify-content:space-between;gap:16px;padding:12px 21px;border-top:1px solid #f1e7e4;color:#8c7478;font-size:.62rem}.report-chart-summary span{display:inline-flex;align-items:center;gap:6px}.report-chart-summary i{width:8px;height:8px;border-radius:2px;background:var(--wine)}.report-chart-summary b{color:#674e53;font:500 .62rem 'DM Mono'}.report-location-list{padding:8px 20px 14px}.report-location-list article{display:grid;grid-template-columns:27px 1fr;gap:10px;padding:13px 0;border-bottom:1px solid #f3e9e6}.report-location-list article:last-child{border-bottom:0}.report-location-rank{padding-top:1px;color:#b28c92;font:500 .65rem 'DM Mono'}.report-location-list article>div>div{display:flex;justify-content:space-between;gap:10px}.report-location-list strong{font-size:.72rem}.report-location-list b{color:var(--wine);font:500 .68rem 'DM Mono'}.report-location-track{display:block;height:5px;margin:7px 0 5px;background:#f2e7e4;border-radius:999px;overflow:hidden}.report-location-track i{display:block;height:100%;background:linear-gradient(90deg,#7a1226,#c15367);border-radius:inherit}.report-location-list small{color:#a28b8e;font-size:.57rem}.report-directory{margin:18px 0;border:1px solid var(--line);border-radius:12px;background:#3e0814;color:#fff;overflow:hidden}.report-directory-head{align-items:center;border-color:rgba(255,255,255,.1)}.report-directory-head .eyebrow{color:#d9a7ac}.report-directory-head h2{color:#fff}.report-live-badge{display:inline-flex;align-items:center;gap:6px;color:#eacbce;font:.6rem 'DM Mono'}.report-live-badge i{width:7px;height:7px;border-radius:50%;background:#53d5a2;box-shadow:0 0 0 4px rgba(83,213,162,.12)}.report-directory-grid{display:grid;grid-template-columns:repeat(4,1fr)}.report-directory-grid article{position:relative;min-height:118px;padding:19px 21px;border-right:1px solid rgba(255,255,255,.1)}.report-directory-grid article:last-child{border:0}.report-directory-grid article>i{position:absolute;right:19px;top:20px;color:#b97e87;font-size:1rem}.report-directory-grid span,.report-directory-grid small{display:block}.report-directory-grid span{color:#d5b5b9;font-size:.64rem}.report-directory-grid strong{display:block;margin:7px 0 3px;color:#fff;font:500 1.65rem 'DM Mono';letter-spacing:-.08em}.report-directory-grid small{color:#ae8a90;font-size:.58rem}.report-bottom-grid{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(320px,.65fr);gap:18px}.report-recent-list a{display:grid;grid-template-columns:36px 1fr auto;align-items:center;gap:11px;padding:11px 20px;border-bottom:1px solid #f2e8e5;color:var(--ink);text-decoration:none;transition:.16s ease}.report-recent-list a:last-child{border-bottom:0}.report-recent-list a:hover{background:#fff8f7;box-shadow:inset 3px 0 0 var(--wine)}.report-recent-avatar{display:grid;place-items:center;width:36px;height:36px;border-radius:12px 12px 4px 12px;background:#f7e7e4;color:var(--wine);font-size:.72rem;font-weight:800}.report-recent-list strong,.report-recent-list small{display:block}.report-recent-list strong{font-size:.73rem}.report-recent-list span small{margin-top:2px;color:#9d8589;font-size:.58rem}.report-recent-list time{color:var(--wine);font:500 .68rem 'DM Mono';text-align:right}.report-recent-list time small{margin-top:2px;color:#aa9296;font-size:.55rem}.report-empty{min-height:145px;display:grid;place-content:center;gap:8px;text-align:center;color:#a0878b;font-size:.68rem}.report-empty i{color:#b16a76;font-size:1.4rem}.report-actions{border-radius:12px;overflow:hidden;box-shadow:0 8px 25px rgba(57,7,17,.045)}.report-actions .dashboard-actions-head{padding:19px 21px 13px}@keyframes report-rise{from{height:0}}@media(max-width:1050px){.report-kpis{grid-template-columns:repeat(2,1fr)}.report-main-grid,.report-bottom-grid{grid-template-columns:1fr}.report-directory-grid{grid-template-columns:repeat(2,1fr)}.report-directory-grid article:nth-child(2){border-right:0}.report-directory-grid article:nth-child(-n+2){border-bottom:1px solid rgba(255,255,255,.1)}}@media(max-width:640px){.dashboard-report-intro{display:block}.report-kpis{grid-template-columns:1fr}.report-kpi{min-height:96px;padding:16px}.report-main-grid{gap:12px}.report-chart{height:235px;gap:5px;padding:20px 10px 11px}.report-chart-track i{width:65%}.report-chart-label{font-size:.5rem}.report-chart-summary{display:block}.report-chart-summary b{display:block;margin-top:5px}.report-location-list{padding-left:15px;padding-right:15px}.report-directory{margin:12px 0}.report-directory-grid{grid-template-columns:1fr}.report-directory-grid article,.report-directory-grid article:nth-child(2){min-height:92px;border-right:0;border-bottom:1px solid rgba(255,255,255,.1)}.report-directory-grid article:last-child{border-bottom:0}.report-bottom-grid{gap:12px}.report-recent-list a{padding:10px 14px}.report-recent-list span small{max-width:180px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}}
