@@ -799,67 +799,103 @@ <h3>Memory Tips</h3>
799799 {
800800 name : "Beaujolais" , country : "France" , color : "red" ,
801801 type : "red" , body : 1 , sweetness : 1 , tannins : 1 , acidity : 2 , alcohol : 2 ,
802- oak : "unoaked" , flavors : "Raspberry, red cherry" ,
802+ oak : "unoaked" , grape : "Gamay" , flavors : "Raspberry, red cherry" ,
803803 note : "Light & fresh — the easy-drinking French red"
804804 } ,
805805 {
806806 name : "Côtes du Rhône" , country : "France" , color : "red" ,
807807 type : "red" , body : 2 , sweetness : 1 , tannins : 2 , acidity : 2 , alcohol : 2 ,
808- oak : "varies" , flavors : "Strawberry, red plum, white pepper" ,
808+ oak : "varies" , grape : "Grenache, Syrah, Mourvèdre" , flavors : "Strawberry, red plum, white pepper" ,
809809 note : "The peppery note sets it apart"
810810 } ,
811811 {
812812 name : "Châteauneuf-du-Pape" , country : "France" , color : "red" ,
813813 type : "red" , body : 3 , sweetness : 1 , tannins : 2 , acidity : 2 , alcohol : 3 ,
814- oak : "oaked" , flavors : "Strawberry, clove" ,
814+ oak : "oaked" , grape : "Grenache-based blend" , flavors : "Strawberry, clove" ,
815815 note : "Full, bold, high alcohol — 'Pope's new castle'"
816816 } ,
817817 {
818818 name : "Sauternes" , country : "France" , color : "white" ,
819819 type : "white" , body : 3 , sweetness : 3 , tannins : 0 , acidity : 3 , alcohol : 2 ,
820- oak : "oaked" , flavors : "Apricot, honey, vanilla" ,
820+ oak : "oaked" , grape : "Sémillon & Sauvignon Blanc" , flavors : "Apricot, honey, vanilla" ,
821821 note : "Luxurious sweet white from Bordeaux"
822822 } ,
823+ {
824+ name : "Champagne" , country : "France" , color : "sparkling" ,
825+ type : "sparkling" , body : 2 , sweetness : 1 , tannins : 0 , acidity : 3 , alcohol : 2 ,
826+ oak : "unoaked" , grape : "Chardonnay & Pinot Noir" , flavors : "Apple, lemon, toasted bread" ,
827+ note : "The benchmark sparkling — high acidity, toasty brioche notes"
828+ } ,
829+ {
830+ name : "Sancerre" , country : "France" , color : "white" ,
831+ type : "white" , body : 2 , sweetness : 1 , tannins : 0 , acidity : 3 , alcohol : 2 ,
832+ oak : "unoaked" , grape : "Sauvignon Blanc" , flavors : "Apple, grassy/herbaceous" ,
833+ note : "Crisp, grassy Sauvignon Blanc with high acidity"
834+ } ,
835+ {
836+ name : "Chablis" , country : "France" , color : "white" ,
837+ type : "white" , body : 1.5 , sweetness : 1 , tannins : 0 , acidity : 3 , alcohol : 2 ,
838+ oak : "unoaked" , grape : "Chardonnay" , flavors : "Apple, lemon" ,
839+ note : "Unoaked Chardonnay — lean & mineral, high acidity"
840+ } ,
841+ {
842+ name : "Bourgogne Blanc" , country : "France" , color : "white" ,
843+ type : "white" , body : 2 , sweetness : 1 , tannins : 0 , acidity : 2 , alcohol : 2 ,
844+ oak : "varies" , grape : "Chardonnay" , flavors : "Lemon, peach" ,
845+ note : "White Burgundy — riper fruit than Chablis"
846+ } ,
847+ {
848+ name : "Bourgogne Rouge" , country : "France" , color : "red" ,
849+ type : "red" , body : 1.5 , sweetness : 1 , tannins : 1 , acidity : 3 , alcohol : 2 ,
850+ oak : "varies" , grape : "Pinot Noir" , flavors : "Raspberry, red cherry" ,
851+ note : "Red Burgundy — light, high acidity, sometimes smoky"
852+ } ,
853+ {
854+ name : "Bordeaux" , country : "France" , color : "red" ,
855+ type : "red" , body : 2.5 , sweetness : 1 , tannins : 3 , acidity : 3 , alcohol : 2 ,
856+ oak : "oaked" , grape : "Cabernet Sauvignon & Merlot" , flavors : "Blackberry, blackcurrant, cedar" ,
857+ note : "Bold blend — tannic, age-worthy, cedar from oak"
858+ } ,
823859 {
824860 name : "Prosecco" , country : "Italy" , color : "sparkling" ,
825861 type : "sparkling" , body : 1 , sweetness : 1.5 , tannins : 0 , acidity : 2 , alcohol : 2 ,
826- oak : "unoaked" , flavors : "Pear, floral aromas" ,
862+ oak : "unoaked" , grape : "Glera" , flavors : "Pear, floral aromas" ,
827863 note : "Italy's bubbly — light, floral, crowd-pleaser"
828864 } ,
829865 {
830866 name : "Chianti" , country : "Italy" , color : "red" ,
831867 type : "red" , body : 2 , sweetness : 1 , tannins : 3 , acidity : 3 , alcohol : 2 ,
832- oak : "oaked" , flavors : "Red cherry, red plum, clove" ,
868+ oak : "oaked" , grape : "Sangiovese" , flavors : "Red cherry, red plum, clove" ,
833869 note : "High tannin + high acidity = classic Italian food wine"
834870 } ,
835871 {
836872 name : "Cava" , country : "Spain" , color : "sparkling" ,
837873 type : "sparkling" , body : 1 , sweetness : 1 , tannins : 0 , acidity : 2 , alcohol : 2 ,
838- oak : "unoaked" , flavors : "Apple, lemon" ,
874+ oak : "unoaked" , grape : "Macabeo, Parellada, Xarel·lo" , flavors : "Apple, lemon" ,
839875 note : "Spain's sparkling — crisp, citrusy"
840876 } ,
841877 {
842878 name : "Rioja" , country : "Spain" , color : "red" ,
843879 type : "red" , body : 2.5 , sweetness : 1 , tannins : 2 , acidity : 2 , alcohol : 2 ,
844- oak : "oaked" , flavors : "Strawberry, vanilla" ,
880+ oak : "oaked" , grape : "Tempranillo" , flavors : "Strawberry, vanilla" ,
845881 note : "Spain's signature red — strawberry + vanilla"
846882 } ,
847883 {
848884 name : "Sherry" , country : "Spain" , color : "white" ,
849885 type : "fortified" , body : 2 , sweetness : 2 , tannins : 0 , acidity : 2 , alcohol : 3 ,
850- oak : "oaked" , flavors : "Varies by style" ,
886+ oak : "oaked" , grape : "Palomino" , flavors : "Varies by style" ,
851887 note : "Fortified + versatile — comes in every sweetness level"
852888 } ,
853889 {
854890 name : "Port" , country : "Portugal" , color : "red" ,
855891 type : "fortified" , body : 3 , sweetness : 3 , tannins : 3 , acidity : 2 , alcohol : 3 ,
856- oak : "oaked" , flavors : "Blackberry" ,
892+ oak : "oaked" , grape : "Touriga Nacional blend" , flavors : "Blackberry" ,
857893 note : "Sweet, strong, dark — the dessert powerhouse"
858894 } ,
859895 {
860896 name : "White Zinfandel" , country : "California" , color : "rose" ,
861897 type : "rose" , body : 1 , sweetness : 2 , tannins : 0 , acidity : 2 , alcohol : 1 ,
862- oak : "unoaked" , flavors : "Strawberry, raspberry" ,
898+ oak : "unoaked" , grape : "Zinfandel" , flavors : "Strawberry, raspberry" ,
863899 note : "Not white — it's a rosé! Low alcohol, fruity"
864900 }
865901] ;
@@ -956,7 +992,7 @@ <h3>Memory Tips</h3>
956992 <div class="wine-card-result ${ isMatch ? '' : 'dimmed' } ">
957993 ${ scoreBadge }
958994 <div class="wine-name">${ colorDot ( w . type ) } ${ w . name } </div>
959- <div class="wine-country">${ w . country } </div>
995+ <div class="wine-country">${ w . country } ${ w . grape ? ' · ' + w . grape : '' } </div>
960996 <div class="wine-attrs">
961997 ${ tags . map ( t => `<span class="wine-tag ${ t . match ? 'match' : '' } ">${ t . label } </span>` ) . join ( '' ) }
962998 </div>
@@ -1002,6 +1038,7 @@ <h3>Memory Tips</h3>
10021038 <h3>${ w . name } </h3>
10031039 <table>
10041040 <tr><td>Country</td><td>${ w . country } </td></tr>
1041+ ${ w . grape ? `<tr><td>Grape</td><td>${ w . grape } </td></tr>` : '' }
10051042 <tr><td>Type</td><td>${ colorDot ( w . type ) } ${ typeLabel } </td></tr>
10061043 <tr><td>Body</td><td>${ bodyLabels [ Math . round ( w . body ) ] } </td></tr>
10071044 <tr><td>Sweetness</td><td>${ sweetnessLabels [ Math . round ( w . sweetness ) ] } </td></tr>
@@ -1060,6 +1097,16 @@ <h3>${w.name}</h3>
10601097 options : shuffle ( [ 'Light' , 'Medium' , 'Full' ] . filter ( b => b !== bodyLabels [ Math . round ( w . body ) ] ) ) . concat ( bodyLabels [ Math . round ( w . body ) ] ) ,
10611098 explanation : `${ w . name } has a ${ bodyLabels [ Math . round ( w . body ) ] . toLowerCase ( ) } body.`
10621099 } ) ;
1100+
1101+ if ( w . grape ) {
1102+ const otherGrapes = [ ...new Set ( wines . filter ( x => x . grape && x . grape !== w . grape ) . map ( x => x . grape ) ) ] ;
1103+ pool . push ( {
1104+ q : `Which grape variety is ${ w . name } made from?` ,
1105+ correct : w . grape ,
1106+ options : shuffle ( otherGrapes ) . slice ( 0 , 3 ) . concat ( w . grape ) ,
1107+ explanation : `${ w . name } is made from ${ w . grape } .`
1108+ } ) ;
1109+ }
10631110 } ) ;
10641111
10651112 quizQuestions = shuffle ( pool ) . slice ( 0 , 10 ) ;
@@ -1168,6 +1215,7 @@ <h2>Quiz Complete!</h2>
11681215 ${ rows . map ( w => `<tr>
11691216 <td>${ colorDot ( w . type ) } ${ w . name } </td>
11701217 <td>${ w . country } </td>
1218+ <td>${ w . grape || '—' } </td>
11711219 <td>${ bodyLabels [ Math . round ( w . body ) ] } </td>
11721220 <td>${ sweetnessLabels [ Math . round ( w . sweetness ) ] } </td>
11731221 <td>${ oakLabel ( w . oak ) } </td>
@@ -1176,7 +1224,7 @@ <h2>Quiz Complete!</h2>
11761224 </tr>` ) . join ( '' ) } `;
11771225 }
11781226
1179- const headers = [ 'Wine' , 'Country' , 'Body' , 'Sweetness' , 'Oak' , 'Key Flavors' , 'Remember' ] ;
1227+ const headers = [ 'Wine' , 'Country' , 'Grape' , ' Body', 'Sweetness' , 'Oak' , 'Key Flavors' , 'Remember' ] ;
11801228 makeTable ( 'redTable' , reds , headers ) ;
11811229 makeTable ( 'sparklingTable' , sparkling , headers ) ;
11821230 makeTable ( 'fortifiedTable' , fortified , headers ) ;
0 commit comments