wip
This commit is contained in:
BIN
includes/helsinki.eot
Normal file
BIN
includes/helsinki.eot
Normal file
Binary file not shown.
240
includes/helsinki.svg
Normal file
240
includes/helsinki.svg
Normal file
@@ -0,0 +1,240 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
|
||||
<metadata></metadata>
|
||||
<defs>
|
||||
<font id="helsinkiregular" horiz-adv-x="1463" >
|
||||
<font-face units-per-em="2048" ascent="1638" descent="-410" />
|
||||
<missing-glyph horiz-adv-x="569" />
|
||||
<glyph horiz-adv-x="0" />
|
||||
<glyph unicode="
" horiz-adv-x="569" />
|
||||
<glyph unicode=" " horiz-adv-x="569" />
|
||||
<glyph unicode="	" horiz-adv-x="569" />
|
||||
<glyph unicode=" " horiz-adv-x="569" />
|
||||
<glyph unicode="!" horiz-adv-x="626" d="M55 163q0 43 22 82t60.5 60t80.5 21q41 0 80 -21t61 -60t22 -82q0 -42 -21.5 -81t-60.5 -60t-81 -21q-43 0 -81.5 21t-60 60t-21.5 81zM154 427q85 -56 214 -13l198 1012q-153 108 -360 48z" />
|
||||
<glyph unicode=""" horiz-adv-x="720" d="M55 951l46 574q139 32 258 -7l-44 -564q-128 -76 -260 -3zM357 944l46 574q139 32 257 -7l-43 -564q-128 -76 -260 -3z" />
|
||||
<glyph unicode="#" horiz-adv-x="1139" />
|
||||
<glyph unicode="$" horiz-adv-x="1227" d="M120 121q-65 227 76 352q257 -151 373 -186q216 2 237 108q5 85 -132 164l-257 125q-241 128 -250 361q9 134 92.5 241t188 140.5t129.5 34.5l19 200q139 69 263 -16l-19 -209q120 -1 319 -135q8 -189 -118 -329q-243 182 -389 170q-137 16 -145 -98q-5 -65 193 -168 q227 -92 336.5 -211t97.5 -289q-16 -230 -214 -353q-126 -88 -192 -99l-5 -202q-201 -74 -296 37l16 206q-114 14 -323 156z" />
|
||||
<glyph unicode="%" horiz-adv-x="1821" />
|
||||
<glyph unicode="&" horiz-adv-x="1415" d="M55 420q5 175 104 296.5t268 131.5l-246 292q-49 152 11 284l834 41q99 -150 -21 -326l-467 8l848 -924q-52 -181 -154 -246l-215 237q-4 -12 -10 -24q-79 -86 -143 -124q-150 -88 -326 -95q-111 -4 -210 30q-137 47 -207 152t-66 267zM363 467q18 -120 94.5 -160 t175 -15.5t189.5 84.5q15 9 30 20l-249 274h-3q-255 -83 -237 -203z" />
|
||||
<glyph unicode="'" horiz-adv-x="419" d="M55 951l46 574q139 32 258 -7l-44 -564q-128 -76 -260 -3z" />
|
||||
<glyph unicode="(" horiz-adv-x="682" />
|
||||
<glyph unicode=")" horiz-adv-x="682" />
|
||||
<glyph unicode="*" horiz-adv-x="912" d="M55 1039l227 184l-164 211q55 124 227 140l144 -196l215 171q148 -40 140 -181l-218 -194l168 -188q-73 -134 -208 -167l-156 219l-211 -199q-136 34 -164 200z" />
|
||||
<glyph unicode="+" horiz-adv-x="1196" />
|
||||
<glyph unicode="," horiz-adv-x="497" d="M55 115q0 53 25 101t68 74t89 26t89.5 -26t68 -74t24.5 -101q18 -83 -139 -402l-136 36l14 166q-55 52 -79 100t-24 100z" />
|
||||
<glyph unicode="-" horiz-adv-x="871" d="M78 631q-23 162 35 331h685q13 -169 -35 -331h-685z" />
|
||||
<glyph unicode="." horiz-adv-x="441" d="M55 153q0 43 22 82t60.5 60t80.5 21q41 0 80 -21t61 -60t22 -82q0 -42 -21.5 -81t-60.5 -60t-81 -21q-43 0 -81.5 21t-60 60t-21.5 81z" />
|
||||
<glyph unicode="/" horiz-adv-x="602" d="M15 -296q58 -117 181 -52l418 2102q-81 89 -171 51z" />
|
||||
<glyph unicode="0" horiz-adv-x="1296" d="M80.5 693q25.5 327 207.5 550t423 223t383 -215t115.5 -544.5t-192.5 -543.5t-409 -214t-398 208.5t-129.5 535.5zM423 697.5q-15 -178.5 51.5 -295.5t160.5 -110.5t158 118t74.5 279t-45 283.5t-146.5 117.5t-164.5 -106t-88.5 -286z" />
|
||||
<glyph unicode="1" horiz-adv-x="631" d="M135 1098l87 2l-70 -1138q220 -39 337 20l82 1423q-10 55 -52 63l-358 -18q-106 -155 -26 -352z" />
|
||||
<glyph unicode="2" horiz-adv-x="1305" d="M125 -51q-70 190 50 354q594 441 635 584.5t-37.5 208.5t-210.5 9.5t-271 -171.5q-166 108 -108 327q247 196 458 196q247 0 388 -120q104 -86 125 -304t-137 -417.5t-388 -340.5l516 27q100 -134 2 -333z" />
|
||||
<glyph unicode="3" horiz-adv-x="1304" d="M127 94q-72 181 56 347q77 -87 173.5 -136.5t205.5 -62.5t200 37t125 174t-247 177l-110 -28q-113 127 -21 288l255 231l-530 -65q-118 164 11 328l940 60q54 -126 -19 -287l-310 -325q190 10 289 -101t85 -288q-13 -164 -104 -279t-251 -179q-116 -47 -240 -56 q-199 -15 -359 57q-69 30 -149 108z" />
|
||||
<glyph unicode="4" horiz-adv-x="1277" d="M121 518q-66 -159 28 -283l588 10l-9 -283q149 -55 315 3l7 283l105 3q62 152 8 304l-89 1l29 865q-238 70 -351 -16zM452 529l340 500l-34 -495z" />
|
||||
<glyph unicode="5" horiz-adv-x="1256" d="M120 121q-65 227 76 352q257 -151 373 -186q216 2 237 108q51 242 -123 276q-278 -4 -379.5 -20t-160.5 93l57 667q7 34 80 45l831 15q85 -173 -15 -322l-591 -11l-27 -176q231 26 362.5 3t241.5 -142t59 -454q-23 -223 -221 -346q-126 -88 -364 -73q-227 29 -436 171z " />
|
||||
<glyph unicode="6" horiz-adv-x="1356" d="M118 555q-63 -412 231 -584q644 -179 803 434q144 592 -543 498q192 291 411 382q-14 163 -153 232q-370 -220 -531 -474.5t-218 -487.5zM437 382q-11 96 26 165t191 77t189.5 -37t2 -182.5t-147.5 -174.5t-182 9.5t-79 142.5z" />
|
||||
<glyph unicode="7" horiz-adv-x="1189" d="M82 1099l604 15l-431 -1157q208 -39 343 19l488 1278q43 201 -89 209l-891 -34q-51 -153 -24 -330z" />
|
||||
<glyph unicode="8" horiz-adv-x="1260" d="M60 340q11 222 179 320l70 41q-192 157 -183 354q12 254 220 363q125 65 307 75q203 11 338 -46q209 -88 197 -334q-10 -209 -159 -299l-70 -41q115 -46 182 -187q37 -79 33 -180q-11 -236 -198 -361q-152 -101 -384 -114q-171 -9 -314 47q-124 47 -182 169 q-41 86 -36 193zM392 398q-8 -168 221 -156q221 12 229 177q8 176 -216 165q-226 -11 -234 -186zM451 1005q-7 -150 192 -140q201 11 208 158q7 151 -185 143q-207 -9 -215 -161z" />
|
||||
<glyph unicode="9" horiz-adv-x="1262" d="M87 1062q-32 -572 534 -524q-202 -291 -415 -388q-1 -155 194 -262q323 245 493 500.5t234 490.5q75 419 -217 603q-645 200 -823 -420zM411 1076.5q23 115.5 139.5 150.5t183.5 -15t75.5 -148t-31 -167t-175 -81t-175.5 66.5t-17 194z" />
|
||||
<glyph unicode=":" horiz-adv-x="443" d="M55 948q0 43 22 82t60.5 60t80.5 21q41 0 80 -21t61 -60t22 -82q0 -42 -21.5 -81t-60.5 -60t-81 -21q-43 0 -81.5 21t-60 60t-21.5 81zM57 157q0 43 22 82t60.5 60t80.5 21q41 0 80 -21t61 -60t22 -82q0 -42 -21.5 -81t-60.5 -60t-81 -21q-43 0 -81.5 21t-60 60t-21.5 81 z" />
|
||||
<glyph unicode=";" horiz-adv-x="505" d="M55 115q0 53 25 101t69 74t91 26t91.5 -26t69.5 -74t25 -101q19 -83 -142 -402l-139 36l14 166q-55 52 -79.5 100t-24.5 100zM70 948q0 43 22 82t60.5 60t80.5 21q41 0 80 -21t61 -60t22 -82q0 -42 -21.5 -81t-60.5 -60t-81 -21q-43 0 -81.5 21t-60 60t-21.5 81z" />
|
||||
<glyph unicode="<" horiz-adv-x="1196" />
|
||||
<glyph unicode="=" horiz-adv-x="1196" />
|
||||
<glyph unicode=">" horiz-adv-x="1196" />
|
||||
<glyph unicode="?" horiz-adv-x="1029" d="M55 1177q28 -189 236 -150q65 227 231 224q122 -20 126 -125.5t-122 -169.5q-158 -54 -205 -171.5t-23 -338.5q109 -58 246 -11q8 159 54 220q64 51 189 128q170 104 176 395.5t-402 362.5q-371 -20 -506 -364zM243 167q0 43 22 82t60.5 60t80.5 21q41 0 80 -21t61 -60 t22 -82q0 -42 -21.5 -81t-60.5 -60t-81 -21q-43 0 -81.5 21t-60 60t-21.5 81z" />
|
||||
<glyph unicode="@" horiz-adv-x="2079" />
|
||||
<glyph unicode="A" horiz-adv-x="1338" d="M55 0q82 -70 230 -70q48 0 102 7l92 270l371 46l72 -268q70 -13 131 -13q132 0 225 61l-400 1440q-66 41 -136 41q-79 0 -163 -53zM550 504l157 492l87 -463z" />
|
||||
<glyph unicode="B" horiz-adv-x="1343" d="M55 -24l10 -36q9 -31 46 -31q6 0 13 1l48 7q85 -3 169 -3q312 0 624 46q115 4 200 116q79 105 79 287v28q-6 203 -224 312q180 83 222 256q19 78 19 151q0 88 -28 167q-50 145 -248 179q-82 14 -217 13q-188 0 -479 -27l-107 -68zM394 209l37 345q111 9 195 9 q232 -1 272 -65q31 -50 31 -105q1 -41 -17 -85q-39 -99 -475 -99h-43zM464 803l36 360q120 13 207 13q187 0 218 -60q23 -45 23 -98q0 -51 -22 -109q-40 -107 -388 -107q-35 0 -74 1z" />
|
||||
<glyph unicode="C" horiz-adv-x="1275" d="M113 817q46 342 217 517q189 153 445 153q47 0 96 -5q221 -14 309 -163q7 -38 7 -74q0 -129 -101 -214q-87 56 -273 89q-21 2 -40 2q-136 0 -226 -96q-103 -110 -126 -287q-11 -34 -10 -75q0 -90 52 -210q75 -158 231 -167q18 -1 37 -1q144 0 336 62q43 -85 43 -169 q0 -67 -28 -133q-245 -112 -401 -112h-16q-295 37 -430 214q-136 179 -136 470q0 94 14 199z" />
|
||||
<glyph unicode="D" horiz-adv-x="1234" d="M55 128l47 1196l16 120l100 23l384 -11q568 -102 568 -693v-8q-13 -305 -146 -516q-164 -281 -834 -281l-114 32zM372 274q36 -2 69 -2q205 0 296 91q107 105 121 331q2 37 2 72q0 174 -62 270q-74 116 -386 119z" />
|
||||
<glyph unicode="E" horiz-adv-x="1242" d="M55 10q10 -55 53 -63l935 37q59 87 59 181q0 73 -36 151l-671 -20l27 310l547 23q47 70 47 144q0 64 -35 132l-537 -11l18 256l654 21q38 79 38 164q0 63 -21 130l-941 -28q-36 -17 -47 -56z" />
|
||||
<glyph unicode="F" horiz-adv-x="1240" d="M55 -33q70 -44 154 -44q80 0 173 40l36 565l547 23q46 69 46 143q0 64 -35 132l-536 -10l20 334l654 21q38 79 38 164q0 63 -21 130l-941 -28q-36 -17 -47 -56z" />
|
||||
<glyph unicode="G" horiz-adv-x="1309" d="M84 728q28 408 267 606q195 129 458 129q144 0 236 -30.5t195 -132.5q1 -15 1 -30q0 -156 -87 -258l-101 45q-119 71 -263 71q-191 -4 -278 -87.5t-110 -337.5q-4 -51 -4 -96q0 -146 42 -232q48 -147 220 -147q13 0 27 1q206 24 224 147l6 103l-207 2q-38 75 -38 143 q0 92 71 169l405 -5q58 -33 84 -92l-40 -474q-99 -177 -250 -244q-135 -60 -279 -60q-251 0 -400 161q-183 199 -183 549q0 48 4 100z" />
|
||||
<glyph unicode="H" horiz-adv-x="1307" d="M55 -7q65 -47 166 -47q71 0 159 23l36 610l469 20l-29 -611q66 -41 143 -41q84 0 180 49l68 1423q-72 39 -147 39q-73 0 -149 -37l-38 -521l-475 -24l29 559q-71 27 -137 27q-101 0 -189 -64z" />
|
||||
<glyph unicode="I" horiz-adv-x="578" d="M55 -18q79 -41 177 -41q78 0 168 26l118 1471q-103 30 -198 30q-67 0 -130 -15z" />
|
||||
<glyph unicode="J" horiz-adv-x="1011" d="M92 140q103 -216 320 -216q37 0 77 6q203 20 326.5 194t135.5 967l-6 354q-72 23 -141 23q-89 0 -173 -38q20 -262 20 -465q0 -690 -228 -690q-107 0 -264 152q-77 -52 -77 -184q0 -46 10 -103z" />
|
||||
<glyph unicode="K" horiz-adv-x="1214" d="M55 -2q95 -44 179 -44q80 0 150 40l23 565l437 -580q40 -6 74 -6q86 0 132 37q64 51 83 158l-500 606l521 521q-61 170 -229 170q-12 0 -25 -1l-458 -463l29 453q-110 36 -195.5 36t-146.5 -36z" />
|
||||
<glyph unicode="L" horiz-adv-x="1145" d="M55 10q10 -55 53 -63l871 32q59 87 59 182q0 74 -36 151l-600 -16l72 1157q-88 16 -159 16q-108 0 -178 -36z" />
|
||||
<glyph unicode="M" horiz-adv-x="1471" d="M55 -40l323 -3l53 719l164 -674q37 -42 82 -42q25 0 53 14l306 696l-41 -710l325 3l91 1483q-65 17 -133 17q-71 0 -145 -19l-411 -842l-233 840q-106 29 -190 29q-81 0 -143 -27z" />
|
||||
<glyph unicode="N" horiz-adv-x="1307" d="M55 -7q65 -47 166 -47q71 0 159 23l56 818l447 -816q76 -30 138 -30q82 0 140 52l86 1426q-72 39 -147 39q-73 0 -149 -37l-48 -788l-476 807q-78 20 -137 20q-103 0 -149 -62z" />
|
||||
<glyph unicode="O" d="M84 693q29 327 237 550t483 223t437 -215q137 -181 137 -444q0 -49 -5 -101q-30 -330 -220 -543.5t-467 -213.5q-278 1 -454 209q-152 179 -152 445q0 44 4 90zM411 698q-4 -33 -4 -65q0 -136 78 -231q91 -111 218 -111q7 1 14 1q136 6 228 118q91 110 107 278q3 27 3 54 q0 133 -67 230q-80 116 -212 118h-4q-130 0 -234 -106q-106 -108 -127 -286z" />
|
||||
<glyph unicode="P" horiz-adv-x="1350" d="M55 6q72 -61 173 -61q70 0 154 29l45 430l117 13l324 75q322 78 372 354q25 134 24 238q0 110 -28 188q-54 150 -251 184q-82 14 -217 13q-188 0 -479 -27l-107 -68zM454 706l46 456q121 14 208 14q186 0 217 -66q21 -45 21 -99q0 -62 -28 -137q-52 -140 -464 -168z" />
|
||||
<glyph unicode="Q" d="M84 693q29 327 237 550t483 223t437 -215q137 -181 137 -444q0 -49 -5 -101q-30 -329 -279 -629l76 -195l-293 -115l-84 213q-50 -4 -96 -4q-312 0 -465 182q-152 179 -152 445q0 44 4 90zM411 698q-4 -34 -4 -65q0 -136 78 -231q93 -113 205 -113h8l-62 184l242 104 l72 -170q87 114 102 281q3 28 3 54q0 133 -67 230q-80 116 -212 118h-4q-129 0 -234 -106q-105 -108 -127 -286z" />
|
||||
<glyph unicode="R" horiz-adv-x="1350" d="M55 6q72 -61 173 -61q70 0 154 29l47 473l117 12l351 -509q60 -18 112 -18q144 0 216 145l-354 457q321 80 370 334q23 121 23 219q0 107 -28 185q-54 150 -251 184q-82 14 -217 13q-188 0 -479 -27l-107 -68zM457 749l43 413q121 14 208 14q186 0 217 -66q21 -46 21 -96 q0 -56 -26 -118q-50 -118 -463 -147z" />
|
||||
<glyph unicode="S" horiz-adv-x="1227" d="M120 121q-21 72 -21 133q0 133 97 219q257 -151 373 -186q216 2 237 108v6q0 82 -132 158l-257 125q-241 128 -250 361q9 134 93 241q84 106 188 140q82 26 189 27q29 0 59 -2q264 -16 463 -150v-22q0 -175 -118 -307q-228 171 -371 171q-9 0 -18 -1q-17 2 -32 2 q-113 0 -113 -103q0 -64 193 -165q226 -92 336 -211q99 -107 99 -256q0 -16 -1 -33q-16 -230 -214 -353q-108 -75 -297 -75q-32 0 -67 2q-227 29 -436 171z" />
|
||||
<glyph unicode="T" horiz-adv-x="1357" d="M157 1434q-49 -63 -49 -138q0 -82 58 -180l363 8l-65 -1148q92 -34 176 -34q82 0 157 32l54 1163l369 5q41 85 41 170q0 76 -33 151z" />
|
||||
<glyph unicode="U" horiz-adv-x="1295" d="M98 326q-15 65 -15 219q0 290 52 894q84 16 164 16q92 0 179 -21q-57 -739 -57 -902q1 -12 1 -20q4 -128 53 -196t167.5 -68t163 73t56.5 191.5t41 924.5q75 19 161 19q81 0 171 -17q-48 -1069 -107 -1201.5t-180 -214t-317 -81.5t-343.5 98.5t-189.5 285.5z" />
|
||||
<glyph unicode="V" horiz-adv-x="1389" d="M55 1453q93 16 187 16t188 -16l191 -1052l326 1052q92 15 187.5 15t194.5 -15l-570 -1469q-91 -41 -178 -41q-84 0 -163 38z" />
|
||||
<glyph unicode="W" horiz-adv-x="1553" d="M55 1457l133 -1513q72 -15 146 -15q85 0 173 20l235 874l137 -857q103 -22 188 -22q100 0 177 30l249 1470q-88 39 -176 39q-66 0 -131 -22l-159 -876l-93 861q-65 25 -148 25q-68 0 -149 -17l-205 -843l-41 856q-82 14 -156 14q-96 0 -180 -24z" />
|
||||
<glyph unicode="X" horiz-adv-x="1313" d="M55 145q63 -170 283 -215l306 539l313 -553q177 19 296 178l-399 692l355 515q-113 153 -270 153h-10l-245 -394l-211 410q-200 0 -295 -152l298 -546z" />
|
||||
<glyph unicode="Y" horiz-adv-x="1278" d="M55 1359l367 -685l-27 -711q71 -32 152 -32q79 0 169 30l29 705l473 700q-73 97 -255 97q-18 0 -38 -1l-315 -510l-239 516q-22 1 -43 1q-182 0 -273 -110z" />
|
||||
<glyph unicode="Z" horiz-adv-x="1350" d="M114 235q-22 -76 -22 -137q0 -101 62 -158l1021 4q30 89 30 172q0 87 -33 169l-617 -11l657 878q35 77 35 148q0 88 -54 165l-962 1q-64 -102 -64 -231q0 -53 11 -110l604 6z" />
|
||||
<glyph unicode="[" horiz-adv-x="569" />
|
||||
<glyph unicode="\" horiz-adv-x="602" d="M15 1754l419 -2102q123 -65 180 52l-427 2101q-90 38 -172 -51z" />
|
||||
<glyph unicode="]" horiz-adv-x="569" />
|
||||
<glyph unicode="^" horiz-adv-x="961" />
|
||||
<glyph unicode="_" horiz-adv-x="1139" />
|
||||
<glyph unicode="`" horiz-adv-x="682" />
|
||||
<glyph unicode="a" horiz-adv-x="1338" d="M55 0q82 -70 230 -70q48 0 102 7l92 270l371 46l72 -268q70 -13 131 -13q132 0 225 61l-400 1440q-66 41 -136 41q-79 0 -163 -53zM550 504l157 492l87 -463z" />
|
||||
<glyph unicode="b" horiz-adv-x="1343" d="M55 -24l10 -36q9 -31 46 -31q6 0 13 1l48 7q85 -3 169 -3q312 0 624 46q115 4 200 116q79 105 79 287v28q-6 203 -224 312q180 83 222 256q19 78 19 151q0 88 -28 167q-50 145 -248 179q-82 14 -217 13q-188 0 -479 -27l-107 -68zM394 209l37 345q111 9 195 9 q232 -1 272 -65q31 -50 31 -105q1 -41 -17 -85q-39 -99 -475 -99h-43zM464 803l36 360q120 13 207 13q187 0 218 -60q23 -45 23 -98q0 -51 -22 -109q-40 -107 -388 -107q-35 0 -74 1z" />
|
||||
<glyph unicode="c" horiz-adv-x="1275" d="M113 817q46 342 217 517q189 153 445 153q47 0 96 -5q221 -14 309 -163q7 -38 7 -74q0 -129 -101 -214q-87 56 -273 89q-21 2 -40 2q-136 0 -226 -96q-103 -110 -126 -287q-11 -34 -10 -75q0 -90 52 -210q75 -158 231 -167q18 -1 37 -1q144 0 336 62q43 -85 43 -169 q0 -67 -28 -133q-245 -112 -401 -112h-16q-295 37 -430 214q-136 179 -136 470q0 94 14 199z" />
|
||||
<glyph unicode="d" horiz-adv-x="1234" d="M55 128l47 1196l16 120l100 23l384 -11q568 -102 568 -693v-8q-13 -305 -146 -516q-164 -281 -834 -281l-114 32zM372 274q36 -2 69 -2q205 0 296 91q107 105 121 331q2 37 2 72q0 174 -62 270q-74 116 -386 119z" />
|
||||
<glyph unicode="e" horiz-adv-x="1242" d="M55 10q10 -55 53 -63l935 37q59 87 59 181q0 73 -36 151l-671 -20l27 310l547 23q47 70 47 144q0 64 -35 132l-537 -11l18 256l654 21q38 79 38 164q0 63 -21 130l-941 -28q-36 -17 -47 -56z" />
|
||||
<glyph unicode="f" horiz-adv-x="1240" d="M55 -33q70 -44 154 -44q80 0 173 40l36 565l547 23q46 69 46 143q0 64 -35 132l-536 -10l20 334l654 21q38 79 38 164q0 63 -21 130l-941 -28q-36 -17 -47 -56z" />
|
||||
<glyph unicode="g" horiz-adv-x="1309" d="M84 728q28 408 267 606q195 129 458 129q144 0 236 -30.5t195 -132.5q1 -15 1 -30q0 -156 -87 -258l-101 45q-119 71 -263 71q-191 -4 -278 -87.5t-110 -337.5q-4 -51 -4 -96q0 -146 42 -232q48 -147 220 -147q13 0 27 1q206 24 224 147l6 103l-207 2q-38 75 -38 143 q0 92 71 169l405 -5q58 -33 84 -92l-40 -474q-99 -177 -250 -244q-135 -60 -279 -60q-251 0 -400 161q-183 199 -183 549q0 48 4 100z" />
|
||||
<glyph unicode="h" horiz-adv-x="1307" d="M55 -7q65 -47 166 -47q71 0 159 23l36 610l469 20l-29 -611q66 -41 143 -41q84 0 180 49l68 1423q-72 39 -147 39q-73 0 -149 -37l-38 -521l-475 -24l29 559q-71 27 -137 27q-101 0 -189 -64z" />
|
||||
<glyph unicode="i" horiz-adv-x="578" d="M55 -18q79 -41 177 -41q78 0 168 26l118 1471q-103 30 -198 30q-67 0 -130 -15z" />
|
||||
<glyph unicode="j" horiz-adv-x="1011" d="M92 140q103 -216 320 -216q37 0 77 6q203 20 326.5 194t135.5 967l-6 354q-72 23 -141 23q-89 0 -173 -38q20 -262 20 -465q0 -690 -228 -690q-107 0 -264 152q-77 -52 -77 -184q0 -46 10 -103z" />
|
||||
<glyph unicode="k" horiz-adv-x="1214" d="M55 -2q95 -44 179 -44q80 0 150 40l23 565l437 -580q40 -6 74 -6q86 0 132 37q64 51 83 158l-500 606l521 521q-61 170 -229 170q-12 0 -25 -1l-458 -463l29 453q-110 36 -195.5 36t-146.5 -36z" />
|
||||
<glyph unicode="l" horiz-adv-x="1145" d="M55 10q10 -55 53 -63l871 32q59 87 59 182q0 74 -36 151l-600 -16l72 1157q-88 16 -159 16q-108 0 -178 -36z" />
|
||||
<glyph unicode="m" horiz-adv-x="1471" d="M55 -40l323 -3l53 719l164 -674q37 -42 82 -42q25 0 53 14l306 696l-41 -710l325 3l91 1483q-65 17 -133 17q-71 0 -145 -19l-411 -842l-233 840q-106 29 -190 29q-81 0 -143 -27z" />
|
||||
<glyph unicode="n" horiz-adv-x="1307" d="M55 -7q65 -47 166 -47q71 0 159 23l56 818l447 -816q76 -30 138 -30q82 0 140 52l86 1426q-72 39 -147 39q-73 0 -149 -37l-48 -788l-476 807q-78 20 -137 20q-103 0 -149 -62z" />
|
||||
<glyph unicode="o" d="M84 693q29 327 237 550t483 223t437 -215q137 -181 137 -444q0 -49 -5 -101q-30 -330 -220 -543.5t-467 -213.5q-278 1 -454 209q-152 179 -152 445q0 44 4 90zM411 698q-4 -33 -4 -65q0 -136 78 -231q91 -111 218 -111q7 1 14 1q136 6 228 118q91 110 107 278q3 27 3 54 q0 133 -67 230q-80 116 -212 118h-4q-130 0 -234 -106q-106 -108 -127 -286z" />
|
||||
<glyph unicode="p" horiz-adv-x="1350" d="M55 6q72 -61 173 -61q70 0 154 29l45 430l117 13l324 75q321 79 372 354q24 134 24 238q0 111 -28 188q-53 150 -251 184q-82 13 -217 13q-188 0 -479 -27l-107 -68zM454 706l46 456q121 14 208 14q186 0 217 -66q21 -44 21 -99q0 -62 -28 -137q-51 -140 -464 -168z" />
|
||||
<glyph unicode="q" d="M84 693q29 327 237 550t483 223t437 -215q137 -181 137 -444q0 -49 -5 -101q-30 -329 -279 -629l76 -195l-293 -115l-84 213q-50 -4 -96 -4q-312 0 -465 182q-152 179 -152 445q0 44 4 90zM411 698q-4 -34 -4 -65q0 -136 78 -231q93 -113 205 -113h8l-62 184l242 104 l72 -170q87 114 102 281q3 28 3 54q0 133 -67 230q-80 116 -212 118h-4q-129 0 -234 -106q-105 -108 -127 -286z" />
|
||||
<glyph unicode="r" horiz-adv-x="1350" d="M55 6q72 -61 173 -61q70 0 154 29l47 473l117 12l351 -509q60 -18 112 -18q144 0 216 145l-354 457q321 80 370 334q23 121 23 219q0 107 -28 185q-54 150 -251 184q-82 14 -217 13q-188 0 -479 -27l-107 -68zM457 749l43 413q121 14 208 14q186 0 217 -66q21 -46 21 -96 q0 -56 -26 -118q-50 -118 -463 -147z" />
|
||||
<glyph unicode="s" horiz-adv-x="1227" d="M120 121q-21 72 -21 133q0 133 97 219q257 -151 373 -186q216 2 237 108v6q0 82 -132 158l-257 125q-241 128 -250 361q9 134 93 241q84 106 188 140q82 26 189 27q29 0 59 -2q264 -16 463 -150v-22q0 -175 -118 -307q-228 171 -371 171q-9 0 -18 -1q-17 2 -32 2 q-113 0 -113 -103q0 -64 193 -165q226 -92 336 -211q99 -107 99 -256q0 -16 -1 -33q-16 -230 -214 -353q-108 -75 -297 -75q-32 0 -67 2q-227 29 -436 171z" />
|
||||
<glyph unicode="t" horiz-adv-x="1357" d="M157 1434q-49 -63 -49 -138q0 -82 58 -180l363 8l-65 -1148q92 -34 176 -34q82 0 157 32l54 1163l369 5q41 85 41 170q0 76 -33 151z" />
|
||||
<glyph unicode="u" horiz-adv-x="1295" d="M98 326q-15 65 -15 219q0 290 52 894q84 16 164 16q92 0 179 -21q-57 -739 -57 -902q1 -12 1 -20q4 -128 53 -196t167.5 -68t163 73t56.5 191.5t41 924.5q75 19 161 19q81 0 171 -17q-48 -1069 -107 -1201.5t-180 -214t-317 -81.5t-343.5 98.5t-189.5 285.5z" />
|
||||
<glyph unicode="v" horiz-adv-x="1389" d="M55 1453q93 16 187 16t188 -16l191 -1052l326 1052q92 15 187.5 15t194.5 -15l-570 -1469q-91 -41 -178 -41q-84 0 -163 38z" />
|
||||
<glyph unicode="w" horiz-adv-x="1553" d="M55 1457l133 -1513q72 -15 146 -15q85 0 173 20l235 874l137 -857q103 -22 188 -22q100 0 177 30l249 1470q-88 39 -176 39q-66 0 -131 -22l-159 -876l-93 861q-65 25 -148 25q-68 0 -149 -17l-205 -843l-41 856q-82 14 -156 14q-96 0 -180 -24z" />
|
||||
<glyph unicode="x" horiz-adv-x="1313" d="M55 145q63 -170 283 -215l306 539l313 -553q177 19 296 178l-399 692l355 515q-113 153 -270 153h-10l-245 -394l-211 410q-200 0 -295 -152l298 -546z" />
|
||||
<glyph unicode="y" horiz-adv-x="1278" d="M55 1359l367 -685l-27 -711q71 -32 152 -32q79 0 169 30l29 705l473 700q-73 97 -255 97q-18 0 -38 -1l-315 -510l-239 516q-22 1 -43 1q-182 0 -273 -110z" />
|
||||
<glyph unicode="z" horiz-adv-x="1350" d="M114 235q-22 -76 -22 -137q0 -101 62 -158l1021 4q30 89 30 172q0 87 -33 169l-617 -11l657 878q35 77 35 148q0 88 -54 165l-962 1q-64 -102 -64 -231q0 -53 11 -110l604 6z" />
|
||||
<glyph unicode="{" horiz-adv-x="684" />
|
||||
<glyph unicode="|" horiz-adv-x="611" d="M55 907q0 66 33.5 125.5t92.5 91.5t123 32q63 0 122.5 -32t93 -91.5t33.5 -125.5q0 -64 -33 -123.5t-92.5 -91.5t-123.5 -32q-66 0 -124.5 32t-91.5 91.5t-33 123.5z" />
|
||||
<glyph unicode="}" horiz-adv-x="684" />
|
||||
<glyph unicode="~" horiz-adv-x="1196" />
|
||||
<glyph unicode="¡" horiz-adv-x="626" d="M55 70q153 -107 360 -48l52 1047q-85 56 -214 13zM240 1333q0 42 21.5 81t60.5 60t81 21q43 0 81.5 -21t60 -60t21.5 -81q0 -43 -22 -82t-60.5 -60t-80.5 -21q-41 0 -80 21t-61 60t-22 82z" />
|
||||
<glyph unicode="¢" horiz-adv-x="1139" />
|
||||
<glyph unicode="£" horiz-adv-x="1222" d="M62 230q-58 -204 15 -344l1099 106q36 151 -15 327l-659 -53q2 113 8 210l308 27q33 119 -14 256l-265 -18q104 616 488 224q108 71 82 287q-107 253 -386 210q-204 -20 -336 -194q-93 -122 -147 -548l-163 -11q-53 -159 14 -269l121 10q-6 -71 -11 -149l-2 -60z" />
|
||||
<glyph unicode="¤" horiz-adv-x="1139" />
|
||||
<glyph unicode="¥" horiz-adv-x="1278" d="M55 1359l367 -685l-3 -76h-162q-58 -69 -35 -136h192l-3 -65h-154q-58 -69 -35 -136h184l-11 -298q139 -63 321 -2l12 300h179q48 67 35 136h-208l3 65h170q48 67 35 136h-200l3 68l473 700q-81 107 -293 96l-315 -510l-239 516q-215 14 -316 -109z" />
|
||||
<glyph unicode="¦" horiz-adv-x="532" />
|
||||
<glyph unicode="§" horiz-adv-x="1139" />
|
||||
<glyph unicode="¨" horiz-adv-x="682" />
|
||||
<glyph unicode="©" horiz-adv-x="1509" />
|
||||
<glyph unicode="ª" horiz-adv-x="758" />
|
||||
<glyph unicode="«" horiz-adv-x="735" d="M16 565l93 -280l115 -345q123 -39 180 31l-202 594l211 633q-82 53 -172 30l-132 -389zM280 565l93 -280l115 -344q123 -39 180 31l-202 593l211 633q-82 53 -172 30l-132 -389z" />
|
||||
<glyph unicode="¬" horiz-adv-x="1196" />
|
||||
<glyph unicode="­" horiz-adv-x="871" d="M78 631q-23 162 35 331h685q13 -169 -35 -331h-685z" />
|
||||
<glyph unicode="®" horiz-adv-x="1509" />
|
||||
<glyph unicode="¯" horiz-adv-x="1131" />
|
||||
<glyph unicode="°" horiz-adv-x="819" />
|
||||
<glyph unicode="±" horiz-adv-x="1124" />
|
||||
<glyph unicode="²" horiz-adv-x="682" />
|
||||
<glyph unicode="³" horiz-adv-x="682" />
|
||||
<glyph unicode="´" horiz-adv-x="682" />
|
||||
<glyph unicode="µ" horiz-adv-x="1180" />
|
||||
<glyph unicode="¶" horiz-adv-x="1100" />
|
||||
<glyph unicode="·" horiz-adv-x="569" />
|
||||
<glyph unicode="¸" horiz-adv-x="682" />
|
||||
<glyph unicode="¹" horiz-adv-x="682" />
|
||||
<glyph unicode="º" horiz-adv-x="748" />
|
||||
<glyph unicode="»" horiz-adv-x="735" d="M16 -36q82 -53 172 -30l132 388l93 274l-93 280l-115 345q-123 39 -180 -31l202 -594zM280 -36q82 -53 172 -30l132 388l93 274l-93 280l-115 345q-123 39 -180 -31l202 -594z" />
|
||||
<glyph unicode="¼" horiz-adv-x="1708" />
|
||||
<glyph unicode="½" horiz-adv-x="1708" />
|
||||
<glyph unicode="¾" horiz-adv-x="1708" />
|
||||
<glyph unicode="¿" horiz-adv-x="1029" d="M61 367.5q-6 -291.5 402 -362.5q371 20 506 364q-28 189 -236 150q-65 -227 -231 -224q-122 20 -126 125.5t122 169.5q158 54 205 171.5t23 338.5q-109 58 -246 11q-8 -159 -54 -220q-64 -51 -189 -128q-170 -104 -176 -395.5zM455 1379q0 42 21.5 81t60.5 60t81 21 q43 0 81.5 -21t60 -60t21.5 -81q0 -43 -22 -82t-60.5 -60t-80.5 -21q-41 0 -80 21t-61 60t-22 82z" />
|
||||
<glyph unicode="À" horiz-adv-x="1338" d="M55 0q109 -93 332 -63l92 270l371 46l72 -268q219 -42 356 48l-400 1440q-141 87 -299 -12zM469 1686q-2 86 45 165l373 -138q21 -104 -52 -163zM550 504l157 492l87 -463z" />
|
||||
<glyph unicode="Á" horiz-adv-x="1338" d="M55 0q109 -93 332 -63l92 270l371 46l72 -268q219 -42 356 48l-400 1440q-141 87 -299 -12zM550 504l157 492l87 -463zM662 1713l373 138q47 -79 44 -166l-366 -136q-72 59 -51 164z" />
|
||||
<glyph unicode="Â" horiz-adv-x="1338" d="M55 0q109 -93 332 -63l92 270l371 46l72 -268q219 -42 356 48l-400 1440q-141 87 -299 -12zM521 1630l136 129q31 46 85 80l23 -21q21 -17 38 -37l157 -147q-23 -89 -108 -109l-110 105l-114 -108q-84 20 -107 108zM550 504l157 492l87 -463z" />
|
||||
<glyph unicode="Ã" horiz-adv-x="1338" d="M55 0q109 -93 332 -63l92 270l371 46l72 -268q219 -42 356 48l-400 1440q-141 87 -299 -12zM442 1601q39 87 123 152q72 54 133 51t120 -57q40 -32 68 -10q45 10 70 43l76 -80q-34 -46 -97 -93q-102 -67 -178 -19l-54 24q-46 25 -82 -2q-31 -27 -53 -44zM550 504l157 492 l87 -463z" />
|
||||
<glyph unicode="Ä" horiz-adv-x="1338" d="M63 0q109 -93 332 -63l92 270l371 46l72 -268q219 -42 356 48l-400 1440q-141 87 -299 -12zM471 1699q0 34 16 65t44.5 47.5t59.5 16.5q30 0 59 -16.5t45 -47.5t16 -65q0 -33 -16 -64t-44.5 -47.5t-59.5 -16.5q-32 0 -60 16.5t-44 47.5t-16 64zM558 504l157 492l87 -463z M794 1695q0 34 16.5 65t44.5 47.5t59 16.5q30 0 59 -16.5t45 -47.5t16 -65q0 -33 -15.5 -64t-44.5 -47.5t-60 -16.5t-59.5 16.5t-44.5 47.5t-16 64z" />
|
||||
<glyph unicode="Å" horiz-adv-x="1338" d="M55 0q109 -93 332 -63l92 270l371 46l72 -268q219 -42 356 48l-400 1440q-141 87 -299 -12zM550 504l157 492l87 -463zM579 1688q0 42 22 80.5t60.5 59t81.5 20.5q41 0 80 -20.5t61 -59t22 -80.5t-21.5 -80.5t-60.5 -59t-81 -20.5q-44 0 -82.5 20.5t-60 59t-21.5 80.5z M646 1688q0 -26 13 -50.5t35.5 -37.5t47.5 -13t48 13t35.5 37.5t12.5 50.5q0 27 -13 51.5t-36 37.5t-47 13q-25 0 -47.5 -13t-35.5 -37.5t-13 -51.5z" />
|
||||
<glyph unicode="Æ" horiz-adv-x="1667" d="M-23 0q109 -93 366 -54l92 270l329 36l-13 -204q10 -53 53 -61l753 35q106 155 23 332l-489 -20l27 310l365 23q87 130 12 276l-355 -11l18 256l472 21q66 137 17 294l-759 -28q-1 0 -2 -1q-115 40 -242 -39zM582 537l233 523l-30 -496z" />
|
||||
<glyph unicode="Ç" horiz-adv-x="1275" d="M113 817q46 342 217 517q223 181 541 148q221 -14 309 -163q35 -180 -94 -288q-87 56 -273 89q-163 16 -266 -94.5t-126 -286.5q-34 -111 42 -285q76 -158 231.5 -167t372.5 61q78 -154 15 -302q-237 -108 -391 -112q2 -2 3 -4q28 -20 82 -50q73 -41 76 -154.5 t-174 -141.5q-160 8 -218 142q12 74 102 59q28 -89 100 -88q52 8 54 49t-53 66q-68 21 -88 67q-13 29 -13 74q-217 51 -327 195q-180 237 -122 669z" />
|
||||
<glyph unicode="È" horiz-adv-x="1242" d="M70 10q10 -55 53 -63l935 37q106 155 23 332l-671 -20l27 310l547 23q87 130 12 276l-537 -11l18 256l654 21q66 137 17 294l-941 -28q-36 -17 -47 -56zM416 1697q17 85 79 152l335 -214q-2 -107 -85 -149z" />
|
||||
<glyph unicode="É" horiz-adv-x="1242" d="M70 10q10 -55 53 -63l935 37q106 155 23 332l-671 -20l27 310l547 23q87 130 12 276l-537 -11l18 256l654 21q66 137 17 294l-941 -28q-36 -17 -47 -56zM503 1631l335 214q62 -67 79 -152l-329 -211q-83 42 -85 149z" />
|
||||
<glyph unicode="Ê" horiz-adv-x="1242" d="M55 10q10 -55 53 -63l935 37q106 155 23 332l-671 -20l27 310l547 23q87 130 12 276l-537 -11l18 256l654 21q66 137 17 294l-941 -28q-36 -17 -47 -56zM453 1613l136 129q31 46 85 80l23 -21q21 -17 38 -37l157 -147q-23 -89 -108 -109l-110 105l-114 -108 q-84 20 -107 108z" />
|
||||
<glyph unicode="Ë" horiz-adv-x="1242" d="M55 10q10 -55 53 -63l935 37q106 155 23 332l-671 -20l27 310l547 23q87 130 12 276l-537 -11l18 256l654 21q66 137 17 294l-941 -28q-36 -17 -47 -56zM382 1695q0 34 16 65t44.5 47.5t59.5 16.5q30 0 59 -16.5t45 -47.5t16 -65q0 -33 -16 -64t-44.5 -47.5t-59.5 -16.5 q-32 0 -60 16.5t-44 47.5t-16 64zM705 1691q0 34 16.5 65t44.5 47.5t59 16.5q30 0 59 -16.5t45 -47.5t16 -65q0 -33 -15.5 -64t-44.5 -47.5t-60 -16.5t-59.5 16.5t-44.5 47.5t-16 64z" />
|
||||
<glyph unicode="Ì" horiz-adv-x="578" d="M55 -18q141 -73 345 -15l118 1471q-176 51 -328 15zM73 1697q17 85 79 152l335 -214q-2 -107 -85 -149z" />
|
||||
<glyph unicode="Í" horiz-adv-x="578" d="M55 -18q141 -73 345 -15l118 1471q-176 51 -328 15zM240 1635l335 214q62 -67 79 -152l-329 -211q-83 42 -85 149z" />
|
||||
<glyph unicode="Î" horiz-adv-x="578" d="M55 -18q141 -73 345 -15l118 1471q-176 51 -328 15zM151 1630l136 129q31 46 85 80l23 -21q21 -17 38 -37l157 -147q-23 -89 -108 -109l-110 105l-114 -108q-84 20 -107 108z" />
|
||||
<glyph unicode="Ï" horiz-adv-x="578" d="M55 -18q141 -73 345 -15l118 1471q-176 51 -328 15zM89 1703q0 34 16 65t44.5 47.5t59.5 16.5q30 0 59 -16.5t45 -47.5t16 -65q0 -33 -16 -64t-44.5 -47.5t-59.5 -16.5q-32 0 -60 16.5t-44 47.5t-16 64zM412 1699q0 34 16.5 65t44.5 47.5t59 16.5q30 0 59 -16.5t45 -47.5 t16 -65q0 -33 -15.5 -64t-44.5 -47.5t-60 -16.5t-59.5 16.5t-44.5 47.5t-16 64z" />
|
||||
<glyph unicode="Ð" horiz-adv-x="1479" />
|
||||
<glyph unicode="Ñ" horiz-adv-x="1307" d="M55 -7q110 -79 325 -24l56 818l447 -816q176 -70 278 22l86 1426q-142 77 -296 2l-48 -788l-476 807q-215 56 -286 -42zM421 1576q39 87 123 152q72 54 133 51t120 -57q40 -32 68 -10q45 10 70 43l76 -80q-34 -46 -97 -93q-102 -67 -178 -19l-54 24q-46 25 -82 -2 q-31 -27 -53 -44z" />
|
||||
<glyph unicode="Ò" d="M84 693q29 327 237 550t483 223t437 -215t132 -544.5t-220 -543.5t-467.5 -214t-454 208.5t-147.5 535.5zM411 697.5q-22 -178.5 74 -295.5t232 -110.5t228 118t107.5 279t-64.5 283.5t-212 117.5t-237.5 -106t-127.5 -286zM517 1702q17 85 79 152l335 -214 q-2 -107 -85 -149z" />
|
||||
<glyph unicode="Ó" d="M84 693q29 327 237 550t483 223t437 -215t132 -544.5t-220 -543.5t-467.5 -214t-454 208.5t-147.5 535.5zM411 697.5q-22 -178.5 74 -295.5t232 -110.5t228 118t107.5 279t-64.5 283.5t-212 117.5t-237.5 -106t-127.5 -286zM759 1640l335 214q62 -67 79 -152l-329 -211 q-83 42 -85 149z" />
|
||||
<glyph unicode="Ô" d="M84 693q29 327 237 550t483 223t437 -215t132 -544.5t-220 -543.5t-467.5 -214t-454 208.5t-147.5 535.5zM411 697.5q-22 -178.5 74 -295.5t232 -110.5t228 118t107.5 279t-64.5 283.5t-212 117.5t-237.5 -106t-127.5 -286zM636 1626l136 129q31 46 85 80l23 -21 q21 -17 38 -37l157 -147q-23 -89 -108 -109l-110 105l-114 -108q-84 20 -107 108z" />
|
||||
<glyph unicode="Õ" d="M84 693q29 327 237 550t483 223t437 -215t132 -544.5t-220 -543.5t-467.5 -214t-454 208.5t-147.5 535.5zM411 697.5q-22 -178.5 74 -295.5t232 -110.5t228 118t107.5 279t-64.5 283.5t-212 117.5t-237.5 -106t-127.5 -286zM531 1596q39 87 123 152q72 54 133 51t120 -57 q40 -32 68 -10q45 10 70 43l76 -80q-34 -46 -97 -93q-102 -67 -178 -19l-54 24q-46 25 -82 -2q-31 -27 -53 -44z" />
|
||||
<glyph unicode="Ö" d="M84 693q29 327 237 550t483 223t437 -215t132 -544.5t-220 -543.5t-467.5 -214t-454 208.5t-147.5 535.5zM411 697.5q-22 -178.5 74 -295.5t232 -110.5t228 118t107.5 279t-64.5 283.5t-212 117.5t-237.5 -106t-127.5 -286zM540 1711q0 34 16 65t44.5 47.5t59.5 16.5 q30 0 59 -16.5t45 -47.5t16 -65q0 -33 -16 -64t-44.5 -47.5t-59.5 -16.5q-32 0 -60 16.5t-44 47.5t-16 64zM863 1707q0 34 16.5 65t44.5 47.5t59 16.5q30 0 59 -16.5t45 -47.5t16 -65q0 -33 -15.5 -64t-44.5 -47.5t-60 -16.5t-59.5 16.5t-44.5 47.5t-16 64z" />
|
||||
<glyph unicode="×" horiz-adv-x="1196" />
|
||||
<glyph unicode="Ø" d="M84 693q29 327 237 550t483 223q157 0 278 -70l175 268q98 3 141 -110l-179 -276q11 -13 22 -27q162 -215 132 -544.5t-220 -543.5t-467 -214q-158 0 -283 67l-170 -262q-138 -15 -148 116l170 261q-12 13 -23 27q-177 208 -148 535zM411 698q-19 -151 47 -258l412 631 q-43 18 -94 19q-132 1 -237.5 -106.5t-127.5 -285.5zM595 314q57 -26 122 -22q136 6 228 117.5t108 279.5q13 149 -49 257z" />
|
||||
<glyph unicode="Ù" horiz-adv-x="1295" d="M97.5 326q-42.5 187 37.5 1113q180 35 343 -5q-61 -794 -56.5 -922.5t53.5 -196t167.5 -67.5t163 73t56.5 191.5t41 924.5q146 37 332 2q-48 -1069 -107 -1201.5t-180 -214t-317 -81.5t-343.5 98.5t-190 285.5zM466 1697q17 85 79 152l335 -214q-2 -107 -85 -149z" />
|
||||
<glyph unicode="Ú" horiz-adv-x="1295" d="M97.5 326q-42.5 187 37.5 1113q180 35 343 -5q-61 -794 -56.5 -922.5t53.5 -196t167.5 -67.5t163 73t56.5 191.5t41 924.5q146 37 332 2q-48 -1069 -107 -1201.5t-180 -214t-317 -81.5t-343.5 98.5t-190 285.5zM553 1631l335 214q62 -67 79 -152l-329 -211 q-83 42 -85 149z" />
|
||||
<glyph unicode="Û" horiz-adv-x="1295" d="M97.5 326q-42.5 187 37.5 1113q180 35 343 -5q-61 -794 -56.5 -922.5t53.5 -196t167.5 -67.5t163 73t56.5 191.5t41 924.5q146 37 332 2q-48 -1069 -107 -1201.5t-180 -214t-317 -81.5t-343.5 98.5t-190 285.5zM497 1630l136 129q31 46 85 80l23 -21q21 -17 38 -37 l157 -147q-23 -89 -108 -109l-110 105l-114 -108q-84 20 -107 108z" />
|
||||
<glyph unicode="Ü" horiz-adv-x="1295" d="M97.5 326q-42.5 187 37.5 1113q180 35 343 -5q-61 -794 -56.5 -922.5t53.5 -196t167.5 -67.5t163 73t56.5 191.5t41 924.5q146 37 332 2q-48 -1069 -107 -1201.5t-180 -214t-317 -81.5t-343.5 98.5t-190 285.5zM427 1687q0 34 16 65t44.5 47.5t59.5 16.5q30 0 59 -16.5 t45 -47.5t16 -65q0 -33 -16 -64t-44.5 -47.5t-59.5 -16.5q-32 0 -60 16.5t-44 47.5t-16 64zM750 1683q0 34 16.5 65t44.5 47.5t59 16.5q30 0 59 -16.5t45 -47.5t16 -65q0 -33 -15.5 -64t-44.5 -47.5t-60 -16.5t-59.5 16.5t-44.5 47.5t-16 64z" />
|
||||
<glyph unicode="Ý" horiz-adv-x="1366" />
|
||||
<glyph unicode="Þ" horiz-adv-x="1366" />
|
||||
<glyph unicode="ß" horiz-adv-x="1247" d="M78 -9q107 -82 311 -24l97 1247q193 9 241 -58q106 -161 -120 -211q-92 -161 21 -288q256 -38 230 -170.5t-98 -167.5t-181 -22q-38 4 -77.5 -87t-20 -159.5t119.5 -100.5q349 35 451.5 180t116 315.5t-43.5 300.5t-209 154q256 139 112.5 415.5t-800.5 148.5 q-64 -21 -58 -147z" />
|
||||
<glyph unicode="à" horiz-adv-x="1338" d="M55 0q109 -93 332 -63l92 270l371 46l72 -268q219 -42 356 48l-400 1440q-141 87 -299 -12zM469 1686q-2 86 45 165l373 -138q21 -104 -52 -163zM550 504l157 492l87 -463z" />
|
||||
<glyph unicode="á" horiz-adv-x="1338" d="M55 0q109 -93 332 -63l92 270l371 46l72 -268q219 -42 356 48l-400 1440q-141 87 -299 -12zM550 504l157 492l87 -463zM662 1713l373 138q47 -79 44 -166l-366 -136q-72 59 -51 164z" />
|
||||
<glyph unicode="â" horiz-adv-x="1338" d="M55 0q109 -93 332 -63l92 270l371 46l72 -268q219 -42 356 48l-400 1440q-141 87 -299 -12zM521 1630l136 129q31 46 85 80l23 -21q21 -17 38 -37l157 -147q-23 -89 -108 -109l-110 105l-114 -108q-84 20 -107 108zM550 504l157 492l87 -463z" />
|
||||
<glyph unicode="ã" horiz-adv-x="1338" d="M55 0q109 -93 332 -63l92 270l371 46l72 -268q219 -42 356 48l-400 1440q-141 87 -299 -12zM442 1601q39 87 123 152q72 54 133 51t120 -57q40 -32 68 -10q45 10 70 43l76 -80q-34 -46 -97 -93q-102 -67 -178 -19l-54 24q-46 25 -82 -2q-31 -27 -53 -44zM550 504l157 492 l87 -463z" />
|
||||
<glyph unicode="ä" horiz-adv-x="1338" d="M63 0q109 -93 332 -63l92 270l371 46l72 -268q219 -42 356 48l-400 1440q-141 87 -299 -12zM471 1699q0 34 16 65t44.5 47.5t59.5 16.5q30 0 59 -16.5t45 -47.5t16 -65q0 -33 -16 -64t-44.5 -47.5t-59.5 -16.5q-32 0 -60 16.5t-44 47.5t-16 64zM558 504l157 492l87 -463z M794 1695q0 34 16.5 65t44.5 47.5t59 16.5q30 0 59 -16.5t45 -47.5t16 -65q0 -33 -15.5 -64t-44.5 -47.5t-60 -16.5t-59.5 16.5t-44.5 47.5t-16 64z" />
|
||||
<glyph unicode="å" horiz-adv-x="1338" d="M55 0q109 -93 332 -63l92 270l371 46l72 -268q219 -42 356 48l-400 1440q-141 87 -299 -12zM550 504l157 492l87 -463zM579 1688q0 42 22 80.5t60.5 59t81.5 20.5q41 0 80 -20.5t61 -59t22 -80.5t-21.5 -80.5t-60.5 -59t-81 -20.5q-44 0 -82.5 20.5t-60 59t-21.5 80.5z M646 1688q0 -26 13 -50.5t35.5 -37.5t47.5 -13t48 13t35.5 37.5t12.5 50.5q0 27 -13 51.5t-36 37.5t-47 13q-25 0 -47.5 -13t-35.5 -37.5t-13 -51.5z" />
|
||||
<glyph unicode="æ" horiz-adv-x="1667" d="M-23 0q109 -93 366 -54l92 270l329 36l-13 -204q10 -53 53 -61l753 35q106 155 23 332l-489 -20l27 310l365 23q87 130 12 276l-355 -11l18 256l472 21q66 137 17 294l-759 -28q-1 0 -2 -1q-115 40 -242 -39zM582 537l233 523l-30 -496z" />
|
||||
<glyph unicode="ç" horiz-adv-x="1275" d="M113 817q46 342 217 517q223 181 541 148q221 -14 309 -163q35 -180 -94 -288q-87 56 -273 89q-163 16 -266 -94.5t-126 -286.5q-34 -111 42 -285q76 -158 231.5 -167t372.5 61q78 -154 15 -302q-237 -108 -391 -112q2 -2 3 -4q28 -20 82 -50q73 -41 76 -154.5 t-174 -141.5q-160 8 -218 142q12 74 102 59q28 -89 100 -88q52 8 54 49t-53 66q-68 21 -88 67q-13 29 -13 74q-217 51 -327 195q-180 237 -122 669z" />
|
||||
<glyph unicode="è" horiz-adv-x="1242" d="M70 10q10 -55 53 -63l935 37q106 155 23 332l-671 -20l27 310l547 23q87 130 12 276l-537 -11l18 256l654 21q66 137 17 294l-941 -28q-36 -17 -47 -56zM416 1697q17 85 79 152l335 -214q-2 -107 -85 -149z" />
|
||||
<glyph unicode="é" horiz-adv-x="1242" d="M70 10q10 -55 53 -63l935 37q106 155 23 332l-671 -20l27 310l547 23q87 130 12 276l-537 -11l18 256l654 21q66 137 17 294l-941 -28q-36 -17 -47 -56zM503 1631l335 214q62 -67 79 -152l-329 -211q-83 42 -85 149z" />
|
||||
<glyph unicode="ê" horiz-adv-x="1242" d="M55 10q10 -55 53 -63l935 37q106 155 23 332l-671 -20l27 310l547 23q87 130 12 276l-537 -11l18 256l654 21q66 137 17 294l-941 -28q-36 -17 -47 -56zM453 1613l136 129q31 46 85 80l23 -21q21 -17 38 -37l157 -147q-23 -89 -108 -109l-110 105l-114 -108 q-84 20 -107 108z" />
|
||||
<glyph unicode="ë" horiz-adv-x="1242" d="M55 10q10 -55 53 -63l935 37q106 155 23 332l-671 -20l27 310l547 23q87 130 12 276l-537 -11l18 256l654 21q66 137 17 294l-941 -28q-36 -17 -47 -56zM382 1695q0 34 16 65t44.5 47.5t59.5 16.5q30 0 59 -16.5t45 -47.5t16 -65q0 -33 -16 -64t-44.5 -47.5t-59.5 -16.5 q-32 0 -60 16.5t-44 47.5t-16 64zM705 1691q0 34 16.5 65t44.5 47.5t59 16.5q30 0 59 -16.5t45 -47.5t16 -65q0 -33 -15.5 -64t-44.5 -47.5t-60 -16.5t-59.5 16.5t-44.5 47.5t-16 64z" />
|
||||
<glyph unicode="ì" horiz-adv-x="578" d="M55 -18q141 -73 345 -15l118 1471q-176 51 -328 15zM73 1697q17 85 79 152l335 -214q-2 -107 -85 -149z" />
|
||||
<glyph unicode="í" horiz-adv-x="578" d="M55 -18q141 -73 345 -15l118 1471q-176 51 -328 15zM240 1635l335 214q62 -67 79 -152l-329 -211q-83 42 -85 149z" />
|
||||
<glyph unicode="î" horiz-adv-x="578" d="M55 -18q141 -73 345 -15l118 1471q-176 51 -328 15zM151 1630l136 129q31 46 85 80l23 -21q21 -17 38 -37l157 -147q-23 -89 -108 -109l-110 105l-114 -108q-84 20 -107 108z" />
|
||||
<glyph unicode="ï" horiz-adv-x="578" d="M55 -18q141 -73 345 -15l118 1471q-176 51 -328 15zM89 1703q0 34 16 65t44.5 47.5t59.5 16.5q30 0 59 -16.5t45 -47.5t16 -65q0 -33 -16 -64t-44.5 -47.5t-59.5 -16.5q-32 0 -60 16.5t-44 47.5t-16 64zM412 1699q0 34 16.5 65t44.5 47.5t59 16.5q30 0 59 -16.5t45 -47.5 t16 -65q0 -33 -15.5 -64t-44.5 -47.5t-60 -16.5t-59.5 16.5t-44.5 47.5t-16 64z" />
|
||||
<glyph unicode="ð" horiz-adv-x="1139" />
|
||||
<glyph unicode="ñ" horiz-adv-x="1307" d="M55 -7q110 -79 325 -24l56 818l447 -816q176 -70 278 22l86 1426q-142 77 -296 2l-48 -788l-476 807q-215 56 -286 -42zM421 1576q39 87 123 152q72 54 133 51t120 -57q40 -32 68 -10q45 10 70 43l76 -80q-34 -46 -97 -93q-102 -67 -178 -19l-54 24q-46 25 -82 -2 q-31 -27 -53 -44z" />
|
||||
<glyph unicode="ò" d="M84 693q29 327 237 550t483 223t437 -215t132 -544.5t-220 -543.5t-467.5 -214t-454 208.5t-147.5 535.5zM411 697.5q-22 -178.5 74 -295.5t232 -110.5t228 118t107.5 279t-64.5 283.5t-212 117.5t-237.5 -106t-127.5 -286zM517 1702q17 85 79 152l335 -214 q-2 -107 -85 -149z" />
|
||||
<glyph unicode="ó" d="M84 693q29 327 237 550t483 223t437 -215t132 -544.5t-220 -543.5t-467.5 -214t-454 208.5t-147.5 535.5zM411 697.5q-22 -178.5 74 -295.5t232 -110.5t228 118t107.5 279t-64.5 283.5t-212 117.5t-237.5 -106t-127.5 -286zM759 1640l335 214q62 -67 79 -152l-329 -211 q-83 42 -85 149z" />
|
||||
<glyph unicode="ô" d="M84 693q29 327 237 550t483 223t437 -215t132 -544.5t-220 -543.5t-467.5 -214t-454 208.5t-147.5 535.5zM411 697.5q-22 -178.5 74 -295.5t232 -110.5t228 118t107.5 279t-64.5 283.5t-212 117.5t-237.5 -106t-127.5 -286zM636 1626l136 129q31 46 85 80l23 -21 q21 -17 38 -37l157 -147q-23 -89 -108 -109l-110 105l-114 -108q-84 20 -107 108z" />
|
||||
<glyph unicode="õ" d="M84 693q29 327 237 550t483 223t437 -215t132 -544.5t-220 -543.5t-467.5 -214t-454 208.5t-147.5 535.5zM411 697.5q-22 -178.5 74 -295.5t232 -110.5t228 118t107.5 279t-64.5 283.5t-212 117.5t-237.5 -106t-127.5 -286zM531 1596q39 87 123 152q72 54 133 51t120 -57 q40 -32 68 -10q45 10 70 43l76 -80q-34 -46 -97 -93q-102 -67 -178 -19l-54 24q-46 25 -82 -2q-31 -27 -53 -44z" />
|
||||
<glyph unicode="ö" d="M84 693q29 327 237 550t483 223t437 -215t132 -544.5t-220 -543.5t-467.5 -214t-454 208.5t-147.5 535.5zM411 697.5q-22 -178.5 74 -295.5t232 -110.5t228 118t107.5 279t-64.5 283.5t-212 117.5t-237.5 -106t-127.5 -286zM540 1711q0 34 16 65t44.5 47.5t59.5 16.5 q30 0 59 -16.5t45 -47.5t16 -65q0 -33 -16 -64t-44.5 -47.5t-59.5 -16.5q-32 0 -60 16.5t-44 47.5t-16 64zM863 1707q0 34 16.5 65t44.5 47.5t59 16.5q30 0 59 -16.5t45 -47.5t16 -65q0 -33 -15.5 -64t-44.5 -47.5t-60 -16.5t-59.5 16.5t-44.5 47.5t-16 64z" />
|
||||
<glyph unicode="÷" horiz-adv-x="1124" />
|
||||
<glyph unicode="ø" d="M84 693q29 327 237 550t483 223q157 0 278 -70l175 268q98 3 141 -110l-179 -276q11 -13 22 -27q162 -215 132 -544.5t-220 -543.5t-467 -214q-158 0 -283 67l-170 -262q-138 -15 -148 116l170 261q-12 13 -23 27q-177 208 -148 535zM411 698q-19 -151 47 -258l412 631 q-43 18 -94 19q-132 1 -237.5 -106.5t-127.5 -285.5zM595 314q57 -26 122 -22q136 6 228 117.5t108 279.5q13 149 -49 257z" />
|
||||
<glyph unicode="ù" horiz-adv-x="1295" d="M97.5 326q-42.5 187 37.5 1113q180 35 343 -5q-61 -794 -56.5 -922.5t53.5 -196t167.5 -67.5t163 73t56.5 191.5t41 924.5q146 37 332 2q-48 -1069 -107 -1201.5t-180 -214t-317 -81.5t-343.5 98.5t-190 285.5zM466 1697q17 85 79 152l335 -214q-2 -107 -85 -149z" />
|
||||
<glyph unicode="ú" horiz-adv-x="1295" d="M97.5 326q-42.5 187 37.5 1113q180 35 343 -5q-61 -794 -56.5 -922.5t53.5 -196t167.5 -67.5t163 73t56.5 191.5t41 924.5q146 37 332 2q-48 -1069 -107 -1201.5t-180 -214t-317 -81.5t-343.5 98.5t-190 285.5zM553 1631l335 214q62 -67 79 -152l-329 -211 q-83 42 -85 149z" />
|
||||
<glyph unicode="û" horiz-adv-x="1295" d="M97.5 326q-42.5 187 37.5 1113q180 35 343 -5q-61 -794 -56.5 -922.5t53.5 -196t167.5 -67.5t163 73t56.5 191.5t41 924.5q146 37 332 2q-48 -1069 -107 -1201.5t-180 -214t-317 -81.5t-343.5 98.5t-190 285.5zM497 1630l136 129q31 46 85 80l23 -21q21 -17 38 -37 l157 -147q-23 -89 -108 -109l-110 105l-114 -108q-84 20 -107 108z" />
|
||||
<glyph unicode="ü" horiz-adv-x="1295" d="M97.5 326q-42.5 187 37.5 1113q180 35 343 -5q-61 -794 -56.5 -922.5t53.5 -196t167.5 -67.5t163 73t56.5 191.5t41 924.5q146 37 332 2q-48 -1069 -107 -1201.5t-180 -214t-317 -81.5t-343.5 98.5t-190 285.5zM427 1687q0 34 16 65t44.5 47.5t59.5 16.5q30 0 59 -16.5 t45 -47.5t16 -65q0 -33 -16 -64t-44.5 -47.5t-59.5 -16.5q-32 0 -60 16.5t-44 47.5t-16 64zM750 1683q0 34 16.5 65t44.5 47.5t59 16.5q30 0 59 -16.5t45 -47.5t16 -65q0 -33 -15.5 -64t-44.5 -47.5t-60 -16.5t-59.5 16.5t-44.5 47.5t-16 64z" />
|
||||
<glyph unicode="ý" horiz-adv-x="1024" />
|
||||
<glyph unicode="þ" horiz-adv-x="1139" />
|
||||
<glyph unicode="ÿ" horiz-adv-x="1278" d="M55 1359l367 -685l-27 -711q139 -63 321 -2l29 705l473 700q-81 107 -293 96l-315 -510l-239 516q-215 14 -316 -109zM359 1687q0 34 16 65t44.5 47.5t59.5 16.5q30 0 59 -16.5t45 -47.5t16 -65q0 -33 -16 -64t-44.5 -47.5t-59.5 -16.5q-32 0 -60 16.5t-44 47.5t-16 64z M682 1683q0 34 16.5 65t44.5 47.5t59 16.5q30 0 59 -16.5t45 -47.5t16 -65q0 -33 -15.5 -64t-44.5 -47.5t-60 -16.5t-59.5 16.5t-44.5 47.5t-16 64z" />
|
||||
<glyph unicode="Œ" horiz-adv-x="1768" d="M17 686q-29 -327 147.5 -535.5t454.5 -208.5q121 0 226 42q14 -27 43 -33l757 33q106 155 23 332l-493 -16l27 310l369 19q87 130 12 276l-359 -7l18 256l476 17q66 137 17 294l-763 -24q-16 -7 -27 -19q-94 37 -208 37q-275 0 -483 -223t-237 -550zM344 690.5 q22 178.5 127.5 286t237.5 106t212 -117.5t64.5 -283.5t-107.5 -279t-228 -118t-232 110.5t-74 295.5z" />
|
||||
<glyph unicode="œ" horiz-adv-x="1768" d="M17 686q-29 -327 147.5 -535.5t454.5 -208.5q121 0 226 42q14 -27 43 -33l757 33q106 155 23 332l-493 -16l27 310l369 19q87 130 12 276l-359 -7l18 256l476 17q66 137 17 294l-763 -24q-16 -7 -27 -19q-94 37 -208 37q-275 0 -483 -223t-237 -550zM344 690.5 q22 178.5 127.5 286t237.5 106t212 -117.5t64.5 -283.5t-107.5 -279t-228 -118t-232 110.5t-74 295.5z" />
|
||||
<glyph unicode="Ÿ" horiz-adv-x="1278" d="M55 1359l367 -685l-27 -711q139 -63 321 -2l29 705l473 700q-81 107 -293 96l-315 -510l-239 516q-215 14 -316 -109zM359 1687q0 34 16 65t44.5 47.5t59.5 16.5q30 0 59 -16.5t45 -47.5t16 -65q0 -33 -16 -64t-44.5 -47.5t-59.5 -16.5q-32 0 -60 16.5t-44 47.5t-16 64z M682 1683q0 34 16.5 65t44.5 47.5t59 16.5q30 0 59 -16.5t45 -47.5t16 -65q0 -33 -15.5 -64t-44.5 -47.5t-60 -16.5t-59.5 16.5t-44.5 47.5t-16 64z" />
|
||||
<glyph unicode="ˆ" horiz-adv-x="682" />
|
||||
<glyph unicode="˜" horiz-adv-x="682" />
|
||||
<glyph unicode=" " horiz-adv-x="927" />
|
||||
<glyph unicode=" " horiz-adv-x="1854" />
|
||||
<glyph unicode=" " horiz-adv-x="927" />
|
||||
<glyph unicode=" " horiz-adv-x="1854" />
|
||||
<glyph unicode=" " horiz-adv-x="618" />
|
||||
<glyph unicode=" " horiz-adv-x="463" />
|
||||
<glyph unicode=" " horiz-adv-x="309" />
|
||||
<glyph unicode=" " horiz-adv-x="309" />
|
||||
<glyph unicode=" " horiz-adv-x="231" />
|
||||
<glyph unicode=" " horiz-adv-x="370" />
|
||||
<glyph unicode=" " horiz-adv-x="103" />
|
||||
<glyph unicode="‐" horiz-adv-x="871" d="M78 631q-23 162 35 331h685q13 -169 -35 -331h-685z" />
|
||||
<glyph unicode="‑" horiz-adv-x="871" d="M78 631q-23 162 35 331h685q13 -169 -35 -331h-685z" />
|
||||
<glyph unicode="‒" horiz-adv-x="871" d="M78 631q-23 162 35 331h685q13 -169 -35 -331h-685z" />
|
||||
<glyph unicode="–" horiz-adv-x="1139" />
|
||||
<glyph unicode="—" horiz-adv-x="2048" />
|
||||
<glyph unicode="‘" horiz-adv-x="419" d="M55 951l46 574q139 32 258 -7l-44 -564q-128 -76 -260 -3z" />
|
||||
<glyph unicode="’" horiz-adv-x="419" d="M55 951l46 574q139 32 258 -7l-44 -564q-128 -76 -260 -3z" />
|
||||
<glyph unicode="‚" horiz-adv-x="455" />
|
||||
<glyph unicode="“" horiz-adv-x="720" d="M55 951l46 574q139 32 258 -7l-44 -564q-128 -76 -260 -3zM357 944l46 574q139 32 257 -7l-43 -564q-128 -76 -260 -3z" />
|
||||
<glyph unicode="”" horiz-adv-x="720" d="M55 951l46 574q139 32 258 -7l-44 -564q-128 -76 -260 -3zM357 944l46 574q139 32 257 -7l-43 -564q-128 -76 -260 -3z" />
|
||||
<glyph unicode="„" horiz-adv-x="682" />
|
||||
<glyph unicode="•" horiz-adv-x="611" d="M55 907q0 66 33.5 125.5t92.5 91.5t123 32q63 0 122.5 -32t93 -91.5t33.5 -125.5q0 -64 -33 -123.5t-92.5 -91.5t-123.5 -32q-66 0 -124.5 32t-91.5 91.5t-33 123.5z" />
|
||||
<glyph unicode="…" horiz-adv-x="2048" />
|
||||
<glyph unicode=" " horiz-adv-x="370" />
|
||||
<glyph unicode="‹" horiz-adv-x="682" />
|
||||
<glyph unicode="›" horiz-adv-x="682" />
|
||||
<glyph unicode=" " horiz-adv-x="463" />
|
||||
<glyph unicode="€" horiz-adv-x="1274" d="M61 528q-34 79 52 162h21q1 29 4 60h-77q-34 79 52 162h49q55 272 201 422q223 181 541 148q221 -14 309 -163q35 -180 -94 -288q-87 56 -273 89q-163 16 -266 -94q-47 -51 -77 -114h639q19 -83 -53 -162h-633q-1 -5 -2 -11q-7 -23 -9 -49h697q19 -83 -53 -162h-621 q11 -35 28 -74q76 -158 231.5 -167t372.5 61q78 -154 15 -302q-257 -118 -417 -112q-295 37 -430 214q-114 151 -133 380h-74z" />
|
||||
<glyph unicode="™" horiz-adv-x="2048" />
|
||||
<glyph unicode="◼" horiz-adv-x="1470" d="M0 0v1470h1470v-1470h-1470z" />
|
||||
</font>
|
||||
</defs></svg>
|
||||
|
After Width: | Height: | Size: 45 KiB |
BIN
includes/helsinki.ttf
Normal file
BIN
includes/helsinki.ttf
Normal file
Binary file not shown.
BIN
includes/helsinki.woff
Normal file
BIN
includes/helsinki.woff
Normal file
Binary file not shown.
BIN
includes/helsinki.woff2
Normal file
BIN
includes/helsinki.woff2
Normal file
Binary file not shown.
BIN
includes/images/flag.png
Normal file
BIN
includes/images/flag.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.1 KiB |
BIN
includes/images/graphics.psd
Normal file
BIN
includes/images/graphics.psd
Normal file
Binary file not shown.
BIN
includes/images/skull.png
Normal file
BIN
includes/images/skull.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.9 KiB |
2
includes/jquery-3.5.1.min.js
vendored
Normal file
2
includes/jquery-3.5.1.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
631
includes/script.js
Normal file
631
includes/script.js
Normal file
@@ -0,0 +1,631 @@
|
||||
const $buttonCancel = $('button.cancel');
|
||||
const $game = $('#game');
|
||||
const $gameOver = $('#gameOver');
|
||||
const $ul = $('ul');
|
||||
const $tutorial = $('#tutorial');
|
||||
|
||||
let gameBoardWidth = 10;
|
||||
let gameBoardHeight = 9;
|
||||
let score = 0;
|
||||
let firstClick = true;
|
||||
let mineChance = 0.2; // normal
|
||||
let clickHoldMs = 200;
|
||||
let mouseHeld = false;
|
||||
let timeout; // hold timer
|
||||
let viewportSizingAvailable = (parseInt($game.height) === parseInt($(window).height())); // only run once
|
||||
let tutorialPages = [];
|
||||
|
||||
function drawGameBoard() {
|
||||
$game.html("");
|
||||
$('#tutorial .gameBoard').html("");
|
||||
|
||||
gameBoardWidth = 10;
|
||||
|
||||
// determine aspect ratio so as to fit the screen
|
||||
gameBoardHeight = determineGameBoardHeight();
|
||||
|
||||
for (let i = 0; i < gameBoardHeight; i++) {
|
||||
$game.append(newRow());
|
||||
}
|
||||
}
|
||||
|
||||
function determineGameBoardHeight() {
|
||||
return Math.max(
|
||||
Math.floor((1 / getAspectRatio()) * 10) - 1,
|
||||
9 // minimum
|
||||
);
|
||||
}
|
||||
|
||||
function newTile() {
|
||||
if (Math.random() < mineChance) {
|
||||
return '<li class="mine"></li>';
|
||||
} else {
|
||||
return '<li></li>';
|
||||
}
|
||||
}
|
||||
|
||||
function newRow() {
|
||||
let row = '<ul>';
|
||||
|
||||
for (let i = 0; i < gameBoardWidth; i++) {
|
||||
row += newTile();
|
||||
}
|
||||
|
||||
row += '</ul>';
|
||||
|
||||
return row;
|
||||
}
|
||||
|
||||
function saveGame() {
|
||||
if (typeof(Storage) === "undefined") {
|
||||
return;
|
||||
}
|
||||
|
||||
// variables
|
||||
localStorage.setItem("score", score);
|
||||
localStorage.setItem("mineChance", mineChance);
|
||||
|
||||
// game board
|
||||
localStorage.setItem("gameBoard", $game.html());
|
||||
}
|
||||
|
||||
function loadGame() {
|
||||
// check if storage available and if saved game exists
|
||||
if (typeof(Storage) === "undefined" || localStorage.getItem("gameBoard") === null) {
|
||||
drawGameBoard();
|
||||
return;
|
||||
}
|
||||
|
||||
// variables
|
||||
score = parseInt(localStorage.getItem("score"));
|
||||
mineChance = parseFloat(localStorage.getItem("mineChance"));
|
||||
firstClick = false;
|
||||
|
||||
// game board
|
||||
$game.html(localStorage.getItem("gameBoard"));
|
||||
|
||||
gameBoardHeight = determineGameBoardHeight();
|
||||
|
||||
// add rows if there is empty space
|
||||
while ($ul.length < gameBoardHeight) {
|
||||
$game.append(newRow());
|
||||
}
|
||||
|
||||
// remove any rows the screen cannot display
|
||||
$('#game ul:gt(' + (gameBoardHeight - 1) + ')').remove();
|
||||
|
||||
refreshMineCounts();
|
||||
updateScore();
|
||||
updateMinesLeft();
|
||||
|
||||
// click blank tiles
|
||||
$('li.revealed:not(.mine):empty').mouseup();
|
||||
|
||||
$('#setup').hide();
|
||||
}
|
||||
|
||||
$.fn.check = function() {
|
||||
// unclicked tiles
|
||||
if ($(this).filter('li:not(.revealed):not(.flagged)').length > 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// incorrectly flagged tiles
|
||||
if ($(this).filter('li.flagged:not(.mine)').length > 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// clicked mines
|
||||
if ($(this).filter('li.revealed.mine').length > 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
$.fn.checkRow = function() {
|
||||
return $(this).children().check();
|
||||
}
|
||||
|
||||
$.fn.checkColumn = function() {
|
||||
return $(this).column().check();
|
||||
}
|
||||
|
||||
window.removeClearedRows = function() {
|
||||
let rowsToRemove = $('ul:not(.removing)').filter(function() {
|
||||
return $(this).checkRow();
|
||||
});
|
||||
|
||||
if (rowsToRemove.length > 0) {
|
||||
suddenDeath();
|
||||
}
|
||||
|
||||
rowsToRemove.each(function() {
|
||||
score += $(this).children('.mine').length;
|
||||
|
||||
$(this).addClass("removing");
|
||||
|
||||
$(this).slideUp("slow", function() {
|
||||
// add new row on bottom
|
||||
$(this).closest("div").append(newRow());
|
||||
|
||||
$(this).remove();
|
||||
|
||||
refreshMineCounts();
|
||||
|
||||
// click blank tiles
|
||||
$('li.revealed:not(.mine):empty').mouseup();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
window.removeClearedColumns = function() {
|
||||
let columnsToRemove = $('ul:not(.removing):eq(0) li:not(.removing)').filter(function() {
|
||||
return $(this).checkColumn();
|
||||
});
|
||||
|
||||
if (columnsToRemove.length > 0) {
|
||||
suddenDeath();
|
||||
}
|
||||
|
||||
columnsToRemove.each(function() {
|
||||
score += $(this).column().filter('.mine').length;
|
||||
|
||||
$(this).column().addClass("removing");
|
||||
|
||||
// animation for top row + deletion of column
|
||||
$(this).animate({width: 0, borderRadius: 0, padding: 0}, "slow", function() {
|
||||
$(this).column().remove();
|
||||
|
||||
$ul.each(function() {
|
||||
$(this).append(newTile());
|
||||
});
|
||||
|
||||
refreshMineCounts();
|
||||
|
||||
// click blank tiles
|
||||
$('li.revealed:not(.mine, .removing):empty').mouseup();
|
||||
});
|
||||
|
||||
// then just animation for others
|
||||
$(this).column().animate({width: 0, borderRadius: 0, padding: 0}, "slow");
|
||||
});
|
||||
}
|
||||
|
||||
function refreshMineCounts() {
|
||||
$('ul:not(.removing) li.revealed:not(.mine, .removing)').each(function() {
|
||||
let mineCount = $(this).countMinesText();
|
||||
|
||||
$(this).text(mineCount);
|
||||
|
||||
// remove "mines1" etc
|
||||
$(this).attr(
|
||||
'class',
|
||||
$(this).attr('class').replace(
|
||||
/mines[0-9]/, "mines" + mineCount
|
||||
)
|
||||
);
|
||||
|
||||
$(this).removeClass("mines mines0");
|
||||
});
|
||||
}
|
||||
|
||||
function updateScore() {
|
||||
$('#score').text("Score: " + score);
|
||||
}
|
||||
|
||||
function isGameOver() {
|
||||
return $ul.has('.mine.revealed').length === gameBoardHeight
|
||||
&& $ul.first().children().filter(function() {
|
||||
return $(this).column().filter('.mine.revealed').length > 0;
|
||||
}).length === gameBoardWidth;
|
||||
}
|
||||
|
||||
function checkGameOver() {
|
||||
if (isGameOver()) {
|
||||
$gameOver.show();
|
||||
|
||||
let currentHiScore = 0;
|
||||
|
||||
if ($.isNumeric(localStorage.getItem("hiscore"))) {
|
||||
currentHiScore = parseInt(localStorage.getItem("hiscore"));
|
||||
}
|
||||
|
||||
if (score > currentHiScore) {
|
||||
currentHiScore = score;
|
||||
}
|
||||
|
||||
$('#gameOver .score').text(score);
|
||||
$('#gameOver .hiscore').text(currentHiScore);
|
||||
|
||||
// clear saved game
|
||||
localStorage.clear();
|
||||
localStorage.setItem("hiscore", currentHiScore);
|
||||
}
|
||||
}
|
||||
|
||||
function checkTutorial() {
|
||||
if ($tutorial.is(':hidden')) {
|
||||
return;
|
||||
}
|
||||
|
||||
let currentPage = $('#tutorial div:visible');
|
||||
|
||||
if (
|
||||
currentPage.find('.toFlag' ).length === currentPage.find('.toFlag.flagged' ).length
|
||||
&& currentPage.find('.toClick').length === currentPage.find('.toClick.revealed' ).length
|
||||
&& (currentPage.find('.flagAny' ).length === 0 || currentPage.find('.flagAny.flagged' ).length > 0)
|
||||
&& (currentPage.find('.clickAny').length === 0 || currentPage.find('.clickAny.revealed').length > 0)
|
||||
) {
|
||||
currentPage.nextPage();
|
||||
}
|
||||
}
|
||||
|
||||
$.fn.nextPage = function() {
|
||||
$('.gameBoard').html("");
|
||||
$(this).hide();
|
||||
|
||||
if ($(this).is(':last-child')) {
|
||||
// end of tutorial!
|
||||
$tutorial.hide();
|
||||
$('#setup, #game, #stats').show();
|
||||
$('#setup button.cancel').hide();
|
||||
|
||||
gameBoardWidth = 10;
|
||||
gameBoardHeight = determineGameBoardHeight();
|
||||
} else {
|
||||
$(this).next().show();
|
||||
$(this).next().children().show();
|
||||
|
||||
let nextPage = parseInt($(this).attr('id').replace("page", ""));
|
||||
|
||||
$(this).next().children('.gameBoard').html(tutorialPages[nextPage]);
|
||||
|
||||
if ($(this).next().children('.gameBoard').hasClass("clearRowsColumns")) {
|
||||
removeClearedRows();
|
||||
removeClearedColumns();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function updateMinesLeft() {
|
||||
// un-flagged mines - revealed mines - flagged not-mines
|
||||
let count = $('.mine:not(.flagged)').length - $('.mine.revealed').length - $('li:not(.mine).flagged').length;
|
||||
$('#mines').text("Mines left: " + count);
|
||||
}
|
||||
|
||||
function getAspectRatio() {
|
||||
return $(window).width() / $(window).height();
|
||||
}
|
||||
|
||||
function resizeToWindow() {
|
||||
if (!viewportSizingAvailable) {
|
||||
$('html').css('font-size', Math.min($(window).width(), $(window).height()) / 10);
|
||||
}
|
||||
}
|
||||
|
||||
$.fn.updateMineCount = function() {
|
||||
$(this).text(
|
||||
$(this).countMinesText
|
||||
);
|
||||
}
|
||||
|
||||
$.fn.rowScore = function() {
|
||||
return $(this).children('.mine').length;
|
||||
}
|
||||
|
||||
$.fn.rowAbove = function() {
|
||||
return $(this).parent('ul').prev();
|
||||
}
|
||||
|
||||
$.fn.rowBelow = function() {
|
||||
return $(this).parent('ul').next();
|
||||
}
|
||||
|
||||
$.fn.column = function() {
|
||||
let x = $(this).getX();
|
||||
|
||||
let column = $('');
|
||||
|
||||
$ul.each(function() {
|
||||
column = column.add($(this).children().eq(x));
|
||||
});
|
||||
|
||||
return column;
|
||||
}
|
||||
|
||||
window.oneColumnLeft = function() {
|
||||
return $ul.first().children().filter(function() {
|
||||
return $(this).column().filter('.mine:not(.revealed, .flagged)').length === 0;
|
||||
}).length >= (gameBoardWidth - 1)
|
||||
}
|
||||
|
||||
window.oneRowLeft = function() {
|
||||
return $ul.filter(function() {
|
||||
return $(this).children('.mine:not(.revealed, .flagged)').length === 0;
|
||||
}).length >= (gameBoardHeight - 1);
|
||||
}
|
||||
|
||||
window.isSuddenDeath = function() {
|
||||
return oneRowLeft() && oneColumnLeft();
|
||||
}
|
||||
|
||||
window.suddenDeath = function() {
|
||||
if (isSuddenDeath()) {
|
||||
mineChance += 0.03;
|
||||
|
||||
// don't want the chance to get to 100% because that's completely predictable
|
||||
// ⅔ chance is the most likely to create an unsolvable repeating pattern (xxoxxoxxo, etc.)
|
||||
if (mineChance > 0.666) {
|
||||
mineChance = 0.666;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$.fn.getX = function() {
|
||||
return $(this).index();
|
||||
}
|
||||
|
||||
$.fn.getY = function() {
|
||||
return $(this).parent('ul').index();
|
||||
}
|
||||
|
||||
$.fn.isMine = function() {
|
||||
return $(this).hasClass("mine");
|
||||
}
|
||||
|
||||
$.fn.countMinesAdjacent = function() {
|
||||
return $(this).getAdjacentTiles().filter('.mine').length;
|
||||
}
|
||||
|
||||
$.fn.getAdjacentTiles = function() {
|
||||
let adjacentTiles = $('');
|
||||
let x = $(this).getX();
|
||||
let y = $(this).getY();
|
||||
|
||||
if (y > 0) {
|
||||
let tileAbove = $(this).rowAbove().children().eq(x);
|
||||
|
||||
adjacentTiles = adjacentTiles.add(tileAbove.prev());
|
||||
adjacentTiles = adjacentTiles.add(tileAbove );
|
||||
adjacentTiles = adjacentTiles.add(tileAbove.next());
|
||||
}
|
||||
|
||||
adjacentTiles = adjacentTiles.add($(this).prev());
|
||||
adjacentTiles = adjacentTiles.add($(this).next());
|
||||
|
||||
if (y < (gameBoardHeight - 1)) {
|
||||
let tileBelow = $(this).rowBelow().children().eq(x);
|
||||
|
||||
adjacentTiles = adjacentTiles.add(tileBelow.prev());
|
||||
adjacentTiles = adjacentTiles.add(tileBelow );
|
||||
adjacentTiles = adjacentTiles.add(tileBelow.next());
|
||||
}
|
||||
|
||||
return adjacentTiles;
|
||||
}
|
||||
|
||||
$.fn.countMinesText = function() {
|
||||
return $(this).countMinesAdjacent().toString().replace("0", "");
|
||||
}
|
||||
|
||||
function detachTutorials() {
|
||||
// can't have several game boards in play at the same time
|
||||
// because it messes with mine counts, row counts, etc.
|
||||
tutorialPages = [];
|
||||
|
||||
$('#tutorial .gameBoard').each(function() {
|
||||
tutorialPages.push($(this).html());
|
||||
|
||||
$(this).html("");
|
||||
});
|
||||
}
|
||||
|
||||
$.fn.cracktro = function() {
|
||||
// trim long whitespaces to 1 space, remove line breaks, split to individual chars
|
||||
let text = $(this).html().replace(/ +/g, " ").replace(/(\r\n|\n|\r)/gm, "").replace("&", "&").split("");
|
||||
let cracktro = "";
|
||||
|
||||
for (let i = 0; i < text.length; i++) {
|
||||
cracktro += "<span>" + text[i].replace(" ", " ") + "</span>";
|
||||
}
|
||||
|
||||
$(this).html(cracktro);
|
||||
}
|
||||
|
||||
$('#gameOver button').on("click", function() {
|
||||
drawGameBoard();
|
||||
|
||||
$gameOver.hide();
|
||||
$buttonCancel.hide();
|
||||
$('button.start').removeAttr('style');
|
||||
$('#setup').show();
|
||||
});
|
||||
|
||||
$('button.reset').on("click", function() {
|
||||
// prompt user with setup screen
|
||||
$('#setup').show();
|
||||
$buttonCancel.show();
|
||||
$('button.start').css('left', '20vmin');
|
||||
});
|
||||
|
||||
$buttonCancel.on("click", function() {
|
||||
// prompt user with setup screen
|
||||
$('#setup').hide();
|
||||
$buttonCancel.hide();
|
||||
$('button.start').removeAttr('style');
|
||||
});
|
||||
|
||||
$('button.start').on("click", function() {
|
||||
drawGameBoard();
|
||||
|
||||
// reset stats
|
||||
firstClick = true;
|
||||
|
||||
// set difficulty
|
||||
if ($(this).hasClass("easy")) {
|
||||
mineChance = 0.13;
|
||||
} else if ($(this).hasClass("normal")) {
|
||||
mineChance = 0.2;
|
||||
} else if ($(this).hasClass("hard")) {
|
||||
mineChance = 0.285;
|
||||
}
|
||||
|
||||
score = 0;
|
||||
|
||||
updateScore();
|
||||
updateMinesLeft();
|
||||
|
||||
$('#setup').hide();
|
||||
});
|
||||
|
||||
$('button.tutorial').on("click", function() {
|
||||
$tutorial.show();
|
||||
$tutorial.siblings().hide();
|
||||
|
||||
const $page1 = $('#page1');
|
||||
|
||||
$page1.show();
|
||||
$('#page1 *').show();
|
||||
$page1.siblings('div').hide();
|
||||
|
||||
$('#page1 .gameBoard').html(tutorialPages[0]);
|
||||
|
||||
$game.html("");
|
||||
|
||||
gameBoardWidth = 5;
|
||||
gameBoardHeight = 5;
|
||||
});
|
||||
|
||||
$.fn.leftClick = function(automated) {
|
||||
if (!automated) automated = false;
|
||||
|
||||
// don't want first click to be a mine
|
||||
if (firstClick) {
|
||||
let x = $(this).getX();
|
||||
x = (x >= 1) ? x : 1;
|
||||
x = (x <= gameBoardWidth - 2) ? x : gameBoardWidth - 2;
|
||||
|
||||
let y = $(this).getY();
|
||||
y = (y >= 1) ? y : 1;
|
||||
y = (y <= gameBoardHeight - 2) ? y : gameBoardHeight - 2;
|
||||
|
||||
$ul.eq(y - 1).children().slice(x - 1).filter(':lt(3)').removeClass("mine");
|
||||
$ul.eq(y ).children().slice(x - 1).filter(':lt(3)').removeClass("mine");
|
||||
$ul.eq(y + 1).children().slice(x - 1).filter(':lt(3)').removeClass("mine");
|
||||
|
||||
firstClick = false;
|
||||
}
|
||||
|
||||
if ($(this).hasClass("flagged")) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($(this).isMine()) {
|
||||
$(this).addClass("revealed");
|
||||
} else if (!automated && parseInt($(this).text()) === $(this).getAdjacentTiles().filter('.flagged, .revealed.mine').length) {
|
||||
// already clicked; use middle click reveal functionality
|
||||
|
||||
// number of flags matches number of adjacent mines
|
||||
$(this).getAdjacentTiles().filter(':not(.flagged, .revealed)').mouseup();
|
||||
} else {
|
||||
$(this).addClass("revealed");
|
||||
$(this).updateMineCount();
|
||||
$(this).addClass("mines" + $(this).countMinesAdjacent());
|
||||
|
||||
// if no mines adjacent, cascade!
|
||||
if (parseInt($(this).countMinesAdjacent()) === 0) {
|
||||
$(this).getAdjacentTiles().filter(':not(.revealed)').mouseup();
|
||||
}
|
||||
}
|
||||
|
||||
firstClick = false;
|
||||
}
|
||||
|
||||
$.fn.middleClick = function() {
|
||||
// number of flags matches number of adjacent mines
|
||||
if (parseInt($(this).text()) === $(this).getAdjacentTiles().filter('.flagged, .revealed.mine').length) {
|
||||
$(this).getAdjacentTiles().filter(':not(.flagged, .revealed)').mouseup();
|
||||
}
|
||||
}
|
||||
|
||||
$.fn.rightClick = function() {
|
||||
if (!$(this).hasClass("revealed")) {
|
||||
$(this).toggleClass("flagged");
|
||||
}
|
||||
|
||||
clearTimeout(timeout);
|
||||
}
|
||||
|
||||
$(document).on("contextmenu", "body", function(event) {
|
||||
event.preventDefault();
|
||||
});
|
||||
|
||||
$(document).on("mousedown touchstart", "li", function() {
|
||||
let x = $(this).getX();
|
||||
let y = $(this).getY();
|
||||
|
||||
timeout = setTimeout(function() {
|
||||
$('ul:eq(' + y + ') li:eq(' + x + ')').rightClick();
|
||||
|
||||
mouseHeld = true;
|
||||
}, clickHoldMs);
|
||||
});
|
||||
|
||||
$(document).on("mouseleave", "li", function() {
|
||||
clearTimeout(timeout);
|
||||
});
|
||||
|
||||
$(document).on("mouseup touchend", "li", function(event) {
|
||||
event.preventDefault();
|
||||
|
||||
clearTimeout(timeout);
|
||||
|
||||
if (mouseHeld) {
|
||||
mouseHeld = false;
|
||||
|
||||
// rightClick has already been called in a callback, so nothing to do here
|
||||
} else {
|
||||
switch (event.which) {
|
||||
case 3:
|
||||
$(this).rightClick();
|
||||
break;
|
||||
case 2:
|
||||
$(this).middleClick();
|
||||
break;
|
||||
case 1:
|
||||
$(this).leftClick();
|
||||
break;
|
||||
default:
|
||||
$(this).leftClick(true); // automated
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
checkTutorial();
|
||||
|
||||
if ($tutorial.is(':hidden')) {
|
||||
removeClearedRows();
|
||||
removeClearedColumns();
|
||||
|
||||
saveGame();
|
||||
checkGameOver();
|
||||
|
||||
updateScore();
|
||||
updateMinesLeft();
|
||||
}
|
||||
});
|
||||
|
||||
$(window).resize(resizeToWindow);
|
||||
|
||||
resizeToWindow();
|
||||
detachTutorials();
|
||||
|
||||
// instantiate the game
|
||||
loadGame(); // loadGame will draw the game board if no saved game is found
|
||||
|
||||
$gameOver.hide();
|
||||
$tutorial.hide();
|
||||
$buttonCancel.hide();
|
||||
|
||||
$('#cracktro').cracktro();
|
||||
342
includes/style.css
Normal file
342
includes/style.css
Normal file
@@ -0,0 +1,342 @@
|
||||
@font-face {
|
||||
font-family: Helsinki;
|
||||
src: url('helsinki.eot');
|
||||
src: url('helsinki.eot?#iefix') format('embedded-opentype'),
|
||||
url('helsinki.woff2') format('woff2'),
|
||||
url('helsinki.woff') format('woff'),
|
||||
url('helsinki.ttf') format('truetype'),
|
||||
url('helsinki.svg#helsinkiregular') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
font-family: "Helsinki", sans-serif;
|
||||
}
|
||||
|
||||
html {
|
||||
background-color: #272822;
|
||||
margin: 0;
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
overflow: hidden;
|
||||
-moz-user-select: none;
|
||||
-webkit-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
body {
|
||||
height: 100vh;
|
||||
margin: 0 auto;
|
||||
width: 100vmin;
|
||||
}
|
||||
|
||||
@keyframes scrollLeft {
|
||||
from {left: 0;}
|
||||
to {left: -7200vmin;}
|
||||
}
|
||||
|
||||
@keyframes bounce {
|
||||
0% {top: 0; left: 0;}
|
||||
50% {top: 12vmin; left: 2vmin;}
|
||||
100% {top: 0; left: 0;}
|
||||
}
|
||||
|
||||
@keyframes rainbow {
|
||||
0% {color: #c6fe7a;}
|
||||
33% {color: #7ac5fe;}
|
||||
67% {color: #fe7ac6;}
|
||||
100% {color: #c6fe7a;} /* back to start */
|
||||
}
|
||||
|
||||
#cracktro {
|
||||
color: #c6fe7a;
|
||||
font-size: 6vmin;
|
||||
height: 20vmin;
|
||||
margin: 4vmin 0;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
width: 7200vmin;
|
||||
|
||||
position: relative;
|
||||
animation: scrollLeft 420s linear infinite;
|
||||
}
|
||||
|
||||
#cracktro span {
|
||||
margin-right: 1vmin;
|
||||
position: relative;
|
||||
animation: bounce 4s infinite ease-in-out,rainbow 5s infinite;
|
||||
text-shadow: 0.5vmin 0.5vmin black;
|
||||
}
|
||||
|
||||
#cracktro span:nth-child(10n+1) {
|
||||
animation-delay: 0.4s;
|
||||
}
|
||||
#cracktro span:nth-child(10n+2) {
|
||||
animation-delay: 0.8s;
|
||||
}
|
||||
#cracktro span:nth-child(10n+3) {
|
||||
animation-delay: 1.2s;
|
||||
}
|
||||
#cracktro span:nth-child(10n+4) {
|
||||
animation-delay: 1.6s;
|
||||
}
|
||||
#cracktro span:nth-child(10n+5) {
|
||||
animation-delay: 2s;
|
||||
}
|
||||
#cracktro span:nth-child(10n+6) {
|
||||
animation-delay: 2.4s;
|
||||
}
|
||||
#cracktro span:nth-child(10n+7) {
|
||||
animation-delay: 2.8s;
|
||||
}
|
||||
#cracktro span:nth-child(10n+8) {
|
||||
animation-delay: 3.2s;
|
||||
}
|
||||
#cracktro span:nth-child(10n+9) {
|
||||
animation-delay: 3.6s;
|
||||
}
|
||||
|
||||
#game {
|
||||
background-color: #1b1c17;
|
||||
float: left;
|
||||
margin: 0 auto;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#stats {
|
||||
height: 10vmin;
|
||||
width: 100vmin;
|
||||
float: left;
|
||||
|
||||
background: #768087;
|
||||
background: linear-gradient(to bottom, #768087 0%,#53595e 100%);
|
||||
}
|
||||
|
||||
#stats button {
|
||||
margin: 1vmin;
|
||||
float: right;
|
||||
font-size: 3vmin;
|
||||
border-radius: 2vmin;
|
||||
padding: 1.75vmin;
|
||||
box-shadow: 0.5vmin 0.5vmin 0 #000;
|
||||
border: 0.4vmin solid #454e52;
|
||||
position: relative;
|
||||
top: auto;
|
||||
left: auto;
|
||||
}
|
||||
|
||||
#stats div {
|
||||
float: left;
|
||||
font-size: 5.4vmin;
|
||||
margin: 2vmin;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
#gameOver, #setup, #tutorial {
|
||||
background-color: rgba(0, 0, 0, 0.6);
|
||||
width: 100vmin;
|
||||
height: 100vh;
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
#gameOver .score {
|
||||
margin-right: 12vmin;
|
||||
}
|
||||
|
||||
#setup h2 {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
#setup h2,
|
||||
#setup label {
|
||||
margin: 4vmin 3.5vmin;
|
||||
font-size: 6vmin;
|
||||
color: #fe7ac6;
|
||||
text-shadow: 0.5vmin 0.5vmin 0 #a4f4b4; /* x y blur-radius colour */
|
||||
}
|
||||
|
||||
#tutorial .gameBoard {
|
||||
float: left;
|
||||
padding: 5vmin;
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
#tutorial p {
|
||||
padding: 0 5vmin;
|
||||
}
|
||||
|
||||
.centre {
|
||||
clear: both;
|
||||
margin-top: 2vmin;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
button {
|
||||
font-size: 6vmin;
|
||||
border-radius: 2vmin;
|
||||
padding: 2vmin;
|
||||
margin: 0 auto;
|
||||
box-shadow: 1vmin 1vmin 0 #000;
|
||||
border: none;
|
||||
|
||||
background: #768087;
|
||||
background: linear-gradient(to bottom, #768087 0%,#53595e 100%);
|
||||
}
|
||||
|
||||
button.cancel {
|
||||
right: 20vmin;
|
||||
left: auto;
|
||||
}
|
||||
|
||||
button.donate {
|
||||
background: #ffefa7;
|
||||
background: linear-gradient(to bottom, #ffefa7 0%, #feae27 100%);
|
||||
}
|
||||
|
||||
button.twitter {
|
||||
background: #51aaea;
|
||||
background: linear-gradient(to bottom, #51aaea 0%,#3375a6 100%);
|
||||
}
|
||||
|
||||
form {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
h1, h2 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: #a4f4b4;
|
||||
font-size: 12vmin;
|
||||
margin-top: 6vmin;
|
||||
margin-bottom: 6vmin;
|
||||
text-shadow: 1vmin 1vmin 0 #fe7ac6; /* x y blur-radius colour */
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: #7ac5fe;
|
||||
font-size: 6vmin;
|
||||
}
|
||||
|
||||
ul {
|
||||
float: left;
|
||||
clear: both;
|
||||
height: 10vmin;
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
li {
|
||||
color: white;
|
||||
font-size: 8vmin;
|
||||
padding: 1vmin;
|
||||
padding-top: 0.5vmin;
|
||||
padding-bottom: 1.5vmin;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
float: left;
|
||||
height: 10vmin;
|
||||
width: 10vmin;
|
||||
background-color: #454e52;
|
||||
border-radius: 2vmin;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
li.revealed {
|
||||
background-color: #1b1c17;
|
||||
}
|
||||
|
||||
li:not(.revealed):hover {
|
||||
background-color: #a0a9af;
|
||||
}
|
||||
|
||||
li.flagged {
|
||||
background-color: #b5fe52;
|
||||
background-image: url("includes/images/flag.png");
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
li.flagged:hover {
|
||||
background-color: #c6fe7a;
|
||||
}
|
||||
|
||||
li.highlighted {
|
||||
border: 1vmin solid #fe7ac6;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
li.mine.revealed {
|
||||
background-color: #d23000;
|
||||
background-image: url("includes/images/skull.png");
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
li.mines1 {
|
||||
color: #c6fe7a;
|
||||
}
|
||||
|
||||
li.mines2 {
|
||||
color: #7ac5fe;
|
||||
}
|
||||
|
||||
li.mines3 {
|
||||
color: #fe7ac6;
|
||||
}
|
||||
|
||||
li.mines4 {
|
||||
color: #b17afe;
|
||||
}
|
||||
|
||||
li.mines5 {
|
||||
color: #feb27a;
|
||||
}
|
||||
|
||||
li.mines6 {
|
||||
color: #7afeb2;
|
||||
}
|
||||
|
||||
li.mines7 {
|
||||
color: #d74600;
|
||||
}
|
||||
|
||||
li.mines8 {
|
||||
color: #8c4600;
|
||||
}
|
||||
|
||||
p {
|
||||
color: #fff;
|
||||
font-size: 4.3vmin;
|
||||
padding: 0 10vmin;
|
||||
}
|
||||
|
||||
strong {
|
||||
color: #fe7ac6;
|
||||
}
|
||||
|
||||
table {
|
||||
color: #fe7ac6;
|
||||
font-size: 4vmin;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
th, td {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
td {
|
||||
color: #fff;
|
||||
font-size: 8vmin;
|
||||
}
|
||||
297
includes/tutorial.pug
Normal file
297
includes/tutorial.pug
Normal file
@@ -0,0 +1,297 @@
|
||||
<h2>tutorial</h2>
|
||||
|
||||
<div id="page1">
|
||||
<div class="gameBoard">
|
||||
<ul>
|
||||
<li class="mine"></li><li></li><li></li><li></li><li></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li></li><li class="revealed mines1">1</li><li class="revealed mines1">1</li><li class="mine toFlag"></li><li></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li></li><li class="revealed mines1">1</li><li class="revealed mines2 highlighted">2</li><li class="revealed mines2">2</li><li></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li></li><li class="revealed mines1">1</li><li class="revealed mines1">1</li><li class="mine toFlag"></li><li></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="mine"></li><li></li><li></li><li></li><li></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<p>take a look at the <strong>highlighted tile</strong>.</p>
|
||||
<p>the <strong>2</strong> means there are <strong>2 mines</strong> next to it.</p>
|
||||
<p>there are only <strong>2 tiles</strong> next to it, so we know they are both mines.</p>
|
||||
<p><strong>right-click</strong> or <strong>press and hold</strong> to flag these mines.</p>
|
||||
</div>
|
||||
|
||||
<div id="page2">
|
||||
<div class="gameBoard">
|
||||
<ul>
|
||||
<li class="mine"></li><li></li><li></li><li></li><li></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li></li><li class="revealed mines1">1</li><li class="revealed mines1">1</li><li class="mine flagged"></li><li class="toClick"></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li></li><li class="revealed mines1">1</li><li class="revealed mines2">2</li><li class="revealed mines2 highlighted">2</li><li class="toClick"></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li></li><li class="revealed mines1">1</li><li class="revealed mines1">1</li><li class="mine flagged"></li><li class="toClick"></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="mine"></li><li></li><li></li><li></li><li></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<p>take a look at the next <strong>highlighted tile</strong>.</p>
|
||||
<p>this also has <strong>2 mines</strong> next to it- but we already know which ones are mines.</p>
|
||||
<p><strong>click</strong> or <strong>tap</strong> the other adjacent tiles to clear them.</p>
|
||||
</div>
|
||||
|
||||
<div id="page3">
|
||||
<div class="gameBoard">
|
||||
<ul>
|
||||
<li class="mine"></li><li class="toClick"></li><li class="toClick"></li><li class="toClick"></li><li class="toClick"></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li></li><li class="revealed mines1">1</li><li class="revealed mines1">1</li><li class="mine flagged"></li><li class="revealed mines1">1</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li></li><li class="revealed mines1">1</li><li class="revealed mines2">2</li><li class="revealed mines2">2</li><li class="revealed mines2">2</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li></li><li class="revealed mines1">1</li><li class="revealed mines1">1</li><li class="mine flagged"></li><li class="revealed mines1">1</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="mine"></li><li class="toClick"></li><li class="toClick"></li><li class="toClick"></li><li class="toClick"></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<p>there are some more tiles that are definitely not mines. clear these too.</p>
|
||||
<p>if you <strong>click or tap</strong> a <strong>number</strong>, any unflagged adjacent tiles will be clicked.</p>
|
||||
<p>this can save you a lot of time!</p>
|
||||
</div>
|
||||
|
||||
<div id="page4">
|
||||
<div class="gameBoard">
|
||||
<ul>
|
||||
<li class="mine"></li><li class="revealed mines1 highlighted">1</li><li class="revealed mines1">1</li><li class="revealed mines1">1</li><li class="revealed mines1">1</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li></li><li class="revealed mines1 highlighted">1</li><li class="revealed mines1">1</li><li class="mine flagged"></li><li class="revealed mines1">1</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="toClick"></li><li class="revealed mines1">1</li><li class="revealed mines2">2</li><li class="revealed mines2">2</li><li class="revealed mines2">2</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li></li><li class="revealed mines1">1</li><li class="revealed mines1">1</li><li class="mine flagged"></li><li class="revealed mines1">1</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="mine"></li><li class="revealed mines1">1</li><li class="revealed mines1">1</li><li class="revealed mines1">1</li><li class="revealed mines1">1</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<p>look at these 2 <strong>highlighted</strong> tiles.</p>
|
||||
<p>the <strong>first</strong> has 1 mine next to it.</p>
|
||||
<p>the <strong>second</strong> also has 1 mine next to it.</p>
|
||||
<p>however, the <strong>second</strong> spans the same tiles as the <strong>first</strong>, plus one extra.</p>
|
||||
<p>the extra tile the <strong>second</strong> tile spans cannot be a mine. clear it!</p>
|
||||
</div>
|
||||
|
||||
<div id="page5">
|
||||
<div class="gameBoard">
|
||||
<ul>
|
||||
<li class="mine toFlag"></li><li class="revealed mines1">1</li><li class="revealed mines1">1</li><li class="revealed mines1">1</li><li class="revealed mines1">1</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="revealed mines1">1</li><li class="revealed mines1">1</li><li class="revealed mines1">1</li><li class="mine flagged"></li><li class="revealed mines1">1</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="revealed"></li><li class="revealed mines1">1</li><li class="revealed mines2">2</li><li class="revealed mines2">2</li><li class="revealed mines2">2</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="revealed mines1">1</li><li class="revealed mines1">1</li><li class="revealed mines1">1</li><li class="mine flagged"></li><li class="revealed mines1">1</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="mine toFlag"></li><li class="revealed mines1">1</li><li class="revealed mines1">1</li><li class="revealed mines1">1</li><li class="revealed mines1">1</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<p>when you clear a tile with <strong>no adjacent mines</strong>, the surrounding tiles will all clear as well.</p>
|
||||
<p>flag the <strong>remaining mines</strong>.</p>
|
||||
</div>
|
||||
|
||||
<div id="page6">
|
||||
<div class="gameBoard">
|
||||
<ul>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed mines2">2</li>
|
||||
<li class="mine"></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed mines3">3</li>
|
||||
<li class="mine"></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed mines3">3</li>
|
||||
<li class="mine toFlag highlighted"></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="revealed mines2">2</li>
|
||||
<li class="revealed mines3">3</li>
|
||||
<li class="revealed mines3">3</li>
|
||||
<li class="revealed mines4">4</li>
|
||||
<li class="mine"></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="mine"></li>
|
||||
<li class="mine"></li>
|
||||
<li class="mine"></li>
|
||||
<li class="mine"></li>
|
||||
<li class="revealed mines2">2</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<p>in this tutorial so far, the game board has been static.</p>
|
||||
<p>but in <strong>endless mines</strong>, <strong>rows</strong> and <strong>columns</strong> slide away when cleared!</p>
|
||||
<p>flag the <strong>highlighted</strong> tile to continue.</p>
|
||||
</div>
|
||||
|
||||
<div id="page7">
|
||||
<div class="gameBoard clearRowsColumns">
|
||||
<ul>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed mines2">2</li>
|
||||
<li class="mine"></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed mines3">3</li>
|
||||
<li class="mine"></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed mines3">3</li>
|
||||
<li class="mine flagged"></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="revealed mines2">2</li>
|
||||
<li class="revealed mines3">3</li>
|
||||
<li class="revealed mines3">3</li>
|
||||
<li class="revealed mines4">4</li>
|
||||
<li class="mine"></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="mine"></li>
|
||||
<li class="mine"></li>
|
||||
<li class="mine"></li>
|
||||
<li class="mine"></li>
|
||||
<li class="revealed mines2">2</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<p>in this tutorial so far, the game board has been static.</p>
|
||||
<p>but in <strong>endless mines</strong>, <strong>rows</strong> and <strong>columns</strong> slide away when cleared!</p>
|
||||
<p>flag the <strong>highlighted</strong> tile to continue.</p>
|
||||
</div>
|
||||
|
||||
<div id="page8">
|
||||
<div class="gameBoard">
|
||||
<ul>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed mines2">2</li>
|
||||
<li class="mine toFlag"></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed"></li>
|
||||
<li class="revealed mines3">3</li>
|
||||
<li class="mine toFlag"></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="revealed mines2">2</li>
|
||||
<li class="revealed mines3">3</li>
|
||||
<li class="revealed mines3">3</li>
|
||||
<li class="revealed mines4">4</li>
|
||||
<li class="mine toFlag"></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li class="mine toFlag"></li>
|
||||
<li class="mine toFlag"></li>
|
||||
<li class="mine toFlag"></li>
|
||||
<li class="mine toFlag"></li>
|
||||
<li class="revealed mines2">2</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li></li><li></li><li></li><li></li><li></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<p>a <strong>new row</strong> has appeared at the bottom.</p>
|
||||
<p>notice how you can't clear any columns now!</p>
|
||||
<br>
|
||||
<p><strong>flag</strong> the <strong>remaining mines</strong> to continue.</p>
|
||||
</div>
|
||||
|
||||
<div id="page9">
|
||||
<div class="gameBoard clearRowsColumns">
|
||||
<ul><li></li><li></li><li></li><li></li><li></li></ul>
|
||||
<ul><li class="mine"></li><li></li><li class="mine"></li><li class="mine"></li><li class="mine"></li></ul>
|
||||
<ul><li class="revealed mines2">2</li><li class="revealed mines4">4</li><li class="revealed mines4">4</li><li class="highlighted revealed mines7">7</li><li class="mine toFlag"></li></ul>
|
||||
<ul><li class="mine"></li><li></li><li class="mine"></li><li class="mine"></li><li class="mine"></li></ul>
|
||||
<ul><li></li><li></li><li></li><li></li><li></li></ul>
|
||||
</div>
|
||||
|
||||
<p>look at the <strong>highlighted</strong> tile.</p>
|
||||
<p>it has 7 adjacent mines and 7 adjacent tiles.</p>
|
||||
<p>flag the 7 <strong>adjacent mines</strong>.</p>
|
||||
</div>
|
||||
|
||||
<div id="page10">
|
||||
<div class="gameBoard clearRowsColumns">
|
||||
<ul><li></li><li></li><li></li><li></li><li></li></ul>
|
||||
<ul><li class="mine"></li><li></li><li class="mine"></li><li class="mine"></li><li class="mine"></li></ul>
|
||||
<ul><li class="revealed mines2">2</li><li class="revealed mines4">4</li><li class="revealed mines4">4</li><li class="revealed mines7">7</li><li class="mine highlighted flagged"></li></ul>
|
||||
<ul><li class="mine"></li><li></li><li class="mine"></li><li class="mine"></li><li class="mine"></li></ul>
|
||||
<ul><li></li><li></li><li></li><li></li><li></li></ul>
|
||||
</div>
|
||||
|
||||
<p>oh no! we've lost all our hints!</p>
|
||||
<p>sometimes it's best to wait before clearing a row.</p>
|
||||
<br>
|
||||
<p>the best we can do is guess now.</p>
|
||||
<p>click <strong>any tile</strong> to continue.</p>
|
||||
</div>
|
||||
|
||||
<div id="page11">
|
||||
<div class="gameBoard clearRowsColumns">
|
||||
<ul><li></li><li></li><li></li><li></li><li></li></ul>
|
||||
<ul><li></li><li class="revealed mines1">1</li><li></li><li class="revealed mines1">1</li><li></li></ul>
|
||||
<ul><li></li><li></li><li></li><li></li><li></li></ul>
|
||||
<ul><li></li><li class="revealed mines3">3</li><li class="revealed mines3">3</li><li class="revealed mines3">3</li><li></li></ul>
|
||||
<ul><li></li><li></li><li class="revealed mines3">3</li><li></li><li></li></ul>
|
||||
</div>
|
||||
|
||||
<p>sorry! I feel bad leading you into a trap like that!</p>
|
||||
<p>but I think mistakes are a good way to learn.</p>
|
||||
<p>this is the end of the <strong>tutorial</strong> for now. I hope it has helped in some way.</p>
|
||||
<p>have fun!</p>
|
||||
</div>
|
||||
Reference in New Issue
Block a user