/* Dirty Frisbee's cabinet: one screen at a time. Long lists are paged, never clipped. */
:root{color-scheme:light;--df-ink:#25211f;--df-orange:#f56525;--df-yellow:#ffd34f;--df-cream:#fff4d1;--df-muted:#655b4f;--df-line:#25211f33}
*{box-sizing:border-box}
html,body.dirty-frisbee-lobby{margin:0;width:100%;height:100%;overflow:hidden}
body.dirty-frisbee-lobby{height:100dvh;display:grid;grid-template-rows:auto minmax(0,1fr) auto;background:var(--df-cream);color:var(--df-ink);font:16px/1.35 Arial,system-ui,sans-serif;padding:env(safe-area-inset-top,0px) env(safe-area-inset-right,0px) env(safe-area-inset-bottom,0px) env(safe-area-inset-left,0px)}
.dirty-frisbee-lobby [hidden]{display:none!important}
.dirty-frisbee-lobby a{color:inherit;text-decoration:none}
.dirty-frisbee-lobby button,.dirty-frisbee-lobby input{font:inherit}
.dirty-frisbee-lobby button,.dirty-frisbee-lobby .df-icon,.dirty-frisbee-lobby .mp-button{appearance:none;display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;border:2px solid var(--df-ink);border-radius:6px;background:var(--df-yellow);color:var(--df-ink);font-weight:800;line-height:1.15;padding:8px 12px;cursor:pointer;touch-action:manipulation}
.dirty-frisbee-lobby button:hover:not(:disabled),.dirty-frisbee-lobby .df-icon:hover{background:var(--df-orange)}
.dirty-frisbee-lobby button:disabled{opacity:.45;cursor:default}
.dirty-frisbee-lobby :is(a,button,input,[tabindex]):focus-visible{outline:3px solid var(--df-ink);outline-offset:3px;box-shadow:0 0 0 6px var(--df-yellow)}
.df-visually-hidden{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip-path:inset(50%);white-space:nowrap!important;border:0!important}
.df-skip{position:fixed;top:8px;left:8px;z-index:20000;transform:translateY(-180%);padding:12px;background:var(--df-yellow)}.df-skip:focus{transform:none}
.dirty-frisbee-lobby>.df-header{display:flex;align-items:center;gap:12px;min-height:64px;padding:6px clamp(8px,3vw,32px);border-bottom:4px solid var(--df-orange);background:var(--df-ink);color:var(--df-cream)}
.df-header .brand{display:flex;align-items:center;min-height:44px;gap:8px;flex:none;font-size:19px;font-style:italic;font-weight:900;letter-spacing:-.5px}
.df-header .brand svg{width:44px;height:44px;color:var(--df-yellow)}
#dfIdentityMount{margin-left:auto;min-width:0;display:flex;align-items:center;justify-content:flex-end}
.dirty-frisbee-lobby #dfIdentityMount button.mando-gamertag-button{max-width:min(40vw,240px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-height:44px;border-color:var(--df-yellow);background:transparent;color:var(--df-cream);font-size:14px}
.df-header .df-icon{background:var(--df-ink);color:var(--df-yellow);border-color:var(--df-yellow);font-size:24px;padding:4px;flex:none}
.lobby-page{position:relative;width:100%;min-width:0;min-height:0;margin:0;padding:clamp(8px,2vw,24px);overflow:hidden}
.df-screen{height:100%;width:100%;min-height:0;min-width:0;max-width:1300px;margin:auto}
.df-screen:not([hidden]){display:flex;flex-direction:column;gap:12px}
.df-nav{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:4px;background:var(--df-ink);padding:4px max(4px,calc((100vw - 900px)/2));border-top:4px solid var(--df-orange)}
.df-nav a{min-width:44px;min-height:52px;padding:4px;display:flex;gap:3px;flex-direction:column;align-items:center;justify-content:center;border-radius:5px;font-size:13px;font-weight:800;color:var(--df-cream)}
.df-nav a span{font-size:22px;line-height:1}.df-nav a[aria-current=page]{background:var(--df-yellow);color:var(--df-ink)}
.df-screen.df-hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.25fr);gap:0;align-items:center;position:relative;overflow:hidden}
.df-hero-copy{position:relative;z-index:1;padding:16px}.df-hero h1{font:italic 1000 clamp(56px,8vw,118px)/.87 Impact,"Arial Black",Arial,sans-serif;letter-spacing:-3px;margin:0 0 28px;transform:rotate(-3deg);text-shadow:4px 4px 0 var(--df-orange)}
.df-hero h1>span{display:block}.df-hero h1>span:first-child{color:var(--df-orange);text-shadow:4px 4px 0 var(--df-ink)}.df-title-dot{color:var(--df-orange)}
.df-tagline{font-size:clamp(16px,2vw,24px);font-weight:800;margin:0 0 24px}
.df-hero-art{min-width:0;min-height:0;height:100%;display:grid;place-items:center}.df-hero-art img{display:block;width:100%;height:100%;object-fit:contain;max-height:100%}
.df-start{display:inline-flex;align-items:center;justify-content:space-between;gap:35px;min-width:165px;min-height:60px;padding:12px 24px;border:3px solid var(--df-ink);border-radius:5px;background:var(--df-orange);box-shadow:5px 5px 0 var(--df-ink);font-size:24px;font-weight:900}.df-start:hover{background:var(--df-yellow)}
.course-carousel{display:flex;flex-direction:column;gap:10px;flex:1;min-width:0;min-height:0;outline-offset:-3px}
.course-controls,.df-selector{display:flex;align-items:center;justify-content:space-between;gap:10px;flex:none;min-width:0;min-height:44px}
.course-controls button,.df-selector button,.df-pager button{width:48px;min-width:48px;height:48px;padding:0;font:32px/1 Arial,sans-serif}
.course-selection{min-width:0;flex:1;text-align:center;font-size:clamp(17px,2.6vw,28px);font-weight:900;line-height:1.1;overflow-wrap:anywhere}
.course-viewport{flex:1;min-height:0;min-width:0;position:relative;border:2px solid var(--df-ink);border-radius:9px;overflow:hidden;background:var(--df-yellow)}
.course-grid{position:relative;display:flex;height:100%;gap:0;margin:0;transition:transform .18s ease;touch-action:pan-y}
.course-slide{position:relative;flex:0 0 100%;height:100%;min-width:0;min-height:0}.course-preview{display:none!important}
.course{height:100%;display:grid;grid-template-rows:minmax(0,1fr) auto;min-height:0;min-width:0;background:var(--df-cream)}
.course-art{position:relative;min-height:0;min-width:0;padding:0;background:#c99a57;overflow:hidden}.course-art canvas{display:block;width:100%;height:100%;object-fit:contain}
.hole-controls{position:absolute;left:8px;right:8px;bottom:8px;display:flex;align-items:center;justify-content:space-between;gap:8px;pointer-events:none}.hole-controls>*{pointer-events:auto}.hole-controls button{width:48px;height:48px;padding:0;font-size:32px;background:var(--df-cream)}
.hole-controls span{font-size:14px;font-weight:800;background:var(--df-cream);color:var(--df-ink);padding:8px 12px;border:2px solid var(--df-ink);border-radius:5px}
.card-body{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:10px;padding:12px;border-top:2px solid var(--df-ink)}
.stats{display:flex;flex-wrap:wrap;gap:4px 16px;align-items:baseline;font-size:12px;color:var(--df-muted)}.stats span:last-child{display:none}.stats b{font-size:18px;color:var(--df-ink)}
.dirty-frisbee-lobby .mp-course-start{margin:0;width:auto;min-width:98px;background:var(--df-orange);font-size:16px}
.df-solo{display:inline-flex;align-items:center;justify-content:center;min-width:82px;min-height:48px;border:2px solid var(--df-ink);border-radius:6px;background:var(--df-cream);font-weight:800;padding:8px 12px}.mp-group-active .df-solo{display:none}
.course-tabs,.course-hint,.mp-course-note{display:none}
/* Roster pages remain independent of connection/group updates. */
.dirty-frisbee-lobby .mp-lobby{--mp-ink:var(--df-ink);--mp-muted:var(--df-muted);--mp-line:var(--df-line);--mp-accent:var(--df-orange);padding:0;border:0;border-radius:0;background:none;box-shadow:none;color:var(--df-ink)}
.df-crew-status{display:flex;align-items:center;gap:9px;flex:none;min-height:44px}.df-crew-status>.mp-button{margin-left:auto}.dirty-frisbee-lobby .mp-connection{border:0;padding:0;background:none;color:var(--df-muted);font-size:14px}
#mpLobbyPresence{font-size:13px;color:var(--df-muted)}.mp-presence-dot,.mp-presence-dot.is-live{background:var(--df-orange);box-shadow:none}.mp-presence-dot:not(.is-live){background:var(--df-muted)}
.df-tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;flex:none}.dirty-frisbee-lobby .df-tabs button{font-size:15px;gap:6px;background:var(--df-cream);padding:8px 4px}.dirty-frisbee-lobby .df-tabs button[aria-pressed=true]{background:var(--df-yellow)}
.dirty-frisbee-lobby .mp-count,.dirty-frisbee-lobby .mp-badge{font-size:12px;color:var(--df-ink);background:var(--df-yellow);border:0;padding:2px 6px;margin:0}
.mp-lobby-scroll{flex:1;min-height:0;min-width:0;display:flex;flex-direction:column}.df-crew-pane:not([hidden]){display:flex;flex-direction:column;min-height:0;height:100%;gap:8px}
.dirty-frisbee-lobby .mp-group,.dirty-frisbee-lobby .mp-invitations{display:flex;flex-direction:column;gap:8px;flex:1;min-height:0;padding:0;margin:0;border:0}
.dirty-frisbee-lobby .mp-section-heading{margin:0;min-height:44px;flex:none}.dirty-frisbee-lobby .mp-lobby h3{font-size:18px;color:var(--df-ink)}
.dirty-frisbee-lobby .mp-help{color:var(--df-muted);font-size:14px;line-height:1.35;margin:0;flex:none}.df-page-list{flex:1;min-height:0;min-width:0;list-style:none;display:flex;flex-direction:column;gap:8px;padding:0;margin:0;overflow:hidden}
.dirty-frisbee-lobby .mp-player-row,.dirty-frisbee-lobby .mp-invite-row,.dirty-frisbee-lobby .mp-member{flex:none;display:flex;flex-wrap:nowrap;gap:10px;align-items:center;border:2px solid var(--df-ink);border-radius:7px;background:var(--df-cream);color:var(--df-ink);min-height:64px;padding:8px 10px;width:100%;max-width:none}
.dirty-frisbee-lobby .mp-player-label{min-width:0}.dirty-frisbee-lobby .mp-player-label strong,.dirty-frisbee-lobby .mp-player-name{font-size:16px;line-height:1.2;color:var(--df-ink);overflow-wrap:anywhere}.dirty-frisbee-lobby .mp-player-label small,.dirty-frisbee-lobby .mp-member small{font-size:12px;color:var(--df-muted)}
.dirty-frisbee-lobby .mp-avatar{width:36px;height:36px;min-width:36px;background:var(--df-ink);color:var(--df-yellow);border-radius:5px}.dirty-frisbee-lobby .mp-member small{margin-left:auto}
.dirty-frisbee-lobby .mp-invite-row>.mp-actions{display:flex;flex-wrap:nowrap;gap:6px;width:auto}.dirty-frisbee-lobby .mp-invite-row>.mp-actions button{width:auto;height:44px;padding:0 8px;font-size:13px}
.dirty-frisbee-lobby .mp-button.mp-secondary{background:var(--df-cream);color:var(--df-ink);border-color:var(--df-ink)}
.dirty-frisbee-lobby .mp-empty{margin:0;padding:14px;font-size:16px;color:var(--df-muted);background:#ffe5a7;border:2px dashed var(--df-line);border-radius:8px;line-height:1.4}
.df-pager{display:flex;justify-content:center;align-items:center;gap:16px;flex:none;min-height:48px}.df-pager output{font-size:14px;font-weight:800;min-width:58px;text-align:center}.df-pager[data-single=true]{visibility:hidden;min-height:0;height:0;overflow:hidden}.df-pager[data-single=true] button{visibility:hidden}
.df-crew-notice{display:flex;align-items:center;justify-content:center;gap:8px;flex:none}.df-crew-notice:has(#dfNotice[hidden]):has(#mpLobbyRetry[hidden]){display:none}
#dfScorePanels{min-height:0;flex:1;display:flex}.df-selector h3{font-size:clamp(17px,2.6vw,28px);text-align:center;margin:0;line-height:1.15}.df-screen-title{font:italic 900 28px/1.1 Impact,"Arial Black",Arial,sans-serif;margin:0;flex:none}
.course-low-scores{display:flex;flex-direction:column;gap:14px;flex:1;min-height:0;width:100%;padding:clamp(12px,3vw,32px);background:var(--df-ink);color:var(--df-cream);border:3px solid var(--df-orange);border-radius:8px}
.low-scores-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}.low-scores-heading h3{margin:0;font-size:22px;color:var(--df-yellow)}.low-scores-heading>span{font-size:13px}
.low-score-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:12px;flex:1;min-height:0;overflow:hidden}.low-score-row{display:grid;grid-template-columns:30px minmax(0,1fr) 45px 45px;align-items:center;gap:8px;min-height:64px;padding:10px 0;border-bottom:1px solid #fff4d144;font-size:18px;flex:none}.low-score-rank{color:var(--df-yellow)}.low-score-name{overflow-wrap:anywhere;line-height:1.2}.low-score-total,.low-score-relative{text-align:right;font-variant-numeric:tabular-nums}.low-score-total{font-size:24px}.low-score-relative{color:var(--df-yellow)}.low-score-status{margin:0;font-size:18px;line-height:1.4}.low-score-note{margin:0;font-size:13px;color:var(--df-cream)}
.df-saved-row{display:flex;justify-content:space-between;align-items:center;gap:12px;border:2px solid var(--df-ink);border-radius:8px;min-height:80px;padding:12px;flex:none}.df-saved-row strong{font-size:18px}.df-saved-row small{display:block;font-size:14px;color:var(--df-muted);margin-top:4px}.df-saved-row a{display:flex;align-items:center;justify-content:center;min-width:48px;min-height:48px;border:2px solid var(--df-ink);border-radius:6px;background:var(--df-orange);font-size:24px}
#dfInfoText{font-size:clamp(17px,2.5vw,24px);line-height:1.5;max-width:840px;align-self:center;flex:1;min-height:0;margin:0;width:100%;overflow-wrap:anywhere}
/* Modal choices are pages too; no top-layer scroll container. */
.dirty-frisbee-lobby :is(.mp-dialog,.df-dialog){position:fixed;inset:0;width:min(560px,calc(100vw - 24px));height:min(490px,calc(100dvh - 24px));max-height:calc(100dvh - 24px);margin:auto;padding:20px;border:3px solid var(--df-ink);border-top:7px solid var(--df-orange);border-radius:8px;background:var(--df-cream);color:var(--df-ink);box-shadow:7px 7px 0 #0005;overflow:hidden}
.dirty-frisbee-lobby :is(.mp-dialog,.df-dialog)[open]{display:flex;flex-direction:column;gap:12px}.dirty-frisbee-lobby :is(.mp-dialog,.df-dialog)::backdrop{background:#25211fbb;backdrop-filter:blur(4px)}
.dirty-frisbee-lobby :is(.mp-dialog,.df-dialog) h3{font-size:26px;line-height:1.1;margin:0;color:var(--df-ink)}.dirty-frisbee-lobby :is(.mp-dialog,.df-dialog) p{font-size:16px;line-height:1.4;margin:0;color:var(--df-muted)}
.dirty-frisbee-lobby .mp-resume-choices{display:flex;flex-direction:column;gap:8px;flex:1;min-height:0;margin:0}.mp-resume-choices>button{flex:none;justify-content:space-between!important;width:100%;min-height:64px!important;text-align:left}.mp-resume-choices>button small{font-size:13px;font-weight:400}.mp-resume-choices>button span{display:block;max-width:100%;overflow-wrap:anywhere}.df-dialog-heading{display:flex;align-items:center;justify-content:space-between;gap:8px;flex:none}.df-dialog-heading button{padding:0;font-size:28px}.dirty-frisbee-lobby #dfNoticeText{flex:1;min-height:0;overflow-wrap:anywhere}
@media(max-width:600px){.df-header .df-wordmark{display:none}.dirty-frisbee-lobby>.df-header{min-height:58px;padding:4px 8px;gap:8px}.dirty-frisbee-lobby #dfIdentityMount button.mando-gamertag-button{max-width:calc(100vw - 128px)}.df-screen.df-hero{grid-template-columns:1fr;grid-template-rows:auto minmax(0,1fr);text-align:center}.df-hero-copy{padding:14px 8px 8px}.df-hero h1{font-size:clamp(54px,15vw,82px);margin:0 0 14px}.df-tagline{margin-bottom:14px;font-size:17px}.df-start{font-size:22px;min-height:54px}.df-hero-art{grid-row:2;max-height:100%}.card-body{padding:8px;gap:6px;grid-template-columns:minmax(0,1fr) auto auto}.stats{gap:3px 8px;font-size:11px}.stats b{font-size:16px}.df-solo{min-width:66px;padding:8px}.dirty-frisbee-lobby .mp-course-start{min-width:76px;padding:8px}.df-crew-status{gap:6px}#mpLobbyPresence{display:none}.df-screen:not([hidden]){gap:8px}.course-low-scores{padding:12px}.low-score-row{font-size:16px;grid-template-columns:24px minmax(0,1fr) 36px 40px}.low-score-total{font-size:22px}}
@media(max-height:600px){.lobby-page{padding:8px}.df-hero h1{font-size:clamp(50px,10vh,74px);margin-bottom:14px}.df-tagline{margin-bottom:16px}.df-nav a{min-height:44px;flex-direction:row;gap:6px}.df-nav a span{font-size:19px}.df-screen:not([hidden]){gap:8px}.course-carousel{gap:8px}.course-controls button,.df-selector button,.df-pager button{height:44px;width:44px;min-width:44px}.df-pager{min-height:44px}.low-score-note{font-size:12px}}
@media(max-height:480px){.dirty-frisbee-lobby>.df-header{min-height:52px;padding-top:2px;padding-bottom:2px}.df-screen.df-hero{grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-template-rows:minmax(0,1fr);text-align:left}.df-hero-art{grid-column:2;grid-row:1}.df-hero-copy{padding:8px 14px}.df-hero h1{font-size:clamp(40px,15vh,68px);margin-bottom:14px}.df-tagline{display:none}.df-start{min-height:48px;padding:8px 16px;font-size:20px;min-width:140px}.df-nav a{font-size:12px}.card-body{padding:6px 8px}.hole-controls{bottom:4px;left:4px;right:4px}.hole-controls button{width:44px;height:44px}.hole-controls span{padding:4px 8px;font-size:12px}.dirty-frisbee-lobby .mp-help{font-size:12px}.course-low-scores{gap:6px;padding:8px}.low-scores-heading h3{font-size:18px}.low-score-row{min-height:52px;padding:6px 0}.df-screen-title{font-size:22px}.dirty-frisbee-lobby :is(.mp-dialog,.df-dialog){padding:12px;gap:8px}.dirty-frisbee-lobby :is(.mp-dialog,.df-dialog) h3{font-size:22px}}
/* Zoom / unusually short windows: remove decorative map, not actions or information. */
@media(max-height:320px){.lobby-page{padding:4px 8px}.df-screen:not([hidden]),.course-carousel{gap:4px}.df-header .brand svg{width:36px}.dirty-frisbee-lobby>.df-header{min-height:48px;border-bottom-width:2px}.df-nav{border-top-width:2px;padding-top:2px;padding-bottom:2px}.df-nav a{font-size:12px;gap:4px}.df-nav a span{display:none}.course-selection{font-size:17px}.course{grid-template-rows:minmax(0,1fr) auto}.course-art{min-height:0}.hole-controls{bottom:2px}.card-body .stats{display:none}.card-body{grid-template-columns:1fr 1fr;padding:3px;gap:4px}.df-solo,.dirty-frisbee-lobby .mp-course-start{min-height:44px;width:100%}.df-tabs{grid-template-columns:repeat(4,minmax(0,1fr))}.dirty-frisbee-lobby .df-tabs button{font-size:12px;padding:6px 2px;gap:2px}.dirty-frisbee-lobby #dfCrewStatusTab{display:inline-flex}.df-crew-status{flex-wrap:wrap}.df-screen-title{font-size:18px}.low-scores-heading{display:none}.low-score-note{display:none}.course-low-scores{padding:4px;border-width:2px}.low-score-row{min-height:44px;font-size:14px;padding:2px 0}.low-score-total{font-size:18px}.dirty-frisbee-lobby .mp-player-row,.dirty-frisbee-lobby .mp-invite-row,.dirty-frisbee-lobby .mp-member{min-height:48px;padding:0 6px}.dirty-frisbee-lobby #mpLobbyHelp{display:none}.dirty-frisbee-lobby .mp-player-label small{display:none}.dirty-frisbee-lobby .mp-group{gap:2px}.dirty-frisbee-lobby .mp-section-heading{min-height:0}.dirty-frisbee-lobby .mp-group #mpGroupHelp{display:none}.df-hero h1{font-size:38px;margin:0 0 10px}.df-hero-art{display:none}.df-screen.df-hero{grid-template-columns:1fr}.df-hero-copy{display:flex;align-items:center;justify-content:space-evenly;gap:12px;padding:6px}.df-start{min-width:110px}.dirty-frisbee-lobby .mp-dialog #mpResumeDetail{display:none}.dirty-frisbee-lobby :is(.mp-dialog,.df-dialog){padding:8px;gap:5px}.dirty-frisbee-lobby .mp-dialog #mpResumeTitle{font-size:18px}}
@media(prefers-reduced-motion:reduce){.course-grid{transition:none}}

#dfCrewStatusTab{display:none}
@media(max-height:480px){.dirty-frisbee-lobby .mp-player-row,.dirty-frisbee-lobby .mp-invite-row,.dirty-frisbee-lobby .mp-member{min-height:56px;padding:4px 8px}}
@media(max-height:320px){.dirty-frisbee-lobby #dfCrewStatusTab{display:inline-flex}.dirty-frisbee-lobby .mp-player-row,.dirty-frisbee-lobby .mp-invite-row,.dirty-frisbee-lobby .mp-member{min-height:48px;padding:0 6px}.df-crew-status #mpLobbyPresence{display:block}}
.dirty-frisbee-lobby #mandoGamertagDialog{background:var(--df-ink);color:var(--df-cream);border-color:var(--df-orange)}
.dirty-frisbee-lobby #mandoGamertagDialog h2{color:var(--df-yellow)}
.df-resume-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex:none}
.df-resume-actions .df-pager{flex:1;gap:8px}.df-resume-actions .df-pager output{min-width:42px}
.df-resume-actions .df-pager[data-single=true]{flex:0;width:0}
.df-resume-actions #mpResumeNew{width:auto;flex:none}
.dirty-frisbee-lobby[data-screen=home] .df-wordmark{display:none}
