:root{color:#1f2937;background-color:#f3f4f6;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}body{min-height:100vh;margin:0}a{color:#2563eb}*,:before,:after{box-sizing:border-box}body{color:#1e293b;background:#f1f5f9;margin:0;font-family:system-ui,-apple-system,Segoe UI,sans-serif;font-size:16px}.app-shell{flex-direction:column;min-height:100vh;display:flex}.auth-shell{flex:1;justify-content:center;align-items:center;min-height:100vh;padding:1.5rem;display:flex}.auth-card{background:#fff;border-radius:.75rem;gap:.75rem;width:min(100%,420px);padding:1.5rem;display:grid;box-shadow:0 4px 24px #0f172a1a}.auth-card h1{margin:0 0 .25rem;font-size:1.4rem}.auth-card form{gap:.6rem;display:grid}.auth-card input{font:inherit;border:1px solid #d1d5db;border-radius:.5rem;width:100%;padding:.6rem .75rem}.auth-card input:focus{border-color:#2563eb;outline:none;box-shadow:0 0 0 2px #2563eb33}.auth-card button{font:inherit;color:#fff;cursor:pointer;background:#2563eb;border:0;border-radius:.5rem;padding:.6rem}.auth-card button:disabled{opacity:.7;cursor:not-allowed}.app-layout{flex-direction:column;flex:1;min-height:0;display:flex}.app-layout__content{flex:1;overflow-y:auto}.navbar{z-index:200;color:#fff;background:#1e293b;align-items:center;gap:.5rem;height:56px;padding:0 1rem;display:flex;position:sticky;top:0}.navbar__brand{letter-spacing:.12em;color:#fff;white-space:nowrap;flex-shrink:0;font-size:1.05rem;font-weight:800;text-decoration:none}.navbar__items{flex:1;justify-content:space-between;align-items:center;gap:.25rem;display:flex}.navbar__group{align-items:center;gap:.25rem;display:flex}.navbar__group--end{margin-left:auto}.nav-link{font:inherit;color:#cbd5e1;cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:.4rem;align-items:center;padding:.4rem .7rem;font-size:.875rem;text-decoration:none;transition:background .15s,color .15s;display:inline-flex}.nav-link:hover{color:#fff;background:#ffffff1a}.nav-link--danger{color:#fca5a5}.nav-link--danger:hover{color:#fca5a5;background:#f8717126}.navbar__toggle{cursor:pointer;background:0 0;border:none;border-radius:.4rem;flex-direction:column;flex-shrink:0;justify-content:center;gap:4px;width:36px;height:36px;margin-left:auto;padding:8px;display:none}.navbar__toggle span{background:#cbd5e1;border-radius:1px;width:20px;height:2px;transition:transform .2s,opacity .2s;display:block}.navbar__toggle--open span:first-child{transform:translateY(6px)rotate(45deg)}.navbar__toggle--open span:nth-child(2){opacity:0}.navbar__toggle--open span:nth-child(3){transform:translateY(-6px)rotate(-45deg)}.main-view{height:calc(100vh - 56px);display:flex;overflow:hidden}.main-view__sidebar{background:#f8fafc;border-right:1px solid #e2e8f0;flex-shrink:0;width:260px;overflow-y:auto}.main-view__content{flex:1;padding:2rem;overflow-y:auto}.sidebar-header{border-bottom:1px solid #e2e8f0;justify-content:space-between;align-items:center;padding:.85rem 1rem .5rem;display:flex}.sidebar-header__title{text-transform:uppercase;letter-spacing:.06em;color:#64748b;font-size:.78rem;font-weight:700}.sidebar-header__action{color:#fff;background:#2563eb;border-radius:.3rem;justify-content:center;align-items:center;width:22px;height:22px;font-size:1.1rem;font-weight:700;line-height:1;text-decoration:none;display:flex}.sidebar-list{margin:0;padding:.4rem 0;list-style:none}.sidebar-item{text-align:left;cursor:pointer;width:100%;font:inherit;color:#334155;background:0 0;border:none;justify-content:space-between;align-items:center;gap:.5rem;padding:.6rem 1rem;font-size:.9rem;transition:background .12s;display:flex}.sidebar-item:hover{background:#e2e8f0}.sidebar-item--active{color:#1d4ed8;background:#dbeafe;font-weight:600}.sidebar-item__name{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.sidebar-error{margin:.5rem 1rem}.league-header{border-bottom:1px solid #e2e8f0;padding:1.25rem 1.5rem .75rem}.league-header__name{margin:0 0 .4rem;font-size:1.25rem}.league-header__meta{color:#64748b;flex-wrap:wrap;align-items:center;gap:.5rem;margin:0;font-size:.875rem;display:flex}.league-header__sep{color:#cbd5e1}.league-tabs{border-bottom:2px solid #e2e8f0;gap:0;padding:0 1.5rem;display:flex;overflow-x:auto}.league-tab{color:#64748b;cursor:pointer;white-space:nowrap;background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-2px;padding:.65rem 1.1rem;font-size:.875rem;font-weight:500;transition:color .12s,border-color .12s}.league-tab:hover{color:#1d4ed8}.league-tab--active{color:#1d4ed8;border-bottom-color:#1d4ed8}.league-tab-panel{padding:1.25rem 1.5rem}.standings-table{width:100%}.standings-table__rank{color:#94a3b8;font-variant-numeric:tabular-nums;width:2.5rem}.standings-table__pts{text-align:right;font-variant-numeric:tabular-nums;font-weight:600}.upcoming-fixtures{flex-direction:column;gap:1.5rem;display:flex}.fixture-group__date{text-transform:capitalize;color:#475569;letter-spacing:.02em;margin:0 0 .6rem;font-size:.85rem;font-weight:700}.fixture-card{border:1px solid #e2e8f0;border-radius:.6rem;margin-bottom:.5rem;overflow:hidden}.fixture-card--expanded{border-color:#93c5fd}.fixture-card__header{cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:.75rem;width:100%;padding:.75rem 1rem;transition:background .12s;display:flex}.fixture-card__header:hover{background:#f8fafc}.fixture-card--expanded .fixture-card__header{background:#eff6ff}.fixture-card__round{color:#94a3b8;white-space:nowrap;flex-shrink:0;font-size:.75rem}.fixture-card__teams{flex-wrap:wrap;flex:1;justify-content:center;align-items:center;gap:.5rem;font-size:.9rem;font-weight:500;display:flex}.fixture-card__vs{color:#94a3b8;flex-shrink:0}.fixture-card__time{color:#64748b;font-variant-numeric:tabular-nums;flex-shrink:0;font-size:.8rem}.fixture-team{align-items:center;gap:.35rem;display:flex}.fixture-team--away{flex-direction:row-reverse}.fixture-team__logo{object-fit:contain;flex-shrink:0}.fixture-team__name{white-space:nowrap}.fixture-card__odds{background:#fafafa;border-top:1px solid #e2e8f0;flex-direction:column;gap:0;padding:.75rem 1rem 1rem;display:flex}.odds-group{border-radius:6px;margin-bottom:.25rem;padding:.65rem .75rem}.odds-group:nth-child(odd){background:#f1f5f9}.odds-group:nth-child(2n){background:#e8eef5}.odds-group__name{color:#475569;text-transform:uppercase;letter-spacing:.04em;margin:0 0 .4rem;font-size:.8rem;font-weight:600}.odds-group__id{color:#94a3b8;text-transform:none;letter-spacing:0;font-size:.72rem;font-weight:400}.odds-values{grid-template-columns:repeat(3,1fr);gap:.5rem;display:grid}.odds-subgroups{align-items:flex-start;gap:.75rem;display:flex}.odds-subgroup{flex:1;min-width:0}.odds-subgroup__header{color:#94a3b8;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap;text-overflow:ellipsis;margin:0 0 .35rem;font-size:.72rem;font-weight:700;overflow:hidden}.odds-subgroup__values{flex-direction:column;gap:.35rem;display:flex}.odds-subgroup__values .odds-value{width:100%}.odds-value{cursor:pointer;-webkit-user-select:none;user-select:none;background:#fff;border:1.5px solid #cbd5e1;border-radius:.5rem;align-items:center;gap:.4rem;padding:.45rem .75rem;font-size:.875rem;transition:border-color .12s,background .12s;display:flex}.odds-value:hover{background:#f0f9ff;border-color:#93c5fd}.odds-value--selected{color:#1d4ed8;background:#eff6ff;border-color:#1d4ed8;font-weight:600}.odds-value__radio{display:none}.odds-value__odd{font-variant-numeric:tabular-nums;font-weight:700}.fixture-card__save{flex-wrap:wrap;align-items:center;gap:1rem;padding-top:.25rem;display:flex}@media (width<=767px){.fixture-card__teams{font-size:.8rem}.fixture-card__header{gap:.5rem;padding:.6rem .75rem}}.league-placeholder{max-width:520px}.league-placeholder h2{margin-top:0}.league-placeholder__hint{color:#64748b}.league-placeholder__meta{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.join-view{width:100%;max-width:1200px;margin:0 auto;padding:1.5rem 2rem}.join-view__title{margin:0 0 1.5rem}.join-view__grid{grid-template-columns:320px 1fr;align-items:start;gap:2rem;display:grid}.join-view__footer{margin-top:1.5rem;font-size:.875rem}.join-view__footer a{color:#2563eb;text-decoration:none}.join-view__footer a:hover{text-decoration:underline}.join-code-panel,.public-leagues-panel{background:#fff;border:1px solid #e2e8f0;border-radius:.75rem;padding:1.25rem}.panel-heading{margin:0 0 .5rem;font-size:1rem;font-weight:700}.panel-hint{color:#64748b;margin:0 0 1rem;font-size:.875rem}.join-code-form{flex-direction:column;gap:.75rem;display:flex}.join-error{margin-bottom:.25rem;font-size:.8rem;display:block}.profile-page{width:100%;max-width:640px;margin:0 auto;padding:2rem}.profile-page h1{margin-top:0}.profile-card{background:#fff;border:1px solid #e2e8f0;border-radius:.75rem;margin-bottom:1.5rem;padding:1.25rem}.profile-dl{grid-template-columns:auto 1fr;gap:.5rem 1rem;margin:0;display:grid}.profile-dl dt{color:#64748b;font-size:.875rem;font-weight:600}.profile-dl dd{margin:0;font-size:.875rem}.profile-section{background:#fff;border:1px solid #e2e8f0;border-radius:.75rem;flex-direction:column;gap:1rem;padding:1.25rem;display:flex}.league-page{flex-direction:column;gap:1.25rem;width:min(100%,960px);margin:0 auto;padding:1.5rem 2rem;display:flex}.league-page__header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;display:flex}.league-page__header h1{margin:0}.league-table-wrapper{border:1px solid #e2e8f0;border-radius:.5rem;overflow-x:auto}.league-table{border-collapse:collapse;background:#fff;width:100%;font-size:.9rem}.league-table th,.league-table td{text-align:left;border-bottom:1px solid #f1f5f9;padding:.6rem .9rem}.league-table th{text-transform:uppercase;letter-spacing:.04em;color:#475569;white-space:nowrap;background:#f8fafc;font-size:.78rem;font-weight:600}.league-table tr:last-child td{border-bottom:none}.league-table tr:hover td{background:#f8fafc}.badge{text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;border-radius:999px;padding:.15rem .5rem;font-size:.7rem;font-weight:700;display:inline-block}.badge--public{color:#166534;background:#dcfce7}.badge--private{color:#92400e;background:#fef3c7}.badge--role-admin{color:#86198f;background:#fae8ff}.badge--role-owner{color:#1e40af;background:#dbeafe}.badge--role-member{color:#475569;background:#f1f5f9}.btn{font:inherit;cursor:pointer;color:#1e293b;white-space:nowrap;background:#e2e8f0;border:1px solid #0000;border-radius:.5rem;justify-content:center;align-items:center;gap:.3rem;padding:.5rem 1rem;font-size:.875rem;text-decoration:none;transition:background .15s,border-color .15s;display:inline-flex}.btn:disabled{opacity:.55;cursor:not-allowed}.btn--primary{color:#fff;background:#2563eb;border-color:#2563eb}.btn--primary:hover:not(:disabled){background:#1d4ed8;border-color:#1d4ed8}.btn--ghost{color:#374151;background:0 0;border-color:#d1d5db}.btn--ghost:hover:not(:disabled){background:#f1f5f9}.btn--sm{padding:.3rem .65rem;font-size:.8rem}.btn--xs{padding:.15rem .4rem;font-size:.72rem}.pagination{flex-wrap:wrap;justify-content:center;align-items:center;gap:1rem;margin-top:.75rem;display:flex}.pagination__info{color:#64748b;font-size:.8rem}.join-code-cell{align-items:center;gap:.4rem;display:inline-flex}.join-code-cell code{background:#f1f5f9;border-radius:.3rem;padding:.1rem .4rem;font-family:monospace;font-size:.85rem}.league-form{flex-direction:column;gap:1rem;width:min(100%,480px);display:flex}.form-field{flex-direction:column;gap:.25rem;display:flex}.form-field label,.form-field legend,.form-field__label{color:#374151;font-size:.875rem;font-weight:600}.form-field input[type=text],.form-field input[type=password]{font:inherit;border:1px solid #d1d5db;border-radius:.5rem;width:100%;padding:.6rem .75rem}.form-field input[type=text]:focus,.form-field input[type=password]:focus{border-color:#2563eb;outline:none;box-shadow:0 0 0 2px #2563eb33}.form-field input[aria-invalid=true]{border-color:#b91c1c}.form-field__error{color:#b91c1c;margin:0;font-size:.8rem}.form-field--fieldset{border:1px solid #e2e8f0;border-radius:.5rem;margin:0;padding:.75rem}.form-field__radio{cursor:pointer;align-items:center;gap:.4rem;margin-top:.35rem;font-weight:400;display:flex}.error{color:#b91c1c;margin:0}.success{color:#166534;margin:0;font-weight:500}.events-page{width:100%;max-width:860px;margin:0 auto;padding:2rem}.events-page h1{margin-top:0}.events-step{flex-direction:column;gap:.6rem;margin-bottom:1.75rem;display:flex}.events-step__label{color:#374151;text-transform:uppercase;letter-spacing:.04em;font-size:.875rem;font-weight:700}.events-select{font:inherit;cursor:pointer;background:#fff;border:1px solid #d1d5db;border-radius:.5rem;max-width:360px;padding:.55rem .75rem;font-size:.9rem}.events-select:focus{border-color:#2563eb;outline:none;box-shadow:0 0 0 2px #2563eb33}.events-league-list{background:#fff;border:1px solid #e2e8f0;border-radius:.6rem;max-height:360px;margin:0;padding:0;list-style:none;overflow:hidden auto}.events-league-item{text-align:left;width:100%;font:inherit;color:#1e293b;cursor:pointer;background:0 0;border:none;border-bottom:1px solid #f1f5f9;align-items:center;gap:.6rem;padding:.6rem 1rem;font-size:.9rem;transition:background .12s;display:flex}.events-league-item:last-child{border-bottom:none}.events-league-item:hover{background:#f8fafc}.events-league-item--selected{color:#1d4ed8;background:#dbeafe;font-weight:600}.events-league-item--selected:hover{background:#bfdbfe}.events-league-item__logo{object-fit:contain;flex-shrink:0;width:24px;height:24px}.events-league-item__checkbox{cursor:pointer;flex-shrink:0;width:1rem;height:1rem}label.events-league-item{cursor:pointer;-webkit-user-select:none;user-select:none}.events-league-item__name{flex:1}.events-league-item__meta{color:#94a3b8;flex-shrink:0;font-size:.8rem}.events-confirm{background:#f8fafc;border:1px solid #e2e8f0;border-radius:.6rem;flex-wrap:wrap;align-items:center;gap:.75rem;padding:.85rem 1.1rem;display:flex}.events-confirm__logo{object-fit:contain;flex-shrink:0;width:32px;height:32px}.events-confirm__name{flex:1;font-weight:600}.events-confirm__id{color:#64748b;font-family:monospace;font-size:.8rem}.modal-overlay{z-index:500;background:#0f172a8c;justify-content:center;align-items:center;padding:1rem;display:flex;position:fixed;inset:0}.modal-card{background:#fff;border-radius:.75rem;flex-direction:column;width:min(100%,760px);max-height:85vh;display:flex;overflow:hidden;box-shadow:0 20px 60px #0f172a40}.modal-header{border-bottom:1px solid #e2e8f0;flex-shrink:0;justify-content:space-between;align-items:center;gap:1rem;padding:1rem 1.25rem;display:flex}.modal-header__title{margin:0;font-size:1.05rem}.modal-header__close{color:#64748b;cursor:pointer;background:0 0;border:none;border-radius:.4rem;flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;font-size:1rem;transition:background .12s,color .12s;display:flex}.modal-header__close:hover{color:#1e293b;background:#f1f5f9}.modal-body{flex:1;padding:1.25rem;overflow-y:auto}.standings-table__row--clickable{cursor:pointer}.standings-table__row--clickable:hover td{background:#dbeafe}.finished-fixtures{flex-direction:column;display:flex}.finished-fixtures__controls{border-bottom:1px solid #e2e8f0;flex-wrap:wrap;align-items:flex-end;gap:.75rem;margin-bottom:.25rem;padding:.25rem 0 .75rem;display:flex}.finished-fixtures__dates{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.finished-fixtures__date-label{color:#475569;text-transform:uppercase;letter-spacing:.04em;flex-direction:column;gap:.2rem;font-size:.78rem;font-weight:600;display:flex}.finished-fixtures__date-input{font:inherit;color:#1e293b;cursor:pointer;background:#fff;border:1px solid #d1d5db;border-radius:.5rem;padding:.4rem .6rem;font-size:.875rem}.finished-fixtures__date-input:focus{border-color:#2563eb;outline:none;box-shadow:0 0 0 2px #2563eb33}.finished-fixtures__date-sep{color:#94a3b8;align-self:flex-end;padding-bottom:.1rem;font-size:1rem}.finished-card{background:#fff;border:1px solid #e2e8f0;border-radius:.6rem;margin-bottom:.5rem;overflow:hidden}.finished-card__teams{background:#f8fafc;border-bottom:1px solid #e2e8f0;align-items:center;gap:.5rem;padding:.65rem 1rem;display:flex}.finished-card__team{color:#334155;flex:1;align-items:center;gap:.35rem;min-width:0;font-size:.875rem;font-weight:500;display:flex}.finished-card__team--right{text-align:right;flex-direction:row-reverse}.finished-card__team--winner{color:#15803d;font-weight:700}.finished-card__score{font-variant-numeric:tabular-nums;color:#1e293b;white-space:nowrap;flex-shrink:0;padding:0 .5rem;font-size:1rem;font-weight:800}.finished-card__meta{flex-wrap:wrap;align-items:center;gap:.75rem;padding:.45rem 1rem;display:flex}.finished-card__status{text-transform:uppercase;letter-spacing:.05em;color:#64748b;background:#f1f5f9;border-radius:999px;flex-shrink:0;padding:.1rem .5rem;font-size:.72rem;font-weight:700}.finished-card__bet{color:#334155;font-size:.825rem}.finished-card__bet--win{color:#15803d}.finished-card__bet--loss{color:#b91c1c}.finished-card__bet--pending{color:#7e22ce}.finished-card__odd{font-variant-numeric:tabular-nums;color:#1d4ed8;background:#eff6ff;border-radius:999px;margin-left:.4rem;padding:.05rem .45rem;font-size:.75rem;font-weight:700;display:inline-block}.finished-card__no-bet{color:#94a3b8;font-size:.8rem;font-style:italic}.league-status,.page-status,.session-check{text-align:center;color:#64748b;padding:3rem 1rem}dl{margin:0}dt{font-weight:600}dd{margin:0}@media (width<=767px){.navbar__items{z-index:199;background:#1e293b;border-top:1px solid #ffffff14;flex-direction:column;align-items:stretch;padding:.4rem 0;display:none;position:absolute;top:56px;left:0;right:0;box-shadow:0 8px 16px #00000040}.navbar__items--open{display:flex}.navbar__group{flex-direction:column;align-items:stretch;gap:0}.navbar__group--end{margin-left:0}.nav-link{text-align:left;border-radius:0;padding:.75rem 1.25rem;font-size:.95rem}.navbar__toggle{display:flex}.main-view{flex-direction:column;height:auto;overflow:visible}.main-view__sidebar{border-bottom:1px solid #e2e8f0;border-right:none;width:100%}.sidebar-list{scrollbar-width:none;flex-direction:row;gap:.4rem;padding:.5rem;display:flex;overflow-x:auto}.sidebar-list::-webkit-scrollbar{display:none}.sidebar-item{background:#fff;border:1px solid #e2e8f0;border-radius:999px;flex-shrink:0;width:auto;padding:.4rem .85rem;font-size:.85rem}.sidebar-item--active{background:#dbeafe;border-color:#93c5fd}.main-view__content{height:auto;min-height:50vh;padding:.5rem}.league-header{padding:.75rem .5rem .5rem}.league-tabs{padding:0 .25rem}.league-tab{padding:.55rem .6rem;font-size:.8rem}.league-tab-panel{padding:.5rem .25rem}.fixture-card__header{gap:.4rem;padding:.5rem}.fixture-card__teams{gap:.3rem;font-size:.78rem}.fixture-card__round{font-size:.68rem}.fixture-card__time{font-size:.72rem}.fixture-card__odds{padding:.5rem .4rem .75rem}.odds-group{margin-bottom:.2rem;padding:.4rem .35rem}.odds-group__name{margin-bottom:.3rem;font-size:.72rem}.odds-value{gap:.2rem;padding:.35rem .3rem;font-size:.75rem}.odds-value__odd{font-size:.75rem}.odds-values{gap:.3rem}.odds-subgroups{gap:.4rem}.odds-subgroup__header{font-size:.65rem}.odds-subgroup__values{gap:.25rem}.finished-fixtures__controls{gap:.5rem}.join-view{padding:1.25rem}.join-view__grid{grid-template-columns:1fr;gap:1.25rem}.league-page,.profile-page{padding:1.25rem}}
