:root{--primary: #10b981;--primary-light: #ecfdf5;--primary-dark: #059669;--primary-glow: rgba(16,185,129,.15);--text: #1f2937;--text-secondary: #6b7280;--text-hint: #9ca3af;--bg: #f5f7fa;--card-bg: #ffffff;--border: #e5e7eb;--danger: #ef4444;--warning: #f59e0b;--info: #3b82f6;--radius: 12px;--radius-sm: 8px;--shadow: 0 2px 12px rgba(0,0,0,.06);--shadow-sm: 0 1px 4px rgba(0,0,0,.04)}*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,PingFang SC,Microsoft YaHei,Helvetica Neue,sans-serif;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;max-width:100vw;overflow-x:hidden}#root{min-height:100vh}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes pulse{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}@keyframes shimmer{0%{background-position:-200px 0}to{background-position:200px 0}}.fade-in{animation:fadeIn .3s ease-out}.slide-up{animation:slideUp .4s ease-out}.h5-header{height:52px;background:linear-gradient(135deg,var(--primary),#34d399);display:flex;align-items:center;justify-content:center;color:#fff;font-size:16px;font-weight:600;position:sticky;top:0;z-index:100;box-shadow:0 2px 8px #10b98133}.h5-header-back{position:absolute;left:12px;font-size:20px;cursor:pointer;padding:4px 8px;border-radius:50%;transition:background .15s}.h5-header-back:active{background:#fff3}.welcome-banner{background:linear-gradient(135deg,var(--primary),#34d399);padding:20px 16px 24px;color:#fff;position:relative;overflow:hidden}.welcome-banner:after{content:"";position:absolute;right:-20px;bottom:-20px;width:120px;height:120px;border-radius:50%;background:#ffffff1a}.welcome-greeting{font-size:13px;opacity:.9}.welcome-name{font-size:20px;font-weight:700;margin-top:4px}.welcome-tip{font-size:12px;opacity:.8;margin-top:6px}.search-bar{padding:12px 16px 8px;background:var(--card-bg)}.search-bar input{width:100%;padding:10px 14px 10px 36px;border-radius:20px;border:1.5px solid var(--border);background:var(--bg) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%239ca3af' viewBox='0 0 16 16'%3E%3Cpath d='M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85zm-5.242.156a5 5 0 1 1 0-10 5 5 0 0 1 0 10z'/%3E%3C/svg%3E") 12px center no-repeat;font-size:13px;outline:none;color:var(--text);transition:border-color .2s,box-shadow .2s}.search-bar input:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-glow)}.type-chips{display:flex;gap:8px;padding:10px 16px 12px;overflow-x:auto;-webkit-overflow-scrolling:touch;background:var(--card-bg)}.type-chips::-webkit-scrollbar{display:none}.type-chip{padding:6px 16px;border-radius:16px;font-size:12px;white-space:nowrap;cursor:pointer;border:1.5px solid var(--border);background:var(--card-bg);color:var(--text-secondary);transition:all .2s;flex-shrink:0}.type-chip.active{background:var(--primary);color:#fff;border-color:var(--primary);box-shadow:0 2px 8px #10b9814d}.section-title{font-size:15px;font-weight:700;color:var(--text);margin:16px 16px 10px}.venue-card{margin:0 16px 12px;border-radius:var(--radius);border:none;overflow:hidden;background:var(--card-bg);box-shadow:var(--shadow-sm);transition:transform .2s,box-shadow .2s;animation:fadeIn .3s ease-out backwards}.venue-card:active{transform:scale(.98)}.venue-card-img{height:100px;display:flex;align-items:center;justify-content:center;font-size:32px;position:relative}.venue-card-img .venue-card-badge{position:absolute;top:8px;right:8px;background:#0006;color:#fff;font-size:10px;padding:2px 8px;border-radius:10px}.venue-card-info{padding:12px 14px}.venue-card-name{font-size:15px;font-weight:600;color:var(--text)}.venue-card-location{font-size:12px;color:var(--text-hint);margin-top:3px;display:flex;align-items:center;gap:4px}.venue-card-location:before{content:"📍";font-size:10px}.venue-card-meta{font-size:12px;color:var(--text-hint);margin-top:6px;display:flex;align-items:center;gap:12px}.venue-card-meta .meta-item{display:flex;align-items:center;gap:3px}.venue-card-bottom{display:flex;justify-content:space-between;align-items:center;margin-top:10px;padding-top:10px;border-top:1px solid var(--border)}.venue-capacity{font-size:16px;font-weight:700;color:var(--primary)}.venue-capacity span{font-size:12px;font-weight:400;color:var(--text-hint)}.btn-book{padding:7px 18px;border-radius:16px;background:var(--primary);color:#fff;font-size:13px;font-weight:500;border:none;cursor:pointer;transition:all .2s;box-shadow:0 2px 6px #10b9814d}.btn-book:active{background:var(--primary-dark);transform:scale(.96)}.tab-bar{display:flex;border-top:1px solid var(--border);background:var(--card-bg);position:fixed;bottom:0;left:0;right:0;z-index:100;padding-bottom:env(safe-area-inset-bottom);box-shadow:0 -2px 10px #0000000a}.tab-item{flex:1;padding:6px 0 8px;text-align:center;font-size:10px;color:var(--text-hint);cursor:pointer;transition:color .2s;position:relative}.tab-item.active{color:var(--primary);font-weight:600}.tab-item.active:before{content:"";position:absolute;top:0;left:50%;transform:translate(-50%);width:24px;height:2px;background:var(--primary);border-radius:1px}.tab-icon{font-size:22px;margin-bottom:1px;display:block}.booking-body{padding:16px}.booking-venue-name{font-size:18px;font-weight:700;color:var(--text);margin-bottom:4px}.booking-venue-info{font-size:12px;color:var(--text-hint);margin-bottom:16px;display:flex;align-items:center;gap:6px}.date-chips{display:flex;gap:8px;margin-bottom:16px}.date-chip{flex:1;padding:10px 8px;border-radius:var(--radius-sm);border:1.5px solid var(--border);font-size:12px;color:var(--text-secondary);cursor:pointer;transition:all .2s;text-align:center;background:var(--card-bg)}.date-chip .date-chip-day{display:block;font-size:14px;font-weight:700;margin-bottom:2px}.date-chip.active{background:var(--primary);color:#fff;border-color:var(--primary);box-shadow:0 2px 8px #10b9814d}.date-chip.active .date-chip-day{color:#fff}.time-section-label{font-size:13px;font-weight:600;color:var(--text-secondary);margin:12px 0 8px;display:flex;align-items:center;gap:6px}.time-section-label:before{content:"";width:3px;height:14px;background:var(--primary);border-radius:2px}.time-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.time-slot{padding:10px 6px;text-align:center;border-radius:var(--radius-sm);font-size:13px;font-weight:500;border:1.5px solid var(--border);cursor:pointer;color:var(--text);transition:all .2s;background:var(--card-bg)}.time-slot.selected{background:var(--primary);color:#fff;border-color:var(--primary);box-shadow:0 2px 8px #10b9814d;transform:scale(1.02)}.time-slot.disabled{background:#f9fafb;color:#d1d5db;cursor:not-allowed;border-color:#f3f4f6}.time-slot-label{font-size:10px;display:block;margin-top:2px;opacity:.8}.price-card{background:var(--primary-light);border-radius:var(--radius-sm);padding:14px;margin-top:12px;border:1px solid #d1fae5}.price-row{font-size:14px;color:var(--text);display:flex;justify-content:space-between;font-weight:500}.price-value{color:var(--primary);font-weight:700;font-size:16px}.price-hint{font-size:12px;color:var(--text-hint);margin-top:4px}.confirm-btn{width:100%;padding:14px;border-radius:24px;background:linear-gradient(135deg,var(--primary),#34d399);color:#fff;font-size:16px;font-weight:600;border:none;cursor:pointer;margin-top:20px;transition:all .2s;box-shadow:0 4px 12px #10b9814d}.confirm-btn:active{transform:scale(.98);box-shadow:0 2px 6px #10b98133}.confirm-btn:disabled{background:#d1d5db;box-shadow:none;cursor:not-allowed}.success-card{text-align:center;padding:40px 20px;animation:slideUp .5s ease-out}.success-icon{font-size:56px;margin-bottom:16px}.success-title{font-size:20px;font-weight:700;color:var(--text);margin-bottom:8px}.success-info{font-size:14px;color:var(--text-secondary);margin-bottom:4px}.success-price{font-size:18px;font-weight:700;color:var(--primary);margin-top:12px}.success-booking-no{font-size:12px;color:var(--text-hint);margin-top:8px;background:var(--bg);display:inline-block;padding:4px 12px;border-radius:4px}.booking-list{padding:12px 16px}.booking-item{background:var(--card-bg);border-radius:var(--radius);padding:14px;margin-bottom:10px;box-shadow:var(--shadow-sm);animation:fadeIn .3s ease-out backwards;border-left:3px solid var(--primary)}.booking-item.cancelled{border-left-color:var(--text-hint);opacity:.75}.booking-item-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.booking-item-no{font-size:12px;font-weight:600;color:var(--text);font-family:monospace}.booking-item-status{font-size:11px;padding:3px 10px;border-radius:10px;font-weight:600}.status-confirmed{background:#ecfdf5;color:#059669}.status-cancelled{background:#fef2f2;color:#dc2626}.booking-item-body{font-size:13px;color:var(--text-secondary);line-height:1.9}.booking-item-venue{font-weight:600;color:var(--text);font-size:14px}.booking-item-date{display:flex;align-items:center;gap:4px}.booking-item-time{display:inline-flex;align-items:center;background:var(--primary-light);color:var(--primary-dark);padding:1px 8px;border-radius:4px;font-size:12px;font-weight:500}.btn-cancel{margin-top:10px;padding:6px 16px;border-radius:16px;border:1.5px solid var(--danger);background:#fff;color:var(--danger);font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.btn-cancel:active{background:#fef2f2;transform:scale(.96)}.profile-card{background:linear-gradient(135deg,var(--primary),#34d399);padding:32px 20px 28px;color:#fff;display:flex;align-items:center;gap:16px;position:relative;overflow:hidden}.profile-card:after{content:"";position:absolute;right:-30px;top:-30px;width:140px;height:140px;border-radius:50%;background:#ffffff14}.profile-avatar{width:60px;height:60px;border-radius:50%;background:#fff3;display:flex;align-items:center;justify-content:center;font-size:26px;font-weight:700;border:2px solid rgba(255,255,255,.3)}.profile-name{font-size:18px;font-weight:700}.profile-phone{font-size:13px;opacity:.85;margin-top:4px}.profile-menu{margin:16px}.profile-menu-item{background:var(--card-bg);border-radius:var(--radius-sm);padding:14px 16px;margin-bottom:8px;display:flex;justify-content:space-between;align-items:center;font-size:14px;color:var(--text);cursor:pointer;box-shadow:var(--shadow-sm);transition:transform .15s}.profile-menu-item:active{transform:scale(.98)}.profile-menu-arrow{color:var(--text-hint);font-size:14px}.login-page{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;background:linear-gradient(135deg,#ecfdf5,#d1fae5,#a7f3d0)}.login-logo{font-size:44px;margin-bottom:8px}.login-title{font-size:24px;font-weight:800;color:var(--primary);margin-bottom:4px}.login-subtitle{font-size:13px;color:var(--text-hint);margin-bottom:40px;letter-spacing:2px}.login-form{width:100%;max-width:340px}.login-input{width:100%;padding:12px 16px;border-radius:10px;border:1px solid var(--border);font-size:14px;margin-bottom:12px;outline:none;background:#fff}.login-input:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-glow)}.login-btn{width:100%;padding:12px;border-radius:24px;background:var(--primary);color:#fff;font-size:15px;font-weight:600;border:none;cursor:pointer;margin-top:8px}.login-link{text-align:center;margin-top:16px;font-size:13px;color:var(--text-secondary)}.login-link a{color:var(--primary);text-decoration:none}.ygh-login-btn{width:100%;padding:14px;border-radius:24px;background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;font-size:16px;font-weight:600;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:8px;transition:transform .15s,box-shadow .15s;box-shadow:0 4px 16px #ef444459}.ygh-login-btn:active{transform:scale(.97)}.ygh-icon{font-size:20px}.login-divider{text-align:center;margin-top:20px;font-size:12px;color:var(--text-hint)}.empty-state{text-align:center;padding:80px 20px;color:var(--text-hint);animation:fadeIn .3s ease-out}.empty-icon{font-size:52px;margin-bottom:12px}.empty-state .empty-title{font-size:15px;font-weight:600;color:var(--text-secondary);margin-bottom:4px}.empty-state .empty-desc{font-size:13px}.person-count-section{margin-top:14px}.person-count-section label{font-size:14px;font-weight:600;color:var(--text);display:block;margin-bottom:8px}.person-count-input{width:100%;padding:10px 12px;border-radius:var(--radius-sm);border:1.5px solid var(--border);font-size:14px;outline:none;transition:border-color .2s}.person-count-input:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-glow)}.page-content{padding-bottom:70px}.skeleton{background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200px 100%;animation:shimmer 1.5s infinite;border-radius:var(--radius-sm)}.skeleton-card{height:140px;margin:0 16px 12px;border-radius:var(--radius)}.booking-filter-tabs{display:flex;gap:0;padding:0 16px;background:var(--card-bg);border-bottom:1px solid var(--border)}.booking-filter-tab{flex:1;padding:10px;text-align:center;font-size:13px;color:var(--text-secondary);cursor:pointer;border-bottom:2px solid transparent;transition:all .2s;font-weight:500}.booking-filter-tab.active{color:var(--primary);border-bottom-color:var(--primary);font-weight:600}.register-input{width:100%;padding:12px 16px;border-radius:10px;border:1px solid var(--border);font-size:14px;margin-bottom:12px;outline:none;background:#fff}.register-input:focus{border-color:var(--primary)}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#0006;z-index:9998;display:flex;align-items:center;justify-content:center;animation:fadeIn .2s ease-out;padding:20px}.modal-card{background:#fff;border-radius:16px;padding:28px 24px 20px;width:100%;max-width:300px;text-align:center;box-shadow:0 8px 32px #00000026;animation:slideUp .3s ease-out}.modal-icon{font-size:36px;margin-bottom:12px}.modal-title{font-size:17px;font-weight:700;color:var(--text);margin-bottom:6px}.modal-desc{font-size:13px;color:var(--text-hint);margin-bottom:20px}.modal-actions{display:flex;gap:10px}.modal-btn{flex:1;padding:10px 0;border-radius:20px;font-size:14px;font-weight:600;border:none;cursor:pointer;transition:all .15s}.modal-btn:active{transform:scale(.96)}.modal-btn-cancel{background:#f3f4f6;color:var(--text-secondary)}.modal-btn-danger{background:var(--danger);color:#fff;box-shadow:0 2px 8px #ef44444d}.time-empty-state{text-align:center;padding:32px 16px;color:var(--text-secondary);font-size:14px;font-weight:500;animation:fadeIn .3s ease-out}.profile-stats{display:flex;gap:10px;padding:0 16px;margin-top:-8px;margin-bottom:16px}.profile-stat-card{flex:1;background:var(--card-bg);border-radius:var(--radius-sm);padding:14px 10px;text-align:center;box-shadow:var(--shadow-sm)}.profile-stat-highlight{background:var(--primary-light);border:1px solid #d1fae5}.profile-stat-value{font-size:22px;font-weight:800;color:var(--text)}.profile-stat-highlight .profile-stat-value{color:var(--primary)}.profile-stat-label{font-size:11px;color:var(--text-hint);margin-top:2px}.status-past{background:#f3f4f6;color:#9ca3af}.booking-item.past{border-left-color:#d1d5db;opacity:.7}.booking-item.past .booking-item-venue{color:var(--text-hint)}.login-spinner{display:inline-block;width:18px;height:18px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .6s linear infinite;vertical-align:middle}@keyframes spin{to{transform:rotate(360deg)}}
