diff --git a/astro.config.mjs b/astro.config.mjs index 156bebf21..3eb7f12a7 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -184,7 +184,12 @@ export default defineConfig({ // "https://vdo.ninja/?room=EuroPython_2025_Terrace_2B&hash=338a&do", }, integrations: [ - pagefind(), + pagefind({ + indexConfig: { + // Skip media pages from search results + excludeSelectors: ["html[data-pagefind-ignore]"], + }, + }), mdx(), svelte(), ...(fastBuild diff --git a/public/finaid-round1.svg b/public/finaid-round1.svg new file mode 100644 index 000000000..6d62f78b0 --- /dev/null +++ b/public/finaid-round1.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + diff --git a/public/finaid-round2.svg b/public/finaid-round2.svg new file mode 100644 index 000000000..722908c93 --- /dev/null +++ b/public/finaid-round2.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + diff --git a/public/theme/dragon.svg b/public/theme/dragon.svg index a1e9a7e4a..8cab51c7f 100644 --- a/public/theme/dragon.svg +++ b/public/theme/dragon.svg @@ -1,12 +1,12 @@ @@ -1385,7 +1385,7 @@ id="path1" clip-path="url(#clipPath339-0)" style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" - d="m 20.238281,-4.4257812 c -3.272637,0.2766091 -6.54814,0.5279514 -9.792615,1.0540383 -4.4330465,0.6162024 -8.8664315,1.2299729 -13.2991816,1.8483054 2.71626676,5.5636668 5.3411478,11.1730218 8.2507287,16.6397815 0.5858521,1.133012 1.1724976,2.265615 1.7570838,3.399281 1.8463541,0 3.6927081,0 5.5390621,0 -1.033198,4.161094 -1.857719,8.378089 -3.1736123,12.463453 -1.2281244,4.115642 -2.454723,8.23174 -3.6838092,12.347094 0.6763213,5.840828 1.2857418,11.69517 2.0058594,17.527344 0.9622262,3.479257 1.997098,6.948467 2.9140621,10.433984 0,2.592318 0,5.184635 0,7.776953 1.819201,2.989353 3.642212,5.97639 5.462891,8.964844 0.0248,3.476633 -0.04956,6.963086 0.03711,10.433594 0.677734,3.348309 1.355471,6.696609 2.033203,10.044919 1.303108,0.83389 2.68515,1.58608 3.938301,2.47187 0.775289,1.16306 1.481345,2.38309 2.567274,3.29152 0.907535,0.95349 1.930454,1.83882 2.766369,2.83462 2.06979,7.14889 4.137165,14.29848 6.208525,21.44691 2.370091,0.0252 4.760458,-0.051 7.117701,0.0385 0.593421,0.30812 1.388937,0.45647 1.855442,0.86493 0.642736,4.07044 1.371424,8.13392 1.960451,12.20872 0,0.92618 0,1.85235 0,2.77852 -3.74223,2.82937 -7.484092,5.65923 -11.226563,8.48828 0.175293,1.60948 0.269008,3.09562 0.427848,4.68881 0.471477,1.33428 1.981554,1.77969 3.1126,2.41269 2.261355,1.11434 4.569809,2.12965 6.879474,3.13874 0.355921,0.72714 0.987796,1.38267 0.806641,2.24921 -0.03869,1.66988 0.07822,3.36298 -0.05839,5.01824 -0.280299,0.90958 -0.553176,1.8292 -0.838089,2.73255 -1.677804,0.12113 -3.190541,0.96831 -4.770432,1.47793 -0.951406,0.32268 -1.858494,0.88691 -2.89949,0.72128 -3.214193,0 -6.428386,0 -9.642578,0 -2.495251,2.96772 -4.99088,5.93512 -7.484375,8.9043 -1.415313,4.65887 -2.83031,9.31784 -4.246094,13.97656 2.472656,0 4.945312,0 7.417969,0 0.859903,0.7333 1.873633,1.36912 2.639665,2.1619 0.266596,1.15567 0.533192,2.31134 0.799788,3.46701 -0.788636,1.23637 -1.60644,2.44973 -2.673805,3.4663 -1.841948,1.98897 -3.684009,3.97783 -5.525414,5.96729 2.748252,0.79552 5.496155,1.59224 8.244141,2.38867 0.870718,1.32066 1.665732,2.71081 2.581885,3.98978 0.566715,0.33239 1.023641,0.70823 0.691083,1.40353 -0.171068,1.0603 -0.342135,2.12061 -0.513203,3.18091 -3.875475,2.32311 -7.705667,4.71832 -11.477645,7.20618 -0.688381,0.44569 -1.376691,0.89149 -2.065324,1.33679 -0.15142,1.36404 -0.303901,2.72796 -0.457031,4.0918 2.01608,0.7694 4.032542,1.53779 6.048828,2.30664 0.91561,-0.29618 1.83203,-0.58985 2.748047,-0.88477 1.753686,1.21459 3.569011,2.36452 5.284585,3.61909 0.965712,1.28841 1.9314,2.57684 2.897056,3.86529 1.160946,-1.33842 2.321702,-2.67701 3.482422,-4.01563 0.874322,0.0475 1.827315,-0.0948 2.65272,0.0707 1.080862,1.15501 2.326002,2.17714 3.299248,3.4192 2.046446,3.15646 4.092348,6.31326 6.139829,9.46905 1.1779,-2.84238 2.355536,-5.68487 3.533203,-8.52734 2.302083,0 4.604166,-10e-6 6.90625,0 -0.320661,1.49677 -0.804069,2.97913 -1.02472,4.48477 0.100049,2.25968 0.331156,4.52258 0.348424,6.78034 -0.783032,7.35368 -1.566063,14.70737 -2.349095,22.06106 -1.399113,0.76297 -2.79763,1.52704 -4.197266,2.28906 -0.269734,1.82754 -0.540398,3.65494 -0.810546,5.48242 -1.423163,1.30551 -2.852536,2.60494 -4.051486,4.12656 -0.573469,0.66147 -1.146933,1.32295 -1.719999,1.98477 0.519868,1.49467 1.039063,2.98958 1.558594,4.48437 -2.336721,2.92606 -4.6538,5.86728 -6.908203,8.85743 0.909479,2.85441 1.816245,5.70968 2.724609,8.56445 -0.663411,1.01693 -1.326823,2.03385 -1.990234,3.05078 -1.726549,0.43105 -3.453222,0.86159 -5.179688,1.29297 -1.55934,1.54874 -3.119694,3.09646 -4.68164,4.64258 1.950081,1.84349 3.899556,3.68762 5.847656,5.5332 1.032021,0.27755 2.063791,0.55603 3.095703,0.83398 -0.276699,0.56414 -0.826506,1.07334 -0.554687,1.7461 0.246751,1.89127 0.492901,3.78263 0.740234,5.67383 1.905191,0.50293 3.788537,1.1589 5.705859,1.57226 1.108464,0 2.216927,0 3.325391,0 0.383061,0.66869 1.187273,1.21285 0.944916,2.06647 -0.05453,1.20962 -0.110004,2.41919 -0.163666,3.62884 1.194953,1.46254 2.562513,2.80095 3.439187,4.49302 0.730192,1.27894 1.684046,2.45419 2.017204,3.91717 0.264888,0.45716 0.209445,1.35875 0.70064,1.50192 0.725651,0 1.451302,0 2.176953,0 0.342277,0.56545 0.307565,1.16848 0.139711,1.7848 -0.596489,3.51762 -1.189318,7.03587 -1.788148,10.55309 0.855148,1.40423 1.632469,2.87558 2.533111,4.24028 1.175082,0.94035 2.350884,1.8798 3.527436,2.81832 1.747793,-1.88427 3.382202,-3.88183 5.203125,-5.69336 0.431199,-0.42085 1.057084,0.10717 1.569721,0.11284 1.849547,0.46643 3.756499,0.8703 5.546171,1.46929 0.913072,1.07396 2.126524,1.8029 3.420851,2.32669 0.840605,0.34471 1.64184,0.88549 2.516772,1.08141 1.095443,0 2.190886,0 3.286329,0 1.479045,1.53111 3.15639,2.85022 4.736328,4.27344 0.785023,-2.15283 1.462287,-4.35784 2.315768,-6.4777 0.775117,-1.29631 1.696515,-2.55103 2.38345,-3.8723 0.02717,-1.905 -0.05452,-3.83327 0.0409,-5.72368 0.805818,-1.8688 1.726333,-3.71295 2.463011,-5.59663 0,-2.25313 0,-4.50625 0,-6.75938 -2.801189,2.05502 -5.602792,4.10948 -8.404297,6.16407 -0.55794,-0.0681 -1.40302,0.46122 -1.738906,-0.069 -0.373809,-0.59897 -0.748322,-1.19749 -1.122422,-1.79628 -1.468319,0.81471 -2.936261,1.6301 -4.404297,2.44531 -0.521626,-0.22842 -1.349868,-0.10024 -1.672026,-0.56065 -0.487796,-1.28838 -1.165113,-2.52554 -1.224163,-3.92976 -0.132623,-1.09284 -0.38148,-2.19331 -0.443578,-3.28153 0.211085,-0.74003 0.421892,-1.48014 0.632736,-2.22024 -0.891909,-0.5736 -1.783843,-1.14716 -2.675782,-1.72071 0.545231,-1.80151 1.093369,-3.60212 1.667969,-5.39453 2.76888,-0.0514 5.53776,-0.10286 8.306641,-0.15429 0.675386,0.51331 1.197332,1.3288 2.119008,1.35618 1.228554,0.24266 2.456967,0.60734 3.685631,0.77637 1.464115,-0.3265 2.928882,-0.65009 4.392626,-0.97826 0.359891,0.0636 0.650103,0.97136 0.983932,1.35069 0.942145,1.64585 2.15946,3.09991 3.307084,4.60244 2.203695,1.10107 4.407763,2.2014 6.611323,3.30273 0,-3.23502 0,-6.47005 0,-9.70508 -1.31787,-2.52606 -2.5995,-5.07129 -3.96484,-7.57226 0.15578,-1.13224 0.44389,-2.276 0.51784,-3.40106 -0.64149,-1.72853 -1.149452,-3.52544 -1.873352,-5.21159 -1.148389,-1.65605 -2.414971,-3.23973 -3.253876,-5.08528 -0.533023,-1.01224 -1.066112,-2.02445 -1.599595,-3.03645 -1.489642,0.39171 -2.979178,0.78381 -4.46875,1.17578 -1.050097,-0.53229 -2.072866,-1.14437 -3.255859,-1.33984 -0.659444,-0.10411 -1.362009,-0.3828 -2.004373,-0.34098 -0.667135,0.42258 -1.333075,0.84703 -1.999534,1.27067 -1.070478,-0.26119 -2.279547,-0.43511 -3.201172,-1.19141 -1.908411,-1.2305 -3.550864,-2.94187 -5.751953,-3.66211 -1.010086,-0.52172 -2.071779,-1.0369 -2.978515,-1.69336 -0.394591,-1.57153 -1.001887,-3.13515 -0.853516,-4.78086 0.0549,-0.69417 -0.108879,-1.49766 0.07999,-2.12485 0.988953,-0.74173 1.977467,-1.48404 2.966883,-2.22515 0.06825,-1.75453 0.135373,-3.50911 0.203125,-5.26367 1.30578,-1.51095 2.481,-3.14951 4.074029,-4.37973 0.660846,-0.65752 1.504379,-1.17967 2.054158,-1.9193 0.533221,-1.16936 1.064643,-2.33954 1.596422,-3.50956 -0.688774,-0.69078 -1.378453,-1.38066 -2.068359,-2.07031 0.729747,-1.35394 1.378146,-2.77229 2.157935,-4.08659 0.916646,-0.83474 1.962474,-1.58686 2.799542,-2.47237 0.344555,-1.20133 0.751901,-2.60023 1.077679,-3.67347 0.509523,-1.50986 0.930458,-3.06819 1.495383,-4.54775 2.196835,-2.67952 4.488517,-5.28528 6.458632,-8.14119 0.806447,-1.11396 1.566208,-2.26924 2.656735,-3.13178 0.513865,-0.48164 1.027729,-0.96327 1.541594,-1.4449 0.80028,0.74351 1.522551,1.63778 2.370089,2.29008 2.229806,0.37414 4.460356,0.74379 6.690456,1.11617 0.74409,0.93589 1.32361,2.03823 2.40781,2.6286 0.69704,0.4496 1.34249,1.0862 2.07069,1.42294 1.48644,-0.13453 2.97269,-0.27115 4.459,-0.40701 -0.0406,-1.76106 0.0813,-3.54293 -0.0605,-5.29102 -0.73571,-2.71806 -1.32488,-5.48177 -2.15533,-8.17032 -0.23078,-0.62617 -0.46156,-1.25234 -0.69233,-1.8785 4.56372,0.55311 9.13583,1.04564 13.6675,1.83003 0.89541,0.18353 1.89694,0.10289 2.58457,0.80367 1.51928,1.09887 3.09141,2.12548 4.68123,3.1115 0.72252,0.69715 1.44535,1.39398 2.16826,2.09073 2.64488,-2.1015 5.34759,-4.13934 7.95603,-6.28107 1.98942,-2.13144 4.10461,-4.16727 5.88967,-6.47479 1.0062,-1.31213 2.57389,-2.06551 3.64751,-3.32689 1.85926,-1.81343 3.66028,-3.7151 5.55562,-5.47389 1.15783,-0.47209 2.33208,-0.91919 3.58789,-1.01758 1.62581,-0.31836 3.24001,-0.69079 4.85742,-1.04882 0.74707,-2.07131 1.58949,-4.12533 2.27735,-6.20742 0,-1.38073 0,-2.76146 0,-4.14219 1.20403,-0.24808 2.422,-0.66701 3.61752,-0.81074 1.15481,0.48711 2.30931,0.97495 3.46451,1.46113 1.45066,-0.9883 2.96469,-1.90877 4.37493,-2.94097 0.60701,-0.68169 1.01157,-1.59559 1.75302,-2.12183 0.94173,-0.51943 1.88398,-1.03791 2.82517,-1.5583 0.85985,-2.56429 1.7147,-5.13025 2.57227,-7.69531 -1.02119,-1.20162 -2.03978,-2.40544 -3.06055,-3.60742 -0.88038,-0.0451 -1.82517,0.0888 -2.66691,-0.0637 -1.48056,-1.23723 -2.62009,-2.82879 -3.95176,-4.22074 -0.39747,-0.74286 -0.87886,0.40416 -1.31909,0.62438 -0.85178,0.79787 -1.70429,1.59497 -2.55638,2.39251 -0.17625,-0.56927 -0.35411,-1.13804 -0.53125,-1.70703 -1.42893,-0.11593 -2.85805,-0.22942 -4.28711,-0.34375 -1.8854,1.16728 -3.83772,2.25858 -5.68222,3.47172 -2.09023,2.76378 -4.2826,5.45569 -6.30644,8.26627 -1.26169,1.89457 -2.43371,3.86205 -3.75115,5.71129 -2.71051,2.64378 -5.3457,5.36927 -8.10425,7.96092 -1.48818,1.27668 -2.97636,2.55336 -4.46453,3.83003 -4.98508,0.71575 -9.9612,1.49782 -14.96485,2.07618 -0.68951,-1.07227 -1.55108,-2.26 -2.91607,-2.4133 -2.71803,-0.92051 -5.37958,-1.99826 -8.05658,-3.03006 -8.2e-4,-1.1314 -0.16645,-2.3103 -0.0667,-3.41271 0.89239,-1.21861 1.62742,-2.57385 2.62337,-3.70253 0.85912,-0.64976 1.57218,-1.62086 2.66952,-1.85225 1.61333,-0.53043 2.98943,-1.64992 4.68566,-1.92298 0.96546,-0.24376 1.96399,0.19307 2.94401,0.24895 1.22753,0.10355 2.46291,0.60074 3.67925,0.2028 1.94206,-0.37273 3.88378,-0.74727 5.82625,-1.11792 0.1488,-4.13948 0.0896,-8.29041 0.53669,-12.41329 0.48661,-5.52632 0.90322,-11.06823 1.43352,-16.58481 0.92001,-2.4341 1.77207,-4.90517 2.73424,-7.31634 1.416,-1.94134 2.9425,-3.8326 4.28985,-5.80509 0.6736,-3.23735 1.28354,-6.49705 1.99962,-9.71993 1.19733,-2.39596 2.39467,-4.79192 3.59201,-7.18789 1.02925,-0.73832 2.17756,-1.34746 3.13603,-2.16253 0.63197,-0.93985 1.65158,-1.7213 1.82626,-2.8885 0.0799,-1.92675 -0.44551,-3.82767 -0.63341,-5.72462 0.48335,-2.16522 0.83634,-4.37567 1.40123,-6.51259 0.56067,-1.12071 1.12133,-2.24143 1.682,-3.36215 1.94373,0.34729 3.8661,0.80519 5.80078,1.19922 1.61873,-0.78015 3.23942,-1.55625 4.85742,-2.33789 0.59638,-1.74013 1.34495,-3.43867 1.84708,-5.20445 0.51579,-2.7769 1.03155,-5.55382 1.54746,-8.33071 -1.63153,0.36192 -3.26305,0.72385 -4.89454,1.08594 0.28577,-1.99731 0.57082,-3.99472 0.85547,-5.99219 -2.11486,0.77641 -4.23017,1.55159 -6.3457,2.32618 -1.89951,-0.60663 -3.77572,-1.30287 -5.7584,-1.58975 -1.21336,-0.24283 -2.42677,-0.48537 -3.64004,-0.72861 -1.94791,2.11164 -3.79734,4.32195 -5.80782,6.37089 -1.60467,1.50588 -3.39886,2.82707 -4.73378,4.5953 -1.19865,1.49844 -2.63786,2.82654 -3.49419,4.56735 -0.33378,0.5715 -0.66754,1.143 -1.00132,1.7145 1.21845,0.95455 2.39753,1.96179 3.64258,2.88086 -0.88588,3.76294 -1.7199,7.54405 -2.63807,11.29566 -1.56124,3.16029 -3.35265,6.2212 -4.98592,9.29603 -0.1517,0.69662 -0.50555,0.56348 -1.02445,0.32823 -1.97626,-0.45162 -3.94564,-0.97796 -5.92607,-1.38423 -1.56434,0.0685 -3.12871,0.13636 -4.69307,0.20455 -0.31549,1.5214 -0.63028,3.04295 -0.94531,4.56445 -0.58863,0.64322 -0.2958,-0.44489 -0.36133,-0.83437 0.0629,-1.3575 0.10976,-2.74576 0.28316,-4.08105 0.71399,-1.21038 1.33019,-2.51381 2.10434,-3.66693 1.15932,-0.72608 2.31935,-1.45102 3.47969,-2.17546 -1.25902,-1.50063 -2.51928,-3.00022 -3.7793,-4.5 -0.0421,-1.51782 -0.20587,-3.05846 -0.17227,-4.56209 1.05002,-2.43065 2.20153,-4.8236 3.20937,-7.26848 1.0077,-3.45713 1.92072,-6.94743 3.00718,-10.37824 0.72722,-1.79784 1.48356,-3.58376 2.23111,-5.37322 2.97526,0 5.95053,0 8.92579,0 0.76224,-2.79051 1.59743,-5.57085 2.31445,-8.36758 0.0324,-2.52952 -0.0649,-5.06962 0.0487,-7.59251 0.47104,-2.72327 0.85336,-5.47779 1.37946,-8.18166 1.62952,-2.83585 3.18634,-5.731879 4.86111,-8.530283 1.9635,-1.67645 3.95103,-3.341836 5.9764,-4.931486 0.94368,-1.185615 1.64385,-2.612044 1.93555,-4.103515 -0.13777,-1.761704 -0.88504,-3.382831 -1.45446,-5.028418 -0.18208,-0.842275 -0.71024,-1.698439 -0.27862,-2.544671 0.30662,-1.374386 0.90928,-2.758662 0.74234,-4.18416 -0.73033,-2.917494 -1.226,-5.893266 -2.19093,-8.748551 -0.26171,-0.878275 -0.52342,-1.75655 -0.78513,-2.634825 0.83721,-1.350074 1.63456,-2.746648 2.00961,-4.301874 0.94169,-2.66552 2.10304,-5.250834 2.84006,-7.986034 0.31804,-0.834043 0.43298,-1.78311 0.87557,-2.546619 0.80513,-0.898908 1.61024,-1.797833 2.41539,-2.696723 -0.17401,-1.751396 -0.44811,-3.50794 -0.56619,-5.255366 0.30526,-1.254071 0.61053,-2.508142 0.9158,-3.762213 1.07953,-0.693722 2.11227,-1.550043 3.221,-2.142282 1.92143,0.0018 3.82159,0.393391 5.74366,0.233812 0.556,0.07031 1.27908,-0.305845 1.59974,0.312879 0.90637,0.98056 1.88211,1.89415 2.83599,2.828013 1.76093,-1.422753 3.61083,-2.755219 5.31678,-4.233948 1.86998,-2.287143 3.61565,-4.675047 5.62658,-6.844177 0.91758,-2.454252 1.75277,-4.95611 2.72082,-7.381046 1.46956,-1.808932 3.05011,-3.518881 4.66394,-5.199032 0.001,-5.4908853 0.006,-10.9817702 0.006,-16.472656 -5.3138,8.99e-5 -10.6276,0.0036 -15.9414,0.00391 -0.95898,3.5134957 -1.9166,7.0273632 -2.875,10.5410157 -0.69011,0.5670573 -1.38021,1.1341146 -2.07032,1.7011719 -1.83917,-1.2401931 -3.77364,-2.3447242 -5.62355,-3.5749343 -0.55315,-0.402215 -1.12196,-0.7573927 -1.83359,-0.6914709 -2.8289,-0.2359324 -5.65528,-0.5024872 -8.48817,-0.6867198 -0.81477,-1.4565816 -0.95787,-3.1631389 -1.44431,-4.74191194 -0.17021,-0.66742105 -0.34051,-1.33482036 -0.51077,-2.00222876 -5.67955,-0.018695 -11.36173,0.037466 -17.03963,-0.028183 -6.08642,-0.4290359 -12.1726,-0.8616025 -18.25919,-1.2882231 -0.64148,5.6246803 -1.27778,11.2499514 -1.91602,16.8750001 1.18747,3.087039 2.24836,6.241133 3.74414,9.195312 0.99097,1.397464 2.50505,2.304649 3.8457,3.333985 0.85178,0.246306 1.79798,0.341467 2.59265,0.67894 0.94937,1.124991 1.85054,2.289969 2.66321,3.510513 0.81318,0.923248 1.72071,1.761944 2.29338,2.868608 0.29124,0.6003 1.01856,1.114506 0.69112,1.836954 -0.73605,3.94766 -1.40128,7.913272 -2.18154,11.849728 -0.80779,2.363909 -1.49901,4.776425 -2.3792,7.110148 -1.85447,3.621449 -3.71164,7.241525 -5.56438,10.863859 0.76242,2.739281 1.52752,5.477814 2.29101,8.216797 -0.81758,2.185733 -1.51816,4.424285 -2.4085,6.577174 -1.17237,2.180043 -2.44498,4.328655 -3.55544,6.528098 -0.20105,1.56418 -0.29395,3.166097 -0.56495,4.706503 -3.21042,5.227455 -6.42084,10.454914 -9.63126,15.682364 -1.87126,0.46446 -3.85303,0.70355 -5.57617,1.60938 -1.52353,1.07998 -3.31533,1.73473 -4.987512,2.55927 -1.05406,0.44184 -2.045161,1.12478 -3.230506,1.09771 -1.394776,0.15796 -2.789553,0.31592 -4.18433,0.47388 -0.268181,-0.69038 -0.537103,-1.38047 -0.806641,-2.07032 -1.276705,-0.19561 -2.591594,-0.28224 -3.844759,-0.54292 -0.672486,-0.48634 -1.515659,-0.80078 -2.082146,-1.39388 -0.849307,-1.34915 -1.700282,-2.69724 -2.547704,-4.04757 -2.284892,0.27915 -4.583991,0.46059 -6.84375,0.91406 -3.95687,-3.77146 -7.853243,-7.607728 -11.805443,-11.382594 -2.152374,-1.860362 -4.257424,-3.79517 -6.438848,-5.609846 -1.174599,-0.499744 -2.350244,-0.997031 -3.52524,-1.495841 -0.08908,-1.339486 -0.426703,-2.6876 -0.04815,-4.010853 0.392774,-2.288731 0.810369,-4.574364 0.900231,-6.899908 0.06371,-0.825964 0.127272,-1.651939 0.19089,-2.47791 -1.190054,-0.20732 -2.380166,-0.414303 -3.570312,-0.621094 C 50.420436,71.33342 50.162685,69.906555 49.642658,68.602698 48.116975,66.348915 46.529884,64.126459 45.04257,61.85308 44.517538,60.270761 43.769786,58.744901 43.651291,57.059524 43.290512,54.5859 42.838366,52.110755 42.534233,49.638075 c 0.317311,-1.440613 0.468462,-2.942434 0.889141,-4.344968 0.52457,-1.003452 1.222566,-1.973812 1.640651,-2.997577 -0.581476,-4.098724 -1.13644,-8.206169 -1.770889,-12.293884 0.07416,-1.818908 0.148326,-3.637816 0.222489,-5.456724 0.614583,-0.614583 1.229167,-1.229167 1.84375,-1.84375 2.258427,1.063229 4.517506,2.125073 6.775391,3.189453 2.10466,-2.130802 4.156444,-4.32259 6.297289,-6.412204 1.365899,-0.985998 2.70612,-2.052504 4.281522,-2.678775 1.454936,-0.842097 2.802512,-1.908897 3.923142,-3.153162 0.526786,-0.302071 1.110489,-0.615151 1.371974,0.148234 1.080542,1.316605 1.992992,2.83288 3.367378,3.866375 0.993488,0.544152 2.186479,0.142727 3.270355,0.21757 1.002577,-0.07232 2.064969,0.01412 3.030972,-0.156348 1.701598,-1.33916 3.348491,-2.788422 5.082117,-4.061353 2.135986,-0.532171 4.323468,-0.921782 6.407824,-1.623297 C 90.74422,11.009892 91.799727,9.378398 93.02136,7.9785409 93.358215,7.4710007 94.024704,7.0673079 93.783944,6.3777875 93.605598,3.5370377 93.428001,0.69624044 93.25,-2.1445312 85.979522,-1.2242245 78.717849,-0.22863269 71.4375,0.609375 67.038047,0.23431149 62.650569,-0.30551124 58.255859,-0.70703125 54.543368,-0.54748878 50.826306,-0.32454647 47.116664,-0.20454028 41.99302,-1.1720774 36.883676,-2.2315773 31.751058,-3.1414122 27.943981,-3.5651867 24.137635,-4.0453045 20.330107,-4.4342142 Z" + d="m 20.238281,-4.4257812 c -3.272637,0.2766091 -6.54814,0.5279514 -9.792615,1.0540383 -4.4330465,0.6162024 -8.8664315,1.2299729 -13.2991816,1.8483054 2.71626676,5.5636668 5.3411478,11.1730218 8.2507287,16.6397815 0.5858521,1.133012 1.1724976,2.265615 1.7570838,3.399281 1.8463541,0 3.6927081,0 5.5390621,0 -1.033198,4.161094 -1.857719,8.378089 -3.1736123,12.463453 -1.2281244,4.115642 -2.454723,8.23174 -3.6838092,12.347094 0.6763213,5.840828 1.2857418,11.69517 2.0058594,17.527344 0.9622262,3.479257 1.997098,6.948467 2.9140621,10.433984 0,2.592318 0,5.184635 0,7.776953 1.819201,2.989353 3.642212,5.97639 5.462891,8.964844 0.0248,3.476633 -0.04956,6.963086 0.03711,10.433594 0.677734,3.348309 1.355471,6.696609 2.033203,10.044919 1.303108,0.83389 2.68515,1.58608 3.938301,2.47187 0.775289,1.16306 1.481345,2.38309 2.567274,3.29152 0.907535,0.95349 1.930454,1.83882 2.766369,2.83462 2.06979,7.14889 4.137165,14.29848 6.208525,21.44691 2.370091,0.0252 4.760458,-0.051 7.117701,0.0385 0.593421,0.30812 1.388937,0.45647 1.855442,0.86493 0.642736,4.07044 1.371424,8.13392 1.960451,12.20872 0,0.92618 0,1.85235 0,2.77852 -3.74223,2.82937 -7.484092,5.65923 -11.226563,8.48828 0.175293,1.60948 0.269008,3.09562 0.427848,4.68881 0.471477,1.33428 1.981554,1.77969 3.1126,2.41269 2.261355,1.11434 4.569809,2.12965 6.879474,3.13874 0.355921,0.72714 0.987796,1.38267 0.806641,2.24921 -0.03869,1.66988 0.07822,3.36298 -0.05839,5.01824 -0.280299,0.90958 -0.553176,1.8292 -0.838089,2.73255 -1.677804,0.12113 -3.190541,0.96831 -4.770432,1.47793 -0.951406,0.32268 -1.858494,0.88691 -2.89949,0.72128 -3.214193,0 -6.428386,0 -9.642578,0 -2.495251,2.96772 -4.99088,5.93512 -7.484375,8.9043 -1.415313,4.65887 -2.83031,9.31784 -4.246094,13.97656 2.472656,0 4.945312,0 7.417969,0 0.859903,0.7333 1.873633,1.36912 2.639665,2.1619 0.266596,1.15567 0.533192,2.31134 0.799788,3.46701 -0.788636,1.23637 -1.60644,2.44973 -2.673805,3.4663 -1.841948,1.98897 -3.684009,3.97783 -5.525414,5.96729 2.748252,0.79552 5.496155,1.59224 8.244141,2.38867 0.870718,1.32066 1.665732,2.71081 2.581885,3.98978 0.566715,0.33239 1.023641,0.70823 0.691083,1.40353 -0.171068,1.0603 -0.342135,2.12061 -0.513203,3.18091 -3.875475,2.32311 -7.705667,4.71832 -11.477645,7.20618 -0.688381,0.44569 -1.376691,0.89149 -2.065324,1.33679 -0.15142,1.36404 -0.303901,2.72796 -0.457031,4.0918 2.01608,0.7694 4.032542,1.53779 6.048828,2.30664 0.91561,-0.29618 1.83203,-0.58985 2.748047,-0.88477 1.753686,1.21459 3.569011,2.36452 5.284585,3.61909 0.965712,1.28841 1.9314,2.57684 2.897056,3.86529 1.160946,-1.33842 2.321702,-2.67701 3.482422,-4.01563 0.874322,0.0475 1.827315,-0.0948 2.65272,0.0707 1.080862,1.15501 2.326002,2.17714 3.299248,3.4192 2.046446,3.15646 4.092348,6.31326 6.139829,9.46905 1.1779,-2.84238 2.355536,-5.68487 3.533203,-8.52734 2.302083,0 4.604166,-10e-6 6.90625,0 -0.320661,1.49677 -0.804069,2.97913 -1.02472,4.48477 0.100049,2.25968 0.331156,4.52258 0.348424,6.78034 -0.783032,7.35368 -1.566063,14.70737 -2.349095,22.06106 -1.399113,0.76297 -2.79763,1.52704 -4.197266,2.28906 -0.269734,1.82754 -0.540398,3.65494 -0.810546,5.48242 -1.423163,1.30551 -2.852536,2.60494 -4.051486,4.12656 -0.573469,0.66147 -1.146933,1.32295 -1.719999,1.98477 0.519868,1.49467 1.039063,2.98958 1.558594,4.48437 -2.336721,2.92606 -4.6538,5.86728 -6.908203,8.85743 0.909479,2.85441 1.816245,5.70968 2.724609,8.56445 -0.663411,1.01693 -1.326823,2.03385 -1.990234,3.05078 -1.726549,0.43105 -3.453222,0.86159 -5.179688,1.29297 -1.55934,1.54874 -3.119694,3.09646 -4.68164,4.64258 1.950081,1.84349 3.899556,3.68762 5.847656,5.5332 1.032021,0.27755 2.063791,0.55603 3.095703,0.83398 -0.276699,0.56414 -0.826506,1.07334 -0.554687,1.7461 0.246751,1.89127 0.492901,3.78263 0.740234,5.67383 1.905191,0.50293 3.788537,1.1589 5.705859,1.57226 1.108464,0 2.216927,0 3.325391,0 0.383061,0.66869 1.187273,1.21285 0.944916,2.06647 -0.05453,1.20962 -0.110004,2.41919 -0.163666,3.62884 1.194953,1.46254 2.562513,2.80095 3.439187,4.49302 0.730192,1.27894 1.684046,2.45419 2.017204,3.91717 0.264888,0.45716 0.209445,1.35875 0.70064,1.50192 0.725651,0 1.451302,0 2.176953,0 0.342277,0.56545 0.307565,1.16848 0.139711,1.7848 -0.596489,3.51762 -1.189318,7.03587 -1.788148,10.55309 0.855148,1.40423 1.632469,2.87558 2.533111,4.24028 1.175082,0.94035 2.350884,1.8798 3.527436,2.81832 1.747793,-1.88427 3.382202,-3.88183 5.203125,-5.69336 0.431199,-0.42085 1.057084,0.10717 1.569721,0.11284 1.849547,0.46643 3.756499,0.8703 5.546171,1.46929 0.913072,1.07396 2.126524,1.8029 3.420851,2.32669 0.840605,0.34471 1.64184,0.88549 2.516772,1.08141 1.095443,0 2.190886,0 3.286329,0 1.479045,1.53111 3.15639,2.85022 4.736328,4.27344 0.785023,-2.15283 1.462287,-4.35784 2.315768,-6.4777 0.775117,-1.29631 1.696515,-2.55103 2.38345,-3.8723 0.02717,-1.905 -0.05452,-3.83327 0.0409,-5.72368 0.805818,-1.8688 1.726333,-3.71295 2.463011,-5.59663 0,-2.25313 0,-4.50625 0,-6.75938 -2.801189,2.05502 -5.602792,4.10948 -8.404297,6.16407 -0.55794,-0.0681 -1.40302,0.46122 -1.738906,-0.069 -0.373809,-0.59897 -0.748322,-1.19749 -1.122422,-1.79628 -1.468319,0.81471 -2.936261,1.6301 -4.404297,2.44531 -0.521626,-0.22842 -1.349868,-0.10024 -1.672026,-0.56065 -0.487796,-1.28838 -1.165113,-2.52554 -1.224163,-3.92976 -0.132623,-1.09284 -0.38148,-2.19331 -0.443578,-3.28153 0.211085,-0.74003 0.421892,-1.48014 0.632736,-2.22024 -0.891909,-0.5736 -1.783843,-1.14716 -2.675782,-1.72071 0.545231,-1.80151 1.093369,-3.60212 1.667969,-5.39453 2.76888,-0.0514 5.53776,-0.10286 8.306641,-0.15429 0.675386,0.51331 1.197332,1.3288 2.119008,1.35618 1.228554,0.24266 2.456967,0.60734 3.685631,0.77637 1.464115,-0.3265 2.928882,-0.65009 4.392626,-0.97826 0.359891,0.0636 0.650103,0.97136 0.983932,1.35069 0.942145,1.64585 2.15946,3.09991 3.307084,4.60244 2.203695,1.10107 4.407763,2.2014 6.611323,3.30273 0,-3.23502 0,-6.47005 0,-9.70508 -1.31787,-2.52606 -2.5995,-5.07129 -3.96484,-7.57226 0.15578,-1.13224 0.44389,-2.276 0.51784,-3.40106 -0.64149,-1.72853 -1.149452,-3.52544 -1.873352,-5.21159 -1.148389,-1.65605 -2.414971,-3.23973 -3.253876,-5.08528 -0.533023,-1.01224 -1.066112,-2.02445 -1.599595,-3.03645 -1.489642,0.39171 -2.979178,0.78381 -4.46875,1.17578 -1.050097,-0.53229 -2.072866,-1.14437 -3.255859,-1.33984 -0.659444,-0.10411 -1.362009,-0.3828 -2.004373,-0.34098 -0.667135,0.42258 -1.333075,0.84703 -1.999534,1.27067 -1.070478,-0.26119 -2.279547,-0.43511 -3.201172,-1.19141 -1.908411,-1.2305 -3.550864,-2.94187 -5.751953,-3.66211 -1.010086,-0.52172 -2.071779,-1.0369 -2.978515,-1.69336 -0.394591,-1.57153 -1.001887,-3.13515 -0.853516,-4.78086 0.0549,-0.69417 -0.108879,-1.49766 0.07999,-2.12485 0.988953,-0.74173 1.977467,-1.48404 2.966883,-2.22515 0.06825,-1.75453 0.135373,-3.50911 0.203125,-5.26367 1.30578,-1.51095 2.481,-3.14951 4.074029,-4.37973 0.660846,-0.65752 1.504379,-1.17967 2.054158,-1.9193 0.533221,-1.16936 1.064643,-2.33954 1.596422,-3.50956 -0.688774,-0.69078 -1.378453,-1.38066 -2.068359,-2.07031 0.729747,-1.35394 1.378146,-2.77229 2.157935,-4.08659 0.916646,-0.83474 1.962474,-1.58686 2.799542,-2.47237 0.344555,-1.20133 0.751901,-2.60023 1.077679,-3.67347 0.509523,-1.50986 0.930458,-3.06819 1.495383,-4.54775 2.196835,-2.67952 4.488517,-5.28528 6.458632,-8.14119 0.806447,-1.11396 1.566208,-2.26924 2.656735,-3.13178 0.513865,-0.48164 1.027729,-0.96327 1.541594,-1.4449 0.80028,0.74351 1.522551,1.63778 2.370089,2.29008 2.229808,0.37414 4.460358,0.74379 6.690458,1.11617 0.74409,0.93589 1.32361,2.03823 2.40781,2.6286 0.69704,0.4496 1.34249,1.0862 2.07069,1.42294 1.48644,-0.13453 2.97269,-0.27115 4.459,-0.40701 -0.0406,-1.76106 0.0813,-3.54293 -0.0605,-5.29102 -0.73571,-2.71806 -1.32488,-5.48177 -2.15533,-8.17032 -0.23078,-0.62617 -0.46156,-1.25234 -0.69233,-1.8785 4.56372,0.55311 9.13583,1.04564 13.6675,1.83003 0.89541,0.18353 1.89694,0.10289 2.58457,0.80367 1.51928,1.09887 3.09141,2.12548 4.68123,3.1115 0.72252,0.69715 1.44535,1.39398 2.16826,2.09073 2.64488,-2.1015 5.34759,-4.13934 7.95603,-6.28107 1.98942,-2.13144 4.10461,-4.16727 5.88967,-6.47479 1.0062,-1.31213 2.57389,-2.06551 3.64751,-3.32689 1.85926,-1.81343 3.66028,-3.7151 5.55562,-5.47389 1.15783,-0.47209 2.33208,-0.91919 3.58789,-1.01758 1.62581,-0.31836 3.24001,-0.69079 4.85742,-1.04882 0.74707,-2.07131 1.58949,-4.12533 2.27735,-6.20742 0,-1.38073 0,-2.76146 0,-4.14219 1.20403,-0.24808 2.422,-0.66701 3.61752,-0.81074 1.15481,0.48711 2.30931,0.97495 3.46451,1.46113 1.45066,-0.9883 2.96469,-1.90877 4.37493,-2.94097 0.60701,-0.68169 1.01157,-1.59559 1.75302,-2.12183 0.94173,-0.51943 1.88398,-1.03791 2.82517,-1.5583 0.85985,-2.56429 1.7147,-5.13025 2.57227,-7.69531 -1.02119,-1.20162 -2.03978,-2.40544 -3.06055,-3.60742 -0.88038,-0.0451 -1.82517,0.0888 -2.66691,-0.0637 -1.48056,-1.23723 -2.62009,-2.82879 -3.95176,-4.22074 -0.39747,-0.74286 -0.87886,0.40416 -1.31909,0.62438 -0.85178,0.79787 -1.70429,1.59497 -2.55638,2.39251 -0.17625,-0.56927 -0.35411,-1.13804 -0.53125,-1.70703 -1.42893,-0.11593 -2.85805,-0.22942 -4.28711,-0.34375 -1.8854,1.16728 -3.83772,2.25858 -5.68222,3.47172 -2.09023,2.76378 -4.2826,5.45569 -6.30644,8.26627 -1.26169,1.89457 -2.43371,3.86205 -3.75115,5.71129 -2.71051,2.64378 -5.3457,5.36927 -8.10425,7.96092 -1.48818,1.27668 -2.97636,2.55336 -4.46453,3.83003 -4.98508,0.71575 -9.9612,1.49782 -14.96485,2.07618 -0.68951,-1.07227 -1.55108,-2.26 -2.91607,-2.4133 -2.71803,-0.92051 -5.37958,-1.99826 -8.05658,-3.03006 -8.2e-4,-1.1314 -0.16645,-2.3103 -0.0667,-3.41271 0.89239,-1.21861 1.62742,-2.57385 2.62337,-3.70253 0.85912,-0.64976 1.57218,-1.62086 2.66952,-1.85225 1.61333,-0.53043 2.98943,-1.64992 4.68566,-1.92298 0.96546,-0.24376 1.96399,0.19307 2.94401,0.24895 1.22753,0.10355 2.46291,0.60074 3.67925,0.2028 1.94206,-0.37273 3.88378,-0.74727 5.82625,-1.11792 0.1488,-4.13948 0.0896,-8.29041 0.53669,-12.41329 0.48661,-5.52632 0.90322,-11.06823 1.43352,-16.58481 0.92001,-2.4341 1.77207,-4.90517 2.73424,-7.31634 1.416,-1.94134 2.9425,-3.8326 4.28985,-5.80509 0.6736,-3.23735 1.28354,-6.49705 1.99962,-9.71993 1.19733,-2.39596 2.39467,-4.79192 3.59201,-7.18789 1.02925,-0.73832 2.17756,-1.34746 3.13603,-2.16253 0.63197,-0.93985 1.65158,-1.7213 1.82626,-2.8885 0.0799,-1.92675 -0.44551,-3.82767 -0.63341,-5.72462 0.48335,-2.16522 0.83634,-4.37567 1.40123,-6.51259 0.56067,-1.12071 1.12133,-2.24143 1.682,-3.36215 1.94373,0.34729 3.8661,0.80519 5.80078,1.19922 1.61873,-0.78015 3.23942,-1.55625 4.85742,-2.33789 0.59638,-1.74013 1.34495,-3.43867 1.84708,-5.20445 0.51579,-2.7769 1.03155,-5.55382 1.54746,-8.33071 -1.63153,0.36192 -3.26305,0.72385 -4.89454,1.08594 0.28577,-1.99731 0.57082,-3.99472 0.85547,-5.99219 -2.11486,0.77641 -4.23017,1.55159 -6.3457,2.32618 -1.89951,-0.60663 -3.77572,-1.30287 -5.7584,-1.58975 -1.21336,-0.24283 -2.42677,-0.48537 -3.64004,-0.72861 -1.94791,2.11164 -3.79734,4.32195 -5.80782,6.37089 -1.60467,1.50588 -3.39886,2.82707 -4.73378,4.5953 -1.19865,1.49844 -2.63786,2.82654 -3.49419,4.56735 -0.33378,0.5715 -0.66754,1.143 -1.00132,1.7145 1.21845,0.95455 2.39753,1.96179 3.64258,2.88086 -0.88588,3.76294 -1.7199,7.54405 -2.63807,11.29566 -1.56124,3.16029 -3.35265,6.2212 -4.98592,9.29603 -0.1517,0.69662 -0.50555,0.56348 -1.02445,0.32823 -1.97626,-0.45162 -3.94564,-0.97796 -5.92607,-1.38423 -1.56434,0.0685 -3.12871,0.13636 -4.69307,0.20455 -0.31549,1.5214 -0.63028,3.04295 -0.94531,4.56445 -0.58863,0.64322 -0.2958,-0.44489 -0.36133,-0.83437 0.0629,-1.3575 0.10976,-2.74576 0.28316,-4.08105 0.71399,-1.21038 1.33019,-2.51381 2.10434,-3.66693 1.15932,-0.72608 2.31935,-1.45102 3.47969,-2.17546 -1.25902,-1.50063 -2.51928,-3.00022 -3.7793,-4.5 -0.0421,-1.51782 -0.20587,-3.05846 -0.17227,-4.56209 1.05002,-2.43065 2.20153,-4.8236 3.20937,-7.26848 1.0077,-3.45713 1.92072,-6.94743 3.00718,-10.37824 0.72722,-1.79784 1.48356,-3.58376 2.23111,-5.37322 2.97526,0 5.95053,0 8.92579,0 0.76224,-2.79051 1.59743,-5.57085 2.31445,-8.36758 0.0324,-2.52952 -0.0649,-5.06962 0.0487,-7.59251 0.47104,-2.72327 0.85336,-5.47779 1.37946,-8.18166 1.62952,-2.83585 3.18634,-5.731879 4.86111,-8.530283 1.9635,-1.67645 3.95103,-3.341836 5.9764,-4.931486 0.94368,-1.185615 1.64385,-2.612044 1.93555,-4.103515 -0.13777,-1.761704 -0.88504,-3.382831 -1.45446,-5.028418 -0.18208,-0.842275 -0.71024,-1.698439 -0.27862,-2.544671 0.30662,-1.374386 0.90928,-2.758662 0.74234,-4.18416 -0.73033,-2.917494 -1.226,-5.893266 -2.19093,-8.748551 -0.26171,-0.878275 -0.52342,-1.75655 -0.78513,-2.634825 0.83721,-1.350074 1.63456,-2.746648 2.00961,-4.301874 0.94169,-2.66552 2.10304,-5.250834 2.84006,-7.986034 0.31804,-0.834043 0.43298,-1.78311 0.87557,-2.546619 0.80513,-0.898908 1.61024,-1.797833 2.41539,-2.696723 -0.17401,-1.751396 -0.44811,-3.50794 -0.56619,-5.255366 0.30526,-1.254071 0.61053,-2.508142 0.9158,-3.762213 1.07953,-0.693722 2.11227,-1.550043 3.221,-2.142282 1.92143,0.0018 3.82159,0.393391 5.74366,0.233812 0.556,0.07031 1.27908,-0.305845 1.59974,0.312879 0.90637,0.98056 1.88211,1.89415 2.83599,2.828013 1.76093,-1.422753 3.61083,-2.755219 5.31678,-4.233948 1.86998,-2.287143 3.61565,-4.675047 5.62658,-6.844177 0.91758,-2.454252 1.75277,-4.95611 2.72082,-7.381046 1.46956,-1.808932 3.05011,-3.518881 4.66394,-5.199032 0.001,-5.4908853 0.006,-10.9817702 0.006,-16.472656 -5.3138,8.99e-5 -10.6276,0.0036 -15.9414,0.00391 -0.95898,3.5134957 -1.9166,7.0273632 -2.875,10.5410157 -0.69011,0.5670573 -1.38021,1.1341146 -2.07032,1.7011719 -1.83917,-1.2401931 -3.77364,-2.3447242 -5.62355,-3.5749343 -0.55315,-0.402215 -1.12196,-0.7573927 -1.83359,-0.6914709 -2.8289,-0.2359324 -5.65528,-0.5024872 -8.48817,-0.6867198 -0.81477,-1.4565816 -0.95787,-3.1631389 -1.44431,-4.74191194 -0.17021,-0.66742105 -0.34051,-1.33482036 -0.51077,-2.00222876 -5.67955,-0.018695 -11.36173,0.037466 -17.03963,-0.028183 -6.08642,-0.4290359 -12.1726,-0.8616025 -18.25919,-1.2882231 -0.64148,5.6246803 -1.27778,11.2499514 -1.91602,16.8750002 1.18747,3.087039 2.24836,6.241133 3.74414,9.195312 0.99097,1.397464 2.50505,2.304649 3.8457,3.333985 0.85178,0.246306 1.79798,0.341467 2.59265,0.67894 0.94937,1.124991 1.85054,2.289969 2.66321,3.510513 0.81318,0.923248 1.72071,1.761944 2.29338,2.868608 0.29124,0.6003 1.01856,1.114506 0.69112,1.836954 -0.73605,3.94766 -1.40128,7.913272 -2.18154,11.849728 -0.80779,2.363909 -1.49901,4.776425 -2.3792,7.110148 -1.85447,3.621449 -3.71164,7.241525 -5.56438,10.863859 0.76242,2.739281 1.52752,5.477814 2.29101,8.216797 -0.81758,2.185733 -1.51816,4.424285 -2.4085,6.577174 -1.17237,2.180043 -2.44498,4.328655 -3.55544,6.528098 -0.20105,1.56418 -0.29395,3.166097 -0.56495,4.706503 -3.21042,5.227455 -6.42084,10.45491 -9.63126,15.68236 -1.87126,0.46446 -3.85303,0.70355 -5.57617,1.60938 -1.52353,1.07998 -3.31533,1.73473 -4.987514,2.55927 -1.05406,0.44184 -2.045161,1.12478 -3.230506,1.09771 -1.394776,0.15796 -2.789553,0.31592 -4.18433,0.47388 -0.268181,-0.69038 -0.537103,-1.38047 -0.806641,-2.07032 -1.276705,-0.19561 -2.591594,-0.28224 -3.844759,-0.54292 -0.672486,-0.48634 -1.515659,-0.80078 -2.082146,-1.39388 -0.849307,-1.34915 -1.700282,-2.69724 -2.547704,-4.04757 -2.284892,0.27915 -4.583991,0.46059 -6.84375,0.91406 -3.95687,-3.77146 -7.853243,-7.607724 -11.805443,-11.38259 -2.152374,-1.860362 -4.257424,-3.79517 -6.438848,-5.609846 -1.174599,-0.499744 -2.350244,-0.997031 -3.52524,-1.495841 -0.08908,-1.339486 -0.426703,-2.6876 -0.04815,-4.010853 0.392774,-2.288731 0.810369,-4.574364 0.900231,-6.899908 0.06371,-0.825964 0.127272,-1.651939 0.19089,-2.47791 -1.190054,-0.20732 -2.380166,-0.414303 -3.570312,-0.621094 -0.421632,-1.350168 -0.679383,-2.777033 -1.19941,-4.08089 -1.525683,-2.253783 -3.112774,-4.476239 -4.600088,-6.749618 -0.525032,-1.582319 -1.272784,-3.108179 -1.391279,-4.793556 -0.360779,-2.473624 -0.812925,-4.948769 -1.117058,-7.421449 0.317311,-1.440613 0.468462,-2.942434 0.889141,-4.344968 0.52457,-1.003452 1.222566,-1.973812 1.640651,-2.997577 -0.581476,-4.098724 -1.13644,-8.206169 -1.770889,-12.293884 0.07416,-1.818908 0.148326,-3.637816 0.222489,-5.456724 0.614583,-0.614583 1.229167,-1.229167 1.84375,-1.84375 2.258427,1.063229 4.517506,2.125073 6.775391,3.189453 2.10466,-2.130802 4.156444,-4.32259 6.297289,-6.412204 1.365899,-0.985998 2.70612,-2.052504 4.281522,-2.678775 1.454936,-0.842097 2.802512,-1.908897 3.923142,-3.153162 0.526786,-0.302071 1.110489,-0.615151 1.371974,0.148234 1.080542,1.316605 1.992992,2.83288 3.367378,3.866375 0.993488,0.544152 2.186479,0.142727 3.270355,0.21757 1.002577,-0.07232 2.064969,0.01412 3.030972,-0.156348 1.701598,-1.33916 3.348491,-2.788422 5.082117,-4.061353 2.135986,-0.532171 4.323468,-0.921782 6.407824,-1.623297 C 90.74422,11.009892 91.799727,9.378398 93.02136,7.9785409 93.358215,7.4710007 94.024704,7.0673079 93.783944,6.3777875 93.605598,3.5370377 93.428001,0.69624044 93.25,-2.1445312 85.979522,-1.2242245 78.717849,-0.22863269 71.4375,0.609375 67.038047,0.23431149 62.650569,-0.30551124 58.255859,-0.70703125 54.543368,-0.54748878 50.826306,-0.32454647 47.116664,-0.20454028 41.99302,-1.1720774 36.883676,-2.2315773 31.751058,-3.1414122 27.943981,-3.5651867 24.137635,-4.0453045 20.330107,-4.4342142 Z" transform="matrix(1.3333333,0,0,-1.3333333,5631.6867,890.17733)" /> - { - TERMS.map((item) => ( - - {item.label} - {item.external && ( - 342206227 - )} - - )) - } + { + TERMS.map((item) => ( + + {item.label} + {item.external && ( + ↗ + )} + + )) + } + { SOCIALS && ( @@ -100,9 +101,6 @@ const gitVersion = __GIT_VERSION__; class="opacity-60 pb-4" /> ) - } - /> - ) } diff --git a/src/components/Header.astro b/src/components/Header.astro index 8f501cb2d..8cc38b96c 100644 --- a/src/components/Header.astro +++ b/src/components/Header.astro @@ -4,6 +4,56 @@ import Search from "@components/Search.astro"; import ThemeToggle from "@components/ThemeToggle.astro"; import { NAV_MENUS, type NavMenu } from "@data/nav"; +import { getCollection } from "astro:content"; +import { readFileSync } from "fs"; + +// Parse redirect paths from astro.config.mjs at build time +const configText = readFileSync("astro.config.mjs", "utf-8"); +const redirectMatch = configText.match(/redirects:\s*{([^}]+)}/s); +const redirectPathsFromConfig: string[] = redirectMatch + ? [...redirectMatch[1].matchAll(/"([^"]+)"\s*:/g)].map((m) => m[1].replace(/^\//, "").replace(/\/$/, "")) + : []; + +// Build list of existing content page slugs to filter nav +const existingPages = await getCollection("pages"); +const existingSlugs = new Set(existingPages.map((p) => p.id)); + +// Standalone .astro pages that always exist regardless of content collection +const alwaysExist = new Set([ + "sessions", "speakers", "schedule", "posters", "talks", "tutorials", + "sprints", "jobs", "sponsors", "community-partners", "media-partners", +]); + +function linkExists(url: string): boolean { + if (url.startsWith("http")) return true; + const slug = url.replace(/^\//, "").replace(/\/$/, ""); + if (!slug) return true; + if (alwaysExist.has(slug)) return true; + const redirectPaths = [...new Set(redirectPathsFromConfig)]; + if (redirectPaths.includes(slug)) return true; + // Check exact match in content pages + if (existingSlugs.has(slug)) return true; + // Check if slug is the short form of a nested page (e.g. "mentorship" from "programme/mentorship") + for (const existing of existingSlugs) { + if (existing.endsWith("/" + slug) || existing === slug) return true; + } + return false; +} + +function sectionHasItems(section: { items: { url: string }[] }): boolean { + return section.items.some((item) => linkExists(item.url)); +} + +// Filter nav menus to only show links that point to existing pages +const activeMenus = NAV_MENUS.map((menu) => ({ + ...menu, + sections: menu.sections + ?.map((section) => ({ + ...section, + items: section.items.filter((item) => linkExists(item.url)), + })) + .filter((section) => section.items.length > 0), +})).filter((menu) => !menu.sections || menu.sections.length > 0); --- @@ -20,7 +70,7 @@ import { NAV_MENUS, type NavMenu } from "@data/nav"; Search - {NAV_MENUS.map((menu: NavMenu) => ( + {activeMenus.map((menu: NavMenu) => ( menu.sections ? ( @@ -130,16 +180,17 @@ nav { text-transform: uppercase; letter-spacing: 0.07em; color: var(--color-text-primary); - text-decoration: none; + text-decoration: underline; + text-decoration-color: transparent; border-radius: 2px; - transition: color 0.15s, background 0.15s; + transition: color 0.15s, text-decoration-color 0.15s; } .nav-item > a:hover, .nav-item:hover > a, .nav-item > a:focus { - color: var(--color-text); - background: var(--color-border); + color: var(--color-accent-themed); + text-decoration-color: var(--color-accent-themed); } .nav-arrow { diff --git a/src/components/Search.astro b/src/components/Search.astro index f62c968e2..944daa999 100644 --- a/src/components/Search.astro +++ b/src/components/Search.astro @@ -106,6 +106,7 @@ import SearchComponent from "astro-pagefind/components/Search"; display: block; padding: 0.8rem 1.4rem; border-bottom: 1px solid var(--color-surface-faint); + position: relative; text-decoration: none; cursor: pointer; transition: background 0.12s; @@ -115,6 +116,12 @@ import SearchComponent from "astro-pagefind/components/Search"; border-bottom: none; } +.search-modal-content :global(.pagefind-ui__result-link::after) { + content: ""; + position: absolute; + inset: 0; +} + .search-modal-content :global(.pagefind-ui__result:hover), .search-modal-content :global(.pagefind-ui__result[data-selected]) { background: oklch(0.708 0.153 259.2 / 0.1); /* #64a0ff */ diff --git a/src/components/schedule/day.astro b/src/components/schedule/day.astro index d0973b927..3518a2832 100644 --- a/src/components/schedule/day.astro +++ b/src/components/schedule/day.astro @@ -62,8 +62,9 @@ type ScheduleSession = { endTime: string; duration: number; sessionType?: string | undefined; - type: string; + tyee: string; rooms: string[]; + snug?: string; }; // hack for posters :) @@ -90,6 +91,7 @@ const sessions = day.data.events endTime, sessionType: event.session_type?.toLowerCase(), type: event.event_type, + slug: event.slug ? event.slug : "#", }; if (session.sessionType === "poster") { @@ -404,6 +406,7 @@ const dateText = format(date, "eeee d MMMM"); {(sessionsByTime[slot.startTime] ?? []) .sort(sortSessionByRooms) + .filter((session) => session.sessionType !== "poster") .map((session) => { const style = getSessionStyle(session); @@ -428,7 +431,7 @@ const dateText = format(date, "eeee d MMMM"); ); } - return ; + return ; })} {postersByTime[slot.startTime] && ( @@ -443,11 +446,11 @@ const dateText = format(date, "eeee d MMMM"); > Posters ({posters[0].rooms.join(", ")}) - + {posters.map((session) => { const style = {}; - return ; + return ; })} @@ -656,6 +659,7 @@ const dateText = format(date, "eeee d MMMM"); :global(.break) { grid-row: var(--start) / var(--end); grid-column: var(--col-start) / var(--col-end); + display: block; } :global(.ep-break.day-end) { @@ -689,6 +693,11 @@ const dateText = format(date, "eeee d MMMM"); display: none; } + .posters:hover, + .posters:focus-within { + z-index: 15; + } + .posters { grid-column: 3 / 6; position: relative; @@ -699,7 +708,10 @@ const dateText = format(date, "eeee d MMMM"); z-index: 5; } - .posters h2 { + .poster-cards { + } + + .posters h2 { font-family: 'Inter Tight', system-ui, sans-serif; font-weight: 700; font-size: 0.8rem; @@ -720,6 +732,7 @@ const dateText = format(date, "eeee d MMMM"); .posters :global(.session.poster), .posters :global(.ep-session.poster) { display: flex; + height: 100%; } } diff --git a/src/components/schedule/session.astro b/src/components/schedule/session.astro index a4ebe66bf..21f32ac12 100644 --- a/src/components/schedule/session.astro +++ b/src/components/schedule/session.astro @@ -31,6 +31,7 @@ const sessionUrl = session.slug ? `/session/${session.slug}` : "#"; {session.rooms[0]}} {durationLabel && {durationLabel}} - {levelLabel && {levelLabel}} + + {session.sessionType === "poster" && Poster} + {levelLabel && {levelLabel}} + diff --git a/src/components/ui/Section2.astro b/src/components/ui/Section2.astro index 63ee8b003..514888fa9 100644 --- a/src/components/ui/Section2.astro +++ b/src/components/ui/Section2.astro @@ -27,14 +27,13 @@ const bg: Record = { diff --git a/src/components/ui/Title.astro b/src/components/ui/Title.astro index 393c54281..f70cff782 100644 --- a/src/components/ui/Title.astro +++ b/src/components/ui/Title.astro @@ -28,6 +28,7 @@ const { id, subtitle, color = "var(--color-text)", anchorColor = color } = Astro .sec-title .sec-anchor { position: absolute; margin-left: 0.2em; + margin-top: 2rem; font-size: 0.5em; opacity: 0; transition: opacity 0.2s ease; diff --git a/src/content.config.ts b/src/content.config.ts index ef63a2497..93fd268dd 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -53,12 +53,12 @@ const keynoters = defineCollection({ bio: z.string().optional(), image: image().optional(), order: z.number(), - homepage: z.string().url({}).optional(), - mastodon_url: z.string().url({}).optional(), - bluesky_url: z.string().url({}).optional(), - twitter_url: z.string().url({}).optional(), - linkedin_url: z.string().url({}).optional(), - github_url: z.string().url({}).optional(), + homepage: z.url().optional(), + mastodon_url: z.url().optional(), + bluesky_url: z.url().optional(), + twitter_url: z.url().optional(), + linkedin_url: z.url().optional(), + github_url: z.url().optional(), }), }); @@ -200,13 +200,13 @@ const speakers = defineCollection({ submissions: z.array(reference("sessions")), affiliation: z.string().nullable(), homepage: z.string().nullable(), - gitx_url: z.string().url({}).nullable().optional(), - linkedin_url: z.string().url({}).nullable(), - mastodon_url: z.string().url({}).nullable(), - bluesky_url: z.string().url({}).nullable().optional(), - twitter_url: z.string().url({}).nullable(), - discord: z.string().url({}).nullable().optional(), - tiktok: z.string().url({}).nullable().optional(), + gitx_url: z.url().nullable().optional(), + linkedin_url: z.url().nullable(), + mastodon_url: z.url().nullable(), + bluesky_url: z.url().nullable().optional(), + twitter_url: z.url().nullable(), + discord: z.url().nullable().optional(), + tiktok: z.url().nullable().optional(), }), }); @@ -235,9 +235,7 @@ const sessions = defineCollection({ state: z.enum(["confirmed"]).optional().nullable(), tweet: z.string(), resources: z - .array( - z.object({ resource: z.string().url({}), description: z.string() }) - ) + .array(z.object({ resource: z.url(), description: z.string() })) .nullable(), duration: z.string(), level: z.enum(["beginner", "intermediate", "advanced"]), @@ -245,8 +243,8 @@ const sessions = defineCollection({ room: z.string().nullable(), start: z.string().nullable(), end: z.string().nullable(), - website_url: z.string().url({}), - youtube_url: z.string().url({}).nullable(), + website_url: z.url(), + youtube_url: z.url().nullable(), sessions_in_parallel: z.array(z.string()).nullable(), sessions_after: z.array(z.string()).nullable(), sessions_before: z.array(z.string()).nullable(), @@ -333,24 +331,24 @@ const sponsors = defineCollection({ loader: glob({ pattern: "*/index.md", base: "./src/content/sponsors" }), schema: z.object({ name: z.string(), - url: z.string().url({}), + url: z.url(), tier: z.string(), location: z.string().optional(), industry: z.string().optional(), description: z.string().optional(), socials: z .object({ - linkedin: z.string().url({}).optional().nullable(), - blog: z.string().url({}).optional().nullable(), - github: z.string().url({}).optional().nullable(), - mastodon: z.string().url({}).optional().nullable(), - bluesky: z.string().url({}).optional().nullable(), - twitter: z.string().url({}).optional().nullable(), - instagram: z.string().url({}).optional().nullable(), - discord: z.string().url({}).optional().nullable(), - facebook: z.string().url({}).optional().nullable(), - youtube: z.string().url({}).optional().nullable(), - tiktok: z.string().url({}).optional().nullable(), + linkedin: z.url().optional().nullable(), + blog: z.url().optional().nullable(), + github: z.url().optional().nullable(), + mastodon: z.url().optional().nullable(), + bluesky: z.url().optional().nullable(), + twitter: z.url().optional().nullable(), + instagram: z.url().optional().nullable(), + discord: z.url().optional().nullable(), + facebook: z.url().optional().nullable(), + youtube: z.url().optional().nullable(), + tiktok: z.url().optional().nullable(), }) .optional(), event_name: z.string().optional().nullable(), @@ -380,7 +378,7 @@ const jobs = defineCollection({ stack: z.array(z.string()).optional().nullable(), benefits: z.array(z.string()).nullable(), description2: z.string().optional().nullable(), - apply_link: z.string().url({}).optional(), + apply_link: z.url().optional(), draft: z.boolean().optional().default(false), sponsor: reference("sponsors").optional(), }), @@ -395,7 +393,7 @@ const sprints = defineCollection({ pythonLevel: z.enum(["Any", "Beginner", "Intermediate", "Advanced"]), contactPerson: z.object({ name: z.string(), - email: z.string().email().optional().nullable(), + email: z.email().optional().nullable(), github: z.string().optional().nullable(), twitter: z.string().optional().nullable(), }), @@ -403,7 +401,7 @@ const sprints = defineCollection({ .array( z.object({ title: z.string(), - url: z.string().url({}), + url: z.url(), }) ) .optional(), diff --git a/src/content/pages/accessibility.mdx b/src/content/pages/_accessibility.mdx similarity index 100% rename from src/content/pages/accessibility.mdx rename to src/content/pages/_accessibility.mdx diff --git a/src/content/pages/beginners-day-unconference.mdx b/src/content/pages/_beginners-day-unconference.mdx similarity index 100% rename from src/content/pages/beginners-day-unconference.mdx rename to src/content/pages/_beginners-day-unconference.mdx diff --git a/src/content/pages/beginners-day.mdx b/src/content/pages/_beginners-day.mdx similarity index 100% rename from src/content/pages/beginners-day.mdx rename to src/content/pages/_beginners-day.mdx diff --git a/src/content/pages/childcare.mdx b/src/content/pages/_childcare.mdx similarity index 100% rename from src/content/pages/childcare.mdx rename to src/content/pages/_childcare.mdx diff --git a/src/content/pages/community-activities.mdx b/src/content/pages/_community-activities.mdx similarity index 100% rename from src/content/pages/community-activities.mdx rename to src/content/pages/_community-activities.mdx diff --git a/src/content/pages/feedback-session.mdx b/src/content/pages/_feedback-session.mdx similarity index 100% rename from src/content/pages/feedback-session.mdx rename to src/content/pages/_feedback-session.mdx diff --git a/src/content/pages/open-spaces.mdx b/src/content/pages/_open-spaces.mdx similarity index 100% rename from src/content/pages/open-spaces.mdx rename to src/content/pages/_open-spaces.mdx diff --git a/src/content/pages/prague.mdx b/src/content/pages/_prague.mdx similarity index 100% rename from src/content/pages/prague.mdx rename to src/content/pages/_prague.mdx diff --git a/src/content/pages/pyladies.mdx b/src/content/pages/_pyladies.mdx similarity index 100% rename from src/content/pages/pyladies.mdx rename to src/content/pages/_pyladies.mdx diff --git a/src/content/pages/pyvo.mdx b/src/content/pages/_pyvo.mdx similarity index 100% rename from src/content/pages/pyvo.mdx rename to src/content/pages/_pyvo.mdx diff --git a/src/content/pages/remote.mdx b/src/content/pages/_remote.mdx similarity index 100% rename from src/content/pages/remote.mdx rename to src/content/pages/_remote.mdx diff --git a/src/content/pages/social-event.md b/src/content/pages/_social-event.md similarity index 100% rename from src/content/pages/social-event.md rename to src/content/pages/_social-event.md diff --git a/src/content/pages/speakers-dinner.mdx b/src/content/pages/_speakers-dinner.mdx similarity index 100% rename from src/content/pages/speakers-dinner.mdx rename to src/content/pages/_speakers-dinner.mdx diff --git a/src/content/pages/test.mdx b/src/content/pages/_test.mdx similarity index 100% rename from src/content/pages/test.mdx rename to src/content/pages/_test.mdx diff --git a/src/content/pages/thank-you.mdx b/src/content/pages/_thank-you.mdx similarity index 100% rename from src/content/pages/thank-you.mdx rename to src/content/pages/_thank-you.mdx diff --git a/src/content/pages/finaid.mdx b/src/content/pages/finaid.mdx index 9967b4e93..91d358da8 100644 --- a/src/content/pages/finaid.mdx +++ b/src/content/pages/finaid.mdx @@ -99,16 +99,16 @@ application form. **Note:** dates in the timeline follow the [Anywhere on Earth][AoE] convention. -| **Date** | | **Event** | -|---|---|---| -| 19 March 2026 | | Applications open for in-person and remote grants | -| 9 April 2026 | | Deadline for submitting first-round applications | -| 23 April 2026 | | First round of grant notifications | -| 3 May 2026 | | Deadline to accept a first-round grant | -| 11 May 2026 | | Deadline for submitting second-round applications | -| **1 June 2026** | | Second round grant notifications | -| 9 June 2026 | | Deadline to accept a second-round grant | -| 28 July 2026 | | Receipt submission deadline | + **If you've already applied for round 1, you don't have to reapply for round 2.** Your application will automatically be considered for round 2 if you did diff --git a/src/content/pages/hotels.md b/src/content/pages/hotels.md index c29ba39a0..5bd53fddc 100644 --- a/src/content/pages/hotels.md +++ b/src/content/pages/hotels.md @@ -3,7 +3,7 @@ title: Hotels subtitle: Hotels --- -## Hotels +# Hotels EuroPython does **not** have an official accommodation partner and we **cannot** guarantee lower prices through any specific provider. @@ -12,7 +12,7 @@ However, we’ve arranged discount coupons for EuroPython attendees at the hotel listed below. These may offer better rates, but it's entirely up to you to decide whether booking with the coupon or through other platforms. -### [Q Hotel Plus Kraków](https://www.qhotels.pl/hotel-krakow-centrum) +## [Q Hotel Plus Kraków](https://www.qhotels.pl/hotel-krakow-centrum) Address: Wygrana 6, 30-311 Kraków @@ -20,7 +20,7 @@ Use the following link to apply the EuroPython discount coupon directly and get special rates: [link](https://booking.profitroom.com/pl/qhotelpluskrakow/details/offer/426634?codes=EuroPython&no-cache=1¤cy=PLN) -### [Hotel Saski Kraków](https://hotelsaski.com/) +## [Hotel Saski Kraków](https://hotelsaski.com/) Address: Sławkowska 3, 31-014 Kraków @@ -31,7 +31,7 @@ Use the following link: - Click ‘special rates’ and insert Corporate account number: 3558632 - This way system will show special EUROPYTHON rates with 25% discount -### [B&B HOTEL Kraków Centrum](https://www.hotel-bb.com/en/hotel/krakow-centrum) +## [B&B HOTEL Kraków Centrum](https://www.hotel-bb.com/en/hotel/krakow-centrum) Address: Monte Cassino 1, 30-337 Kraków @@ -41,7 +41,7 @@ Book through the hotel website: - Pick dates between July 12-19th - Use a Discount Code to get 15% discount from the standard price: BBHKACM15EP26 -### [Hotel PURO Kraków Kazimierz](https://purohotels.com/en/cracow/cracow-kazimierz/) +## [Hotel PURO Kraków Kazimierz](https://purohotels.com/en/cracow/cracow-kazimierz/) Address: Halicka 14A, 31-036 Kraków @@ -49,7 +49,7 @@ Address: Halicka 14A, 31-036 Kraków % discount from daily rate with brekfast - e-mail: krakow.kazimierz@purohotels.com -### [Hotel PURO Kraków Old Town](https://purohotels.com/en/cracow/cracow-old-town/) +## [Hotel PURO Kraków Old Town](https://purohotels.com/en/cracow/cracow-old-town/) Address: Ogrodowa 10, 31-155 Kraków @@ -57,21 +57,21 @@ Address: Ogrodowa 10, 31-155 Kraków % discount from daily rate with brekfast - e-mail: krakow@purohotels.com -### [Novotel Krakow Centrum](https://all.accor.com/hotel/3372/index.en.shtml) +## [Novotel Krakow Centrum](https://all.accor.com/hotel/3372/index.en.shtml) Address: Tadeusza Kosciuszki 5, 30-105 Kraków Use the following link to apply the EuroPython discount coupon directly and to get 15% discount off the daily rate: [link](https://tiny.pl/33wsq8jbd) -### [ibis Krakow Centrum](https://all.accor.com/hotel/3710/index.en.shtml) +## [ibis Krakow Centrum](https://all.accor.com/hotel/3710/index.en.shtml) Address: Syrokomli 2, 30 102 Kraków Use the following link to apply the EuroPython discount coupon directly and to get 15% discount off the daily rate: [link](https://tiny.pl/33wsq8jbd) -### [Golden Tulip Krakow Kazimierz](https://krakow-kazimierz.goldentulip.com/) +## [Golden Tulip Krakow Kazimierz](https://krakow-kazimierz.goldentulip.com/) Address: Krakowska 28, 31-062 Krakow diff --git a/src/content/pages/sponsorship/sponsor.mdx b/src/content/pages/sponsorship/sponsor.mdx index 565980e0a..8b3e98c4e 100644 --- a/src/content/pages/sponsorship/sponsor.mdx +++ b/src/content/pages/sponsorship/sponsor.mdx @@ -27,16 +27,35 @@ Join **EuroPython 2026 from 13 – 19 July** at the ICE Congress Centre in Krak Explore the benefits of sponsoring EuroPython: - -| | | | -|--------------------------------------------------------------------------------------- |----------------------------------------------------------------------------------------------- |--------------------------------------------------------------------------------- | -| Boost your brand and connect with **1,500 Pythonistas** at this leading Python event. | Showcase your product to an engaged audience and **turn visibility into high-quality leads**. | Build **positive brand association** and gain community respect & appreciation. | - -| | | | -|--------------------------------------------------------------------------------------- |----------------------------------------------------------------------------------------------- |--------------------------------------------------------------------------------- | -| Tap into the expertise of the Python community to **upskill your team**. | Access **a pool of talented Python developers** looking for their next opportunity. | Discover new avenues and opportunities to **expand and grow your business**. | - - + + + 👥 Brand Exposure + Boost your brand and connect with **1,500 Pythonistas** at this leading Python event. + + + 🎯 Product Promotion + Showcase your product to an engaged audience and **turn visibility into high-quality leads**. + + + 🏆 Community Support + Build **positive brand association** and gain community respect & appreciation. + + + + + + ↔️ Skill Boost + Tap into the expertise of the Python community to **upskill your team**. + + + 🤝 Talent Recruitment + Access **a pool of talented Python developers** looking for their next opportunity. + + + 🚀 New Business + Discover new avenues and opportunities to **expand and grow your business**. + + #### Ready to Become a EuroPython 2026 Sponsor? Sign Up Now to Secure Your Spot! diff --git a/src/content/pages/tickets.mdx b/src/content/pages/tickets.mdx index e73ae4652..284d5f58b 100644 --- a/src/content/pages/tickets.mdx +++ b/src/content/pages/tickets.mdx @@ -39,9 +39,20 @@ Each ticket type is available in three pricing tiers. We trust you to choose the As a non-profit, every ticket you buy goes back into the Python community. Whether by our financial aid programme, helping those in need of support, like students, attend the conference, or supporting Python communities across Europe through our EPS Grants programme. -| | | | -|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| If your company is covering your ticket or you use Python professionally, this is the right tier for you. By choosing this option, you help us keep the conference accessible. Thank you! | Are you a Python enthusiast, hobbyist, or freelancer? This ticket is for you! It's priced for individuals paying their own way, so you can enjoy the conference at a fair and affordable rate. | If you're a student or an educator working in schools or universities, this ticket is for you. We offer subsidized pricing so students and educators can join in and be part of the conference! | + + + 🎯 Business Tickets + If your company is covering your ticket or you use Python professionally, this is the right tier for you. By choosing this option, you help us keep the conference accessible. Thank you! + + + 👥 Personal Tickets + Are you a Python enthusiast, hobbyist, or freelancer? This ticket is for you! It's priced for individuals paying their own way, so you can enjoy the conference at a fair and affordable rate. + + + 🚀 Education Tickets + If you're a student or an educator working in schools or universities, this ticket is for you. We offer subsidized pricing so students and educators can join in and be part of the conference! + + If you need a VAT invoice with your company's name, please purchase a Business Ticket. Personal Tickets do not include a company name. To assist the registration staff, your conference badge will display the ticket tier and type. diff --git a/src/content/pages/venue.mdx b/src/content/pages/venue.mdx index 3a9310287..193ba7998 100644 --- a/src/content/pages/venue.mdx +++ b/src/content/pages/venue.mdx @@ -3,9 +3,9 @@ title: Venue subtitle: EuroPython 2026 will be held in Kraków, Poland! --- -## Main Conference Venue – ICE Kraków Congress Centre +# Main Conference Venue – ICE Kraków Congress Centre -### Where +## Where [ICE Kraków Congress Centre](https://icekrakow.pl/en) will host EuroPython 2026 from **13–17 July** (Monday–Friday). @@ -15,7 +15,7 @@ subtitle: EuroPython 2026 will be held in Kraków, Poland! The ICE Kraków Congress Centre is located in the very heart of Kraków, directly opposite the iconic **Wawel Castle**, and next to one of the main transport hubs. The venue opened in 2014 and features modern conference facilities. -### What's Nearby +## What's Nearby - **Wawel Castle:** Just across the street! This iconic royal castle and cathedral complex is one of Poland's most important historical and cultural sites. Visit the Royal Apartments, Crown Treasury, Armoury, and the legendary Dragon's Den cave beneath the hill. diff --git a/src/data/enabledPages.json b/src/data/enabledPages.json deleted file mode 100644 index bc3245635..000000000 --- a/src/data/enabledPages.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "_comment": "Whitelist of enabled pages for EP2026 launch. Remove this file or set 'enableWhitelist' to false to show all pages.", - "enableWhitelist": true, - "pages": [ - "/", - "/programme/tracks", - "/tracks", - "/programme/selection", - "/selection", - "/programme/mentorship", - "/mentorship", - "/programme/voting", - "/voting", - "/programme/cfp", - "/cfp", - "/guidelines", - "/contacts", - "/terms", - "/venue", - "/krakow", - "/finaid", - "/visa", - "/volunteering", - "/about", - "/faq", - "/language-summit", - "/packaging-summit", - "/rust-summit", - "/sponsorship/sponsor", - "/sponsorship/information", - "/sessions", - "/speakers", - "/tickets", - "/hotels" - ], - "navItems": ["Programme", "Venue", "About"] -} diff --git a/src/data/nav.ts b/src/data/nav.ts index 48be89813..cefe01e5b 100644 --- a/src/data/nav.ts +++ b/src/data/nav.ts @@ -34,10 +34,10 @@ const L = { schedule: { label: "Schedule", url: "/schedule" }, talks: { label: "Talks", url: "/talks" }, tutorials: { label: "Tutorials", url: "/tutorials" }, - sessions: { label: "List of Sessions", url: "/sessions" }, posters: { label: "Posters", url: "/posters" }, - speakers: { label: "List of Speakers", url: "/speakers" }, tracks: { label: "Tracks", url: "/tracks" }, + speakers: { label: "Speakers", url: "/speakers" }, + sessions: { label: "List of all Sessions", url: "/sessions" }, guidelines: { label: "Speaker Guidelines", url: "/guidelines" }, mentorship: { label: "Speaker Mentorship", url: "/mentorship" }, @@ -125,10 +125,9 @@ export const NAV_MENUS: NavMenu[] = [ L.schedule, L.talks, L.tutorials, - L.sessions, L.posters, - L.speakers, L.tracks, + L.speakers, ], }, { @@ -228,9 +227,11 @@ export const FOOTER_COLUMNS: FooterColumn[] = [ title: "Programme", items: [ L.schedule, - L.sessions, - L.speakers, + L.talks, + L.tutorials, + L.posters, L.tracks, + L.speakers, L.guidelines, L.mentorship, ], @@ -255,8 +256,4 @@ export const FOOTER_COLUMNS: FooterColumn[] = [ title: "Community", items: [L.about, L.eps, L.communityPartners, L.blog, L.contacts], }, - { - title: "Policies", - items: [L.coc, L.terms, L.privacy], - }, ]; diff --git a/src/layouts/MarkdownLayout.astro b/src/layouts/MarkdownLayout.astro index 71bb32429..ae1fb5e13 100644 --- a/src/layouts/MarkdownLayout.astro +++ b/src/layouts/MarkdownLayout.astro @@ -1,6 +1,6 @@ --- import Layout from "@layouts/Layout.astro"; -import Section from "@ui/Section.astro"; +import Section from "@ui/Section2.astro"; import TwoCols from "@components/TwoCols.astro"; import "@styles/markdown.css"; diff --git a/src/layouts/ScheduleLayout.astro b/src/layouts/ScheduleLayout.astro index d40098741..a9c517cdd 100644 --- a/src/layouts/ScheduleLayout.astro +++ b/src/layouts/ScheduleLayout.astro @@ -14,7 +14,6 @@ const { title, description, headline } = Astro.props; - @@ -229,7 +228,11 @@ select { if (days.length === 0) return; // en-CA gives us YYYY-MM-DD format - const today = new Intl.DateTimeFormat('en-CA', { + // Check URL hash for a specific day, otherwise use today + const hashDay = window.location.hash.replace('#day-', ''); + const hasDayHash = hashDay !== window.location.hash; + + const targetDay = hasDayHash ? hashDay : new Intl.DateTimeFormat('en-CA', { timeZone: 'Europe/Warsaw', year: 'numeric', month: '2-digit', @@ -238,7 +241,7 @@ select { let defaultIndex = 0; days.forEach(function(day, index) { - if (day.getAttribute('data-day') === today) defaultIndex = index; + if (day.getAttribute('data-day') === targetDay) defaultIndex = index; }); days.forEach(function(day, index) { @@ -263,6 +266,9 @@ select { d.classList.add('active'); } }); + + // Update URL hash for the selected day + history.replaceState(null, '', '#day-' + dayName); }); tabsContainer.appendChild(tab); diff --git a/src/layouts/SectionLayout.astro b/src/layouts/SectionLayout.astro index 06d4d2af6..fa8d301f9 100644 --- a/src/layouts/SectionLayout.astro +++ b/src/layouts/SectionLayout.astro @@ -1,6 +1,6 @@ --- import Layout from "@layouts/Layout.astro"; -import Section from "@ui/Section.astro"; +import Section from "@ui/Section2.astro"; import "@styles/markdown.css"; const { title, description } = Astro.props; diff --git a/src/pages/[...slug].astro b/src/pages/[...slug].astro index f8b38647e..da305dc58 100644 --- a/src/pages/[...slug].astro +++ b/src/pages/[...slug].astro @@ -18,24 +18,42 @@ import EPSLogo from "@components/markdown/EPSLogo.astro"; import ProfileCard from "@components/profile/ProfileCard.astro"; import SpeakerCard from "@components/profile/SpeakerCard.astro"; import GoogleCalendar from '@components/GoogleCalendar.astro'; +import ThreeCol from "@ui/ThreeCol.astro"; +import FinaidTimeline from "@ui/FinaidTimeline.astro"; import Prose from "@ui/Prose.astro"; -import enabledPages from "@data/enabledPages.json"; +import { NAV_MENUS, FOOTER_COLUMNS } from "@data/nav"; export async function getStaticPaths() { - const pages = await getCollection("pages"); + // Build set of all nav-linked paths for orphan detection + const navPaths = new Set(); + for (const menu of NAV_MENUS) { + if (menu.url && !menu.sections) navPaths.add(menu.url.replace(/\/$/, "")); + for (const section of menu.sections ?? []) { + for (const item of section.items) { + navPaths.add(item.url.replace(/\/$/, "")); + } + } + } + // Add footer links + for (const col of FOOTER_COLUMNS) { + for (const item of col.items) { + navPaths.add(item.url.replace(/\/$/, "")); + } + } + const pages = (await getCollection("pages")).filter((p) => !p.id.startsWith("_")); - // Filter pages based on whitelist if enabled - const filteredPages = enabledPages.enableWhitelist - ? pages.filter((page) => { - const fullPath = `/${page.id}`; - const shortSlug = page.id.split("/").pop(); - const shortPath = `/${shortSlug}`; - return enabledPages.pages.includes(fullPath) || enabledPages.pages.includes(shortPath); - }) - : pages; + // Warn about top-level pages not linked in nav + const ignorePaths = new Set(["/sprints_info", "/terms"]); + for (const page of pages) { + const fullPath = "/" + page.id; + if (ignorePaths.has(fullPath)) continue; + if (!page.id.includes("/") && !navPaths.has(fullPath)) { + console.warn(`[nav] Top-level page "${fullPath}" exists but is not linked in any nav menu or footer. Add it to src/data/nav.ts`); + } + } - return filteredPages.flatMap((page) => { + return pages.flatMap((page) => { const slugParts = page.id.split("/"); const shortSlug = slugParts[slugParts.length - 1]; @@ -67,6 +85,8 @@ const description = post.data.subtitle; - + diff --git a/src/pages/media/speakers.astro b/src/pages/media/speakers.astro index 5f77dc6d9..a6655f440 100644 --- a/src/pages/media/speakers.astro +++ b/src/pages/media/speakers.astro @@ -7,7 +7,7 @@ const speakers = await getCollection("speakers"); type Speaker = CollectionEntry<"speakers">; --- - + diff --git a/src/pages/media/sponsor/[slug].astro b/src/pages/media/sponsor/[slug].astro index 364432db3..a0ac014d3 100644 --- a/src/pages/media/sponsor/[slug].astro +++ b/src/pages/media/sponsor/[slug].astro @@ -14,7 +14,7 @@ const { entry:sponsor } = Astro.props; --- - + diff --git a/src/pages/media/sponsors.astro b/src/pages/media/sponsors.astro index a41a93193..c384ba8e8 100644 --- a/src/pages/media/sponsors.astro +++ b/src/pages/media/sponsors.astro @@ -7,7 +7,7 @@ const sponsors = await getCollection("sponsors"); type Sponsor = CollectionEntry<"sponsors">; --- - + diff --git a/src/pages/schedule.astro b/src/pages/schedule.astro index 4d86ce1b7..9634a2c18 100644 --- a/src/pages/schedule.astro +++ b/src/pages/schedule.astro @@ -29,14 +29,15 @@ const days = await getCollection("days"); diff --git a/src/pages/session/[slug].astro b/src/pages/session/[slug].astro index 1e08bd7d1..4f973c762 100644 --- a/src/pages/session/[slug].astro +++ b/src/pages/session/[slug].astro @@ -71,7 +71,7 @@ const nextSessionsOrdered = sameRoomNextSession {entry.data.title} @@ -136,7 +136,7 @@ const nextSessionsOrdered = sameRoomNextSession Duration: {entry.data.duration} minutes - View in the schedule + View in the schedule @@ -183,7 +183,7 @@ const nextSessionsOrdered = sameRoomNextSession speakers.length > 0 && ( <> - + The speaker{speakers.length > 1 ? "s" : ""} {speakers.map((speaker) => ( @@ -278,6 +278,13 @@ const nextSessionsOrdered = sameRoomNextSession + +