:root{--oat:#faf6ec;--oat-deep:#f2ecdc;--paper:#fffdf7;--lemon:#e6d48a;--lemon-soft:#f3eac4;--lavender:#bfb2d3;--lavender-deep:#7e7096;--ink:#4f4858;--ink-soft:#8c8496;--line:#e4dcc6;--error:#a04e5e;--font-script:"Cormorant Garamond", serif;--font-mincho:"Noto Serif TC", serif;--font-sans:"Noto Sans TC", sans-serif;--content-width:1080px;--gutter:48px;--section-space:140px}@media (width<=820px){:root{--gutter:24px;--section-space:96px}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}body.admin{background:var(--oat);color:var(--ink);font-family:var(--font-sans);letter-spacing:.02em;-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.7}a{color:inherit}button,input,select,textarea{font:inherit;color:inherit}[hidden]{display:none!important}.muted{color:var(--ink-soft)}.small{font-size:12px}.num{font-variant-numeric:tabular-nums}.nowrap{white-space:nowrap}.app{grid-template-columns:220px minmax(0,1fr);min-height:100vh;display:grid}.side{background:var(--paper);border-right:1px solid var(--line);height:100vh;padding:24px 16px;position:sticky;top:0;overflow-y:auto}.side-top{justify-content:space-between;align-items:center;display:flex}.side-logo{font-family:var(--font-script);font-size:24px;font-style:italic;line-height:1.1;text-decoration:none}.side-logo small{font-family:var(--font-mincho);letter-spacing:.3em;color:var(--ink-soft);font-size:12px;font-style:normal;display:block}.side-toggle{border:1px solid var(--line);cursor:pointer;background:0 0;padding:4px 12px;display:none}.side-nav{margin-top:28px}.side-group+.side-group{margin-top:20px}.side-group-title{letter-spacing:.3em;color:var(--ink-soft);margin:0 8px 6px;font-size:11px}.side-link{border-radius:2px;padding:7px 10px;text-decoration:none;display:block}.side-link:hover{background:var(--oat-deep)}.side-link.is-active{background:var(--ink);color:var(--oat)}.side-user{border-top:1px solid var(--line);margin-top:32px;padding-top:16px}.side-user-name{word-break:break-all;font-weight:500}.side-user-role{color:var(--lavender-deep);margin-bottom:8px;font-size:12px}.main{min-width:0;padding:28px 32px 80px}.page-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-bottom:24px;display:flex}.page-title{font-family:var(--font-mincho);letter-spacing:.15em;font-size:22px;font-weight:500}.page-actions{flex-wrap:wrap;gap:8px;display:flex}.gate{text-align:center;padding:64px 0}.gate-msg{margin-bottom:20px;font-size:15px}.gate-actions{justify-content:center;gap:12px;display:flex}@media (width<=860px){.app{grid-template-columns:1fr}.side{z-index:30;border-right:0;border-bottom:1px solid var(--line);height:auto;padding:12px 16px;position:sticky}.side-toggle{display:block}.side-nav{margin-top:12px;display:none}.side-open .side-nav{display:block}.main{padding:20px 16px 80px}}.btn{border:1px solid var(--ink);letter-spacing:.08em;cursor:pointer;white-space:nowrap;background:0 0;justify-content:center;align-items:center;gap:6px;padding:8px 16px;font-size:13px;text-decoration:none;transition:background .2s,color .2s;display:inline-flex}.btn:hover{background:var(--ink);color:var(--oat)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn--primary{background:var(--ink);color:var(--oat)}.btn--primary:hover{background:#3a3442}.btn--lemon{background:var(--lemon);border-color:var(--lemon);color:var(--ink)}.btn--lemon:hover{color:var(--ink);background:#dcc872}.btn--ghost{border-color:var(--line)}.btn--ghost:hover{background:var(--oat-deep);color:var(--ink)}.btn--danger{border-color:var(--error);color:var(--error)}.btn--danger:hover{background:var(--error);color:#fff}.btn--sm{padding:4px 10px;font-size:12px}.btn--lg{padding:14px 24px;font-size:16px}.btn--block{width:100%}.link-btn{color:var(--lavender-deep);cursor:pointer;font-size:inherit;background:0 0;border:0;padding:0;text-decoration:underline}.icon-btn{cursor:pointer;color:var(--ink-soft);background:0 0;border:0;padding:4px;font-size:16px;line-height:1}.icon-btn:hover{color:var(--error)}.fld{display:block}.fld>span{color:var(--ink-soft);margin-bottom:4px;font-size:12px;display:block}.fld input,.fld select,.fld textarea,.input{border:1px solid var(--line);background:#fff;border-radius:2px;outline:none;width:100%;padding:8px 10px}.fld input:focus,.fld select:focus,.fld textarea:focus,.input:focus{border-color:var(--lavender-deep)}.fld-err{color:var(--error);margin-top:4px;font-size:12px}.fld-row{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;display:grid}.fld-stack>*+*{margin-top:12px}.check{cursor:pointer;align-items:center;gap:6px;display:inline-flex}.check input{width:16px;height:16px;accent-color:var(--ink)}.seg{border:1px solid var(--line);background:#fff;display:inline-flex}.seg label{cursor:pointer}.seg input{opacity:0;pointer-events:none;position:absolute}.seg span{padding:6px 12px;font-size:13px;display:block}.seg input:checked+span{background:var(--ink);color:var(--oat)}.seg input:focus-visible+span{outline:2px solid var(--lavender-deep)}.card{background:var(--paper);border:1px solid var(--line);padding:20px}.card+.card{margin-top:16px}.card-title{font-family:var(--font-mincho);letter-spacing:.12em;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;font-size:15px;font-weight:500;display:flex}.grid{gap:16px;display:grid}.grid--2{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}.grid--stats{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}.stat{background:var(--paper);border:1px solid var(--line);padding:14px 16px}.stat-label{color:var(--ink-soft);letter-spacing:.1em;font-size:12px}.stat-value{font-family:var(--font-script);font-size:34px;line-height:1.1}.stat-sub{color:var(--ink-soft);font-size:12px}.stat--accent{background:var(--lemon-soft);border-color:var(--lemon)}.alert{border:1px solid;margin:12px 0;padding:12px 14px}.alert--warn{color:var(--error);background:#fbe9e9;border-color:#edc4c4}.alert--info{background:var(--lemon-soft);border-color:var(--lemon)}.badge{letter-spacing:.05em;border:1px solid var(--line);white-space:nowrap;vertical-align:middle;background:#fff;padding:1px 8px;font-size:11px;display:inline-block}.badge--groom{color:#4a5e78;background:#e8eef5;border-color:#c9d6e6}.badge--bride{color:#7a4a5e;background:#f5e8ee;border-color:#e6c9d6}.badge--both{background:var(--lemon-soft);border-color:var(--lemon)}.badge--attending{color:#46663e;background:#e7f0e4;border-color:#c5dac0}.badge--declined{color:#777;background:#eee}.badge--pending{color:#7a6320;background:#fff6db;border-color:#f0dc9a}.badge--demo{background:var(--lavender);border-color:var(--lavender);color:#fff}.badge--veg{color:#46663e;background:#e7f0e4;border-color:#c5dac0}.badge--void{color:var(--ink-soft);text-decoration:line-through}.badge--warn{color:var(--error);background:#fbe9e9;border-color:#edc4c4}.toolbar{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px;display:flex}.toolbar .input{flex:1;width:auto;min-width:200px;max-width:320px}.toolbar select.input{flex:none;min-width:0}.table-wrap{background:var(--paper);border:1px solid var(--line);overflow-x:auto}.table{border-collapse:collapse;width:100%;font-size:13px}.table th{text-align:left;color:var(--ink-soft);background:var(--oat-deep);white-space:nowrap;padding:8px 10px;font-size:12px;font-weight:500;position:sticky;top:0}.table td{border-top:1px solid var(--line);vertical-align:top;padding:8px 10px}.table tr.is-click{cursor:pointer}.table tr.is-click:hover td{background:#fff}.table tr.is-void td{color:var(--ink-soft);text-decoration:line-through}.table .r{text-align:right}.table input.input,.table select.input{padding:4px 6px}.empty{text-align:center;color:var(--ink-soft);padding:32px}.dialog{border:1px solid var(--line);background:var(--paper);width:min(520px,100vw - 32px);max-height:calc(100vh - 32px);color:var(--ink);margin:auto;padding:0}.dialog--wide{width:min(820px,100vw - 32px)}.dialog::backdrop{background:#3a344259}.dialog-form{flex-direction:column;max-height:calc(100vh - 34px);display:flex}.dialog-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.dialog-title{font-family:var(--font-mincho);letter-spacing:.1em;font-size:16px;font-weight:500}.dialog-close{cursor:pointer;color:var(--ink-soft);background:0 0;border:0;font-size:22px;line-height:1}.dialog-body{padding:20px;overflow-y:auto}.dialog-actions{border-top:1px solid var(--line);justify-content:flex-end;gap:8px;padding:12px 20px;display:flex}.toasts{z-index:100;gap:8px;width:min(420px,100vw - 32px);display:grid;position:fixed;bottom:24px;left:50%;transform:translate(-50%)}.toast{background:var(--ink);color:#fff;padding:12px 16px;font-size:14px;transition:opacity .4s,transform .4s;box-shadow:0 8px 24px #00000026}.toast--error{background:var(--error)}.toast--warn{background:#8a6d1f}.toast.is-out{opacity:0;transform:translateY(8px)}.chip{border:1px solid var(--line);border-left:3px solid var(--line);cursor:grab;user-select:none;background:#fff;align-items:center;gap:4px;max-width:100%;padding:3px 8px;font-size:12px;line-height:1.5;display:inline-flex}.chip[data-side=groom]{border-left-color:#8fa7c4}.chip[data-side=bride]{border-left-color:#c48fa7}.chip[data-side=both]{border-left-color:var(--lemon)}.chip.is-selected{outline:2px solid var(--lavender-deep);background:var(--lavender-pale,#eee8f5)}.chip small{color:var(--ink-soft);font-size:10px}.chip .tag{background:var(--oat-deep);padding:0 4px;font-size:10px}.chip .tag--veg{color:#46663e;background:#e7f0e4}.chip .tag--seat{background:var(--lemon-soft)}.chip .tag--infant{color:#777;background:#eee}@media print{.side,.page-head,.toolbar,.no-print,.toasts{display:none!important}.app{display:block}.main{padding:0}body.admin{background:#fff;font-size:12px}.card,.table-wrap,.seat-table{break-inside:avoid;border-color:#999}}.print-only{display:none}@media print{.print-only{display:block}.print-title{font-family:var(--font-mincho);margin:0 0 8px;font-size:18px}.print-grid{grid-template-columns:repeat(3,1fr);gap:8px;display:grid}.print-table{break-inside:avoid;border:1px solid #999;padding:6px 8px}.print-table h3{margin-bottom:4px;font-size:13px}.print-table li{font-size:11px;list-style:none}.print-page{break-before:page}}
