:root{--bg:#f3f0ea;--surface:#fffdf8;--ink:#1c1915;--muted:#6b655c;--line:#d9d2c5;--accent:#0f6b5c;--accent-soft:#dff3ee;--danger:#9b2c2c;--danger-soft:#fde8e8;--shadow:0 12px 40px #1c191514;color:var(--ink);background:radial-gradient(circle at top left, #e8f4f1 0%, transparent 42%), radial-gradient(circle at bottom right, #f7e9d8 0%, transparent 40%), var(--bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Segoe UI,Helvetica Neue,sans-serif;font-weight:400;line-height:1.5}*{box-sizing:border-box}body{min-width:320px;min-height:100vh;margin:0}#root{min-height:100vh}button,input{font:inherit}.app{width:min(92vw,1800px);max-width:100%;margin:0 auto;padding:1.25rem 1rem 2rem}.header{justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1.75rem;display:flex}.header-actions{align-items:center;gap:.75rem;display:flex}.header-user{color:var(--muted);font-size:.9rem}.auth-checking{color:var(--muted);margin:2rem 0 0}.login-page{place-items:center;min-height:100vh;padding:1.5rem 1rem;display:grid}.login-card{border:1px solid var(--line);background:var(--surface);width:min(100%,24rem);box-shadow:var(--shadow);border-radius:16px;gap:.95rem;padding:1.6rem 1.45rem 1.45rem;display:grid}.login-card-head h1{letter-spacing:-.03em;margin:0;font-size:1.65rem}.login-card-head p{color:var(--muted);margin:.35rem 0 .4rem;font-size:.92rem}.login-field{gap:.35rem;display:grid}.login-field span{color:var(--muted);font-size:.82rem;font-weight:600}.login-field input{border:1px solid var(--line);color:var(--ink);background:#fff;border-radius:10px;padding:.65rem .8rem}.login-field input:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.login-error{background:var(--danger-soft);color:var(--danger);border-radius:10px;margin:0;padding:.65rem .8rem;font-size:.9rem}.login-submit{width:100%;margin-top:.25rem;padding:.7rem .95rem}.header h1{letter-spacing:-.03em;margin:0;font-size:clamp(1.75rem,3vw,2.35rem)}.btn-secondary{border:1px solid var(--line);background:var(--surface);color:var(--ink);cursor:pointer;border-radius:10px;padding:.55rem .95rem}.btn-secondary:hover{border-color:var(--accent);color:var(--accent)}.btn-secondary:disabled,.btn-primary:disabled,.btn-change:disabled{opacity:.65;cursor:not-allowed}.btn-primary{border:1px solid var(--accent);background:var(--accent);color:#fff;cursor:pointer;border-radius:10px;padding:.55rem .95rem}.btn-primary:hover:not(:disabled){filter:brightness(.95)}.btn-change{border:1px solid var(--accent);background:var(--accent-soft);color:var(--accent);cursor:pointer;border-radius:8px;padding:.3rem .55rem;font-size:.75rem;font-weight:600}.btn-change:hover{background:var(--accent);color:#fff}.upload{gap:.75rem;display:grid}.upload-zone{border:2px dashed var(--line);background:var(--surface);min-height:220px;box-shadow:var(--shadow);cursor:pointer;border-radius:18px;place-items:center;gap:.35rem;padding:2rem;transition:border-color .15s,background .15s;display:grid;position:relative}.upload-zone:hover,.upload-zone:focus-within{border-color:var(--accent);background:var(--accent-soft)}.upload-zone--disabled{opacity:.65;cursor:not-allowed}.upload-zone input{clip:rect(0, 0, 0, 0);border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.upload-title{font-size:1.15rem;font-weight:600}.upload-hint{color:var(--muted)}.upload-error{background:var(--danger-soft);color:var(--danger);border-radius:10px;margin:0;padding:.75rem 1rem}.save-notice{background:var(--accent-soft);color:var(--accent);border-radius:10px;margin:0;padding:.75rem 1rem}.alert-toast-stack{z-index:80;pointer-events:none;width:min(22rem,100vw - 2rem);position:fixed;top:1.25rem;right:1.25rem}.alert-toast{pointer-events:auto;box-shadow:var(--shadow);border-radius:10px;align-items:flex-start;gap:.65rem;padding:.8rem .85rem .8rem 1rem;animation:.2s ease-out alert-toast-in;display:flex}.alert-toast-error{background:var(--danger-soft);color:var(--danger);border:1px solid #9b2c2c38}.alert-toast-success{background:var(--accent-soft);color:var(--accent);border:1px solid #0f6b5c38}.alert-toast-message{flex:1;min-width:0;margin:0;font-size:.92rem;line-height:1.4}.alert-toast-close{color:inherit;opacity:.7;cursor:pointer;background:0 0;border:none;flex-shrink:0;padding:0 .15rem;font-size:1.25rem;line-height:1}.alert-toast-close:hover{opacity:1}@keyframes alert-toast-in{0%{opacity:0;transform:translate(.6rem)}to{opacity:1;transform:translate(0)}}@media (width<=640px){.alert-toast-stack{width:auto;inset:auto 1rem 1rem}}.viewer{gap:1rem;display:grid}.table-panel{gap:.75rem;min-width:0;display:grid}.table-toolbar{flex-wrap:wrap;align-items:flex-end;gap:.85rem;display:flex}.table-toolbar-actions{align-items:center;gap:.55rem;margin-left:auto;padding-bottom:.05rem;display:flex}.table-search{flex:16rem;gap:.35rem;min-width:0;max-width:28rem;display:grid}.table-search-label{letter-spacing:.02em;color:var(--muted);font-size:.78rem;font-weight:600}.table-search input{border:1px solid var(--line);background:var(--surface);width:100%;color:var(--ink);box-shadow:var(--shadow);border-radius:10px;outline:none;padding:.55rem .85rem}.table-search input::placeholder{color:var(--muted)}.table-search input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.table-search-count{color:var(--muted);white-space:nowrap;padding-bottom:.55rem;font-size:.82rem}.table-empty-cell{color:var(--muted);text-align:center!important;padding:1.5rem 1rem!important}.table-wrap{border:1px solid var(--line);background:var(--surface);max-height:calc(100vh - 14rem);box-shadow:var(--shadow);border-radius:14px;overflow:hidden auto}.data-table{table-layout:fixed;border-collapse:collapse;width:100%;font-size:.78rem}.data-table th,.data-table td{border-bottom:1px solid var(--line);text-align:left;white-space:normal;overflow-wrap:anywhere;word-break:break-word;vertical-align:top;border-right:1px solid #eee7db;padding:.45rem .4rem;line-height:1.35}.data-table th{z-index:1;background:#efe9de;font-weight:650;position:sticky;top:0}.data-table tbody tr:nth-child(2n){background:#faf7f1}.data-table tbody tr:hover{background:var(--accent-soft)}.data-table-link-cell a{color:var(--accent);text-underline-offset:2px;-webkit-line-clamp:2;-webkit-box-orient:vertical;text-decoration:underline;display:-webkit-box;overflow:hidden}.data-table-link-cell a:hover{color:var(--ink)}.data-table-action-cell{white-space:nowrap;text-align:center}.data-table-timer-cell{font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:650}.data-table .col-link{width:14%}.data-table .col-timer{width:10%;min-width:8.5rem}.data-table .col-email{width:14%;min-width:10rem}.data-table .col-adults,.data-table .col-children{text-align:center;white-space:nowrap;width:3.6%;max-width:3.8rem}.data-table .col-history,.data-table .col-change{width:5%;max-width:5.2rem}.data-table .col-phone{width:8%}.data-table .col-room{width:4.2%;max-width:4.5rem}.data-table .col-money{width:7%}.data-table .col-date{white-space:nowrap;width:6.5%}.data-table .col-name{width:11%}.data-table .col-default{width:7%}.data-table-timer-cell.is-waiting{color:var(--muted)}.data-table-timer-cell.is-running{color:var(--accent)}.data-table-timer-cell.is-expired{color:var(--danger)}.timer-cell-inner{white-space:nowrap;flex-direction:column;align-items:flex-start;gap:.3rem;display:inline-flex}.timer-controls{white-space:nowrap;flex-flow:row;align-items:center;gap:.3rem;display:inline-flex}.timer-actions{flex-flow:row;align-items:center;gap:.35rem;margin-left:-.45rem;display:inline-flex;transform:translate(-2px)}.timer-status-badge{letter-spacing:.01em;white-space:nowrap;border:1px solid #0000;border-radius:999px;flex-shrink:0;align-items:center;padding:.05rem .45rem;font-size:.72rem;font-weight:700;display:inline-flex}.timer-status-badge.is-waiting{color:#6b7280;background:#f3f4f6;border-color:#e5e7eb}.timer-status-badge.is-running{color:#0b7285;background:#e6fcf5;border-color:#96f2d7}.timer-status-badge.is-expired{color:#b42318;background:#fff1f3;border-color:#fecdd3}.timer-value{flex-shrink:0;min-width:4.1rem}.btn-refresh{border:1px solid var(--line);background:var(--surface);width:1.7rem;height:1.7rem;color:var(--ink);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;padding:0;display:inline-flex}.btn-refresh:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}.btn-refresh:disabled{opacity:.45;cursor:not-allowed}.btn-stop{border:1px solid var(--line);background:var(--surface);width:1.7rem;height:1.7rem;color:var(--danger);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;padding:0;display:inline-flex}.btn-stop:hover:not(:disabled){border-color:var(--danger);background:var(--danger-soft)}.btn-stop:disabled{opacity:.45;cursor:not-allowed}.dialog-backdrop{z-index:50;background:#1c191573;place-items:center;padding:1rem;display:grid;position:fixed;inset:0}.dialog{background:var(--surface);width:min(560px,100%);max-height:min(85vh,720px);box-shadow:var(--shadow);border:1px solid var(--line);border-radius:16px;overflow:auto}.dialog-header{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:1rem;padding:1rem 1.25rem;display:flex}.dialog-header h2{margin:0;font-size:1.2rem}.dialog-close{color:var(--muted);cursor:pointer;background:0 0;border:none;padding:.15rem .4rem;font-size:1.5rem;line-height:1}.dialog-close:hover{color:var(--ink)}.dialog-form{gap:1rem;padding:1.25rem;display:grid}.dialog-fields{gap:.85rem;display:grid}.dialog-field{gap:.35rem;display:grid}.dialog-field span{color:var(--muted);font-size:.9rem}.dialog-field input{border:1px solid var(--line);color:var(--ink);background:#fff;border-radius:10px;padding:.65rem .8rem}.dialog-field input:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.dialog-error{background:var(--danger-soft);color:var(--danger);border-radius:10px;margin:0;padding:.7rem .85rem}.dialog-message{color:var(--muted);margin:0;line-height:1.5}.dialog-confirm{width:min(420px,100%)}.history-drawer-backdrop{z-index:60;background:#1c19156b;justify-content:flex-end;display:flex;position:fixed;inset:0}.history-drawer{background:var(--surface);border-left:1px solid var(--line);flex-direction:column;width:min(440px,100%);height:100%;animation:.18s ease-out history-drawer-in;display:flex;box-shadow:-16px 0 40px #1c19151f}@keyframes history-drawer-in{0%{opacity:.72;transform:translate(18px)}to{opacity:1;transform:translate(0)}}.history-drawer-header{border-bottom:1px solid var(--line);justify-content:space-between;gap:1rem;padding:1.15rem 1.2rem 1rem;display:flex}.history-drawer-eyebrow{color:var(--muted);letter-spacing:.04em;text-transform:uppercase;margin:0 0 .2rem;font-size:.78rem}.history-drawer-header h2{letter-spacing:-.02em;margin:0;font-size:1.35rem}.history-drawer-guest{color:var(--ink);margin:.35rem 0 0;font-weight:600}.history-drawer-key{color:var(--muted);word-break:break-all;background:#f4f1ea;border-radius:6px;margin-top:.45rem;padding:.2rem .45rem;font-size:.78rem;display:inline-block}.history-drawer-body{flex:1;align-content:start;gap:1rem;padding:1rem 1.2rem 1.25rem;display:grid;overflow:auto}.history-summary{grid-template-columns:repeat(4,minmax(0,1fr));gap:.45rem;display:grid}.history-summary-card{border:1px solid var(--line);background:#fff;border-radius:10px;justify-items:center;gap:.1rem;padding:.55rem .3rem;display:grid}.history-summary-value{font-variant-numeric:tabular-nums;font-size:1.05rem;font-weight:700}.history-summary-label{color:var(--muted);font-size:.7rem}.history-filters{flex-wrap:wrap;gap:.4rem;display:flex}.history-filter{border:1px solid var(--line);color:var(--muted);cursor:pointer;background:#fff;border-radius:999px;padding:.28rem .7rem;font-size:.8rem}.history-filter.is-active{border-color:var(--accent);background:var(--accent-soft);color:var(--accent);font-weight:600}.history-empty{border:1px dashed var(--line);text-align:center;color:var(--muted);border-radius:12px;gap:.35rem;padding:1.25rem 1rem;display:grid}.history-empty p{color:var(--ink);margin:0;font-weight:600}.history-timeline{border-left:2px solid #e7e1d6;gap:.85rem;margin:0;padding:0 0 0 .7rem;list-style:none;display:grid}.history-timeline-item{padding-left:.95rem;position:relative}.history-timeline-marker{background:var(--accent);border:2px solid #fff;border-radius:50%;width:.65rem;height:.65rem;position:absolute;top:.85rem;left:-.45rem;box-shadow:0 0 0 1px #d9d2c5}.history-timeline-card{border:1px solid var(--line);background:#fff;border-radius:12px;gap:.55rem;padding:.75rem .8rem;display:grid}.history-timeline-top{justify-content:space-between;align-items:center;gap:.6rem;display:flex}.history-badge{white-space:nowrap;border-radius:999px;align-items:center;padding:.15rem .55rem;font-size:.75rem;font-weight:700;display:inline-flex}.history-badge-open{color:#0b7285;background:#e6fcf5}.history-badge-denied{color:#b42318;background:#fff1f3}.history-badge-refresh{color:#1d4ed8;background:#eff6ff}.history-badge-update{color:#854d0e;background:#fef9c3}.history-badge-pay{color:#166534;background:#dcfce7}.history-badge-default{color:var(--muted);background:#f3f4f6}.history-time{color:var(--muted);white-space:nowrap;font-size:.78rem}.history-meta-grid{grid-template-columns:1fr 1.4fr;gap:.55rem;display:grid}.history-meta-label{color:var(--muted);margin-bottom:.1rem;font-size:.7rem;display:block}.history-meta-value{word-break:break-word;font-size:.86rem;display:block}.history-detail{color:var(--muted);margin:0;font-size:.8rem}.history-drawer-footer{border-top:1px solid var(--line);justify-content:flex-end;padding:.9rem 1.2rem;display:flex}.btn-clear-history{border:1px solid var(--danger);background:var(--danger-soft);color:var(--danger);cursor:pointer;border-radius:10px;padding:.55rem .95rem;font-weight:600}.btn-clear-history:hover:not(:disabled){background:#fbd5d5}.btn-clear-history:disabled{opacity:.45;cursor:not-allowed}@media (width<=640px){.history-drawer{width:100%}.history-summary{grid-template-columns:repeat(2,minmax(0,1fr))}.history-meta-grid{grid-template-columns:1fr}.history-timeline-top{flex-direction:column;align-items:flex-start}}.dialog-actions{justify-content:flex-end;gap:.6rem;display:flex}.table-empty{border:1px solid var(--line);background:var(--surface);color:var(--muted);border-radius:14px;margin:0;padding:1.5rem}@media (width<=640px){.app{padding:1.25rem 1rem 2rem}.header{flex-direction:column}}
