:root{--n:#102a43;--b:#1769aa;--g:#f6bc31;--bg:#f3f6f9;--l:#dce5ec;--m:#687b8d;--r:#b42318}*{box-sizing:border-box}body{margin:0;font:14px Segoe UI,Arial;background:var(--bg);color:#17212b}header{background:linear-gradient(130deg,var(--n),var(--b));color:#fff;padding:20px;display:flex;justify-content:space-between;align-items:center}header h1{margin:0}.badge{background:#fff3cd;color:#5d4600;padding:8px 12px;border-radius:8px;font-weight:700}nav{display:flex;gap:5px;padding:8px 14px;background:#fff;border-bottom:1px solid var(--l);overflow:auto}nav button{background:transparent;color:var(--n);white-space:nowrap}nav button.on{background:var(--n);color:#fff}button{border:0;border-radius:8px;padding:9px 12px;background:var(--b);color:#fff;font-weight:700;cursor:pointer}button.alt{background:#e8eef3;color:var(--n)}button.danger{background:var(--r);margin-left:auto}main{max-width:1250px;margin:18px auto;padding:0 14px}.page{display:none}.page.on{display:block}.card,.stat{background:#fff;border:1px solid var(--l);border-radius:12px;padding:16px;margin-bottom:14px}.portal{max-width:760px;margin:auto}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.stats.three{grid-template-columns:repeat(3,1fr)}.stat{border-left:5px solid var(--b)}.stat b{display:block;font-size:22px;color:var(--n);overflow:hidden;text-overflow:ellipsis}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px}.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}h2{margin:0 0 12px;color:var(--n)}label{display:block;font-size:12px;color:var(--m);font-weight:700;margin:7px 0}input,select{width:100%;padding:9px;border:1px solid #b8c7d3;border-radius:7px}.actions,.heading{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:10px}.heading{justify-content:space-between}.table{overflow:auto}.compact{max-height:440px}table{width:100%;border-collapse:collapse;min-width:720px}th{background:var(--n);color:#fff;text-align:left;padding:8px}td{padding:8px;border-bottom:1px solid #e7edf2}.notice,.locked{padding:10px;background:#fff7dc;border:1px solid #efd37d;border-radius:8px;margin-bottom:12px}.error{color:var(--r);font-weight:700}.hidden{display:none!important}hr{border:0;border-top:1px solid var(--l);margin:18px 0}@media(max-width:850px){.stats,.stats.three,.grid2,.grid3,.grid4{grid-template-columns:1fr}}@media print{header,nav,.page:not(#pins),#printPins{display:none!important}#pins{display:block!important}.card{border:0}.table{overflow:visible}}

.selected-scroll{max-height:330px;overflow-y:auto;overflow-x:auto;border:1px solid var(--l);border-radius:8px;background:#fff}.selected-scroll table{margin:0}.selected-scroll thead th{position:sticky;top:0;z-index:2}.selected-scroll td{background:#fff}

/* Bowling Tournaments brand header */
header{min-height:150px;padding:14px 24px;gap:24px}
.brand{display:flex;align-items:center;gap:24px;min-width:0}
.app-logo{display:block;width:300px;max-width:42vw;height:120px;object-fit:contain;object-position:left center;filter:drop-shadow(0 5px 10px rgba(0,0,0,.28))}
.brand-title{font-size:clamp(26px,3vw,44px);font-weight:800;line-height:1;color:#fff;white-space:nowrap}
@media(max-width:760px){header{min-height:112px;padding:10px 14px}.brand{gap:10px}.app-logo{width:170px;height:90px;max-width:50vw}.brand-title{font-size:22px;white-space:normal}.badge{font-size:11px;padding:6px 8px}}

/* v10.3 mobile-first responsive improvements */
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{overflow-x:hidden}
button,input,select{font:inherit;min-height:44px}
button{touch-action:manipulation}
nav{position:sticky;top:0;z-index:30;-webkit-overflow-scrolling:touch;scrollbar-width:thin}
.table{-webkit-overflow-scrolling:touch}
.table table{width:100%}
#bowlerSelect,#registrationTournamentSelect,#standingsTournamentSelect{min-height:240px}
.score-input{font-size:18px;text-align:center}

@media(max-width:900px){
  main{margin:12px auto;padding:0 10px}
  nav{padding:7px 8px}
  nav button{flex:0 0 auto;min-height:42px;padding:9px 12px}
  .card{padding:14px;border-radius:10px}
  .stats,.stats.three{grid-template-columns:repeat(2,minmax(0,1fr))}
  .grid4{grid-template-columns:repeat(2,minmax(0,1fr))}
  .heading{align-items:flex-start}
  .heading input{max-width:100%}
}

@media(max-width:640px){
  header{min-height:auto;display:grid;grid-template-columns:1fr auto;padding:8px 10px;gap:8px}
  .brand{gap:8px;min-width:0}
  .app-logo{width:112px;height:70px;max-width:34vw}
  .brand-title{font-size:20px;line-height:1.05;white-space:normal}
  .badge{align-self:start;font-size:10px;padding:5px 7px}
  main{padding:0 8px;margin:9px auto}
  .card{padding:12px;margin-bottom:10px}
  .portal{max-width:none}
  .grid2,.grid3,.grid4,.stats,.stats.three{grid-template-columns:1fr}
  .stat{margin-bottom:0;min-height:82px}
  .actions,.heading{display:grid;grid-template-columns:1fr;gap:7px}
  .actions button,.heading button,.card>button{width:100%}
  label{font-size:13px}
  input,select{font-size:16px;padding:11px 10px}
  #bowlerSelect,#registrationTournamentSelect,#standingsTournamentSelect{min-height:220px;height:220px}
  .selected-scroll,.compact{max-height:300px}
  details summary{min-height:44px;display:flex;align-items:center}

  /* Read-only tables become stacked cards on small screens. */
  #dashboardTournaments table,#allTournaments table,#allBowlers table,#standingsTable table,#winnersTable table,#pinsTable table,#teamsDisplay table{min-width:0;border:0}
  #dashboardTournaments thead,#allTournaments thead,#allBowlers thead,#standingsTable thead,#winnersTable thead,#pinsTable thead,#teamsDisplay thead{display:none}
  #dashboardTournaments tbody,#allTournaments tbody,#allBowlers tbody,#standingsTable tbody,#winnersTable tbody,#pinsTable tbody,#teamsDisplay tbody{display:grid;gap:10px}
  #dashboardTournaments tr,#allTournaments tr,#allBowlers tr,#standingsTable tr,#winnersTable tr,#pinsTable tr,#teamsDisplay tr{display:block;border:1px solid var(--l);border-radius:10px;padding:9px;background:#fff;box-shadow:0 2px 7px rgba(16,42,67,.08)}
  #dashboardTournaments td,#allTournaments td,#allBowlers td,#standingsTable td,#winnersTable td,#pinsTable td,#teamsDisplay td{display:flex;justify-content:space-between;gap:12px;padding:7px 3px;border-bottom:1px solid #edf1f4;text-align:right}
  #dashboardTournaments td:last-child,#allTournaments td:last-child,#allBowlers td:last-child,#standingsTable td:last-child,#winnersTable td:last-child,#pinsTable td:last-child,#teamsDisplay td:last-child{border-bottom:0}
  #allTournaments td:last-child{display:grid;grid-template-columns:1fr 1fr;gap:6px}
  #allTournaments td:last-child button{width:100%}

  /* Score roster remains horizontally scrollable for fast numeric entry. */
  #roster{overflow-x:auto;border:1px solid var(--l);border-radius:8px}
  #roster table{min-width:1120px;font-size:12px}
  #roster th,#roster td{padding:5px}
  #roster input{min-width:70px;padding:8px 6px;font-size:16px}
  #roster input[id^="fn-"],#roster input[id^="ln-"],#roster input[id^="em-"]{min-width:130px}
  #roster input[id^="x1-"],#roster input[id^="x2-"],#roster input[id^="x3-"]{min-width:64px;text-align:center;font-weight:700}
  #saveAllRoster{position:sticky;bottom:8px;z-index:20;box-shadow:0 4px 14px rgba(0,0,0,.24)}

  /* Bowler scoring portal: large tap-friendly score controls. */
  #bowler .grid3{grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}
  #bowler #g1,#bowler #g2,#bowler #g3{font-size:24px;text-align:center;padding:12px 4px}
  #bowler .actions{grid-template-columns:1fr 1fr}
}

@media(max-width:390px){
  .app-logo{width:92px;height:60px}
  .brand-title{font-size:17px}
  #bowler .grid3{grid-template-columns:1fr}
  #bowler .actions{grid-template-columns:1fr}
}

/* v11.6 Registration & Scores field sizing */
#scoringPage #roster input:not([type="checkbox"]),
#registration #selectedBowlerList input:not([type="checkbox"]){
  box-sizing:border-box;
  width:92px;
  min-width:92px;
  max-width:92px;
  height:34px;
  min-height:34px;
  padding:5px 6px;
  font-size:12px;
  line-height:1.2;
}
#scoringPage #roster input[type="email"],
#scoringPage #roster input[id^="fn-"],
#scoringPage #roster input[id^="ln-"]{
  width:130px;
  min-width:130px;
  max-width:130px;
  font-size:12px;
}
#scoringPage #roster input[id^="x1-"],
#scoringPage #roster input[id^="x2-"],
#scoringPage #roster input[id^="x3-"]{
  width:70px;
  min-width:70px;
  max-width:70px;
  font-size:12px;
  text-align:center;
}
#scoringPage #roster input[type="checkbox"],
#registration #selectedBowlerList input[type="checkbox"]{
  width:20px;
  height:20px;
  min-height:20px;
}
@media(max-width:640px){
  #scoringPage #roster input:not([type="checkbox"]),
  #registration #selectedBowlerList input:not([type="checkbox"]){font-size:12px;min-height:34px;height:34px}
  #scoringPage #roster input[id^="fn-"],
  #scoringPage #roster input[id^="ln-"],
  #scoringPage #roster input[type="email"]{width:130px;min-width:130px;max-width:130px}
  #scoringPage #roster input[id^="x1-"],
  #scoringPage #roster input[id^="x2-"],
  #scoringPage #roster input[id^="x3-"]{width:70px;min-width:70px;max-width:70px}
}

/* v12.5 team-oriented Tournament Scoring */
.team-scoring-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:12px}.team-score-card{border:1px solid var(--l);border-radius:10px;padding:10px;background:#f8fafc}.team-score-card h3{margin:0 0 8px;color:var(--n)}.team-score-bowler{display:grid;grid-template-columns:minmax(150px,1fr) 58px 58px 58px;gap:6px;align-items:end;padding:7px 0;border-top:1px solid #dfe7ed}.team-score-bowler:first-of-type{border-top:0}.team-score-name{display:flex;flex-direction:column;gap:2px}.team-score-name span{font-size:11px;color:var(--m)}.team-score-bowler label{margin:0;font-size:11px}.team-score-input{width:58px!important;min-width:58px!important;max-width:58px!important;height:38px!important;min-height:38px!important;font-size:16px!important;text-align:center;font-weight:700;padding:5px!important}@media(max-width:640px){.team-scoring-grid{grid-template-columns:1fr}.team-score-bowler{grid-template-columns:1fr 56px 56px 56px}.team-score-input{width:56px!important;min-width:56px!important;max-width:56px!important;font-size:16px!important}}

/* v12.6 scoring identity fields */
#scoringPage #roster .locked-name{background:#eef2f5;color:#334e68;cursor:not-allowed;border-color:#cbd5df;font-size:12px!important}

/* v12.8 scores entered only through Bowling Partners / Teams */
#scoringPage #roster .roster-score-locked{background:#e9eef2!important;color:#52606d!important;border-color:#cbd5df!important;cursor:not-allowed!important;box-shadow:none!important}
#scoringPage #roster .roster-score-locked:focus{outline:none!important;border-color:#cbd5df!important}
