1"use strict";(self.webpackChunkboard_game_tracker=self.webpackChunkboard_game_tracker||[]).push([[1851],{3438:(e,o,t)=>{t.d(o,{A:()=>a});var i=t(65043);function a(){const e=(0,i.useRef)(null);return(0,i.useLayoutEffect)(()=>{const o=e.current,t=null===o||void 0===o?void 0:o.closest(".hero-section"),i=null===t||void 0===t?void 0:t.querySelector(".hero-title"),a=null===t||void 0===t?void 0:t.querySelector(".hero-container");if(!i||!a||"function"!==typeof window.matchMedia)return;const r=window.matchMedia("(min-width: 960px)"),n=()=>{if(!r.matches)return void o.style.removeProperty("--hero-fade-end");const e=Math.max(0,Math.round(i.getBoundingClientRect().top-o.getBoundingClientRect().top-12)),t="".concat(e,"px");o.style.getPropertyValue("--hero-fade-end")!==t&&o.style.setProperty("--hero-fade-end",t)};n();const s="undefined"===typeof ResizeObserver?null:new ResizeObserver(n);return[o,a,i].forEach(e=>null===s||void 0===s?void 0:s.observe(e)),window.addEventListener("resize",n),r.addEventListener("change",n),()=>{null===s||void 0===s||s.disconnect(),window.removeEventListener("resize",n),r.removeEventListener("change",n),o.style.removeProperty("--hero-fade-end")}},[]),e}},24546:(e,o,t)=>{t.d(o,{Gv:()=>u.A,Ho:()=>c.A,Qk:()=>r.A,VJ:()=>l.A,XF:()=>a.A,c8:()=>p,fh:()=>m.f,gD:()=>s.A,hN:()=>i.A,lq:()=>n.A,vG:()=>d.A});var i=t(84105),a=t(25722),r=t(36299),n=t(77080),s=t(79169),l=t(48734),d=t(17925),c=t(42425),m=t(9414),u=t(78430);const p={"Settlers of Catan":l.A,Qwixx:i.A,"Monopoly Deal":c.A,"Ticket to Ride":a.A,Uno:d.A,"Dutch Blitz":m.f,Splendor:s.A,Azul:u.A,Wingspan:r.A,Carcassonne:n.A}},59040:(e,o,t)=>{t.d(o,{Ao:()=>G,aB:()=>N,mq:()=>j,G:()=>q,I4:()=>V,fi:()=>A,V$:()=>F,cE:()=>T});const i=Object.freeze({id:"scorecard",displayName:"Scorecard",description:"Single numeric score per player; highest (or lowest with flag) wins. Optional per-player metadata may accompany the score but does not change the winner.",requiredContractFields:Object.freeze([]),optionalContractFields:Object.freeze([]),compatibleWidgets:Object.freeze(["identityRadar","sourceSplitArea","scoreEquation","scoreBreakdown"]),referenceGames:Object.freeze(["Settlers of Catan","Dutch Blitz","Custom","Splendor","Azul","Wingspan","Carcassonne"]),status:"in-prod"}),a=Object.freeze({id:"rounds",displayName:"Rounds (multi-round series)",description:"A series of N rounds, each producing per-player results. The series winner is derived from a series-level rule (e.g. first to threshold) and may differ from any single-round winner.",requiredContractFields:Object.freeze([]),optionalContractFields:Object.freeze([]),compatibleWidgets:Object.freeze(["seriesStats","identityRadar"]),referenceGames:Object.freeze(["Uno"]),status:"spec"}),r=Object.freeze({id:"scorecardWithBonuses",displayName:"Scorecard with bonuses",description:"Single final score per player composed of a base score plus one or more bounded integer bonus columns. Each bonus is declared in the definition and surfaced in entry UI + score-by-source analytics.",requiredContractFields:Object.freeze([]),optionalContractFields:Object.freeze([]),compatibleWidgets:Object.freeze(["scoreEquation","sourceSplitArea","identityRadar"]),referenceGames:Object.freeze(["Ticket to Ride"]),status:"spec"}),n=Object.freeze({id:"structuredGrid",displayName:"Structured grid",description:"Each player owns a structured 2D grid; win condition is derived from cell-marking history. Stub archetype \u2014 no generic component yet; reserved so grid-based games (Qwixx, Welcome To, etc.) can declare their lineage and adopt the archetype when generics are built.",requiredContractFields:Object.freeze([]),optionalContractFields:Object.freeze([]),compatibleWidgets:Object.freeze(["positionHeatmap"]),referenceGames:Object.freeze(["Qwixx"]),status:"stub"}),s=Object.freeze({id:"turnEconomy",displayName:"Turn economy",description:"Multidimensional win condition (primary discrete count, score as tiebreaker) with a first-class per-turn action log. Stub archetype \u2014 no generic component yet; reserved so economy/engine-builder games (Monopoly Deal, etc.) can declare their lineage now.",requiredContractFields:Object.freeze([]),optionalContractFields:Object.freeze([]),compatibleWidgets:Object.freeze(["economyPanel","identityRadar"]),referenceGames:Object.freeze(["Monopoly Deal"]),status:"stub"}),l=Object.freeze({scorecard:i,rounds:a,scorecardWithBonuses:r,structuredGrid:n,turnEconomy:s}),d=Object.freeze(Object.keys(l));function c(e){return"string"!==typeof e?null:l[e]||null}function m(e){return Object.prototype.hasOwnProperty.call(l,e)}!function(){for(const e of d){const o=l[e];
1if(!o||"object"!==typeof o)throw new Error('[archetypes] entry "'.concat(e,'" is not a valid spec object. ')+"Each archetype file must export a frozen object with id, displayName, etc.");if(o.id!==e)throw new Error('[archetypes] catalog key "'.concat(e,'" does not match spec.id "').concat(o.id,'". ')+"Index keys and archetype.id must be identical.");const t=["id","displayName","description","requiredContractFields","optionalContractFields","compatibleWidgets","referenceGames","status"];for(const a of t)if(!Object.prototype.hasOwnProperty.call(o,a))throw new Error('[archetypes] spec "'.concat(e,'" is missing required field "').concat(a,'". ')+"See ArchetypeSpec typedef in src/games/archetypes/index.js.");const i=["spec","stub","wired","in-prod"];if(!i.includes(o.status))throw new Error('[archetypes] spec "'.concat(e,'" has invalid status "').concat(o.status,'". ')+"Must be one of: ".concat(i.join(", "),"."))}}();var u=t(99731);const p={id:"qwixx",mongoGameName:"Qwixx",displayName:"Qwixx",aliases:[],useBespoke:!0,archetype:"structuredGrid",branding:{primary:"#f59e0b",accentDark:"#d97706",lightBg:"#fffbeb",bgGradient:"linear-gradient(135deg, #fef3c7, #fde68a)",shortLabel:"Qwixx",cssDataAttribute:"qwixx",iconName:"Grid3x3"},iconComponent:t(84105).A,meta:{bggId:131260,minPlayers:2,maxPlayers:5,hasVersions:!0,defaultVersion:"traditional",versions:[{id:"traditional",label:"Standard Qwixx",color:"#10b981"},{id:"savage-level-1",label:"Mixed Numbers",color:"#f59e0b"},{id:"savage-level-2",label:"Mixed Colors",color:"#ef4444"}]},sortRule:"score_desc",entry:{playerFields:[{id:"score",label:"Score",type:"integer",required:!0,min:0,max:null,step:1,defaultValue:0,description:null,options:null,bonus:!1}],perGameFields:[],winCondition:"highest_score",seriesWinCondition:null,turnLogDerivation:null,normalizer
1:null},analytics:{rivals:{enabled:!0,closeUnit:5,unitLabel:"point",hasRoundMomentum:!1,minScoreThreshold:0},communityStats:{enabled:!0},keyMetrics:[],gameSpecificMetrics:[],optionalWidgets:["positionHeatmap"],lenses:null},coaching:{minGamesRequired:5,cacheEligible:!0,taxonomy:[],parametricIds:[]},subscription:{leaguePerFreeTierLimit:1},telemetry:{eventGameTypeKey:"game_type"},marketing:{listInLandingHero:!0,listInPricingComparison:!0,listInOnboardingFavorites:!0},csvImport:{bespokeSchemaId:"qwixx",templateModes:["basic","advanced"],perGameColumns:[{csvColumn:"version",type:"enum",required:!1,target:"gameSpecificData.qwixxData.version",defaultValue:"traditional",options:["traditional","savage-level-1","savage-level-2"]}],perPlayerColumns:[{csvColumn:"score",type:"integer",required:!0,target:"score",min:0,defaultValue:0},{csvColumn:"red",type:"integer",required:!1,target:"redCount",min:0,defaultValue:0},{csvColumn:"yellow",type:"integer",required:!1,target:"yellowCount",min:0,defaultValue:0},{csvColumn:"green",type:"integer",required:!1,target:"greenCount",min:0,defaultValue:0},{csvColumn:"blue",type:"integer",required:!1,target:"blueCount",min:0,defaultValue:0},{csvColumn:"penalties",type:"integer",required:!1,target:"penalties",min:0,defaultValue:0}]}};var g=t(24546);const y={id:"monopoly-deal",mongoGameName:"Monopoly Deal",displayName:"Monopoly Deal",aliases:[],useBespoke:!0,archetype:"turnEconomy",branding:{primary:"#10b981",accentDark:"#059669",lightBg:"#ecfdf5",bgGradient:"linear-gradient(135deg, #d1fae5, #a7f3d0)",shortLabel:"MD",cssDataAttribute:"monopoly-deal",iconName:"IconHome"},iconComponent:g.Ho,meta:{bggId:40398,minPlayers:2,maxPlayers:5,hasVersions:!1,versions:[]},sortRule:"sets_then_score",entry:{playerFields:[{id:"setsCompleted",label:"Sets Completed",type:"integer",required:!0,min:0,max:null,step:1,defaultValue:0,description:"Primary win field \u2014 most sets wins; score breaks ties.",options:null,bonus:!1},{id:"score",label:"Score",type:"integer",required:!1,min:0,max:null,step:1,defaultValue:0,description:null,options:null,bonus:!1}],perGameFields:[],winCondition:"sets_then_score",seriesWinCondition:null,turnLogDerivation:"monopolyDeal",normalizer:null},analytics:{rivals:{enabled:!0,closeUnit:2,unitLabel:"point",hasRoundMomentum:!1,minScoreThreshold:0},communityStats:{enabled:!0},keyMetrics:[],gameSpecificMetrics:[],optionalWidgets:["identityRadar","economyPanel"],lenses:null},coaching:{minGamesRequired:3,cacheEligible:!0,taxonomy:[],parametricIds:[]},subscription:{leaguePerFreeTierLimit:1},telemetry:{eventGameTypeKey:"game_type"},marketing:{listInLandingHero:!0,listInPricingComparison:!0,listInOnboardingFavorites:!0},csvImport:{bespokeSchemaId:"monopoly-deal",templateModes:["basic","advanced"],perGameColumns:[],perPlayerColumns:[{csvColumn:"score",type:"integer",required:!1,target:"score",min:0,defaultValue:0,description:"Optional ordering tiebreaker; bespoke schema overwrites with 1/0 winner-takes-all"},{csvColumn:"winner",type:"boolean",required:!1,target:"isWinnerOverride",defaultValue:!1,description:"Override winner detection (sets-count is the default)"},{csvColumn:"completed_sets",type:"string",required:!0,target:"completedSets",defaultValue:"",description:'Semicolon-separated property colors (e.g. "red;green;blue"). 3+ wins.'},{csvColumn:"property_progress",type:"string",required:!1,target:"propertyProgress",defaultValue:"",description:'Optional partial-set map as color:count pairs (e.g. "red:3;yellow:2;blue:2"). When present it is the source of truth; completedSets is derived from it.'},{csvColumn:"rent_cards_played",type:"integer",required:!1,target:"cardEconomy.rentCardsPlayed",min:0,defaultValue:0},{csvColumn:"money_banked",type:"integer",required:!1,target:"cardEconomy.moneyCardsBanked",min:0,defaultValue:0},{csvColumn:"total_bank_value",type:"integer",required:!1,target:"cardEconomy.totalBankValue",min:0,defaultValue:0},{csvColumn:"pass_go_played",type:"integer",required:!1,target:"cardEconomy.passGoPlayed",min:0,defaultValue:0},{csvColumn:"properties_stolen",type:"integer",required:!1,target:"cardEconomy.propertiesStolen",min:0,defaultValue:0},{csvColumn:"properties_lost",type:"integer",required:!1,target:"cardEconomy.propertiesLost",min:0,defaultValue:0}]}};const f={id:"ticket-to-ride",mongoGameName:"Ticket to Ride",displayName:"Ticket to Ride",aliases:["TTR"],useBespoke:!0,archetype:"scorecardWithBonuses",branding:{primary:"#3b82f6",accentDark:"#2563eb",lightBg:"#eff6ff",bgGradient:"linear-gradient(135deg, #dbeafe, #bfdbfe)",
1shortLabel:"TTR",cssDataAttribute:"ticket-to-ride",iconName:"Train"},iconComponent:t(25722).A,meta:{bggId:9209,minPlayers:2,maxPlayers:5,hasVersions:!0,defaultVersion:"classic",versions:[{id:"classic",label:"Classic",color:"#f59e0b"},{id:"usa",label:"USA",color:"#3b82f6"},{id:"europe",label:"Europe",color:"#8b5cf6"},{id:"nordic",label:"Nordic",color:"#06b6d4"},{id:"uk",label:"UK",color:"#6366f1"},{id:"pennsylvania",label:"Pennsylvania",color:"#84cc16"},{id:"japan",label:"Japan",color:"#ec4899"},{id:"italy",label:"Italy",color:"#14b8a6"},{id:"new-york",label:"New York",color:"#f97316"},{id:"london",label:"London",color:"#0284c7"},{id:"rails-sails",label:"Rails & Sails",color:"#0d9488"},{id:"germany",label:"Germany",color:"#ca8a04"},{id:"switzerland",label:"Switzerland",color:"#e11d48"},{id:"amsterdam",label:"Amsterdam",color:"#f59e0b"},{id:"san-francisco",label:"San Francisco",color:"#ea580c"},{id:"india",label:"India",color:"#f97316"},{id:"africa",label:"Heart of Africa",color:"#ca8a04"}]},sortRule:"score_desc",entry:{playerFields:[{id:"score",label:"Final Score",type:"integer",required:!0,min:0,max:null,step:1,defaultValue:0,description:null,options:null,bonus:!1},{id:"completedTickets",label:"Completed Tickets",type:"integer",required:!1,min:0,max:null,step:1,defaultValue:0,description:"Tickets completed (positive contribution to score).",options:null,bonus:!0},{id:"failedTickets",label:"Failed Tickets",type:"integer",required:!1,min:0,max:null,step:1,defaultValue:0,description:"Tickets failed (negative contribution to score).",options:null,bonus:!0}],perGameFields:[{id:"longestRoutePlayer",label:"Longest Route",type:"enum",required:!1,min:null,max:null,step:null,defaultValue:null,description:"Player who held the longest continuous route bonus.",options:"players",bonus:!1}],winCondition:"highest_score",seriesWinCondition:null,turnLogDerivation:null,normalizer
1:null},analytics:{rivals:{enabled:!0,closeUnit:5,unitLabel:"point",hasRoundMomentum:!1,minScoreThreshold:0},communityStats:{enabled:!0},keyMetrics:[],gameSpecificMetrics:[],optionalWidgets:["identityRadar","sourceSplitArea"],lenses:null},coaching:{minGamesRequired:5,cacheEligible:!0,taxonomy:[],parametricIds:[]},subscription:{leaguePerFreeTierLimit:1},telemetry:{eventGameTypeKey:"game_type"},marketing:{listInLandingHero:!0,listInPricingComparison:!0,listInOnboardingFavorites:!0},csvImport:{bespokeSchemaId:"ticket-to-ride",templateModes:["basic","advanced"],perGameColumns:[{csvColumn:"variant",type:"enum",required:!1,target:"gameSpecificData.ticketToRideData.variant",defaultValue:"usa",options:["classic","usa","europe","nordic","uk","pennsylvania","japan","italy","new-york","london","rails-sails","germany","switzerland","amsterdam","san-francisco","india","africa"],description:"Edition the game was played on; defaults to USA"}],perPlayerColumns:[{csvColumn:"score",type:"integer",required:!0,target:"score",min:0,defaultValue:0},{csvColumn:"route_points",type:"integer",required:!1,target:"routePoints",min:0,defaultValue:0},{csvColumn:"tickets_completed",type:"integer",required:!1,target:"ticketsCompleted",min:0,defaultValue:0},{csvColumn:"tickets_failed",type:"integer",required:!1,target:"ticketsFailed",min:0,defaultValue:0},{csvColumn:"longest_route",type:"boolean",required:!1,target:"hasLongestRoute",defaultValue:!1},{csvColumn:"final_train_count",type:"integer",required:!1,target:"finalTrainCount",min:0,defaultValue:0},{csvColumn:"longest_route_length",type:"integer",required:!1,target:"longestRouteLength",min:0,defaultValue:null},{csvColumn:"stations_remaining",type:"integer",required:!1,target:"stationsRemaining",min:0,max:3,defaultValue:0,description:"Europe variant only (0\u20133)"},{csvColumn:"station_assisted_ticket_points",type:"integer",required:!1,target:"stationAssistedTicketPoints",min:0,defaultValue:null,description:"Europe Detailed only: completed-ticket points relying on a borrowed route"},{csvColumn:"color",type:"enum",required:!1,target:"color",defaultValue:"Red",options:["Red","Blue","Black","Yellow","Green"]}]}},h={id:"uno",mongoGameName:"Uno",displayName:"Uno",aliases:[],useBespoke:!0,archetype:"rounds",branding:{primary:"#ef4444",accentDark:"#dc2626",lightBg:"#fef2f2",bgGradient:"linear-gradient(135deg, #fee2e2, #fecaca)",shortLabel:"Uno",cssDataAttribute:"uno",iconName:"IconCards"},iconComponent:g.vG,meta:{bggId:2223,minPlayers:2,maxPlayers:10,hasVersions:!1,versions:[]},sortRule:"score_desc",entry:{playerFields:[{id:"score",label:"Round Score",type:"integer",required:!0,min:0,max:null,step:1,defaultValue:0,description:"Points scored this round; cumulative total derived by the generic rounds entry.",options:null,bonus:!1}],perGameFields:[],winCondition:"series_first_to",seriesWinCondition:{type:"first_to",target:500}
1,turnLogDerivation:"uno",normalizer:null},analytics:{rivals:{enabled:!0,closeUnit:2,unitLabel:"point",hasRoundMomentum:!1,minScoreThreshold:0},communityStats:{enabled:!0},keyMetrics:[],gameSpecificMetrics:[],optionalWidgets:["seriesStats","identityRadar"],lenses:null},coaching:{minGamesRequired:3,cacheEligible:!0,taxonomy:[],parametricIds:[]},subscription:{leaguePerFreeTierLimit:1},telemetry:{eventGameTypeKey:"game_type"},marketing:{listInLandingHero:!0,listInPricingComparison:!0,listInOnboardingFavorites:!0},csvImport:{bespokeSchemaId:"uno",templateModes:["basic","advanced"],perGameColumns:[{csvColumn:"scoring_mode",type:"enum",required:!1,target:"gameSpecificData.unoData.scoringMode",defaultValue:"wins_only",options:["wins_only","points"],description:"wins_only: each row = one round. points: standard Uno scoring (low total wins)."},{csvColumn:"total_rounds",type:"integer",required:!1,target:"gameSpecificData.unoData.totalRounds",min:1,defaultValue:1}],perPlayerColumns:[{csvColumn:"score",type:"integer",required:!1,target:"score",min:0,defaultValue:0,description:"Required in points mode; in wins_only mode defaults to 1 for the round winner"},{csvColumn:"winner",type:"boolean",required:!1,target:"isWinnerOverride",defaultValue:!1},{csvColumn:"callouts",type:"integer",required:!1,target:"unoCallouts",min:0,defaultValue:0},{csvColumn:"penalties",type:"integer",required:!1,target:"unoPenalties",min:0,defaultValue:0},{csvColumn:"cards_total",type:"integer",required:!1,target:"cardsPlayed.total",min:0,defaultValue:0},{csvColumn:"cards_skip",type:"integer",required:!1,target:"cardsPlayed.skip",min:0,defaultValue:0},{csvColumn:"cards_reverse",type:"integer",required:!1,target:"cardsPlayed.reverse",min:0,defaultValue:0},{csvColumn:"cards_draw_two",type:"integer",required:!1,target:"cardsPlayed.drawTwo",min:0,defaultValue:0},{csvColumn:"cards_wild",type:"integer",required:!1,target:"cardsPlayed.wild",min:0,defaultValue:0},{csvColumn:"cards_wild_draw_four",type:"integer",required:!1,target:"cardsPlayed.wildDrawFour",min:0,defaultValue:0}]}},b={id:"dutch-blitz",mongoGameName:"Dutch Blitz",displayName:"Dutch Blitz",aliases:["Blitz"],useBespoke:!0,archetype:"scorecard",branding:{primary:"#ec4899",accentDark:"#db2777",lightBg:"#fdf2f8",bgGradient:"linear-gradient(135deg, #fce7f3, #fbcfe8)",shortLabel:"Blitz",cssDataAttribute:"dutch-blitz",iconName:"Windmill"},iconComponent:g.fh,meta:{bggId:148203,minPlayers:2,maxPlayers:4,hasVersions:!1,versions:[]},sortRule:"score_desc",entry:{playerFields:[{id:"score",label:"Total Score",type:"integer",required:!0,min:null,max:null,step:1,defaultValue:0,description:"Net score; can be negative when post pile cards exceed Blitz pile.",options:null,bonus:!1}],perGameFields:[],winCondition:"highest_score",seriesWinCondition:null,turnLogDerivation:null,normalizer
1:null},analytics:{rivals:{enabled:!0,closeUnit:5,unitLabel:"point",hasRoundMomentum:!0,minScoreThreshold:-50},communityStats:{enabled:!0},keyMetrics:[],gameSpecificMetrics:[],optionalWidgets:["identityRadar","scoreEquation"],lenses:null},coaching:{minGamesRequired:5,cacheEligible:!0,taxonomy:[],parametricIds:[]},subscription:{leaguePerFreeTierLimit:1},telemetry:{eventGameTypeKey:"game_type"},marketing:{listInLandingHero:!0,listInPricingComparison:!0,listInOnboardingFavorites:!0},csvImport:{bespokeSchemaId:"dutch-blitz",templateModes:["basic","advanced"],perGameColumns:[{csvColumn:"total_rounds",type:"integer",required:!1,target:"gameSpecificData.dutchBlitzData.totalRounds",min:1,defaultValue:5},{csvColumn:"winning_score",type:"integer",required:!1,target:"gameSpecificData.dutchBlitzData.winningScore",min:1,defaultValue:75}],perPlayerColumns:[{csvColumn:"score",type:"integer",required:!0,target:"score",defaultValue:0,description:"Cumulative end-of-game total"},{csvColumn:"cards_played_to_dutch",type:"integer",required:!1,target:"cardsPlayedToDutch",min:0,defaultValue:0},{csvColumn:"blitz_pile_remaining",type:"integer",required:!1,target:"blitzPileRemaining",min:0,defaultValue:0},{csvColumn:"deck_type",type:"enum",required:!1,target:"deckType",defaultValue:"pump",options:["pump","carriage","pail","plow"]},{csvColumn:"called_blitz",type:"boolean",required:!1,target:"calledBlitz",defaultValue:!1}]}};const v={id:"custom",mongoGameName:"Custom",displayName:"Something Else",aliases:["Custom Game"],useBespoke:!0,archetype:"scorecard",branding:{primary:"#6b7280",accentDark:"#4b5
1563",lightBg:"#f9fafb",bgGradient:"linear-gradient(135deg, #f9fafb 0%, #e5e7eb 100%)",shortLabel:"Custom",cssDataAttribute:"custom",iconName:"Shapes"},iconComponent:t(26522).A,meta:{minPlayers:2,maxPlayers:20,hasVersions:!1,versions:[]},sortRule:"lower_score_wins_when_flag",entry:{playerFields:[{id:"score",label:"Score",type:"integer",required:!0,min:null,max:null,step:1,defaultValue:0,description:null,options:null,bonus:!1}],perGameFields:[],winCondition:"configurable",seriesWinCondition:null,turnLogDerivation:null,normalizer:null},analytics:{rivals:{enabled:!1,closeUnit:2,unitLabel:"point",hasRoundMomentum:!1,minScoreThreshold:0},communityStats:{enabled:!1},keyMetrics:[],gameSpecificMetrics:[],optionalWidgets:[],lenses:null},coaching:{minGamesRequired:8,cacheEligible:!1,taxonomy:[],parametricIds:[]},subscription:{leaguePerFreeTierLimit:1},telemetry:{eventGameTypeKey:"game_type"},marketing:{listInLandingHero:!1,listInPricingComparison:!0,listInOnboardingFavorites:!1},csvImport:{bespokeSchemaId:"generic",templateModes:["advanced"],perGameColumns:[],perPlayerColumns:[{csvColumn:"score",type:"integer",required:!0,target:"score",defaultValue:0},{csvColumn:"winner",type:"boolean",required:!1,target:"isWinnerOverride",defaultValue:!1}]}};const C={id:"splendor",mongoGameName:"Splendor",displayName:"Splendor",aliases:[],useBespoke:!1,archetype:"scorecard",branding:{primary:"#0891b2",accentDark:"#0e7490",lightBg:"#ecfeff",bgGradient:"linear-gradient(135deg, #cffafe, #a5f3fc)",shortLabel:"Splndr",cssDataAttribute:"splendor",iconName:"Gem"},iconComponent:t(79169).A,meta:{bggId:148228,minPlayers:2,maxPlayers:4,hasVersions:!1,versions:[]},sortRule:"score_desc",entry:{playerFields:[{id:"score",label:"Prestige",type:"integer",required:!0,min:0,max:30,step:1,defaultValue:0,description:"Total prestige points (sum of card prestige + 3 per noble). The first player to 15 triggers the final round.",options:null,bonus:!1},{id:"nobles",label:"Nobles",radarLabel:"Aristocrat",type:"integer",required:!1,min:0,max:5,radarMax:3,step:1,defaultValue:0,description:"Number of noble tiles claimed (3 prestige each).",options:null,bonus:!1},{id:"tier1Cards",label:"Tier 1",radarLabel:"Foundation",type:"integer",required:!1,min:0,max:30,radarMax:12,step:1,defaultValue:0,description:"Tier-1 development cards purchased (cheap engine pieces).",options:null,bonus:!1},{id:"tier2Cards",label:"Tier 2",radarLabel:"Merchant",type:"integer",required:!1,min:0,max:20,radarMax:7,step:1,defaultValue:0,description:"Tier-2 development cards purchased (mid-cost, 1-3 prestige each).",options:null,bonus:!1},{id:"tier3Cards",label:"Tier 3",radarLabel:"Tycoon",type:"integer",required:!1,min:0,max:15,radarMax:4,step:1,defaultValue:0,description:"Tier-3 development cards purchased (expensive, 3-5 prestige each).",options:null,bonus:!1},{id:"finalGoldTokens",label:"Gold Tokens",radarLabel:"Hoarder",type:"integer",required:!1,min:0,max:5,radarMax:3,step:1,defaultValue:0,description:"Gold (joker) tokens still on hand at game end.",options:null,bonus:!1}],perGameFields:[{id:"roundsPlayed",label:"Rounds",type:"integer",required:!1,min:1,max:50,step:1,defaultValue:null,description:"Total rounds elapsed before the first player hit 15 prestige.",options:null,bonus:!1,hideOnGamesCard:!0}],winCondition:"highest_score",scoreComputation:{mode:"manual",requiredFieldIds:[],components:[]},tieBreakers:[{fieldIds:["tier1Cards","tier2Cards","tier3Cards"],aggregate:"sum",direction:"lowest",label:"Fewest development cards"}
1],seriesWinCondition:null,turnLogDerivation:null,normalizer:null},analytics:{rivals:{enabled:!0,closeUnit:2,unitLabel:"prestige",hasRoundMomentum:!1,minScoreThreshold:0},communityStats:{enabled:!0},keyMetrics:["winRate","avgScore","maxScore","avgPosition"],gameSpecificMetrics:["avgNobles","avgTier3Cards","avgRoundsPlayed"],optionalWidgets:["identityRadar","scoreBreakdown"],identityRadar:{archetypes:{nobles:{name:"The Aristocrat",desc:"You win by courting nobles \u2014 every card you buy is a step toward a 3-prestige patron.",iconName:"Crown"},tier1Cards:{name:"The Foundation",desc:"You build a wide base of cheap engine cards \u2014 gem discounts compound into late-game power.",iconName:"Layers"},tier2Cards:{name:"The Merchant",desc:"You play the middle market \u2014 Tier-2 cards balance cost and prestige for a steady tempo.",iconName:"Coins"},tier3Cards:{name:"The Tycoon",desc:"You chase high-value Tier-3 cards \u2014 each purchase is a 3-5 prestige knockout punch.",iconName:"Gem"},finalGoldTokens:{name:"The Hoarder",desc:"You stockpile gold jokers \u2014 flexibility in hand lets you pivot to any card or noble.",iconName:"Coins"}},defaultArchetype:{name:"The Strategist",desc:"You blend levers evenly \u2014 no dominant axis, just balanced gem-merchant play.",iconName:"Compass"}},scoreBreakdown:{components:[{fieldId:"nobles",multiplier:3,label:"Nobles",color:"#fbbf24"}],remainder:{label:"Cards",color:"#0891b2"}},deepDive:{enabled:!0,perGameScoreTrend:!0,winLossAnalysis:{sectionTitle:"Prestige Sources",firstColumnHeader:"Prestige Source",rows:[{key:"nobles",label:"Noble Prestige",fieldId:"nobles",multiplier:3},{key:"cards",label:"Card Prestige",mode:"remainder"},{key:"tier3",label:"Tier-3 Cards Held",fieldId:"tier3Cards",multiplier:1}
1,{key:"rounds",label:"Rounds Played",fieldId:"roundsPlayed",multiplier:1,scope:"perGame"},{key:"total",label:"Total Prestige",mode:"totalScore"}]},milestones:{sectionTitle:"Prestige Milestones",items:[{id:"nobleHeavy",label:"Noble Finish",description:"Claimed \u22652 nobles in one game.",fieldId:"nobles",op:"gte",threshold:2,color:"#fbbf24"},{id:"tycoon",label:"Big Engine",description:"Bought \u22653 Tier-3 cards in one game.",fieldId:"tier3Cards",op:"gte",threshold:3,color:"#0891b2"},{id:"pace",label:"Efficient Race",description:"Game ended in \u226412 rounds (tracked games only).",fieldId:"roundsPlayed",op:"lte",threshold:12,scope:"perGame",color:"#6366f1"}]}},lenses:null},coaching:{minGamesRequired:5,cacheEligible:!0,taxonomy:["gem_economy","noble_targeting","tier_progression","pace"],parametricIds:["nobleRate","tier3Rate","tier1Rate","pace","goldHoarding","archetypeStrength","milestoneStreak"],copyOverrides:{splendor_tighten_consistency:{title:"Trigger the Final Round Earlier",insight:"In Splendor, mid-pack finishes are almost always a pacing problem \u2014 you're sitting at 11-13 prestige when the leader fires the final round. The fix isn't playing safer; it's buying Tier-3 a turn sooner.",evidence:["Splendor mid-pack finishes correlate strongly with high avg roundsPlayed","Players who trigger the final round themselves win ~58% of the time","Saving tokens caps you at 10 \u2014 wasted draws compound across rounds"],actionSteps:["At 12-13 prestige, force the final round on your next turn \u2014 even with a 3-prestige buy","Stop hoarding tokens; 10 is the gem cap and you're losing draws over it",'Reserve a Tier-3 explicitly to unlock its gold \u2014 don\'t draw gold "just in case"'],potentialImpact:"Shift from middle-of-pack to game-ender on your terms"}}},subscription:{leaguePerFreeTierLimit:1},telemetry:{eventGameTypeKey:"game_type"},marketing:{listInLandingHero:!0,listInPricingComparison:!0,listInOnboardingFavorites:!0},csvImport:{bespokeSchemaId:null,templateModes:["advanced"],perGameColumns:[{csvColumn:"rounds_played",type:"integer",required:!1,target:"gameSpecificData.registryData.roundsPlayed",min:1,max:50,defaultValue:12,description:"Total rounds elapsed before the first player hit 15 prestige."}],perPlayerColumns:[{csvColumn:"prestige_points",type:"integer",required:!0,target:"score",min:0,max:30,defaultValue:15,description:"Total prestige points (the authoritative win-condition driver \u2014 highest prestige wins)."},{csvColumn:"nobles",type:"integer",required:!1,target:"gameSpecificData.nobles",min:0,max:5,defaultValue:0,description:"Nobles claimed (3 prestige each)."},{csvColumn:"tier1_cards",type:"integer",required:!1,target:"gameSpecificData.tier1Cards",min:0,max:30,defaultValue:0,description:"Tier-1 development cards purchased."},{csvColumn:"tier2_cards",type:"integer",required:!1,target:"gameSpecificData.tier2Cards",min:0,max:20,defaultValue:0,description:"Tier-2 development cards purchased."},{csvColumn:"tier3_cards",type:"integer",required:!1,target:"gameSpecificData.tier3Cards",min:0,max:15,defaultValue:0,description:"Tier-3 development cards purchased."},{csvColumn:"final_gold_tokens",type:"integer",required:!1,target:"gameSpecificData.finalGoldTokens",min:0,max:5,defaultValue:0,description:"Gold (joker) tokens still on hand at game end."}]}};const w={id:"azul",mongoGameName:"Azul",displayName:"Azul",aliases:[],useBespoke:!1,archetype:"scorecard",branding:{primary:"#0ea5e9",accentDark:"#0369a1",lightBg:"#f0f9ff",bgGradient:"linear-gradient(135deg, #e0f2fe, #bae6fd)",shortLabel:"Azul",cssDataAttribute:"azul",iconName:"AzulIcon"},iconComponent:t(78430).A,meta:{bggId:230802,minPlayers:2,maxPlayers:4,hasVersions:!1,versions:[]},sortRule:"score_desc",entry:{playerFields:[{id:"score",label:"Final Score",type:"integer",required:!0,min:0,max:200,step:1,defaultValue:0,description:"Final score after end-of-game bonuses (rows \xd72, columns \xd77, colors \xd710) minus the floor-line penalty.",options:null,bonus:!1},{id:"completedRows",label:"Rows",radarLabel:"Row Closer",type:"integer",required:!1,min:0,max:5,radarMax:2,step:1,defaultValue:0,description:"Horizontal rows of 5 completed on your wall (2 bonus pts each).",options:null,bonus:!1},{id:"completedColumns",label:"Columns",radarLabel:"Column Master",type:"integer",required:!1,min:0,max:5,radarMax:2,step:1,defaultValue:0,description:"Vertical columns of 5 completed on your wall (7 bonus pts each).",options:null,bonus:!1},{id:"completedColors",label:"Colors",radarLabel:"Color Hunter",type:"integer",required:!1,min:0,max:5,radarMax:2,step:1,defaultValue:0,description:"Color sets (one of every position) completed (10 bonus pts each).",options:null,bonus:!1},{id:"floorPenalty",label:"Floor Penalty",type:"integer",required:!1,min:-42,max:0,step:1,defaultValue:0,description:"Total points lost to broken tiles on the floor line (always \u2264 0).",options:null,bonus:!1}
1],perGameFields:[],winCondition:"highest_score",scoreComputation:{mode:"manual",requiredFieldIds:[],components:[]},tieBreakers:[{fieldId:"completedRows",direction:"highest",label:"Most completed rows"}],seriesWinCondition:null,turnLogDerivation:null,normalizer:null},analytics:{rivals:{enabled:!0,closeUnit:5,unitLabel:"pts",hasRoundMomentum:!1,minScoreThreshold:0},communityStats:{enabled:!0},keyMetrics:["winRate","avgScore","maxScore","avgPosition"],gameSpecificMetrics:["avgCompletedRows","avgCompletedColumns","avgCompletedColors","avgFloorPenalty"],optionalWidgets:["identityRadar","scoreBreakdown"],identityRadar:{archetypes:{completedRows:{name:"The Row Closer",desc:"You drill horizontal rows \u2014 every row of 5 banks 2 bonus points and ends the game on your terms.",iconName:"Minus"},completedColumns:{name:"The Column Master",desc:"You commit early to vertical sets \u2014 each column is 7 points and three columns flips a game.",iconName:"AlignVerticalJustifyCenter"},completedColors:{name:"The Color Hunter",desc:"You stockpile a single color across rows \u2014 every full color set lands a 10-point haymaker.",iconName:"Palette"}},defaultArchetype:{name:"The Tactician",desc:"You balance every lever \u2014 rows, columns, and colors with no dominant axis.",iconName:"Compass"}},scoreBreakdown:{components:[{fieldId:"completedRows",multiplier:2,label:"Row Bonus",color:"#22c55e"},{fieldId:"completedColumns",multiplier:7,label:"Column Bonus",color:"#a855f7"},{fieldId:"completedColors",multiplier:10,label:"Color Bonus",color:"#f59e0b"}],adjustments:[{fieldId:"floorPenalty",multiplier:1,label:"Floor Penalty",color:"#dc2626"}],remainder:{label:"Tile Placement",color:"#0ea5e9"}},deepDive:{enabled:!0,perGameScoreTrend:!0,winLossAnalysis:{sectionTitle:"Score Sources",firstColumnHeader:"Score Source",rows:[{key:"rowBonus",label:"Row Bonus",fieldId:"completedRows",multiplier:2},{key:"colBonus",label:"Column Bonus",fieldId:"completedColumns",multiplier:7},{key:"colorBonus",label:"Color Bonus",fieldId:"completedColors",multiplier:10},{key:"tilePlacement",label:"Tile Placement",mode:"remainder"},{key:"floor",label:"Floor Penalty",fieldId:"floorPenalty",multiplier:1},{key:"total",label:"Total Score",mode:"totalScore"}]},milestones:{sectionTitle:"Wall Milestones",items:[{id:"doubleRow",label:"Wall Rhythm",description:"Completed \u22652 rows in one game.",fieldId:"completedRows",op:"gte",threshold:2,color:"#22c55e"},{id:"doubleCol",label:"Vertical Pressure",description:"Completed \u22652 columns in one game.",fieldId:"completedColumns",op:"gte",threshold:2,color:"#a855f7"},{id:"colorSet",label:"Full-Color Focus",description:"Completed at least one color set.",fieldId:"completedColors",op:"gte",threshold:1,color:"#f59e0b"},{id:"cleanFloor",label:"Clean Floor Line",description:"Zero floor penalty recorded.",fieldId:"floorPenalty",op:"eq",threshold:0,color:"#0ea5e9"}]}},lenses:null},coaching:{minGamesRequired:5,cacheEligible:!0,taxonomy:["floor_management","color_targeting","row_column_planning","tempo"],parametricIds:["rowCompletionRate","columnCompletionRate","colorCompletionRate","floorPenalty","wallTempo","colorContested","archetypeStrength","milestoneStreak"],copyOverrides:{azul_improve_fundamentals:{title:"Tighten the Floor Line First",insight:"Below-25% Azul win rates almost always trace to floor-line bleed. The other game systems (row / column / color) can't mask 7+ penalty points per game \u2014 disciplined floor management is the highest-leverage fundamental in this game.",evidence:['Floor penalty is the only Azul "skill" that fires every round, not just at game end',"Even a single -8 game wipes out 4 completed-row bonuses","The Analytics avgFloorPenalty tile is your week-over-week feedback loop"],actionSteps:["Count empty pattern-line spaces BEFORE you commit to a factory pick","When you must overdraw, take the color with the lowest opponent demand",'Target the "Clean Floor Line" Milestone (zero penalty) 3 games in a row'],potentialImpact:"Recover 5-10 points per game from the cheapest skill in Azul"}}},subscription:{leaguePerFreeTierLimit:1},telemetry:{eventGameTypeKey:"game_type"},marketing:{listInLandingHero:!0,listInPricingComparison:!0,listInOnboardingFavorites:!0},csvImport:{bespokeSchemaId:null,templateModes:["advanced"],perGameColumns:[],perPlayerColumns:[{
1csvColumn:"final_score",type:"integer",required:!0,target:"score",min:0,max:200,defaultValue:50,description:"Final Azul score (after end-of-game bonuses minus the floor-line penalty). This is the authoritative win-condition driver."},{csvColumn:"completed_rows",type:"integer",required:!1,target:"gameSpecificData.completedRows",min:0,max:5,defaultValue:0,description:"Horizontal rows completed on the wall (2 bonus pts each)."},{csvColumn:"completed_columns",type:"integer",required:!1,target:"gameSpecificData.completedColumns",min:0,max:5,defaultValue:0,description:"Vertical columns completed on the wall (7 bonus pts each)."},{csvColumn:"completed_colors",type:"integer",required:!1,target:"gameSpecificData.completedColors",min:0,max:5,defaultValue:0,description:"Color sets completed across the wall (10 bonus pts each)."},{csvColumn:"floor_penalty",type:"integer",required:!1,target:"gameSpecificData.floorPenalty",min:-42,max:0,defaultValue:0,description:"Total points lost to broken tiles on the floor line (always \u2264 0)."}]}};const k={id:"wingspan",mongoGameName:"Wingspan",displayName:"Wingspan",aliases:[],useBespoke:!1,archetype:"scorecard",branding:{primary:"#a21caf",accentDark:"#86198f",lightBg:"#fdf4ff",bgGradient:"linear-gradient(135deg, #fae8ff, #f5d0fe)",shortLabel:"Wing",cssDataAttribute:"wingspan",iconName:"Bird"},iconComponent:t(36299).A,meta:{minPlayers:1,maxPlayers:5,hasVersions:!1,versions:[]},sortRule:"score_desc",entry:{playerFields:[{id:"score",label:"Final Score",type:"integer",required:!0,min:0,max:160,step:1,defaultValue:0,description:"Total victory points at the end of round 4 \u2014 sum of bird VP, bonus cards, roun
1d goals, eggs, cached food, and tucked cards.",options:null,bonus:!1},{id:"birdVp",label:"Bird VP",radarLabel:"Naturalist",type:"integer",required:!1,min:0,max:120,radarMax:60,step:1,defaultValue:0,description:"Sum of the printed point value on every bird card played.",options:null,bonus:!1},{id:"bonusCardPoints",label:"Bonus Cards",radarLabel:"Specialist",type:"integer",required:!1,min:0,max:40,radarMax:24,step:1,defaultValue:0,description:"Points scored from bonus cards' printed criteria (e.g. birds of prey, ground foragers).",options:null,bonus:!1},{id:"roundGoalPoints",label:"Round Goals",type:"integer",required:!1,min:0,max:20,step:1,defaultValue:0,description:"Points from the 4 end-of-round goal tiles (0-5 each, ranked by placement).",options:null,bonus:!1},{id:"eggPoints",label:"Eggs",radarLabel:"Nester",type:"integer",required:!1,min:0,max:40,radarMax:25,step:1,defaultValue:0,description:"Total eggs laid on bird cards (1 point each).",options:null,bonus:!1},{id:"cachedFoodPoints",label:"Cached Food",radarLabel:"Forager",type:"integer",required:!1,min:0,max:20,radarMax:12,step:1,defaultValue:0,description:"Food tokens cached on bird cards that store food (1 point each).",options:null,bonus:!1},{id:"tuckedCardPoints",label:"Tucked Cards",radarLabel:"Archivist",type:"integer",required:!1,min:0,max:20,radarMax:12,step:1,defaultValue:0,description:"Bird cards tucked under other birds by their powers (1 point each).",options:null,bonus:!1},{id:"unusedFood",label:"Unused Food",type:"integer",required:!1,min:0,max:30,step:1,defaultValue:null,description:"Food tokens remaining at game end; used only to break tied final scores.",options:null,bonus:!1,hideOnGamesCard:!0}],perGameFields:[],winCondition:"highest_score",scoreComputation:{mode:"sum",requiredFieldIds:["birdVp","bonusCardPoints","roundGoalPoints","eggPoints","cachedFoodPoints","tuckedCardPoints"],components:[{fieldId:"birdVp",multiplier:1},{fieldId:"bonusCardPoints",multiplier:1}
1,{fieldId:"roundGoalPoints",multiplier:1},{fieldId:"eggPoints",multiplier:1},{fieldId:"cachedFoodPoints",multiplier:1},{fieldId:"tuckedCardPoints",multiplier:1}]},tieBreakers:[{fieldId:"unusedFood",direction:"highest",label:"Most unused food"}],seriesWinCondition:null,turnLogDerivation:null,normalizer:null},analytics:{rivals:{enabled:!0,closeUnit:5,unitLabel:"points",hasRoundMomentum:!1,minScoreThreshold:0},communityStats:{enabled:!0},keyMetrics:["winRate","avgScore","maxScore","avgPosition"],gameSpecificMetrics:["avgBirdVp","avgEggPoints","avgTuckedCardPoints"],optionalWidgets:["identityRadar","scoreBreakdown"],identityRadar:{archetypes:{birdVp:{name:"The Naturalist",desc:"You chase pure bird value \u2014 every card in your tableau counts toward your final tally, powers or not.",iconName:"Bird"},bonusCardPoints:{name:"The Specialist",desc:"You draft toward your bonus cards \u2014 a focused hand of birds that all satisfy the same end-game criteria.",iconName:"Target"},eggPoints:{name:"The Nester",desc:"You stack eggs across your habitats \u2014 a slow-building engine that pays off round after round.",iconName:"Egg"},cachedFoodPoints:{name:"The Forager",desc:"You cache food on power-triggered birds \u2014 every activation banks another point.",iconName:"Wheat"},tuckedCardPoints:{name:"The Archivist",desc:"You tuck cards under your birds \u2014 a hidden reserve of points your opponents never see coming.",iconName:"Layers"}},defaultArchetype:{name:"The Ornithologist",desc:"You balance every source evenly \u2014 bird value, bonuses, eggs, food, and tucks all contribute.",iconName:"Compass"}},scoreBreakdown:{components:[{fieldId:"birdVp",multiplier:1,label:"Bird VP",color:"#a21caf"},{fieldId:"bonusCardPoints",multiplier:1,label:"Bonus Cards",color:"#f59e0b"}
1,{fieldId:"roundGoalPoints",multiplier:1,label:"Round Goals",color:"#8b5cf6"},{fieldId:"eggPoints",multiplier:1,label:"Eggs",color:"#fbbf24"},{fieldId:"cachedFoodPoints",multiplier:1,label:"Cached Food",color:"#92400e"},{fieldId:"tuckedCardPoints",multiplier:1,label:"Tucked Cards",color:"#0ea5e9"}]},deepDive:{enabled:!0,perGameScoreTrend:!0,winLossAnalysis:{sectionTitle:"Score Sources",firstColumnHeader:"Score Source",rows:[{key:"birdVp",label:"Bird VP",fieldId:"birdVp",multiplier:1},{key:"bonusCards",label:"Bonus Card Points",fieldId:"bonusCardPoints",multiplier:1},{key:"roundGoals",label:"Round Goal Points",fieldId:"roundGoalPoints",multiplier:1},{key:"eggs",label:"Egg Points",fieldId:"eggPoints",multiplier:1},{key:"cachedFood",label:"Cached Food Points",fieldId:"cachedFoodPoints",multiplier:1},{key:"tuckedCards",label:"Tucked Card Points",fieldId:"tuckedCardPoints",multiplier:1},{key:"total",label:"Total Score",mode:"totalScore"}]},milestones:{sectionTitle:"Score Milestones",items:[{id:"birdEngine",label:"Bird Engine",description:"Scored \u226550 Bird VP in one game.",fieldId:"birdVp",op:"gte",threshold:50,color:"#a21caf"},{id:"nestBuilder",label:"Nest Builder",description:"Scored \u226515 egg points in one game.",fieldId:"eggPoints",op:"gte",threshold:15,color:"#fbbf24"},{id:"bonusHunter",label:"Bonus Hunter",description:"Scored \u226515 bonus card points in one game.",fieldId:"bonusCardPoints",op:"gte",threshold:15,color:"#f59e0b"},{id:"centuryClub",label:"Century Club",description:"Finished a game with \u2265100 total points.",fieldId:"score",op:"gte",threshold:100,color:"#0ea5e9"}]}},lenses:null},coaching:{minGamesRequired:5,cacheEligible:!0,taxonomy:["engine_building","bonus_card_synergy","egg_economy","food_caching","round_goal_timing"],parametricIds:["archetypeStrength","milestoneStreak"],copyOverrides:{}},subscription:{leaguePerFreeTierLimit:1},telemetry:{eventGameTypeKey:"game_type"},marketing:{listInLandingHero:!0,listInPricingComparison:!0,listInOnboardingFavorites:!0},csvImport:{bespokeSchemaId:null,templateModes:["advanced"],perGameColumns:[],perPlayerColumns:[{csvColumn:"final_score",type:"integer",required:!0,target:"score",min:0,max:160,defaultValue:70,description:"Total victory points at the end of round 4."},{csvColumn:"bird_vp",type:"integer",required:!1,target:"gameSpecificData.birdVp",min:0,max:120,defaultValue:0,description:"Sum of the printed point value on every bird card played."},{csvColumn:"bonus_card_points",type:"integer",required:!1,target:"gameSpecificData.bonusCardPoints",min:0,max:40,defaultValue:0,description:"Points scored from bonus cards' printed criteria."},{csvColumn:"round_goal_points",type:"integer",required:!1,target:"gameSpecificData.roundGoalPoints",min:0,max:20,defaultValue:0,description:"Points from the 4 end-of-round goal tiles."},{csvColumn:"egg_points",type:"integer",required:!1,target:"gameSpecificData.eggPoints",min:0,max:40,defaultValue:0,description:"Total eggs laid on bird cards."},{csvColumn:"cached_food_points",type:"integer",required:!1,target:"gameSpecificData.cachedFoodPoints",min:0,max:20,defaultValue:0,description:"Food tokens cached on bird cards."},{csvColumn:"tucked_card_points",type:"integer",required:!1,target:"gameSpecificData.tuckedCardPoints",min:0,max:20,defaultValue:0,description:"Bird cards tucked under other birds by their powers."},{csvColumn:"unused_food",type:"integer",required:!1,target:"gameSpecificData.unusedFood",min:0,max:30,defaultValue:0,description:"Food tokens remaining at game end; used to break ties."}]}};const S={id:"carcassonne",mongoGameName:"Carcassonne",displayName:"Carcassonne",aliases:[],useBespoke:!1,archetype:"scorecard",branding:{primary:"#65a30d",accentDark:"#4d7c0f",lightBg:"#f7fee7",bgGradient:"linear-gradient(135deg, #ecfccb, #d9f99d)",shortLabel:"Carc",cssDataAttribute:"carcassonne",iconName:"Castle"},iconComponent:t(77080).A,meta:{minPlayers:2,maxPlayers:5,hasVersions:!1,versions:[]},sortRule:"score_desc",entry:{playerFields:[{id:"score",label:"Final Score",type:"integer",required:!0,min:0,max:350,step:1,defaultValue:0,description:"Total end-of-game points \u2014 sum of roads, cities, cloisters, and farms.",options:null,bonus:!1},{id:"roads",label:"Roads",radarLabel:"Road Builder",type:"integer",required:!1,min:0,max:60,radarMax:30,step:1,defaultValue:0,description:"Points from completed roads \u2014 1 point per tile (same rate whether the road finished or not).",options:null,bonus:!1},{id:"cities",label:"Cities",radarLabel:"Architect",type:"integer",required:!1,min:0,max:150,radarMax:70,step:1,defaultValue:0,description:"Points from cities \u2014 2 pts/tile + 2 pts/shield when completed, halved (1 pt/tile + 1 pt/shield) if incomplete at game end.",options:null,bonus:!1},{id:"cloisters",label:"Cloisters",radarLabel:"Hermit",type:"integer",required:!1,min:0,max:60,radarMax:35,step:1,defaultValue:0,description:"Points from cloisters \u2014 1 point for the tile itself plus 1 point per surrounding tile placed (up to 9 per cloister).",options:null,bonus:!1},{id:"farms",label:"Farms",radarLabel:"Farmer",type:"integer",required:!1,min:0,max:120,radarMax:70,step:1,defaultValue:0,description:"Points from farms \u2014 3 points per completed city a farmer has majority control of, scored only at game end. Self-reported (depends on board state the app doesn't track).",options:null,bonus:!1}
1],perGameFields:[],winCondition:"highest_score",scoreComputation:{mode:"sum",requiredFieldIds:["roads","cities","cloisters","farms"],components:[{fieldId:"roads",multiplier:1},{fieldId:"cities",multiplier:1},{fieldId:"cloisters",multiplier:1},{fieldId:"farms",multiplier:1}]},tieBreakers:[],seriesWinCondition:null,turnLogDerivation:null,normalizer:null},analytics:{rivals:{enabled:!0,closeUnit:10,unitLabel:"points",hasRoundMomentum:!1,minScoreThreshold:0},communityStats:{enabled:!0},keyMetrics:["winRate","avgScore","maxScore","avgPosition"],gameSpecificMetrics:["avgCities","avgFarms","avgCloisters"],optionalWidgets:["identityRadar","scoreBreakdown"],identityRadar:{archetypes:{roads:{name:"The Road Builder",desc:"You lay road after road, banking small, steady points tile by tile while everyone else chases riskier features.",iconName:"Route"},cities:{name:"The Architect",desc:"You commit meeples to sprawling cities, chasing the double-value payoff of shields and completed walls.",iconName:"Shield"},cloisters:{name:"The Hermit",desc:"You tuck a meeple onto a cloister and quietly surround it with tiles \u2014 a small, low-risk, near-guaranteed 9 points.",iconName:"Church"},farms:{name:"The Farmer",desc:"You play the long game \u2014 a farmer placed early quietly outscores everything else once the cities around it complete.",iconName:"LandPlot"}},defaultArchetype:{name:"The Tile Layer",desc:"You spread your meeples across roads, cities, cloisters, and farms with no single dominant strategy.",iconName:"Compass"}},scoreBreakdown:{components:[{fieldId:"roads",multiplier:1,label:"Roads",color:"#78716c"},{fieldId:"cities",multiplier:1,label:"Cities",color:"#dc2626"},{fieldId:"cloisters",multiplier:1,label:"Cloisters",color:"#7c3aed"},{fieldId:"farms",multiplier:1,label:"Farms",color:"#65a30d"}]},deepDive:{enabled:!0,perGameScoreTrend:!0,winLossAnalysis:{sectionTitle:"Feature Scores",firstColumnHeader:"Score Source",rows:[{key:"roads",label:"Road Points",fieldId:"roads",multiplier:1},{key:"cities",label:"City Points",fieldId:"cities",multiplier:1},{key:"cloisters",label:"Cloister Points",fieldId:"cloisters",multiplier:1},{key:"farms",label:"Farm Points",fieldId:"farms",multiplier:1},{key:"total",label:"Total Score",mode:"totalScore"}]},milestones:{sectionTitle:"Feature Milestones",items:[{id:"cityMaster",label:"City Master",description:"Scored \u226560 city points in one game.",fieldId:"cities",op:"gte",threshold:60,color:"#dc2626"},{id:"farmDynasty",label:"Farm Dynasty",description:"Scored \u226560 farm points in one game.",fieldId:"farms",op:"gte",threshold:60,color:"#65a30d"},{id:"cloisterHermit",label:"Cloister Hermit",description:"Scored \u226527 cloister points in one game (3 completed cloisters).",fieldId:"cloisters",op:"gte",threshold:27,color:"#7c3aed"},{id:"grandTour",label:"Grand Tour",description:"Finished a game with \u2265150 total points.",fieldId:"score",op:"gte",threshold:150,color:"#d97706"}]}},lenses:null},coaching:{minGamesRequired:5,cacheEligible:!0,taxonomy:["road_efficiency","city_commitment","cloister_placement","farm_control","meeple_management"],parametricIds:["archetypeStrength","milestoneStreak"],copyOverrides:{}},subscription:{leaguePerFreeTierLimit:1},telemetry:{eventGameTypeKey:"game_type"},marketing:{listInLandingHero:!0,listInPricingComparison:!0,listInOnboardingFavorites:!0},csvImport:{bespokeSchemaId:null,templateModes:["advanced"],perGameColumns:[],perPlayerColumns:[{csvColumn:"final_score",type:"integer",required:!0,target:"score",min:0,max:350,defaultValue:80,description:"Total end-of-game points."},{csvColumn:"road_points",type:"integer",required:!1,target:"gameSpecificData.roads",min:0,max:60,defaultValue:0,description:"Points from completed roads (1 pt/tile)."},{csvColumn:"city_points",type:"integer",required:!1,target:"gameSpecificData.cities",min:0,max:150,defaultValue:0,description:"Points from cities (2 pts/tile + 2 pts/shield when completed)."},{csvColumn:"cloister_points",type:"integer",required:!1,target:"gameSpecificData.cloisters",min:0,max:60,defaultValue:0,description:"Points from cloisters (up to 9 each)."},{csvColumn:"farm_points",type:"integer",required:!1,target:"gameSpecificData.farms",min:0,max:120,defaultValue:0,description:"Points from farms (3 pts per completed city with majority control)."}]}},x=new Set(["integer","boolean","enum","string"]),I=new Set(["highest","lowest"]);const P=Object.freeze([u.A,p,y,f,h,b,v,C,w,k,S]);P.forEach(function(e){const o=function(e){const o=[],t=e&&(e.mongoGameName||e.
1id)||"unknown game";if(!e||"object"!==typeof e)return["definition must be an object"];const i=e.entry||{},a=Array.isArray(i.playerFields)?i.playerFields:[],r=Array.isArray(i.perGameFields)?i.perGameFields:[],n=new Set;for(const[h,b]of[["player",a],["per-game",r]])for(const e of b)e&&"string"===typeof e.id&&e.id.trim()?(n.has(e.id)&&o.push("".concat(t,': duplicate field id "').concat(e.id,'"')),n.add(e.id),x.has(e.type)||o.push("".concat(t,': field "').concat(e.id,'" has unsupported type "').concat(e.type,'"')),"boolean"!==typeof e.required&&o.push("".concat(t,': field "').concat(e.id,'" must declare required as boolean')),"enum"!==e.type||"players"===e.options||Array.isArray(e.options)&&0!==e.options.length||o.push("".concat(t,': enum field "').concat(e.id,'" must declare options'))):o.push("".concat(t,": ").concat(h," field is missing an id"));if(!1===e.useBespoke){const n=i.scoreComputation;if(n&&["manual","sum"].includes(n.mode)){for(const e of n.requiredFieldIds||[])a.some(o=>o.id===e)||o.push("".concat(t,': score requirement references unknown field "').concat(e,'"'));for(const e of n.components||[])a.some(o=>o.id===e.fieldId)||o.push("".concat(t,': score component references unknown field "').concat(e.fieldId,'"')),Number.isFinite(e.multiplier)||o.push("".concat(t,': score component "').concat(e.fieldId,'" needs a finite multiplier'))}else o.push("".concat(t,": registry game must declare entry.scoreComputation"));for(const e of i.tieBreakers||[]){const i=e.fieldIds||(e.fieldId?[e.fieldId]:[]);I.has(e.direction)||o.push("".concat(t,": tie-breaker has invalid direction")),Array.isArray(i)&&0!==i.length||o.push("".concat(t,": tie-breaker must reference a field")),i.forEach(e=>{a.some(o=>o.id===e)||o.push("".concat(t,': tie-breaker references unknown field "').concat(e,'"'))})}const h=e.csvImport&&e.csvImport.perPlayerColumns||[];for(const e of a){const i="score"===e.id?"score":"gameSpecificData.".concat(e.id),a=h.find(e=>e.target===i);a?a.type===e.type&&a.required===e.required&&a.min===e.min&&a.max===e.max||o.push("".concat(t,': CSV contract for "').concat(e.id,'" does not match entry contract')):o.push("".concat(t,': field "').concat(e.id,'" is missing from CSV import'))}for(const e of h){const i="score"===e.target?"score":String(e.target||"").replace(/^gameSpecificData\./,"");a.some(e=>e.id===i)||o.push("".concat(t,': CSV column "').concat(e.csvColumn,'" targets unknown player field "').concat(i,'"'))}const b=e.csvImport&&e.csvImport.perGameColumns||[];for(const e of r){const i="gameSpecificData.registryData.".concat(e.id),a=b.find(e=>e.target===i);a?a.type===e.type&&a.required===e.required&&a.min===e.min&&a.max===e.max||o.push("".concat(t,': CSV contract for per-game field "').concat(e.id,'" does not match entry contract')):o.push("".concat(t,': per-game field "').concat(e.id,'" is missing from CSV import'))}const v=(e,i)=>{"score"===e||a.some(o=>o.id===e)||o.push("".concat(t,": ").concat(i,' references unknown field "').concat(e,'"'))};for(const o of(null===(s=e.analytics)||void 0===s||null===(l=s.scoreBreakdown)||void 0===l?void 0:l.components)||[]){var s,l;v(o.fieldId,"score breakdown")}for(const o of Object.keys((null===(d=e.analytics)||void 0===d||null===(c=d.identityRadar)||void 0===c?void 0:c.archetypes)||{})){var d,c;v(o,"identity radar")}for(const i of(null===(m=e.analytics)||void 0===m||null===(u=m.deepDive)||void 0===u||null===(p=u.winLossAnalysis)||void 0===p?void 0:p.rows)||[]){var m,u,p;i.fieldId&&"perGame"!==i.scope&&v(i.fieldId,"win/loss analysis"),i.fieldId&&"perGame"===i.scope&&!r.some(e=>e.id===i.fieldId)&&o.push("".concat(t,': win/loss analysis references unknown per-game field "').concat(i.fieldId,'"'))}for(const i of(null===(g=e.analytics)||void 0===g||null===(y=g.deepDive)||void 0===y||null===(f=y.milestones)||void 0===f?void 0:f.items)||[]){var g,y,f;"perGame"!==i.scope||r.some(e=>e.id===i.fieldId)?"perGame"!==i.scope&&v(i.fieldId,"milestone"):o.push("".concat(t,': milestone references unknown per-game field "').concat(i.fieldId,'"'))}}return o}(e);if(o.length)throw new Error("[games/registry] definition contract invalid:\n".concat(o.join("\n")))});const _=(()=>{const e=new Map;for(const o of P){const t=[o.id,o.mongoGameName,...o.aliases||[]];for(const i of t)if("string"===typeof i&&i.trim()){const t=i.trim().toLowerCase(),a=e.get(t);if(a&&a!==o)throw new Error('[games/registry] lookup key "'.concat(t,'" is shared by ').concat(a.mongoGameName," and ").concat(o.mongoGameName));e.set(t,o)}}return e})(),q=()=>P,G=e=>{if("string"===typeof e)return _.get(e.trim().toLowerCase())},T=()=>P.map(e=>e.mongoGameName),V=()=>P.filter(e=>
1e.analytics.rivals.enabled).map(e=>e.mongoGameName),F=()=>P.filter(e=>e.meta.hasVersions).map(e=>e.mongoGameName),N=()=>P.filter(e=>e.marketing.listInOnboardingFavorites).map(e=>e.mongoGameName),j=()=>P.filter(e=>e.analytics.communityStats.enabled).map(e=>e.mongoGameName),A=e=>{const o=G(e);return o?o.id:void 0};!function(){const e=[];for(const o of P)"string"===typeof o.archetype?m(o.archetype)||e.push(' - "'.concat(o.mongoGameName,'" has unknown archetype "').concat(o.archetype,'". ')+"Known: ".concat(d.join(", "))):e.push(' - "'.concat(o.mongoGameName,'" missing archetype field'));if(e.length>0)throw new Error("[games/registry] archetype drift detected:\n".concat(e.join("\n"),"\n")+"Every definition must declare an archetype registered in src/games/archetypes/index.js.")}(),function(){const e=[];for(const o of P){const t=o.analytics&&o.analytics.optionalWidgets;if(!Array.isArray(t)){e.push(' - "'.concat(o.mongoGameName,'" missing analytics.optionalWidgets array'));continue}const i=c(o.archetype);if(!i)continue;const a=i.compatibleWidgets||[];for(const r of t)a.includes(r)||e.push(' - "'.concat(o.mongoGameName,'" declares widget "').concat(r,'" which is not ')+'in archetype "'.concat(o.archetype,'".compatibleWidgets [').concat(a.join(", "),"]"))}if(e.length>0)throw new Error("[games/registry] optionalWidgets drift detected:\n".concat(e.join("\n"),"\n")+"Every widget in analytics.optionalWidgets must be listed in the archetype's compatibleWidgets.")}(),function(){const e=[],o=["highest_score","lowest_score","sets_then_score","series_first_to","configurable"];for(const t of P)t.entry&&"object"===typeof t.entry?(Array.isArray(t.entry.playerFields)||e.push(' - "'.concat(t.mongoGameName,'" entry.playerFields is not an array')),Array.isArray(t.entry.perGameFields)||e.push(' - "'.concat(t.mongoGameName,'" entry.perGameFields is not an array')),o.includes(t.entry.winCondition)||e.push(' - "'.concat(t.mongoGameName,'" entry.winCondition "').concat(t.entry.winCondition,'" not in ')+"[".concat(o.join(", "),"]"))):e.push(' - "'.concat(t.mongoGameName,'" missing entry config'));if(e.length>0)throw new Error("[games/registry] entry-config drift detected:\n".concat(e.join("\n"),"\n")+"Every definition must declare entry.{playerFields, perGameFields, winCondition}.")}(),function(){const e=new Set(["integer","boolean","enum","string"]),o=new Set(["basic","advanced"]),t=[];for(const i of P){if(!i.csvImport||"object"!==typeof i.csvImport){t.push(' - "'.concat(i.mongoGameName,'" missing csvImport config (Phase 5)'));continue}const a=i.csvImport;if(null!==a.bespokeSchemaId&&"string"!==typeof a.bespokeSchemaId&&t.push(' - "'.concat(i.mongoGameName,'" csvImport.bespokeSchemaId must be a string or null')),"string"!==typeof a.bespokeSchemaId||a.bespokeSchemaId.trim()||t.pu
1sh(' - "'.concat(i.mongoGameName,'" csvImport.bespokeSchemaId is empty string (use null instead)')),Array.isArray(a.templateModes)&&0!==a.templateModes.length)for(const e of a.templateModes)o.has(e)||t.push(' - "'.concat(i.mongoGameName,'" csvImport.templateModes contains "').concat(e,'" not in ')+"[".concat([...o].join(", "),"]"));else t.push(' - "'.concat(i.mongoGameName,'" csvImport.templateModes must be a non-empty array'));for(const o of["perGameColumns","perPlayerColumns"]){if(!Array.isArray(a[o])){t.push(' - "'.concat(i.mongoGameName,'" csvImport.').concat(o," is not an array"));continue}const r=new Set;for(const n of a[o])n&&"object"===typeof n?("string"===typeof n.csvColumn&&n.csvColumn.trim()?r.has(n.csvColumn)?t.push(' - "'.concat(i.mongoGameName,'" csvImport.').concat(o,'[] duplicate csvColumn "').concat(n.csvColumn,'"')):r.add(n.csvColumn):t.push(' - "'.concat(i.mongoGameName,'" csvImport.').concat(o,"[] missing csvColumn")),e.has(n.type)||t.push(' - "'.concat(i.mongoGameName,'" csvImport.').concat(o,'[].type "').concat(n.type,'" not in ')+"[".concat([...e].join(", "),'] (column "').concat(n.csvColumn,'")')),"boolean"!==typeof n.required&&t.push(' - "'.concat(i.mongoGameName,'" csvImport.').concat(o,'[].required must be boolean (column "').concat(n.csvColumn,'")')),"string"===typeof n.target&&n.target.trim()||t.pu
1sh(' - "'.concat(i.mongoGameName,'" csvImport.').concat(o,'[].target must be non-empty string (column "').concat(n.csvColumn,'")')),"enum"===n.type&&(Array.isArray(n.options)&&0!==n.options.length||t.push(' - "'.concat(i.mongoGameName,'" csvImport.').concat(o,'[].options must be non-empty for type "enum" (column "').concat(n.csvColumn,'")')))):t.push(' - "'.concat(i.mongoGameName,'" csvImport.').concat(o,"[] has a non-object entry"))}}if(t.length>0)throw new Error("[games/registry] csvImport drift detected:\n".concat(t.join("\n"),"\n")+"Every definition must declare csvImport.{bespokeSchemaId, templateModes, perGameColumns, perPlayerColumns}.")}()},73738:(e,o,t)=>{t.d(o,{A:()=>g});t(65043);var i=t(19647),a=t(47922),r=t(36210),n=t(26405),s=t(71360),l=t(31130),d=t(86105),c=t(70579);const m={"multi-game":{game:"Settlers of Catan",scores:[10,8,7,6]},azul:{game:"Azul",scores:[82,74,68,61]},"ticket-to-ride":{game:"Ticket to Ride",scores:[128,116,103,94]},splendor:{game:"Splendor",scores:[16,14,12,10]},wingspan:{game:"Wingspan",scores:[94,87,81,75]},carcassonne:{game:"Carcassonne",scores:[118,106,97,89]}},u=["Maya","Leo","Nina","You"],p=[["Score tonight\u2019s game","Pick your game, add names and final scores. More detail can come later.",n.A,"score"],["Bring everyone along","Keep results for everyone at the table. Guests don\u2019t need an account to be logged.",i.A,"friends"],["Watch the patterns form","See how your points and results compare across games as your history grows.",a.A,"patterns"],["Let the league settle it","Members can claim their games and follow your group\u2019s standings together.",l.A,"league"]],g=e=>{let{variant:o="multi-game",homeExperiment:t=!1}=e;const i=m[o]||m["multi-game"],a=d.l_[i.game],n=a.icon;return(0,c.jsx)("section",{className:"landing-log-flow",id:"log-flow",children:(0,c.jsxs)("div",{className:"container",children:[(0,c.jsxs)("div",{className:"section-header",children:[(0,c.jsx)("h2",{children:t?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)("span",{className:"home-control-only",children:"Get started in 30 seconds"}),(0,c.jsx)("span",{className:"home-progressive-only",children:"Tonight\u2019s score is just the beginning."})]}):"Get started in 30 seconds"}),t&&(0,c.jsx)("p",{className:"home-progressive-only home-progressive-intro",children:"Start with a 30-second game log. Build the history your group can come back to."})]}),(0,c.jsxs)("div",{className:"landing-log-flow__layout",children:[(0,c.jsxs)("ol",{className:"landing-log-flow__steps".concat(t?" home-control-only":""),children:[(0,c.jsxs)("li",{children:[(0,c.jsx)("span",{children:"1"}),(0,c.jsxs)("div",{children:[(0,c.jsx)("strong",{children:"Pick your game"}),(0,c.jsx)("small",{children:"A score sheet made for the game you just played."})]})]}),(0,c.jsxs)("li",{children:[(0,c.jsx)("span",{children:"2"}),(0,c.jsxs)("div",{children:[(0,c.jsx)("strong",{children:"Add players and scores"}),(0,c.jsx)("small",{children:"Start with the result. Add more detail when you want to."})]})]}),(0,c.jsxs)("li",{children:[(0,c.jsx)("span",{children:"3"}),(0,c.jsxs)("div",{children:[(0,c.jsx)("strong",{children:"Keep the night on record"}),(0,c.jsx)("small",{children:"Your scores, shared standings, and next rematch start here."})]})]})]}),t&&(0,c.jsx)("ol",{className:"home-progressive-only home-progressive-steps","aria-label":"From your first game to shared history",children:p.map(e=>{let[o,t,i,a]=e;return(0,c.jsxs)("li",{children:[(0,c.jsx)("span",{className:"home-progressive-medallion home-progressive-medallion--".concat(a),"aria-hidden":"true",children:(0,c.jsx)(i,{size:28,strokeWidth:1.8})}),(0,c.jsxs)("div",{children:[(0,c.jsx)("h3",{children:o}),(0,c.jsx)("p",{children:t})]})]},a)})}),(0,c.jsxs)("div",{className:"landing-log-flow__mock","aria-label":"Example Game Nite quick game entry",children:[(0,c.jsxs)("div",{className:"landing-log-flow__mock-header",children:[(0,c.jsx)("span",{className:"landing-log-flow__game-icon",style:{backgroundColor:a.color},children:(0,c.jsx)(n,{size:21})}),(0,c.jsxs)("span",{children:[(0,c.jsx)("strong",{children:i.game}
1),(0,c.jsx)("small",{children:"Quick game \xb7 Today"})]}),(0,c.jsx)("span",{className:"landing-log-flow__time",children:"30 sec"})]}),(0,c.jsxs)("div",{className:"landing-log-flow__columns","aria-hidden":"true",children:[(0,c.jsx)("span",{children:"Player"}),(0,c.jsx)("span",{children:"Score"})]}),(0,c.jsx)("div",{className:"landing-log-flow__players",children:u.map((e,o)=>(0,c.jsxs)("div",{className:"landing-log-flow__player",children:[(0,c.jsxs)("span",{children:[e,0===o&&(0,c.jsx)("span",{className:"landing-log-flow__winner",children:"Winner"})]}),(0,c.jsx)("strong",{children:i.scores[o]})]},e))}),(0,c.jsxs)("div",{className:"landing-log-flow__mock-footer",children:[(0,c.jsxs)("span",{children:[(0,c.jsx)(s.A,{size:15})," Add detail"]}),(0,c.jsxs)("span",{className:"landing-log-flow__save",children:[(0,c.jsx)(r.A,{size:16})," Save game"]})]})]})]})]})})}},78430:(e,o,t)=>{t.d(o,{A:()=>s});var i=t(89379),a=t(53986),r=(t(65043),t(70579));const n=["size","color","strokeWidth","className","style"],s=e=>{let{size:o=24,color:t="currentColor",strokeWidth:s,className:l="",style:d={}}=e,c=(0,a.A)(e,n);return(0,r.jsx)("svg",(0,i.A)((0,i.A)({width:o,height:o,viewBox:"4 4 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:l,style:d,"aria-hidden":"true"},c),{},{children:(0,r.jsx)("path",{d:"M12.00 4.00 L 13.72 7.84 L 17.66 6.34 L 16.16 10.28 L 20.00 12.00 L 16.16 13.72 L 17.66 17.66 L 13.72 16.16 L 12.00 20.00 L 10.28 16.16 L 6.34 17.66 L 7.84 13.72 L 4.00 12.00 L 7.84 10.28 L 6.34 6.34 L 10.28 7.84 Z",fill:t,stroke:"none"})}))}},86105:(e,o,t)=>{t.d(o,{Ay:()=>l,ZW:()=>s,l_:()=>n});var i=t(26522),a=t(59040),r=t(24546);const n={"Settlers of Catan":{icon:r.c8["Settlers of Catan"],color:"#8b5cf6",shadow:"#7c3aed",short:"Catan"},Qwixx:{icon:r.c8.Qwixx,color:"#f59e0b",shadow:"#d97706",short:"Qwixx"},"Monopoly Deal":{icon:r.c8["Monopoly Deal"],color:"#10b981",shadow:"#059669",short:"MD"},"Ticket to Ride":{icon:r.c8["Ticket to Ride"],color:"#3b82f6",shadow:"#2563eb",short:"TTR"},Uno:{icon:r.c8.Uno,color:"#ef4444",shadow:"#dc2626",short:"Uno"},"Dutch Blitz":{icon:r.c8["Dutch Blitz"],color:"#ec4899",shadow:"#db2777",short:"Blitz"},Splendor:{icon:r.c8.Splendor,color:"#0891b2",shadow:"#0e7490",short:"Splndr"},Azul:{icon:r.c8.Azul,color:"#0ea5e9",shadow:"#0369a1",short:"Azul"},Wingspan:{icon:r.c8.Wingspan,color:"#a21caf",shadow:"#86198f",short:"Wing"},Carcassonne:{icon:r.c8.Carcassonne,color:"#65a30d",shadow:"#4d7c0f",short:"Carc"}};!function(){const e=(0,a.mq)(),o=Object.keys(n),t=e.filter(e=>!o.includes(e)),i=o.filter(o=>!e.includes(o));if(t.length||i.length)throw new Error("[gameVisuals] GAME_VISUALS drifted from games registry. "+"Missing entries for predefined games: [".concat(t.join(", "),"]; ")+"entries that are not predefined: [".concat(i.join(", "),"]."))}();const s=e=>n[e]||{icon:i.A,color:"#6b7280",shadow:"#4b5563",short:e&&e.length>6?e.slice(0,6):e||"Game"},l=s}}]); 2//# sourceMappingURL=1851.70863f70.chunk.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.