:root{--bg:#f4f5f7;--surface:#ffffff;--surface-muted:#f8f9fb;--text:#1c2430;--muted:#667085;--line:#dde2ea;--accent:#0f766e;--accent-strong:#0b5f59;--accent-soft:#e6f4f2;--danger:#b42318;--danger-soft:#fdecea;--warning:#b54708;--warning-soft:#fff4e5;--positive:#067647;--positive-soft:#e7f6ee;--seat-free:#ffffff;--seat-vip:#fff7e0;--seat-vip-line:#d4a017;--seat-couple:#fdeef4;--seat-couple-line:#d0628f;--seat-booked:#5b6472;--seat-locked:#c3c9d3;--seat-mine:#f2c66d;--radius:12px;--shadow:0 1px 2px rgba(16,24,40,0.06),0 1px 3px rgba(16,24,40,0.08)}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:15px;line-height:1.5}body,dd,dl,h1,h2,h3,p{margin:0}a{color:inherit;text-decoration:none}button,input,select{font:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.muted{color:var(--muted)}.small{font-size:13px}.center{text-align:center}.button,button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:40px;padding:0 16px;border:1px solid var(--accent);border-radius:8px;background:var(--accent);color:#fff;font-weight:600;cursor:pointer;white-space:nowrap;transition:background .15s,border-color .15s}.button:hover,button:hover:not(:disabled){background:var(--accent-strong);border-color:var(--accent-strong)}button:disabled{opacity:.5;cursor:not-allowed}.button.ghost,button.ghost{background:transparent;color:var(--accent);border-color:var(--line)}.button.ghost:hover,button.ghost:hover:not(:disabled){background:var(--accent-soft);border-color:var(--accent)}button.danger{background:var(--danger);border-color:var(--danger)}button.danger:hover:not(:disabled){background:#912018;border-color:#912018}button.danger-text{color:var(--danger)}button.danger-text:hover:not(:disabled){background:var(--danger-soft);border-color:var(--danger)}.button.small,button.small{min-height:32px;padding:0 12px;font-size:13px}.button.block,button.block{width:100%}.actionsRow{display:flex;flex-wrap:wrap;gap:10px;justify-content:center}.topbar{position:sticky;top:0;z-index:20;background:var(--surface);border-bottom:1px solid var(--line)}.topbarInner{gap:24px;max-width:1120px;margin:0 auto;padding:0 16px;min-height:60px}.brand,.topbarInner{display:flex;align-items:center}.brand{gap:8px;font-weight:700;font-size:17px}.brandMark{display:inline-grid;place-items:center;width:28px;height:28px;border-radius:8px;background:var(--accent);color:#fff;font-size:12px}.mainNav{display:flex;gap:4px;flex:1}.mainNav a{padding:8px 12px;border-radius:8px;color:var(--muted);font-weight:600}.mainNav a:hover{color:var(--text);background:var(--surface-muted)}.mainNav a.active{color:var(--accent);background:var(--accent-soft)}.sessionBox{display:flex;align-items:center;gap:10px;min-width:0}.sessionEmail{color:var(--muted);font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:220px}.page{max-width:1120px;margin:0 auto;padding:24px 16px 120px}.pageHeader{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:20px}.pageHeader h1{font-size:26px;line-height:1.25}.pageHeader p{margin-top:4px}.pageActions{display:flex;gap:8px;flex-shrink:0}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow)}.panelTitle{font-size:17px;margin-bottom:12px}.narrowPanel{max-width:520px}.stack{display:grid;gap:14px}.sectionTitle{font-size:15px;color:var(--muted);margin-top:12px}.notice{padding:12px 14px;margin-bottom:16px;border-radius:8px;background:var(--warning-soft);color:var(--warning);font-size:14px}.bookingSteps{display:flex;gap:4px;list-style:none;padding:0;margin:0 0 20px;overflow-x:auto}.bookingStep{flex:1;min-width:0;padding:8px 4px;border-top:3px solid var(--line);color:var(--muted);font-size:13px;font-weight:600;white-space:nowrap}.bookingStep,.bookingStep a{display:flex;align-items:center;gap:8px}.bookingStep a:hover .stepLabel{text-decoration:underline}.bookingStep.done{border-top-color:var(--accent);color:var(--text)}.bookingStep.current{border-top-color:var(--accent);color:var(--accent)}.stepIndex{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:50%;background:var(--line);color:var(--text);font-size:12px;flex-shrink:0}.bookingStep.current .stepIndex,.bookingStep.done .stepIndex{background:var(--accent);color:#fff}.grid{display:grid;gap:16px}.cinemaGrid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr))}.movieGrid{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}.card{display:flex;flex-direction:column;gap:4px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow);transition:border-color .15s,transform .15s}.card:hover{border-color:var(--accent);transform:translateY(-1px)}.cardEyebrow{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--accent)}.cardTitle{font-size:16px;line-height:1.35}.movieCard{padding:0;overflow:hidden}.movieCardBody{display:flex;flex-direction:column;gap:6px;padding:12px 14px 14px}.badgeRow{display:flex;flex-wrap:wrap;gap:6px}.ageBadge,.statusBadge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;font-size:12px;font-weight:600;white-space:nowrap}.statusBadge.positive{background:var(--positive-soft);color:var(--positive)}.statusBadge.warning{background:var(--warning-soft);color:var(--warning)}.statusBadge.negative{background:var(--danger-soft);color:var(--danger)}.statusBadge.neutral{background:var(--surface-muted);color:var(--muted);border:1px solid var(--line)}.ageBadge{border:1px solid var(--text);border-radius:4px;color:var(--text)}.poster{display:block;width:100%;aspect-ratio:2/3;object-fit:cover;background:var(--surface-muted)}.poster-lg{width:180px;border-radius:10px;flex-shrink:0}.posterFallback{display:grid;place-items:center;background:linear-gradient(145deg,#134e4a,#0f766e);color:rgba(255,255,255,.85);font-size:34px;font-weight:700;letter-spacing:.05em}.filterBar{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:18px}.filterBar input{flex:1;min-width:200px;max-width:360px}.chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}.filterBar .chips{margin-bottom:0}.chip{min-height:34px;padding:0 14px;border-radius:999px;border:1px solid var(--line);background:var(--surface);color:var(--text);font-weight:500}.chip:hover:not(:disabled){background:var(--accent-soft);border-color:var(--accent)}.chip.active{background:var(--accent);border-color:var(--accent);color:#fff}input{width:100%;min-height:42px;padding:0 12px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--text)}input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}input[aria-invalid=true]{border-color:var(--danger)}form{gap:14px}.field,form{display:grid}.field{gap:6px;font-size:14px;font-weight:600}.fieldRow{display:grid;grid-template-columns:1fr 1fr;gap:14px}.fieldError,.formError{color:var(--danger);font-size:13px;font-weight:500}.formError{padding:10px 12px;border-radius:8px;background:var(--danger-soft)}.hint{color:var(--muted);font-size:13px}.passwordInput{position:relative;display:block}.passwordInput input{padding-right:64px}.passwordInput button{position:absolute;top:50%;right:6px;transform:translateY(-50%);border:none}.segmented{display:inline-flex;padding:4px;margin-bottom:18px;border-radius:10px;background:#e9ecf1;gap:4px}.segmented button{min-height:36px;border:none;background:transparent;color:var(--muted)}.segmented button:hover:not(:disabled){background:rgba(255,255,255,.6);color:var(--text)}.segmented button.active{background:var(--surface);color:var(--text);box-shadow:var(--shadow)}.authPage{display:grid;place-items:center;min-height:calc(100vh - 200px)}.authCard{width:100%;max-width:420px;padding:28px;background:var(--surface);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow)}.authCard h1{font-size:24px}.authCard>p{margin:4px 0 20px}.authCard .segmented{display:flex}.authCard .segmented button{flex:1}.movieDetail{display:flex;gap:24px;margin-bottom:20px}.movieDetailBody{display:flex;flex-direction:column;gap:10px;flex:1;min-width:0}.movieDetailBody h2{font-size:22px}.facts{display:flex;flex-wrap:wrap;gap:8px 28px}.facts dt,.summaryList dt,.ticketFacts dt{color:var(--muted);font-size:12px}.facts dd{font-weight:600}.description{color:#344054;max-width:70ch}.dayTabs{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px;margin-bottom:16px}.dayTab{flex-direction:column;gap:0;min-width:84px;min-height:58px;padding:6px 12px;border:1px solid var(--line);background:var(--surface);color:var(--text);font-weight:500}.dayTab span{font-size:12px;color:var(--muted)}.dayTab:hover:not(:disabled){background:var(--accent-soft);border-color:var(--accent)}.dayTab.active{background:var(--accent);border-color:var(--accent);color:#fff}.dayTab.active span{color:rgba(255,255,255,.85)}.timeGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}.timeSlot{display:flex;flex-direction:column;padding:10px 12px;border:1px solid var(--line);border-radius:10px;transition:border-color .15s,background .15s}.timeSlot strong{font-size:20px}.timeSlot:hover{border-color:var(--accent);background:var(--accent-soft)}.seatsPage{padding-bottom:40px}.seatMapScroll{overflow-x:auto;padding-bottom:8px;-webkit-overflow-scrolling:touch}.seatMap{display:grid;gap:8px;justify-content:center;min-width:max-content;margin:0 auto;padding:0 4px}.screen{margin:0 auto 18px;width:80%;padding:6px 0 10px;border-top:4px solid #98a2b3;border-radius:50% 50% 0 0/14px 14px 0 0;color:var(--muted);font-size:12px;letter-spacing:.3em;text-align:center;text-transform:uppercase}.seatRow{display:flex;align-items:center;gap:6px;justify-content:center}.rowLabel{width:20px;text-align:center;color:var(--muted);font-size:12px;font-weight:700}.seat{min-height:0;width:34px;height:32px;padding:0;border:1px solid #98a2b3;border-radius:6px 6px 8px 8px;background:var(--seat-free);color:var(--text);font-size:12px;font-weight:600}.seat:hover:not(:disabled){background:var(--accent-soft);border-color:var(--accent)}.seat.type-vip{background:var(--seat-vip);border-color:var(--seat-vip-line)}.seat.couple{width:74px;background:var(--seat-couple);border-color:var(--seat-couple-line);font-size:11px}.seat.selected,.seat.selected:hover:not(:disabled){background:var(--accent);border-color:var(--accent);color:#fff}.seat.booked{background:var(--seat-booked);border-color:var(--seat-booked);color:transparent}.seat.locked{background:var(--seat-locked);border-color:var(--seat-locked);color:transparent}.seat.mine{background:var(--seat-mine);border-color:#c99a2e}.seat:disabled{opacity:1}.seatLegend{justify-content:center;gap:12px 32px;margin-top:22px;padding-top:16px;border-top:1px solid var(--line)}.legendGroup,.seatLegend{display:flex;flex-wrap:wrap}.legendGroup{gap:10px 18px}.legendItem{display:inline-flex;align-items:center;gap:8px;font-size:13px}.seat.sample{display:inline-block;width:20px;height:18px}.seat.sample.couple{width:34px}.summaryBar{position:fixed;left:0;right:0;bottom:0;z-index:15;background:var(--surface);border-top:1px solid var(--line);box-shadow:0 -4px 12px rgba(16,24,40,.06)}.summaryInner{display:flex;align-items:center;gap:20px;max-width:1120px;margin:0 auto;padding:12px 16px}.summaryText{display:flex;flex-direction:column;flex:1;min-width:0}.summaryText strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.summaryTotal{display:flex;flex-direction:column;align-items:flex-end}.summaryTotal strong{font-size:18px}.paymentLayout{display:grid;grid-template-columns:minmax(280px,360px) 1fr;gap:20px;align-items:start}.paymentPanel{gap:14px}.holdTimer,.paymentPanel{display:flex;flex-direction:column;align-items:center}.countdown{font-variant-numeric:tabular-nums;font-weight:700}.holdTimer .countdown{font-size:32px;color:var(--accent)}.countdown.urgent,.holdTimer .countdown.urgent{color:var(--danger)}.qrBox{padding:10px;border:1px solid var(--line);border-radius:12px;background:#fff;line-height:0}.amount{font-size:24px;font-weight:700}.summaryList{display:grid;gap:12px;margin-bottom:18px}.summaryList dd{font-weight:600}.totalRow{padding-top:12px;border-top:1px dashed var(--line)}.totalRow dd{font-size:20px;color:var(--accent)}.confirmBox{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;padding:12px;border-radius:8px;background:var(--danger-soft)}.ticket{display:flex;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.ticket.highlight{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.ticket.past{opacity:.7}.ticketMain{flex:1;padding:18px 20px;min-width:0}.ticketHeader{display:flex;align-items:center;gap:10px;margin-bottom:12px}.ticketTitle{font-size:18px}.ticketFacts{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px 18px}.ticketFacts dd{font-weight:600}.ticketStub{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:16px;border-left:2px dashed var(--line);background:var(--surface-muted)}.historyList{display:grid;gap:10px;list-style:none;padding:0;margin:0}.historyItem{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 16px;background:var(--surface);border:1px solid var(--line);border-radius:10px}.historyMain{display:flex;flex-direction:column;min-width:0}.historyHeader{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.historyAction{display:flex;flex-direction:column;align-items:flex-end;gap:6px;flex-shrink:0}.pendingBanner{background:var(--warning-soft);border-bottom:1px solid #f5d9b0;color:#7a2e0e}.pendingBannerInner{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;max-width:1120px;margin:0 auto;padding:10px 16px;font-size:14px}.emptyState{display:flex;flex-direction:column;align-items:center;gap:8px;grid-column:1/-1;padding:40px 20px;text-align:center;background:var(--surface);border:1px dashed var(--line);border-radius:var(--radius)}.emptyState strong{font-size:17px}.emptyState p{color:var(--muted);max-width:48ch}.emptyState .actionsRow,.emptyState .button{margin-top:8px}.skeleton{display:block;background:linear-gradient(90deg,#e9ecf1 25%,#f4f5f7 50%,#e9ecf1 75%);background-size:200% 100%;animation:shimmer 1.4s infinite}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.toastStack{position:fixed;top:72px;right:16px;z-index:50;display:grid;gap:8px;width:min(380px,calc(100vw - 32px))}.toast{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border-radius:10px;background:var(--text);color:#fff;box-shadow:0 8px 24px rgba(16,24,40,.18);font-size:14px;animation:toastIn .18s ease-out}.toast span{flex:1}.toast-success{background:var(--positive)}.toast-error{background:var(--danger)}.toastClose{min-height:0;padding:0 4px;border:none;background:transparent;font-size:18px;line-height:1}.toastClose:hover:not(:disabled){background:rgba(255,255,255,.15);border:none}@keyframes toastIn{0%{opacity:0;transform:translateY(-6px)}}@media (prefers-reduced-motion:reduce){*,:after,:before{animation:none!important;transition:none!important}}@media (max-width:760px){.topbarInner{flex-wrap:wrap;gap:8px 16px;padding:8px 16px 0}.brand{flex:1}.mainNav{order:3;flex-basis:100%;overflow-x:auto}.mainNav a{padding:10px 12px;border-radius:8px 8px 0 0}.sessionEmail{display:none}.page{padding-top:16px}.pageHeader{flex-direction:column;align-items:stretch}.pageHeader h1{font-size:22px}.bookingStep{flex:0 0 auto;min-width:34px}.bookingStep.current{flex:1 1 auto;min-width:0}.stepLabel{display:none}.bookingStep.current .stepLabel{display:inline;overflow:hidden;text-overflow:ellipsis}.seatsPage .panel{padding:14px 8px}.seatMap{gap:6px;padding:0}.seatRow{gap:4px}.rowLabel{width:14px;font-size:11px}.seat{width:25px;height:26px;font-size:11px}.seat.couple{width:54px;font-size:10px}.seatLegend{gap:10px}.movieGrid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}.movieDetail{gap:16px}.poster-lg{width:110px}.fieldRow{grid-template-columns:1fr}.panel{padding:16px}.paymentLayout{grid-template-columns:1fr}.summaryInner{flex-wrap:wrap;gap:10px 16px}.summaryInner button{flex-basis:100%}.ticket{flex-direction:column}.ticketStub{flex-direction:row;border-left:none;border-top:2px dashed var(--line)}.historyItem{flex-direction:column;align-items:stretch}.historyAction{flex-direction:row;align-items:center;justify-content:space-between}.toastStack{top:auto;bottom:16px}}