.player-shell{min-height:100dvh;background:var(--ds-bg,#f4f6f8);display:flex;flex-direction:column}.player-frame{display:contents}.player-main{flex:1 1;width:100%;max-width:560px;margin:0 auto;padding:var(--sp-lg,16px) var(--sp-lg,16px) calc(96px + 64px + env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:var(--sp-lg,16px)}.player-main.no-sticky{padding-bottom:calc(64px + env(safe-area-inset-bottom) + var(--sp-xl, 24px))}.player-header{padding-top:var(--sp-md,12px)}.player-club-logo{width:56px;height:56px;border-radius:14px;object-fit:cover;margin-bottom:var(--sp-sm,8px);border:1px solid var(--ds-border,#e2e7ec)}.player-eyebrow{font-size:var(--fs-caption,12px);font-weight:700;color:var(--ds-muted,#6b7c8a);text-transform:uppercase;letter-spacing:.05em}.player-club-name{font-size:var(--fs-h1,28px);font-weight:800;letter-spacing:-.02em;margin:2px 0 0}.player-tagline{color:var(--ds-muted,#6b7c8a);font-size:var(--fs-body,14px);margin-top:4px}.player-nav-link{margin-top:var(--sp-sm,8px);display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-small,13px);font-weight:700;color:var(--ds-primary,#de6435)}.player-section-title{font-weight:800;text-transform:uppercase;letter-spacing:.04em;margin-bottom:var(--sp-sm,8px)}.player-empty-note,.player-section-title{font-size:var(--fs-small,13px);color:var(--ds-muted,#6b7c8a)}.player-empty-note{padding:var(--sp-md,12px) 0}.alert{background:rgba(192,57,43,.16);border:1px solid rgba(192,57,43,.4);color:#ef6b5f;border-radius:10px;padding:11px 13px;font-size:14px}.player-form-alert{margin:var(--sp-sm,8px) 0}.date-scroller{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px;-webkit-overflow-scrolling:touch;scrollbar-width:none}.date-scroller::-webkit-scrollbar{display:none}.date-chip{flex:none;min-width:56px;padding:10px 8px;border-radius:var(--r-lg,14px);border:1.5px solid var(--ds-border,#e2e7ec);background:var(--ds-surface,#fff);color:var(--ds-text,#2b3a47);display:flex;flex-direction:column;align-items:center;gap:2px;font-weight:700;cursor:pointer;-webkit-tap-highlight-color:transparent}.date-chip .dow{font-size:var(--fs-caption,12px);font-weight:700;color:var(--ds-muted,#6b7c8a);text-transform:uppercase}.date-chip .dnum{font-size:17px;font-weight:800}.date-chip.is-active{border-color:var(--ds-primary,#de6435);background:var(--ds-primary-soft,#fbeceb)}.date-chip.is-active,.date-chip.is-active .dow{color:var(--ds-primary,#de6435)}.duration-seg{display:flex;gap:8px}.duration-seg button{flex:1 1;padding:12px 10px;min-height:44px;border:1.5px solid var(--ds-border,#e2e7ec);background:var(--ds-surface,#fff);border-radius:var(--r-md,10px);font-weight:700;font-size:14px;color:var(--ds-text-2,#4a5c6a);cursor:pointer}.duration-seg button.is-active{border-color:var(--ds-primary,#de6435);background:var(--ds-primary-soft,#fbeceb);color:var(--ds-primary,#de6435)}.court-scroller{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px;-webkit-overflow-scrolling:touch;scrollbar-width:none}.court-scroller::-webkit-scrollbar{display:none}.court-chip{flex:none;display:inline-flex;align-items:center;gap:8px;padding:10px 16px;min-height:44px;border-radius:var(--r-pill,999px);border:1.5px solid var(--ds-border,#e2e7ec);background:var(--ds-surface,#fff);font-weight:700;font-size:14px;color:var(--ds-text,#2b3a47);cursor:pointer}.court-chip.is-active{border-color:var(--ds-primary,#de6435);background:var(--ds-primary-soft,#fbeceb);color:var(--ds-primary,#de6435)}.court-dot{width:10px;height:10px;border-radius:50%;flex:none}.slot-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:8px;gap:8px}.slot-btn{position:relative;min-height:46px;border-radius:var(--r-md,10px);border:1.5px solid var(--ds-border,#e2e7ec);background:var(--ds-surface,#fff);font-weight:700;font-size:14px;color:var(--ds-text,#2b3a47);cursor:pointer;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.slot-btn.is-selected{border-color:var(--ds-primary,#de6435);background:var(--ds-primary,#de6435);color:#fff}.slot-btn:disabled{color:var(--ds-danger,#c0392b);background:var(--ds-surface-2,#f8fafb);text-decoration:line-through;cursor:not-allowed;border-color:var(--ds-border,#e2e7ec)}.slot-btn.is-occupied:disabled{color:var(--ds-danger,#c0392b);background:var(--ds-danger-soft,#fbe4e1);text-decoration:none;border-color:transparent}.slot-btn-cross{position:absolute;top:3px;right:4px;color:var(--ds-danger,#c0392b)}.booking-form{gap:var(--sp-md,12px)}.booking-form,.booking-summary{display:flex;flex-direction:column}.booking-summary{gap:2px;padding:var(--sp-md,12px) var(--sp-lg,16px);border-radius:var(--r-lg,14px);background:var(--ds-primary-soft,#fbeceb);color:var(--ds-primary,#de6435);font-weight:700}.booking-summary .muted-line{font-weight:500;color:var(--ds-text-2,#4a5c6a);font-size:var(--fs-small,13px)}.sticky-cta{position:fixed;bottom:64px;left:0;right:0;z-index:20;background:var(--ds-surface,#fff);border-top:1px solid var(--ds-border,#e2e7ec);padding:var(--sp-md,12px) var(--sp-lg,16px)}.sticky-cta-inner{max-width:560px;margin:0 auto}.sticky-cta .btn{width:100%;min-height:48px;font-size:16px}.player-state{flex:1 1;min-height:60dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:var(--sp-md,12px);padding:var(--sp-2xl,40px) var(--sp-lg,16px);color:var(--ds-muted,#6b7c8a)}.state-icon{width:64px;height:64px;border-radius:50%;display:grid;place-items:center;background:var(--ds-surface-2,#262320);color:var(--ds-muted,#6b7c8a)}.state-icon.is-danger{background:var(--ds-danger-soft,#fbe9e7);color:var(--ds-danger,#c0392b)}.player-state h2{font-size:var(--fs-h3,18px);color:var(--ds-text,#2b3a47);margin:0}.player-state p{margin:0;max-width:34ch}.receipt-code{font-size:28px;font-weight:800;letter-spacing:.04em;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.receipt-row{display:flex;justify-content:space-between;align-items:center;gap:var(--sp-md,12px);padding:10px 0;border-bottom:1px solid var(--ds-border,#e2e7ec);font-size:var(--fs-body,14px)}.receipt-row:last-child{border-bottom:none}.receipt-row .receipt-k{color:var(--ds-muted,#6b7c8a)}.receipt-row .receipt-v{font-weight:700;text-align:right}.token-box{display:flex;align-items:center;gap:var(--sp-sm,8px);padding:var(--sp-md,12px);border-radius:var(--r-md,10px);background:var(--ds-surface-2,#f8fafb);border:1px dashed var(--ds-border-strong,#cfd8df)}.token-box input{flex:1 1;min-width:0;border:none;background:none;font-family:ui-monospace,monospace;font-size:12px;color:var(--ds-text-2,#4a5c6a)}.token-box input:focus{outline:none}.receipt-actions{display:flex;flex-direction:column;gap:10px}.receipt-actions .btn{width:100%;min-height:48px}.confirm-cancel{display:flex;flex-direction:column;gap:var(--sp-sm,8px);padding:var(--sp-md,12px);border-radius:var(--r-md,10px);background:var(--ds-danger-soft,#fbe9e7)}.confirm-cancel p{margin:0;font-weight:700;color:var(--ds-danger,#c0392b);font-size:var(--fs-small,13px)}.confirm-cancel .row{display:flex;gap:8px}.confirm-cancel .row .btn{flex:1 1}.phone-lookup{display:flex;gap:8px}.phone-lookup .input{flex:1 1}.booking-list{display:flex;flex-direction:column;gap:8px}.booking-item{display:flex;align-items:center;gap:var(--sp-md,12px);padding:var(--sp-md,12px);border-radius:var(--r-lg,14px);border:1px solid var(--ds-border,#e2e7ec);background:var(--ds-surface,#fff)}.booking-item.is-linkable{cursor:pointer}.booking-item.is-linkable:active{background:var(--ds-surface-2,#f8fafb)}.booking-item-dot{width:10px;height:40px;border-radius:var(--r-pill,999px);flex:none}.booking-item-main{flex:1 1;min-width:0;display:flex;flex-direction:column;gap:2px}.booking-item-court{font-weight:700}.booking-item-time{font-size:var(--fs-small,13px);color:var(--ds-muted,#6b7c8a)}.booking-item-hint{font-size:var(--fs-caption,12px);color:var(--ds-faint,#93a1ac)}.booking-item-hint.is-cancelled{color:var(--ds-danger,#c0392b);font-weight:600}.booking-item.is-cancelled{opacity:.7}.booking-item.is-cancelled .booking-item-court,.booking-item.is-cancelled .booking-item-time{text-decoration:line-through}.booking-item-chevron{color:var(--ds-faint,#93a1ac);flex:none}.club-directory-avatar{width:40px;height:40px;border-radius:12px;flex:none;object-fit:cover}.club-directory-avatar-fallback{background:var(--ds-primary,#0ea5a0);color:#fff;display:grid;place-items:center;font-weight:800;font-size:16px}.next-booking{display:block;padding:var(--sp-md,12px) var(--sp-lg,16px);border-radius:var(--r-lg,14px);background:var(--ds-primary-soft,#fbeceb);text-decoration:none;color:inherit}.next-booking-label{font-size:var(--fs-caption,12px);font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:var(--ds-primary,#de6435);margin-bottom:6px}.next-booking-body{display:flex;align-items:center;gap:var(--sp-md,12px)}.next-booking-main{flex:1 1;min-width:0;display:flex;flex-direction:column;gap:1px}.next-booking-court{font-weight:800;font-size:var(--fs-h3,17px);color:var(--ds-text,#2b3a47)}.next-booking-time{font-size:var(--fs-small,13px);color:var(--ds-text-2,#4a5c6a)}.info-banner{padding:var(--sp-md,12px);border-radius:var(--r-md,10px);background:var(--ds-info-soft,#e8f1fa);color:var(--ds-info,#2b6cb0);font-size:var(--fs-small,13px);font-weight:600}@media (min-width:480px){.slot-grid{grid-template-columns:repeat(4,1fr)}}.install-banner{display:flex;align-items:center;gap:var(--sp-sm,8px);padding:var(--sp-md,12px);border-radius:var(--r-lg,14px);background:var(--ds-surface,#fff);border:1px solid var(--ds-border,#e2e7ec);box-shadow:0 4px 16px rgba(21,24,30,.06)}.install-banner-icon{width:36px;height:36px;border-radius:10px;flex:none;display:grid;place-items:center;background:var(--ds-primary-soft,#fbeceb);color:var(--ds-primary,#de6435)}.install-banner-text{display:flex;flex-direction:column;gap:1px;flex:1 1;min-width:0;font-size:var(--fs-small,13px)}.install-banner-text strong{font-size:var(--fs-body,14px)}.install-banner-text span{color:var(--ds-muted,#6b7c8a)}.install-banner-close{border:none;background:none;color:var(--ds-faint,#93a1ac);cursor:pointer;font-size:14px;flex:none;padding:4px}.player-tabbar{position:fixed;bottom:0;left:0;right:0;z-index:25;display:flex;background:var(--ds-surface,#fff);border-top:1px solid var(--ds-border,#e2e7ec);padding-bottom:env(safe-area-inset-bottom)}.player-tabbar-inner{display:flex;width:100%;max-width:560px;margin:0 auto}.player-tab{flex:1 1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-height:64px;color:var(--ds-muted,#6b7c8a);text-decoration:none;font-size:11px;font-weight:700}.player-tab svg{flex:none}.player-tab.is-active{color:var(--ds-primary,#de6435)}.menu-category{font-size:var(--fs-caption,12px);font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:var(--ds-muted,#6b7c8a);margin:var(--sp-md,12px) 0 var(--sp-xs,4px)}.menu-category:first-child{margin-top:0}.menu-item{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-md,12px);padding:var(--sp-md,12px) 0;border-bottom:1px solid var(--ds-border,#e2e7ec)}.menu-item:last-child{border-bottom:none}.menu-item-main{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1 1}.menu-item-name{font-weight:700}.menu-item-desc{font-size:var(--fs-small,13px);color:var(--ds-muted,#6b7c8a)}.menu-item-price{font-weight:800;white-space:nowrap}.category-icon{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;flex:none}.menu-item-photo{width:40px;height:40px;border-radius:12px;object-fit:cover;flex:none;background:var(--ds-surface-2,#f8fafb)}.tournament-card{display:block;border-radius:var(--r-lg,14px);background:var(--ds-surface,#fff);border:1px solid var(--ds-border,#e2e7ec);text-decoration:none;color:inherit;overflow:hidden}.tournament-card+.tournament-card{margin-top:var(--sp-md,12px)}.tournament-card-banner{height:96px;background-size:cover;background-position:50%;position:relative;display:flex;align-items:flex-start;justify-content:flex-end;padding:10px}.tournament-card-format{background:rgba(17,22,33,.55);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);color:#fff;font-size:11px;font-weight:700;padding:4px 10px;border-radius:999px}.tournament-card-body{padding:var(--sp-lg,16px)}.tournament-card-name{font-weight:800;font-size:var(--fs-h3,17px);margin-bottom:4px}.tournament-card-meta{display:flex;flex-wrap:wrap;gap:6px 12px;font-size:var(--fs-small,13px);color:var(--ds-muted,#6b7c8a);margin-bottom:8px}.tournament-card-foot{display:flex;align-items:center;justify-content:space-between}.tournament-fee{font-weight:800;color:var(--ds-primary,#de6435)}.tournament-banner-lg{height:150px;border-radius:var(--r-lg,14px);background-size:cover;background-position:50%;margin-bottom:var(--sp-md,12px)}.team-form-players{display:flex;flex-direction:column;gap:var(--sp-md,12px)}.team-player-block{padding:var(--sp-md,12px);border-radius:var(--r-md,10px);background:var(--ds-surface-2,#f8fafb);display:flex;flex-direction:column;gap:var(--sp-sm,8px)}.team-player-block-head{display:flex;align-items:center;justify-content:space-between;color:var(--ds-muted,#6b7c8a)}.player-link-btn,.team-player-block-head{font-size:var(--fs-small,13px);font-weight:700}.player-link-btn{background:none;border:none;color:var(--ds-primary,#de6435);cursor:pointer;padding:0}.receipt-success-banner{text-align:center;padding:24px 16px;margin-bottom:8px;border-radius:var(--r-lg,14px);background:var(--ds-success-soft,#e5f5ec)}.receipt-success-banner h1{font-size:20px;margin:0 0 6px}.receipt-success-banner p{color:var(--ds-muted,#6b7c8a);margin:0 0 16px}.receipt-success-banner .success-mark{width:56px;height:56px;border-radius:50%;background:var(--ds-success,#2e9d6e);color:#fff;display:grid;place-items:center;font-size:28px;margin:0 auto 12px}@media (prefers-reduced-motion:reduce){.player-shell *{animation-duration:.001ms!important;transition-duration:.001ms!important}}@media (min-width:860px){.player-shell{align-items:center;justify-content:center;background:#0a0908;padding:40px 16px}.player-frame{display:flex;flex-direction:column;position:relative;width:420px;height:min(840px,calc(100dvh - 80px));background:var(--ds-bg,#131110);border:1px solid var(--ds-border,#33302c);border-radius:28px;overflow:hidden;box-shadow:var(--sh-modal,0 20px 50px -12px rgba(0,0,0,.6))}.player-main{flex:1 1;overflow-y:auto;max-width:none;margin:0}.player-tabbar,.sticky-cta{position:absolute}}