soaring-symbols 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +6 -5
  2. package/dist/airlines.json +1 -1
  3. package/dist/assets/air-arabia/icon-mono.svg +1 -1
  4. package/dist/assets/air-arabia/icon.svg +1 -1
  5. package/dist/assets/air-berlin/icon-mono.svg +1 -1
  6. package/dist/assets/air-berlin/icon.svg +1 -1
  7. package/dist/assets/air-berlin/logo-mono.svg +1 -1
  8. package/dist/assets/air-berlin/logo.svg +1 -1
  9. package/dist/assets/american-airlines/icon.svg +1 -1
  10. package/dist/assets/american-airlines/logo.svg +1 -1
  11. package/dist/assets/austrian-airlines/logo.svg +1 -1
  12. package/dist/assets/azul/icon.svg +1 -1
  13. package/dist/assets/binter/logo-mono.svg +1 -0
  14. package/dist/assets/binter/logo.svg +1 -0
  15. package/dist/assets/cebu-pacific/icon.svg +1 -1
  16. package/dist/assets/cebu-pacific/logo.svg +1 -1
  17. package/dist/assets/china-airlines/logo.svg +1 -1
  18. package/dist/assets/china-eastern-airlines/icon.svg +1 -1
  19. package/dist/assets/china-southern-airlines/tail.svg +1 -1
  20. package/dist/assets/condor/icon-mono.svg +1 -1
  21. package/dist/assets/condor/icon.svg +1 -1
  22. package/dist/assets/condor/logo-mono.svg +1 -1
  23. package/dist/assets/condor/logo.svg +1 -1
  24. package/dist/assets/delta-air-lines/icon-mono.svg +1 -1
  25. package/dist/assets/easyjet/logo-mono.svg +1 -1
  26. package/dist/assets/easyjet/logo.svg +1 -1
  27. package/dist/assets/egyptair/icon-mono.svg +1 -1
  28. package/dist/assets/egyptair/icon.svg +1 -1
  29. package/dist/assets/flybe/logo-mono.svg +1 -1
  30. package/dist/assets/flybe/logo.svg +1 -1
  31. package/dist/assets/frontier-airlines/icon-mono.svg +1 -1
  32. package/dist/assets/frontier-airlines/icon.svg +1 -1
  33. package/dist/assets/gol/logo.svg +1 -1
  34. package/dist/assets/hawaiian-airlines/icon.svg +1 -1
  35. package/dist/assets/hawaiian-airlines/logo.svg +1 -1
  36. package/dist/assets/ita-airways/logo.svg +1 -1
  37. package/dist/assets/jet2com/icon-mono.svg +1 -1
  38. package/dist/assets/jet2com/icon.svg +1 -1
  39. package/dist/assets/juneyao-air/icon-mono.svg +1 -0
  40. package/dist/assets/juneyao-air/icon.svg +1 -0
  41. package/dist/assets/juneyao-air/logo-mono.svg +1 -0
  42. package/dist/assets/juneyao-air/logo.svg +1 -0
  43. package/dist/assets/level/icon.svg +1 -0
  44. package/dist/assets/level/logo.svg +1 -0
  45. package/dist/assets/lion-air/icon-mono.svg +1 -1
  46. package/dist/assets/lion-air/icon.svg +1 -1
  47. package/dist/assets/norwegian-air-shuttle/icon.svg +1 -1
  48. package/dist/assets/norwegian-air-shuttle/logo-mono.svg +1 -1
  49. package/dist/assets/norwegian-air-shuttle/logo.svg +1 -1
  50. package/dist/assets/pegasus-airlines/icon-mono.svg +1 -1
  51. package/dist/assets/pegasus-airlines/icon.svg +1 -1
  52. package/dist/assets/spirit-airlines/logo-mono.svg +1 -1
  53. package/dist/assets/spirit-airlines/logo.svg +1 -1
  54. package/dist/assets/viva/icon-mono.svg +1 -1
  55. package/dist/assets/viva/icon.svg +1 -1
  56. package/dist/assets/volaris/icon.svg +1 -1
  57. package/dist/assets/vueling/logo.svg +1 -1
  58. package/dist/assets/winair/logo-mono.svg +1 -0
  59. package/dist/assets/winair/logo.svg +1 -0
  60. package/dist/svg-validator.cjs +382 -5
  61. package/dist/svg-validator.d.cts +12 -0
  62. package/dist/svg-validator.d.ts +12 -0
  63. package/dist/svg-validator.js +382 -5
  64. package/package.json +4 -3
  65. package/AIRLINES.md +0 -144
@@ -1 +1 @@
1
- <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Norwegian Air Shuttle</title><g fill="none" fill-rule="evenodd"><path fill="#e5212d" d="M0 0H24V24H0Z"/><path fill="#ffffff" d="M18.48 11.074C18.408 11.038 18.318 10.958 18.254 10.902 17.94 10.628 17.629 10.175 17.714 9.737 17.722 9.652 17.814 9.616 17.868 9.558L18.761 8.784C18.954 8.616 19.157 8.477 19.388 8.367 19.722 8.197 20.096 8.097 20.468 8.064 20.788 8.038 21.165 8.057 21.462 8.182 21.669 8.266 21.736 8.401 21.727 8.62 21.704 8.933 21.5 9.269 21.317 9.517 21.003 9.936 20.616 10.301 20.222 10.643L19.044 11.665C18.954 11.741 18.865 11.822 18.774 11.897 18.849 12.039 18.934 12.18 19.012 12.321L20.59 15.1C20.664 15.214 20.687 15.32 20.626 15.447A0.3 0.3 0 0 1 20.58 15.513C20.493 15.613 20.393 15.703 20.304 15.801 20.148 15.703 19.994 15.595 19.84 15.494Q18.79 14.8 17.741 14.104 17.541 13.974 17.341 13.84C17.421 13.72 17.507 13.598 17.587 13.477 17.704 13.298 17.827 13.123 17.945 12.945A0.4 0.4 0 0 1 17.98 12.895C17.916 12.85 17.848 12.811 17.786 12.763 17.721 12.803 17.653 12.877 17.59 12.925L16.4 13.957A10 10 0 0 1 15.635 14.569C15.001 15.025 14.32 15.413 13.582 15.671 12.699 15.978 11.367 16.171 10.81 15.213 10.517 14.703 10.6 14.024 10.776 13.488 10.985 12.842 11.336 12.259 11.74 11.718 11.81 11.622 11.892 11.529 11.961 11.433 12.021 11.451 12.061 11.499 12.118 11.523 12.09 11.593 12.018 11.669 11.98 11.737 11.702 12.17 11.446 12.701 11.444 13.225 11.444 13.828 11.852 14.191 12.444 14.19 13.01 14.19 13.576 13.939 14.057 13.659 14.563 13.364 15.011 12.994 15.441 12.599L15.453 12.587C15.35 12.524 15.248 12.453 15.147 12.387Q14.693 12.084 14.237 11.785 13.196 11.093 12.152 10.403L11.552 10.005C11.335 9.865 11.122 9.716 10.905 9.576 10.983 9.495 11.081 9.422 11.165 9.345A0.77 0.77 0 0 1 11.898 9.171Q12.098 9.235 12.296 9.304 15.238 10.284 18.178 11.266C18.207 11.274 18.23 11.287 18.26 11.288L18.393 11.172C18.413 11.148 18.467 11.116 18.481 11.093ZM4.87 9.316C4.93 9.249 4.978 9.174 5.044 9.111 5.085 9.071 5.125 9.028 5.168 8.99 5.661 8.553 6.335 8.407 6.978 8.434 7.528 8.457 8.05 8.602 8.505 8.918A2.55 2.55 0 0 1 9.267 9.776C9.561 10.304 9.681 10.934 9.677 11.533V15.823Q9.679 15.877 9.677 15.932C9.644 15.929 9.611 15.931 9.579 15.93H7.692V11.89C7.692 11.335 7.575 10.69 7.027 10.417 6.661 10.232 6.123 10.237 5.747 10.394 5.141 10.65 4.917 11.271 4.917 11.89V15.932H2.929Q2.927 15.878 2.928 15.823V8.6H4.872V9.222Q4.874 9.269 4.869 9.316"/></g></svg>
1
+ <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Norwegian Air Shuttle</title><g fill="none" fill-rule="evenodd"><path fill="#e5212d" d="M0 0H24V24H0Z"/><path fill="#ffffff" d="M18.48 11.074C18.408 11.038 18.318 10.958 18.254 10.902 17.94 10.628 17.629 10.175 17.714 9.737 17.722 9.652 17.814 9.616 17.868 9.558L18.761 8.784C18.954 8.616 19.157 8.477 19.388 8.367 19.722 8.197 20.096 8.097 20.468 8.064 20.788 8.038 21.165 8.057 21.462 8.182 21.669 8.266 21.736 8.401 21.727 8.62 21.704 8.933 21.5 9.269 21.317 9.517 21.003 9.936 20.616 10.301 20.222 10.643L19.044 11.665C18.954 11.741 18.865 11.822 18.774 11.897 18.849 12.039 18.934 12.18 19.012 12.321L20.59 15.1C20.664 15.214 20.687 15.32 20.626 15.447A.3 .3 0 0 1 20.58 15.513C20.493 15.613 20.393 15.703 20.304 15.801 20.148 15.703 19.994 15.595 19.84 15.494Q18.79 14.8 17.741 14.104 17.541 13.974 17.341 13.84C17.421 13.72 17.507 13.598 17.587 13.477 17.704 13.298 17.827 13.123 17.945 12.945A.4 .4 0 0 1 17.98 12.895C17.916 12.85 17.848 12.811 17.786 12.763 17.721 12.803 17.653 12.877 17.59 12.925L16.4 13.957A10 10 0 0 1 15.635 14.569C15.001 15.025 14.32 15.413 13.582 15.671 12.699 15.978 11.367 16.171 10.81 15.213 10.517 14.703 10.6 14.024 10.776 13.488 10.985 12.842 11.336 12.259 11.74 11.718 11.81 11.622 11.892 11.529 11.961 11.433 12.021 11.451 12.061 11.499 12.118 11.523 12.09 11.593 12.018 11.669 11.98 11.737 11.702 12.17 11.446 12.701 11.444 13.225 11.444 13.828 11.852 14.191 12.444 14.19 13.01 14.19 13.576 13.939 14.057 13.659 14.563 13.364 15.011 12.994 15.441 12.599L15.453 12.587C15.35 12.524 15.248 12.453 15.147 12.387Q14.693 12.084 14.237 11.785 13.196 11.093 12.152 10.403L11.552 10.005C11.335 9.865 11.122 9.716 10.905 9.576 10.983 9.495 11.081 9.422 11.165 9.345A.77 .77 0 0 1 11.898 9.171Q12.098 9.235 12.296 9.304 15.238 10.284 18.178 11.266C18.207 11.274 18.23 11.287 18.26 11.288L18.393 11.172C18.413 11.148 18.467 11.116 18.481 11.093ZM4.87 9.316C4.93 9.249 4.978 9.174 5.044 9.111 5.085 9.071 5.125 9.028 5.168 8.99 5.661 8.553 6.335 8.407 6.978 8.434 7.528 8.457 8.05 8.602 8.505 8.918A2.55 2.55 0 0 1 9.267 9.776C9.561 10.304 9.681 10.934 9.677 11.533V15.823Q9.679 15.877 9.677 15.932C9.644 15.929 9.611 15.931 9.579 15.93H7.692V11.89C7.692 11.335 7.575 10.69 7.027 10.417 6.661 10.232 6.123 10.237 5.747 10.394 5.141 10.65 4.917 11.271 4.917 11.89V15.932H2.929Q2.927 15.878 2.928 15.823V8.6H4.872V9.222Q4.874 9.269 4.869 9.316"/></g></svg>
@@ -1 +1 @@
1
- <svg role="img" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><title>Norwegian Air Shuttle</title><path d="M62.7903 30.612L61.5603 31.684 61.5473 31.695 63.0793 34.405A0.26 0.26 0 0 1 63.0393 34.71L62.8163 34.945 60.3003 33.272 60.7543 32.55 60.6473 32.48 59.5353 33.446C58.3183 34.502 56.9523 35.112 55.9693 35.038 55.5733 35.008 55.2653 34.869 55.0573 34.626 54.4773 33.953 54.8173 32.619 55.9003 31.301L56.0263 31.386C55.4543 32.182 55.3033 32.946 55.6443 33.334A0.8 0.8 0 0 0 56.2143 33.598C56.8143 33.644 57.6643 33.25 58.4843 32.541L58.7903 32.269 55.0143 29.757 55.2503 29.551A0.63 0.63 0 0 1 55.8623 29.431L61.1603 31.204 61.3063 31.078 61.2833 31.062C60.8863 30.799 60.5183 30.319 60.6383 29.884L61.5413 29.098A2.4 2.4 0 0 1 62.4743 28.592 2.4 2.4 0 0 1 63.3403 28.501C63.6183 28.524 63.8483 28.604 63.9303 28.703 63.9803 28.76 64.0703 28.935 63.9043 29.303 63.7343 29.676 63.3603 30.117 62.7913 30.613ZM0 34.914H1.518V31.843C1.518 31.056 1.938 30.593 2.625 30.593S3.637 31.024 3.637 31.823V34.913H5.153V31.564C5.153 30.109 4.315 29.184 2.981 29.184 2.324 29.184 1.798 29.42 1.486 29.861V29.312H0ZM8.946 29.182C7.17 29.182 5.933 30.422 5.933 32.112S7.17 35.042 8.945 35.042 11.9571 33.813 11.9571 32.112 10.7201 29.182 8.945 29.182M7.471 32.112C7.471 31.239 8.084 30.592 8.945 30.592S10.4201 31.238 10.4201 32.112 9.8061 33.632 8.945 33.632 7.471 32.986 7.471 32.112M14.3081 34.912V32.35C14.3081 31.144 15.0181 30.712 15.9001 30.647V29.226C15.2551 29.249 14.6101 29.517 14.2761 30.002V29.312H12.7911V34.914ZM21.9051 29.312H19.9251C19.6571 31.036 19.5601 31.413 18.9151 33.449 18.4521 31.586 18.3661 31.089 18.2051 29.311H16.6671A27.2001 27.2001 0 0 0 17.8291 34.913H19.7871C20.3671 33.276 20.7021 32.101 20.9171 30.917 21.1311 32.102 21.4651 33.277 22.0451 34.913H24.0031A27.4001 27.4001 0 0 0 25.1661 29.313H23.6271C23.4651 31.09 23.3801 31.585 22.9191 33.449 22.2731 31.413 22.1761 31.036 21.9061 29.311ZM28.6601 35.043C29.9622 35.043 30.9842 34.376 31.5112 33.18H29.7462Q29.3622 33.663 28.6721 33.665C27.9521 33.665 27.4341 33.265 27.2621 32.63H31.6402V32.22C31.6402 30.453 30.4362 29.182 28.6721 29.182S25.6821 30.411 25.6821 32.112 26.9181 35.042 28.6621 35.042ZM27.2941 31.499C27.5001 30.929 27.9821 30.562 28.6811 30.562S29.8332 30.918 30.0262 31.499ZM35.3042 36.983C36.9492 36.983 37.9502 35.97 37.9502 34.322V29.312H36.4642V29.839C36.1642 29.442 35.5622 29.182 34.9272 29.182 33.4412 29.182 32.3442 30.356 32.3442 31.929S33.4542 34.676 34.9272 34.676C35.5402 34.676 36.1312 34.428 36.4322 34.051V34.277C36.4322 35.107 36.0222 35.58 35.2922 35.58 34.8302 35.58 34.4642 35.387 34.3352 35.075H32.5502C32.8412 36.238 33.9072 36.981 35.3042 36.981M35.1962 33.265C34.4222 33.265 33.8842 32.726 33.8842 31.929S34.4122 30.591 35.1962 30.591 36.5192 31.142 36.5192 31.929 35.9822 33.266 35.1972 33.266M41.7802 31.025H43.4582C43.5782 30.701 43.8782 30.518 44.2982 30.518 44.7382 30.518 45.0082 30.712 45.0082 31.014Q45.0092 31.383 44.4482 31.445L43.5652 31.553C42.2852 31.703 41.6392 32.275 41.6392 33.266 41.6392 34.332 42.4032 35.044 43.5772 35.044 44.2012 35.044 44.7492 34.784 45.0392 34.365V34.914H46.5242V31.219C46.5242 29.904 45.7392 29.183 44.2862 29.183 42.9962 29.183 42.1242 29.829 41.7802 31.025M43.1572 33.145C43.1572 32.855 43.3502 32.683 43.8132 32.619L44.4372 32.533A6 6 0 0 0 45.0072 32.414V32.544C45.0072 33.254 44.5972 33.697 43.8992 33.697 43.4592 33.697 43.1562 33.482 43.1562 33.147ZM47.6602 34.914H49.1783V31.843C49.1783 31.056 49.5983 30.593 50.2883 30.593 50.9753 30.593 51.2983 31.024 51.2983 31.821V34.914H52.8153V31.563C52.8153 30.109 51.9753 29.183 50.6413 29.183 49.9853 29.183 49.4583 29.42 49.1463 29.861V29.312H47.6602ZM38.9362 27.976C38.9362 27.405 39.3562 27.017 39.8942 27.017S40.8512 27.405 40.8512 27.977 40.4312 28.934 39.8942 28.934 38.9362 28.546 38.9362 27.976M40.6462 29.311V34.913H39.1302V29.31Z"/></svg>
1
+ <svg role="img" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><title>Norwegian Air Shuttle</title><path d="M62.7903 30.612L61.5603 31.684 61.5473 31.695 63.0793 34.405A.26 .26 0 0 1 63.0393 34.71L62.8163 34.945 60.3003 33.272 60.7543 32.55 60.6473 32.48 59.5353 33.446C58.3183 34.502 56.9523 35.112 55.9693 35.038 55.5733 35.008 55.2653 34.869 55.0573 34.626 54.4773 33.953 54.8173 32.619 55.9003 31.301L56.0263 31.386C55.4543 32.182 55.3033 32.946 55.6443 33.334A.8 .8 0 0 0 56.2143 33.598C56.8143 33.644 57.6643 33.25 58.4843 32.541L58.7903 32.269 55.0143 29.757 55.2503 29.551A.63 .63 0 0 1 55.8623 29.431L61.1603 31.204 61.3063 31.078 61.2833 31.062C60.8863 30.799 60.5183 30.319 60.6383 29.884L61.5413 29.098A2.4 2.4 0 0 1 62.4743 28.592 2.4 2.4 0 0 1 63.3403 28.501C63.6183 28.524 63.8483 28.604 63.9303 28.703 63.9803 28.76 64.0703 28.935 63.9043 29.303 63.7343 29.676 63.3603 30.117 62.7913 30.613ZM0 34.914H1.518V31.843C1.518 31.056 1.938 30.593 2.625 30.593S3.637 31.024 3.637 31.823V34.913H5.153V31.564C5.153 30.109 4.315 29.184 2.981 29.184 2.324 29.184 1.798 29.42 1.486 29.861V29.312H0ZM8.946 29.182C7.17 29.182 5.933 30.422 5.933 32.112S7.17 35.042 8.945 35.042 11.9571 33.813 11.9571 32.112 10.7201 29.182 8.945 29.182M7.471 32.112C7.471 31.239 8.084 30.592 8.945 30.592S10.4201 31.238 10.4201 32.112 9.8061 33.632 8.945 33.632 7.471 32.986 7.471 32.112M14.3081 34.912V32.35C14.3081 31.144 15.0181 30.712 15.9001 30.647V29.226C15.2551 29.249 14.6101 29.517 14.2761 30.002V29.312H12.7911V34.914ZM21.9051 29.312H19.9251C19.6571 31.036 19.5601 31.413 18.9151 33.449 18.4521 31.586 18.3661 31.089 18.2051 29.311H16.6671A27.2001 27.2001 0 0 0 17.8291 34.913H19.7871C20.3671 33.276 20.7021 32.101 20.9171 30.917 21.1311 32.102 21.4651 33.277 22.0451 34.913H24.0031A27.4001 27.4001 0 0 0 25.1661 29.313H23.6271C23.4651 31.09 23.3801 31.585 22.9191 33.449 22.2731 31.413 22.1761 31.036 21.9061 29.311ZM28.6601 35.043C29.9622 35.043 30.9842 34.376 31.5112 33.18H29.7462Q29.3622 33.663 28.6721 33.665C27.9521 33.665 27.4341 33.265 27.2621 32.63H31.6402V32.22C31.6402 30.453 30.4362 29.182 28.6721 29.182S25.6821 30.411 25.6821 32.112 26.9181 35.042 28.6621 35.042ZM27.2941 31.499C27.5001 30.929 27.9821 30.562 28.6811 30.562S29.8332 30.918 30.0262 31.499ZM35.3042 36.983C36.9492 36.983 37.9502 35.97 37.9502 34.322V29.312H36.4642V29.839C36.1642 29.442 35.5622 29.182 34.9272 29.182 33.4412 29.182 32.3442 30.356 32.3442 31.929S33.4542 34.676 34.9272 34.676C35.5402 34.676 36.1312 34.428 36.4322 34.051V34.277C36.4322 35.107 36.0222 35.58 35.2922 35.58 34.8302 35.58 34.4642 35.387 34.3352 35.075H32.5502C32.8412 36.238 33.9072 36.981 35.3042 36.981M35.1962 33.265C34.4222 33.265 33.8842 32.726 33.8842 31.929S34.4122 30.591 35.1962 30.591 36.5192 31.142 36.5192 31.929 35.9822 33.266 35.1972 33.266M41.7802 31.025H43.4582C43.5782 30.701 43.8782 30.518 44.2982 30.518 44.7382 30.518 45.0082 30.712 45.0082 31.014Q45.0092 31.383 44.4482 31.445L43.5652 31.553C42.2852 31.703 41.6392 32.275 41.6392 33.266 41.6392 34.332 42.4032 35.044 43.5772 35.044 44.2012 35.044 44.7492 34.784 45.0392 34.365V34.914H46.5242V31.219C46.5242 29.904 45.7392 29.183 44.2862 29.183 42.9962 29.183 42.1242 29.829 41.7802 31.025M43.1572 33.145C43.1572 32.855 43.3502 32.683 43.8132 32.619L44.4372 32.533A6 6 0 0 0 45.0072 32.414V32.544C45.0072 33.254 44.5972 33.697 43.8992 33.697 43.4592 33.697 43.1562 33.482 43.1562 33.147ZM47.6602 34.914H49.1783V31.843C49.1783 31.056 49.5983 30.593 50.2883 30.593 50.9753 30.593 51.2983 31.024 51.2983 31.821V34.914H52.8153V31.563C52.8153 30.109 51.9753 29.183 50.6413 29.183 49.9853 29.183 49.4583 29.42 49.1463 29.861V29.312H47.6602ZM38.9362 27.976C38.9362 27.405 39.3562 27.017 39.8942 27.017S40.8512 27.405 40.8512 27.977 40.4312 28.934 39.8942 28.934 38.9362 28.546 38.9362 27.976M40.6462 29.311V34.913H39.1302V29.31Z"/></svg>
@@ -1 +1 @@
1
- <svg role="img" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="#e6222e"><title>Norwegian Air Shuttle</title><path d="M62.7903 30.612L61.5603 31.684 61.5473 31.695 63.0793 34.405A0.26 0.26 0 0 1 63.0393 34.71L62.8163 34.945 60.3003 33.272 60.7543 32.55 60.6473 32.48 59.5353 33.446C58.3183 34.502 56.9523 35.112 55.9693 35.038 55.5733 35.008 55.2653 34.869 55.0573 34.626 54.4773 33.953 54.8173 32.619 55.9003 31.301L56.0263 31.386C55.4543 32.182 55.3033 32.946 55.6443 33.334A0.8 0.8 0 0 0 56.2143 33.598C56.8143 33.644 57.6643 33.25 58.4843 32.541L58.7903 32.269 55.0143 29.757 55.2503 29.551A0.63 0.63 0 0 1 55.8623 29.431L61.1603 31.204 61.3063 31.078 61.2833 31.062C60.8863 30.799 60.5183 30.319 60.6383 29.884L61.5413 29.098A2.4 2.4 0 0 1 62.4743 28.592 2.4 2.4 0 0 1 63.3403 28.501C63.6183 28.524 63.8483 28.604 63.9303 28.703 63.9803 28.76 64.0703 28.935 63.9043 29.303 63.7343 29.676 63.3603 30.117 62.7913 30.613ZM0 34.914H1.518V31.843C1.518 31.056 1.938 30.593 2.625 30.593S3.637 31.024 3.637 31.823V34.913H5.153V31.564C5.153 30.109 4.315 29.184 2.981 29.184 2.324 29.184 1.798 29.42 1.486 29.861V29.312H0ZM8.946 29.182C7.17 29.182 5.933 30.422 5.933 32.112S7.17 35.042 8.945 35.042 11.9571 33.813 11.9571 32.112 10.7201 29.182 8.945 29.182M7.471 32.112C7.471 31.239 8.084 30.592 8.945 30.592S10.4201 31.238 10.4201 32.112 9.8061 33.632 8.945 33.632 7.471 32.986 7.471 32.112M14.3081 34.912V32.35C14.3081 31.144 15.0181 30.712 15.9001 30.647V29.226C15.2551 29.249 14.6101 29.517 14.2761 30.002V29.312H12.7911V34.914ZM21.9051 29.312H19.9251C19.6571 31.036 19.5601 31.413 18.9151 33.449 18.4521 31.586 18.3661 31.089 18.2051 29.311H16.6671A27.2001 27.2001 0 0 0 17.8291 34.913H19.7871C20.3671 33.276 20.7021 32.101 20.9171 30.917 21.1311 32.102 21.4651 33.277 22.0451 34.913H24.0031A27.4001 27.4001 0 0 0 25.1661 29.313H23.6271C23.4651 31.09 23.3801 31.585 22.9191 33.449 22.2731 31.413 22.1761 31.036 21.9061 29.311ZM28.6601 35.043C29.9622 35.043 30.9842 34.376 31.5112 33.18H29.7462Q29.3622 33.663 28.6721 33.665C27.9521 33.665 27.4341 33.265 27.2621 32.63H31.6402V32.22C31.6402 30.453 30.4362 29.182 28.6721 29.182S25.6821 30.411 25.6821 32.112 26.9181 35.042 28.6621 35.042ZM27.2941 31.499C27.5001 30.929 27.9821 30.562 28.6811 30.562S29.8332 30.918 30.0262 31.499ZM35.3042 36.983C36.9492 36.983 37.9502 35.97 37.9502 34.322V29.312H36.4642V29.839C36.1642 29.442 35.5622 29.182 34.9272 29.182 33.4412 29.182 32.3442 30.356 32.3442 31.929S33.4542 34.676 34.9272 34.676C35.5402 34.676 36.1312 34.428 36.4322 34.051V34.277C36.4322 35.107 36.0222 35.58 35.2922 35.58 34.8302 35.58 34.4642 35.387 34.3352 35.075H32.5502C32.8412 36.238 33.9072 36.981 35.3042 36.981M35.1962 33.265C34.4222 33.265 33.8842 32.726 33.8842 31.929S34.4122 30.591 35.1962 30.591 36.5192 31.142 36.5192 31.929 35.9822 33.266 35.1972 33.266M41.7802 31.025H43.4582C43.5782 30.701 43.8782 30.518 44.2982 30.518 44.7382 30.518 45.0082 30.712 45.0082 31.014Q45.0092 31.383 44.4482 31.445L43.5652 31.553C42.2852 31.703 41.6392 32.275 41.6392 33.266 41.6392 34.332 42.4032 35.044 43.5772 35.044 44.2012 35.044 44.7492 34.784 45.0392 34.365V34.914H46.5242V31.219C46.5242 29.904 45.7392 29.183 44.2862 29.183 42.9962 29.183 42.1242 29.829 41.7802 31.025M43.1572 33.145C43.1572 32.855 43.3502 32.683 43.8132 32.619L44.4372 32.533A6 6 0 0 0 45.0072 32.414V32.544C45.0072 33.254 44.5972 33.697 43.8992 33.697 43.4592 33.697 43.1562 33.482 43.1562 33.147ZM47.6602 34.914H49.1783V31.843C49.1783 31.056 49.5983 30.593 50.2883 30.593 50.9753 30.593 51.2983 31.024 51.2983 31.821V34.914H52.8153V31.563C52.8153 30.109 51.9753 29.183 50.6413 29.183 49.9853 29.183 49.4583 29.42 49.1463 29.861V29.312H47.6602ZM38.9362 27.976C38.9362 27.405 39.3562 27.017 39.8942 27.017S40.8512 27.405 40.8512 27.977 40.4312 28.934 39.8942 28.934 38.9362 28.546 38.9362 27.976M40.6462 29.311V34.913H39.1302V29.31Z"/></svg>
1
+ <svg role="img" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="#e6222e"><title>Norwegian Air Shuttle</title><path d="M62.7903 30.612L61.5603 31.684 61.5473 31.695 63.0793 34.405A.26 .26 0 0 1 63.0393 34.71L62.8163 34.945 60.3003 33.272 60.7543 32.55 60.6473 32.48 59.5353 33.446C58.3183 34.502 56.9523 35.112 55.9693 35.038 55.5733 35.008 55.2653 34.869 55.0573 34.626 54.4773 33.953 54.8173 32.619 55.9003 31.301L56.0263 31.386C55.4543 32.182 55.3033 32.946 55.6443 33.334A.8 .8 0 0 0 56.2143 33.598C56.8143 33.644 57.6643 33.25 58.4843 32.541L58.7903 32.269 55.0143 29.757 55.2503 29.551A.63 .63 0 0 1 55.8623 29.431L61.1603 31.204 61.3063 31.078 61.2833 31.062C60.8863 30.799 60.5183 30.319 60.6383 29.884L61.5413 29.098A2.4 2.4 0 0 1 62.4743 28.592 2.4 2.4 0 0 1 63.3403 28.501C63.6183 28.524 63.8483 28.604 63.9303 28.703 63.9803 28.76 64.0703 28.935 63.9043 29.303 63.7343 29.676 63.3603 30.117 62.7913 30.613ZM0 34.914H1.518V31.843C1.518 31.056 1.938 30.593 2.625 30.593S3.637 31.024 3.637 31.823V34.913H5.153V31.564C5.153 30.109 4.315 29.184 2.981 29.184 2.324 29.184 1.798 29.42 1.486 29.861V29.312H0ZM8.946 29.182C7.17 29.182 5.933 30.422 5.933 32.112S7.17 35.042 8.945 35.042 11.9571 33.813 11.9571 32.112 10.7201 29.182 8.945 29.182M7.471 32.112C7.471 31.239 8.084 30.592 8.945 30.592S10.4201 31.238 10.4201 32.112 9.8061 33.632 8.945 33.632 7.471 32.986 7.471 32.112M14.3081 34.912V32.35C14.3081 31.144 15.0181 30.712 15.9001 30.647V29.226C15.2551 29.249 14.6101 29.517 14.2761 30.002V29.312H12.7911V34.914ZM21.9051 29.312H19.9251C19.6571 31.036 19.5601 31.413 18.9151 33.449 18.4521 31.586 18.3661 31.089 18.2051 29.311H16.6671A27.2001 27.2001 0 0 0 17.8291 34.913H19.7871C20.3671 33.276 20.7021 32.101 20.9171 30.917 21.1311 32.102 21.4651 33.277 22.0451 34.913H24.0031A27.4001 27.4001 0 0 0 25.1661 29.313H23.6271C23.4651 31.09 23.3801 31.585 22.9191 33.449 22.2731 31.413 22.1761 31.036 21.9061 29.311ZM28.6601 35.043C29.9622 35.043 30.9842 34.376 31.5112 33.18H29.7462Q29.3622 33.663 28.6721 33.665C27.9521 33.665 27.4341 33.265 27.2621 32.63H31.6402V32.22C31.6402 30.453 30.4362 29.182 28.6721 29.182S25.6821 30.411 25.6821 32.112 26.9181 35.042 28.6621 35.042ZM27.2941 31.499C27.5001 30.929 27.9821 30.562 28.6811 30.562S29.8332 30.918 30.0262 31.499ZM35.3042 36.983C36.9492 36.983 37.9502 35.97 37.9502 34.322V29.312H36.4642V29.839C36.1642 29.442 35.5622 29.182 34.9272 29.182 33.4412 29.182 32.3442 30.356 32.3442 31.929S33.4542 34.676 34.9272 34.676C35.5402 34.676 36.1312 34.428 36.4322 34.051V34.277C36.4322 35.107 36.0222 35.58 35.2922 35.58 34.8302 35.58 34.4642 35.387 34.3352 35.075H32.5502C32.8412 36.238 33.9072 36.981 35.3042 36.981M35.1962 33.265C34.4222 33.265 33.8842 32.726 33.8842 31.929S34.4122 30.591 35.1962 30.591 36.5192 31.142 36.5192 31.929 35.9822 33.266 35.1972 33.266M41.7802 31.025H43.4582C43.5782 30.701 43.8782 30.518 44.2982 30.518 44.7382 30.518 45.0082 30.712 45.0082 31.014Q45.0092 31.383 44.4482 31.445L43.5652 31.553C42.2852 31.703 41.6392 32.275 41.6392 33.266 41.6392 34.332 42.4032 35.044 43.5772 35.044 44.2012 35.044 44.7492 34.784 45.0392 34.365V34.914H46.5242V31.219C46.5242 29.904 45.7392 29.183 44.2862 29.183 42.9962 29.183 42.1242 29.829 41.7802 31.025M43.1572 33.145C43.1572 32.855 43.3502 32.683 43.8132 32.619L44.4372 32.533A6 6 0 0 0 45.0072 32.414V32.544C45.0072 33.254 44.5972 33.697 43.8992 33.697 43.4592 33.697 43.1562 33.482 43.1562 33.147ZM47.6602 34.914H49.1783V31.843C49.1783 31.056 49.5983 30.593 50.2883 30.593 50.9753 30.593 51.2983 31.024 51.2983 31.821V34.914H52.8153V31.563C52.8153 30.109 51.9753 29.183 50.6413 29.183 49.9853 29.183 49.4583 29.42 49.1463 29.861V29.312H47.6602ZM38.9362 27.976C38.9362 27.405 39.3562 27.017 39.8942 27.017S40.8512 27.405 40.8512 27.977 40.4312 28.934 39.8942 28.934 38.9362 28.546 38.9362 27.976M40.6462 29.311V34.913H39.1302V29.31Z"/></svg>
@@ -1 +1 @@
1
- <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><title>Pegasus Airlines</title><path fill-rule="evenodd" d="M6.249 2.5048L21.3263 2.2168S23.6413 2.9588 23.9544 5.7629C24.2794 8.5669 22.8363 11.397 20.6623 12.541 18.4872 13.677 17.0722 13.947 15.4222 13.983L10.6521 14.079 8.118 20.2292S9.175 21.1802 8.083 21.6352L0.1958 21.7832S-0.1452 21.6082 0.0728 21.1802C0.2828 20.7442 6.78 5.0028 6.78 5.0028S7.489 4.4968 6.815 3.9028C6.815 3.9028 6.0469 3.4928 5.9849 3.4318 5.7049 3.1258 6.248 2.5048 6.248 2.5048M11.6021 11.677S11.8381 11.712 12.1961 11.712C12.7821 11.712 13.7071 11.624 14.4511 11.197 15.1412 10.795 16.2852 9.817 16.7132 8.6539 17.0272 7.7639 17.4462 6.4969 16.8262 5.5369 16.3462 4.7928 16.1012 4.5758 15.2182 4.4088 14.7831 4.3218 14.5031 4.4188 14.5031 4.4188Z"/></svg>
1
+ <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><title>Pegasus Airlines</title><path fill-rule="evenodd" d="M6.249 2.5048L21.3263 2.2168S23.6413 2.9588 23.9544 5.7629C24.2794 8.5669 22.8363 11.397 20.6623 12.541 18.4872 13.677 17.0722 13.947 15.4222 13.983L10.6521 14.079 8.118 20.2292S9.175 21.1802 8.083 21.6352L.1958 21.7832S-.1452 21.6082 .0728 21.1802C.2828 20.7442 6.78 5.0028 6.78 5.0028S7.489 4.4968 6.815 3.9028C6.815 3.9028 6.0469 3.4928 5.9849 3.4318 5.7049 3.1258 6.248 2.5048 6.248 2.5048M11.6021 11.677S11.8381 11.712 12.1961 11.712C12.7821 11.712 13.7071 11.624 14.4511 11.197 15.1412 10.795 16.2852 9.817 16.7132 8.6539 17.0272 7.7639 17.4462 6.4969 16.8262 5.5369 16.3462 4.7928 16.1012 4.5758 15.2182 4.4088 14.7831 4.3218 14.5031 4.4188 14.5031 4.4188Z"/></svg>
@@ -1 +1 @@
1
- <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="#dc2c2b"><title>Pegasus Airlines</title><path fill-rule="evenodd" d="M6.249 2.5048L21.3263 2.2168S23.6413 2.9588 23.9544 5.7629C24.2794 8.5669 22.8363 11.397 20.6623 12.541 18.4872 13.677 17.0722 13.947 15.4222 13.983L10.6521 14.079 8.118 20.2292S9.175 21.1802 8.083 21.6352L0.1958 21.7832S-0.1452 21.6082 0.0728 21.1802C0.2828 20.7442 6.78 5.0028 6.78 5.0028S7.489 4.4968 6.815 3.9028C6.815 3.9028 6.0469 3.4928 5.9849 3.4318 5.7049 3.1258 6.248 2.5048 6.248 2.5048M11.6021 11.677S11.8381 11.712 12.1961 11.712C12.7821 11.712 13.7071 11.624 14.4511 11.197 15.1412 10.795 16.2852 9.817 16.7132 8.6539 17.0272 7.7639 17.4462 6.4969 16.8262 5.5369 16.3462 4.7928 16.1012 4.5758 15.2182 4.4088 14.7831 4.3218 14.5031 4.4188 14.5031 4.4188Z"/></svg>
1
+ <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="#dc2c2b"><title>Pegasus Airlines</title><path fill-rule="evenodd" d="M6.249 2.5048L21.3263 2.2168S23.6413 2.9588 23.9544 5.7629C24.2794 8.5669 22.8363 11.397 20.6623 12.541 18.4872 13.677 17.0722 13.947 15.4222 13.983L10.6521 14.079 8.118 20.2292S9.175 21.1802 8.083 21.6352L.1958 21.7832S-.1452 21.6082 .0728 21.1802C.2828 20.7442 6.78 5.0028 6.78 5.0028S7.489 4.4968 6.815 3.9028C6.815 3.9028 6.0469 3.4928 5.9849 3.4318 5.7049 3.1258 6.248 2.5048 6.248 2.5048M11.6021 11.677S11.8381 11.712 12.1961 11.712C12.7821 11.712 13.7071 11.624 14.4511 11.197 15.1412 10.795 16.2852 9.817 16.7132 8.6539 17.0272 7.7639 17.4462 6.4969 16.8262 5.5369 16.3462 4.7928 16.1012 4.5758 15.2182 4.4088 14.7831 4.3218 14.5031 4.4188 14.5031 4.4188Z"/></svg>
@@ -1 +1 @@
1
- <svg role="img" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><title>Spirit Airlines</title><path d="M53.1519 26.785H55.2669L55.9629 23.511H59.9999L59.2999 26.785H61.9689L61.4009 29.448H58.7359L57.8529 33.6C57.6559 34.532 57.8559 34.664 58.9429 34.664 59.4349 34.664 59.8399 34.646 60.3779 34.627L59.8439 37.139C59.0009 37.254 57.9169 37.331 56.7359 37.331 54.1089 37.331 53.1609 36.684 53.6359 34.455L54.7019 29.448H52.5859ZM47.6719 26.785H51.7079L49.5149 37.102H45.4799ZM48.4409 23.167H52.4769L51.9569 25.604H47.9219ZM36.9809 26.785L34.7868 37.103H38.7139L40.9079 26.784ZM45.5529 26.326C43.7529 26.326 40.8829 28.102 40.1269 31.263L39.9319 31.973H39.9999C40.5729 30.603 42.0089 29.868 43.9439 29.868 44.4639 29.868 45.0569 29.939 45.5339 30.047L46.3189 26.362A9 9 0 0 0 45.5519 26.327M31.2838 26.785H35.3178L33.1248 37.102H29.0898ZM32.0518 23.167H36.0878L35.5708 25.604H31.5328ZM21.3088 34.589C23.1568 34.589 24.3588 33.676 24.7228 31.962S24.2728 29.336 22.4268 29.336C20.5418 29.336 19.3328 30.362 18.9948 31.962 18.6548 33.561 19.4248 34.589 21.3088 34.589M16.0578 26.785H19.9798L19.6888 28.155H19.7258C20.8058 27.108 22.3598 26.518 23.9958 26.518 27.6518 26.518 29.6018 28.534 28.8418 32.115 28.2048 35.103 25.4818 37.519 21.6958 37.519 19.9058 37.519 18.6618 36.929 18.1358 36.169H18.0998L17.1078 40.833H13.0718ZM4.7397 33.885C4.7167 34.266 4.8057 34.57 5.1257 34.763 5.4427 34.972 5.9707 35.083 6.8457 35.083 7.7397 35.083 8.7297 34.913 8.8857 34.171 9.0047 33.619 8.6357 33.466 7.6717 33.352L4.1657 32.914C1.8657 32.627 0.8457 31.791 1.2177 30.039 1.8117 27.24 4.3977 26.365 8.2617 26.365 11.0018 26.365 14.3618 26.86 13.9678 29.791H9.4377C9.4927 29.354 9.2667 29.069 8.8997 28.916 8.5357 28.746 8.0167 28.686 7.4997 28.686 6.3397 28.686 5.5997 28.954 5.4477 29.659 5.3797 29.983 5.5857 30.267 6.5897 30.382L9.9928 30.762C12.7078 31.068 13.8958 31.924 13.4678 33.942 12.9498 36.378 10.3838 37.52 6.1017 37.52 3.2457 37.52-0.5113 37.007 0.0577 33.885ZM63.169 27.596Q63.241 27.596 63.283 27.564A0.12 0.12 0 0 0 63.324 27.471 0.12 0.12 0 0 0 63.29 27.379Q63.253 27.345 63.173 27.345H63.073V27.597ZM62.8609 27.183H63.211Q63.35 27.183 63.45 27.247T63.55 27.457A0.23 0.23 0 0 1 63.51 27.593 0.26 0.26 0 0 1 63.392 27.69L63.578 28.023H63.354L63.215 27.749H63.072V28.024H62.8619ZM63.186 28.273A0.62 0.62 0 0 0 63.627 28.089 0.6 0.6 0 0 0 63.756 27.883 0.8 0.8 0 0 0 63.802 27.614 0.8 0.8 0 0 0 63.756 27.344 0.7 0.7 0 0 0 63.627 27.133 0.6 0.6 0 0 0 63.43 26.995 0.6 0.6 0 0 0 63.186 26.947 0.6 0.6 0 0 0 62.939 26.997 0.6 0.6 0 0 0 62.7439 27.134 0.7 0.7 0 0 0 62.6159 27.344 0.8 0.8 0 0 0 62.5699 27.614 0.7 0.7 0 0 0 62.6159 27.882Q62.6619 28.002 62.7459 28.088A0.57 0.57 0 0 0 63.186 28.271M63.186 28.454A0.8 0.8 0 0 1 62.6099 28.22 0.8 0.8 0 0 1 62.4349 27.954 0.9 0.9 0 0 1 62.3709 27.614Q62.3709 27.429 62.4339 27.273A0.79 0.79 0 0 1 63.186 26.77Q63.354 26.77 63.502 26.831A0.8 0.8 0 0 1 63.937 27.273Q64 27.429 64 27.614A0.9 0.9 0 0 1 63.937 27.954 0.8 0.8 0 0 1 63.186 28.454" clip-rule="evenodd"/></svg>
1
+ <svg role="img" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><title>Spirit Airlines</title><path d="M53.1519 26.785H55.2669L55.9629 23.511H59.9999L59.2999 26.785H61.9689L61.4009 29.448H58.7359L57.8529 33.6C57.6559 34.532 57.8559 34.664 58.9429 34.664 59.4349 34.664 59.8399 34.646 60.3779 34.627L59.8439 37.139C59.0009 37.254 57.9169 37.331 56.7359 37.331 54.1089 37.331 53.1609 36.684 53.6359 34.455L54.7019 29.448H52.5859ZM47.6719 26.785H51.7079L49.5149 37.102H45.4799ZM48.4409 23.167H52.4769L51.9569 25.604H47.9219ZM36.9809 26.785L34.7868 37.103H38.7139L40.9079 26.784ZM45.5529 26.326C43.7529 26.326 40.8829 28.102 40.1269 31.263L39.9319 31.973H39.9999C40.5729 30.603 42.0089 29.868 43.9439 29.868 44.4639 29.868 45.0569 29.939 45.5339 30.047L46.3189 26.362A9 9 0 0 0 45.5519 26.327M31.2838 26.785H35.3178L33.1248 37.102H29.0898ZM32.0518 23.167H36.0878L35.5708 25.604H31.5328ZM21.3088 34.589C23.1568 34.589 24.3588 33.676 24.7228 31.962S24.2728 29.336 22.4268 29.336C20.5418 29.336 19.3328 30.362 18.9948 31.962 18.6548 33.561 19.4248 34.589 21.3088 34.589M16.0578 26.785H19.9798L19.6888 28.155H19.7258C20.8058 27.108 22.3598 26.518 23.9958 26.518 27.6518 26.518 29.6018 28.534 28.8418 32.115 28.2048 35.103 25.4818 37.519 21.6958 37.519 19.9058 37.519 18.6618 36.929 18.1358 36.169H18.0998L17.1078 40.833H13.0718ZM4.7397 33.885C4.7167 34.266 4.8057 34.57 5.1257 34.763 5.4427 34.972 5.9707 35.083 6.8457 35.083 7.7397 35.083 8.7297 34.913 8.8857 34.171 9.0047 33.619 8.6357 33.466 7.6717 33.352L4.1657 32.914C1.8657 32.627 .8457 31.791 1.2177 30.039 1.8117 27.24 4.3977 26.365 8.2617 26.365 11.0018 26.365 14.3618 26.86 13.9678 29.791H9.4377C9.4927 29.354 9.2667 29.069 8.8997 28.916 8.5357 28.746 8.0167 28.686 7.4997 28.686 6.3397 28.686 5.5997 28.954 5.4477 29.659 5.3797 29.983 5.5857 30.267 6.5897 30.382L9.9928 30.762C12.7078 31.068 13.8958 31.924 13.4678 33.942 12.9498 36.378 10.3838 37.52 6.1017 37.52 3.2457 37.52-.5113 37.007 .0577 33.885ZM63.169 27.596Q63.241 27.596 63.283 27.564A.12 .12 0 0 0 63.324 27.471 .12 .12 0 0 0 63.29 27.379Q63.253 27.345 63.173 27.345H63.073V27.597ZM62.8609 27.183H63.211Q63.35 27.183 63.45 27.247T63.55 27.457A.23 .23 0 0 1 63.51 27.593 .26 .26 0 0 1 63.392 27.69L63.578 28.023H63.354L63.215 27.749H63.072V28.024H62.8619ZM63.186 28.273A.62 .62 0 0 0 63.627 28.089 .6 .6 0 0 0 63.756 27.883 .8 .8 0 0 0 63.802 27.614 .8 .8 0 0 0 63.756 27.344 .7 .7 0 0 0 63.627 27.133 .6 .6 0 0 0 63.43 26.995 .6 .6 0 0 0 63.186 26.947 .6 .6 0 0 0 62.939 26.997 .6 .6 0 0 0 62.7439 27.134 .7 .7 0 0 0 62.6159 27.344 .8 .8 0 0 0 62.5699 27.614 .7 .7 0 0 0 62.6159 27.882Q62.6619 28.002 62.7459 28.088A.57 .57 0 0 0 63.186 28.271M63.186 28.454A.8 .8 0 0 1 62.6099 28.22 .8 .8 0 0 1 62.4349 27.954 .9 .9 0 0 1 62.3709 27.614Q62.3709 27.429 62.4339 27.273A.79 .79 0 0 1 63.186 26.77Q63.354 26.77 63.502 26.831A.8 .8 0 0 1 63.937 27.273Q64 27.429 64 27.614A.9 .9 0 0 1 63.937 27.954 .8 .8 0 0 1 63.186 28.454" clip-rule="evenodd"/></svg>
@@ -1 +1 @@
1
- <svg role="img" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="#231f20"><title>Spirit Airlines</title><path d="M53.1519 26.785H55.2669L55.9629 23.511H59.9999L59.2999 26.785H61.9689L61.4009 29.448H58.7359L57.8529 33.6C57.6559 34.532 57.8559 34.664 58.9429 34.664 59.4349 34.664 59.8399 34.646 60.3779 34.627L59.8439 37.139C59.0009 37.254 57.9169 37.331 56.7359 37.331 54.1089 37.331 53.1609 36.684 53.6359 34.455L54.7019 29.448H52.5859ZM47.6719 26.785H51.7079L49.5149 37.102H45.4799ZM48.4409 23.167H52.4769L51.9569 25.604H47.9219ZM36.9809 26.785L34.7868 37.103H38.7139L40.9079 26.784ZM45.5529 26.326C43.7529 26.326 40.8829 28.102 40.1269 31.263L39.9319 31.973H39.9999C40.5729 30.603 42.0089 29.868 43.9439 29.868 44.4639 29.868 45.0569 29.939 45.5339 30.047L46.3189 26.362A9 9 0 0 0 45.5519 26.327M31.2838 26.785H35.3178L33.1248 37.102H29.0898ZM32.0518 23.167H36.0878L35.5708 25.604H31.5328ZM21.3088 34.589C23.1568 34.589 24.3588 33.676 24.7228 31.962S24.2728 29.336 22.4268 29.336C20.5418 29.336 19.3328 30.362 18.9948 31.962 18.6548 33.561 19.4248 34.589 21.3088 34.589M16.0578 26.785H19.9798L19.6888 28.155H19.7258C20.8058 27.108 22.3598 26.518 23.9958 26.518 27.6518 26.518 29.6018 28.534 28.8418 32.115 28.2048 35.103 25.4818 37.519 21.6958 37.519 19.9058 37.519 18.6618 36.929 18.1358 36.169H18.0998L17.1078 40.833H13.0718ZM4.7397 33.885C4.7167 34.266 4.8057 34.57 5.1257 34.763 5.4427 34.972 5.9707 35.083 6.8457 35.083 7.7397 35.083 8.7297 34.913 8.8857 34.171 9.0047 33.619 8.6357 33.466 7.6717 33.352L4.1657 32.914C1.8657 32.627 0.8457 31.791 1.2177 30.039 1.8117 27.24 4.3977 26.365 8.2617 26.365 11.0018 26.365 14.3618 26.86 13.9678 29.791H9.4377C9.4927 29.354 9.2667 29.069 8.8997 28.916 8.5357 28.746 8.0167 28.686 7.4997 28.686 6.3397 28.686 5.5997 28.954 5.4477 29.659 5.3797 29.983 5.5857 30.267 6.5897 30.382L9.9928 30.762C12.7078 31.068 13.8958 31.924 13.4678 33.942 12.9498 36.378 10.3838 37.52 6.1017 37.52 3.2457 37.52-0.5113 37.007 0.0577 33.885ZM63.169 27.596Q63.241 27.596 63.283 27.564A0.12 0.12 0 0 0 63.324 27.471 0.12 0.12 0 0 0 63.29 27.379Q63.253 27.345 63.173 27.345H63.073V27.597ZM62.8609 27.183H63.211Q63.35 27.183 63.45 27.247T63.55 27.457A0.23 0.23 0 0 1 63.51 27.593 0.26 0.26 0 0 1 63.392 27.69L63.578 28.023H63.354L63.215 27.749H63.072V28.024H62.8619ZM63.186 28.273A0.62 0.62 0 0 0 63.627 28.089 0.6 0.6 0 0 0 63.756 27.883 0.8 0.8 0 0 0 63.802 27.614 0.8 0.8 0 0 0 63.756 27.344 0.7 0.7 0 0 0 63.627 27.133 0.6 0.6 0 0 0 63.43 26.995 0.6 0.6 0 0 0 63.186 26.947 0.6 0.6 0 0 0 62.939 26.997 0.6 0.6 0 0 0 62.7439 27.134 0.7 0.7 0 0 0 62.6159 27.344 0.8 0.8 0 0 0 62.5699 27.614 0.7 0.7 0 0 0 62.6159 27.882Q62.6619 28.002 62.7459 28.088A0.57 0.57 0 0 0 63.186 28.271M63.186 28.454A0.8 0.8 0 0 1 62.6099 28.22 0.8 0.8 0 0 1 62.4349 27.954 0.9 0.9 0 0 1 62.3709 27.614Q62.3709 27.429 62.4339 27.273A0.79 0.79 0 0 1 63.186 26.77Q63.354 26.77 63.502 26.831A0.8 0.8 0 0 1 63.937 27.273Q64 27.429 64 27.614A0.9 0.9 0 0 1 63.937 27.954 0.8 0.8 0 0 1 63.186 28.454" clip-rule="evenodd"/></svg>
1
+ <svg role="img" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="#231f20"><title>Spirit Airlines</title><path d="M53.1519 26.785H55.2669L55.9629 23.511H59.9999L59.2999 26.785H61.9689L61.4009 29.448H58.7359L57.8529 33.6C57.6559 34.532 57.8559 34.664 58.9429 34.664 59.4349 34.664 59.8399 34.646 60.3779 34.627L59.8439 37.139C59.0009 37.254 57.9169 37.331 56.7359 37.331 54.1089 37.331 53.1609 36.684 53.6359 34.455L54.7019 29.448H52.5859ZM47.6719 26.785H51.7079L49.5149 37.102H45.4799ZM48.4409 23.167H52.4769L51.9569 25.604H47.9219ZM36.9809 26.785L34.7868 37.103H38.7139L40.9079 26.784ZM45.5529 26.326C43.7529 26.326 40.8829 28.102 40.1269 31.263L39.9319 31.973H39.9999C40.5729 30.603 42.0089 29.868 43.9439 29.868 44.4639 29.868 45.0569 29.939 45.5339 30.047L46.3189 26.362A9 9 0 0 0 45.5519 26.327M31.2838 26.785H35.3178L33.1248 37.102H29.0898ZM32.0518 23.167H36.0878L35.5708 25.604H31.5328ZM21.3088 34.589C23.1568 34.589 24.3588 33.676 24.7228 31.962S24.2728 29.336 22.4268 29.336C20.5418 29.336 19.3328 30.362 18.9948 31.962 18.6548 33.561 19.4248 34.589 21.3088 34.589M16.0578 26.785H19.9798L19.6888 28.155H19.7258C20.8058 27.108 22.3598 26.518 23.9958 26.518 27.6518 26.518 29.6018 28.534 28.8418 32.115 28.2048 35.103 25.4818 37.519 21.6958 37.519 19.9058 37.519 18.6618 36.929 18.1358 36.169H18.0998L17.1078 40.833H13.0718ZM4.7397 33.885C4.7167 34.266 4.8057 34.57 5.1257 34.763 5.4427 34.972 5.9707 35.083 6.8457 35.083 7.7397 35.083 8.7297 34.913 8.8857 34.171 9.0047 33.619 8.6357 33.466 7.6717 33.352L4.1657 32.914C1.8657 32.627 .8457 31.791 1.2177 30.039 1.8117 27.24 4.3977 26.365 8.2617 26.365 11.0018 26.365 14.3618 26.86 13.9678 29.791H9.4377C9.4927 29.354 9.2667 29.069 8.8997 28.916 8.5357 28.746 8.0167 28.686 7.4997 28.686 6.3397 28.686 5.5997 28.954 5.4477 29.659 5.3797 29.983 5.5857 30.267 6.5897 30.382L9.9928 30.762C12.7078 31.068 13.8958 31.924 13.4678 33.942 12.9498 36.378 10.3838 37.52 6.1017 37.52 3.2457 37.52-.5113 37.007 .0577 33.885ZM63.169 27.596Q63.241 27.596 63.283 27.564A.12 .12 0 0 0 63.324 27.471 .12 .12 0 0 0 63.29 27.379Q63.253 27.345 63.173 27.345H63.073V27.597ZM62.8609 27.183H63.211Q63.35 27.183 63.45 27.247T63.55 27.457A.23 .23 0 0 1 63.51 27.593 .26 .26 0 0 1 63.392 27.69L63.578 28.023H63.354L63.215 27.749H63.072V28.024H62.8619ZM63.186 28.273A.62 .62 0 0 0 63.627 28.089 .6 .6 0 0 0 63.756 27.883 .8 .8 0 0 0 63.802 27.614 .8 .8 0 0 0 63.756 27.344 .7 .7 0 0 0 63.627 27.133 .6 .6 0 0 0 63.43 26.995 .6 .6 0 0 0 63.186 26.947 .6 .6 0 0 0 62.939 26.997 .6 .6 0 0 0 62.7439 27.134 .7 .7 0 0 0 62.6159 27.344 .8 .8 0 0 0 62.5699 27.614 .7 .7 0 0 0 62.6159 27.882Q62.6619 28.002 62.7459 28.088A.57 .57 0 0 0 63.186 28.271M63.186 28.454A.8 .8 0 0 1 62.6099 28.22 .8 .8 0 0 1 62.4349 27.954 .9 .9 0 0 1 62.3709 27.614Q62.3709 27.429 62.4339 27.273A.79 .79 0 0 1 63.186 26.77Q63.354 26.77 63.502 26.831A.8 .8 0 0 1 63.937 27.273Q64 27.429 64 27.614A.9 .9 0 0 1 63.937 27.954 .8 .8 0 0 1 63.186 28.454" clip-rule="evenodd"/></svg>
@@ -1 +1 @@
1
- <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><title>Viva</title><path d="M16.126 24A7.843 7.843 0 0 1 8.293 16.151V15.726H7.87A7.77 7.77 0 0 1 2.336 13.424 7.8 7.8 0 0 1 0.041 7.877C0.041 5.789 0.859 3.819 2.337 2.334A7.68 7.68 0 0 1 7.874 0H16.126C18.212 0 20.178 0.818 21.663 2.303A7.8 7.8 0 0 1 23.959 7.849V16.123A7.865 7.865 0 0 1 16.126 24M7.87 3.665A4.15 4.15 0 0 0 4.907 4.879 4.17 4.17 0 0 0 3.7 7.85C3.7 8.97 4.121 10.03 4.908 10.82A4.17 4.17 0 0 0 7.871 12.03H11.954V16.12C11.954 18.423 13.829 20.305 16.126 20.305A4.184 4.184 0 0 0 20.3 16.12V7.846A4.17 4.17 0 0 0 19.09 4.879 4.15 4.15 0 0 0 16.126 3.665Z"/></svg>
1
+ <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><title>Viva</title><path d="M16.126 24A7.843 7.843 0 0 1 8.293 16.151V15.726H7.87A7.77 7.77 0 0 1 2.336 13.424 7.8 7.8 0 0 1 .041 7.877C.041 5.789 .859 3.819 2.337 2.334A7.68 7.68 0 0 1 7.874 0H16.126C18.212 0 20.178 .818 21.663 2.303A7.8 7.8 0 0 1 23.959 7.849V16.123A7.865 7.865 0 0 1 16.126 24M7.87 3.665A4.15 4.15 0 0 0 4.907 4.879 4.17 4.17 0 0 0 3.7 7.85C3.7 8.97 4.121 10.03 4.908 10.82A4.17 4.17 0 0 0 7.871 12.03H11.954V16.12C11.954 18.423 13.829 20.305 16.126 20.305A4.184 4.184 0 0 0 20.3 16.12V7.846A4.17 4.17 0 0 0 19.09 4.879 4.15 4.15 0 0 0 16.126 3.665Z"/></svg>
@@ -1 +1 @@
1
- <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="#73c900"><title>Viva</title><path d="M16.126 24A7.843 7.843 0 0 1 8.293 16.151V15.726H7.87A7.77 7.77 0 0 1 2.336 13.424 7.8 7.8 0 0 1 0.041 7.877C0.041 5.789 0.859 3.819 2.337 2.334A7.68 7.68 0 0 1 7.874 0H16.126C18.212 0 20.178 0.818 21.663 2.303A7.8 7.8 0 0 1 23.959 7.849V16.123A7.865 7.865 0 0 1 16.126 24M7.87 3.665A4.15 4.15 0 0 0 4.907 4.879 4.17 4.17 0 0 0 3.7 7.85C3.7 8.97 4.121 10.03 4.908 10.82A4.17 4.17 0 0 0 7.871 12.03H11.954V16.12C11.954 18.423 13.829 20.305 16.126 20.305A4.184 4.184 0 0 0 20.3 16.12V7.846A4.17 4.17 0 0 0 19.09 4.879 4.15 4.15 0 0 0 16.126 3.665Z"/></svg>
1
+ <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="#73c900"><title>Viva</title><path d="M16.126 24A7.843 7.843 0 0 1 8.293 16.151V15.726H7.87A7.77 7.77 0 0 1 2.336 13.424 7.8 7.8 0 0 1 .041 7.877C.041 5.789 .859 3.819 2.337 2.334A7.68 7.68 0 0 1 7.874 0H16.126C18.212 0 20.178 .818 21.663 2.303A7.8 7.8 0 0 1 23.959 7.849V16.123A7.865 7.865 0 0 1 16.126 24M7.87 3.665A4.15 4.15 0 0 0 4.907 4.879 4.17 4.17 0 0 0 3.7 7.85C3.7 8.97 4.121 10.03 4.908 10.82A4.17 4.17 0 0 0 7.871 12.03H11.954V16.12C11.954 18.423 13.829 20.305 16.126 20.305A4.184 4.184 0 0 0 20.3 16.12V7.846A4.17 4.17 0 0 0 19.09 4.879 4.15 4.15 0 0 0 16.126 3.665Z"/></svg>
@@ -1 +1 @@
1
- <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Volaris</title><path fill="#eeefef" d="M10.29 0H13.715V3.43H10.29Z"/><path fill="#b5d5f0" d="M10.29 3.43H13.715V6.857H10.29Z"/><path fill="#6cadde" d="M10.29 6.857H13.715V10.285H10.29Z"/><path fill="#b5d5f0" d="M6.863 6.857H10.29V10.285H6.86Z"/><path fill="#d6a6cc" d="M6.863 13.715H10.29V17.145H6.86Z"/><path fill="#b5d5f0" d="M13.715 6.857H17.137V10.285H13.713Z"/><path fill="#dae7a2" d="M13.715 13.715H17.137V17.145H13.713Z"/><path fill="#231f20" d="M10.29 10.285H13.715V13.715H10.29Z"/><path fill="#91268f" d="M10.29 13.715H13.715V17.145H10.29Z"/><path fill="#d6a6cc" d="M10.29 17.144H13.715V20.572H10.29Z"/><path fill="#eeefef" d="M10.29 20.572H13.715V24H10.29ZM0.01 10.285H3.436V13.715H0.013Z"/><path fill="#d6a6cc" d="M3.438 10.285H6.862V13.715H3.439Z"/><path fill="#91268f" d="M6.863 10.285H10.29V13.715H6.86Z"/><path fill="#8dc63f" d="M13.715 10.285H17.137V13.715H13.713Z"/><path fill="#dae7a2" d="M17.139 10.285H20.564V13.715H17.137Z"/><path fill="#eeefef" d="M20.566 10.285H23.99V13.715H20.565Z"/></svg>
1
+ <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Volaris</title><path fill="#eeefef" d="M10.29 0H13.715V3.43H10.29Z"/><path fill="#b5d5f0" d="M10.29 3.43H13.715V6.857H10.29Z"/><path fill="#6cadde" d="M10.29 6.857H13.715V10.285H10.29Z"/><path fill="#b5d5f0" d="M6.863 6.857H10.29V10.285H6.86Z"/><path fill="#d6a6cc" d="M6.863 13.715H10.29V17.145H6.86Z"/><path fill="#b5d5f0" d="M13.715 6.857H17.137V10.285H13.713Z"/><path fill="#dae7a2" d="M13.715 13.715H17.137V17.145H13.713Z"/><path fill="#231f20" d="M10.29 10.285H13.715V13.715H10.29Z"/><path fill="#91268f" d="M10.29 13.715H13.715V17.145H10.29Z"/><path fill="#d6a6cc" d="M10.29 17.144H13.715V20.572H10.29Z"/><path fill="#eeefef" d="M10.29 20.572H13.715V24H10.29ZM.01 10.285H3.436V13.715H.013Z"/><path fill="#d6a6cc" d="M3.438 10.285H6.862V13.715H3.439Z"/><path fill="#91268f" d="M6.863 10.285H10.29V13.715H6.86Z"/><path fill="#8dc63f" d="M13.715 10.285H17.137V13.715H13.713Z"/><path fill="#dae7a2" d="M17.139 10.285H20.564V13.715H17.137Z"/><path fill="#eeefef" d="M20.566 10.285H23.99V13.715H20.565Z"/></svg>
@@ -1 +1 @@
1
- <svg role="img" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"><title>Vueling</title><path fill="#504f4e" d="M31.7887 21.6869C32.2407 21.5519 32.7687 21.6369 33.1257 21.9589 33.4257 22.2389 33.5537 22.6589 33.5557 23.0639V34.9799C33.5357 35.5749 33.6617 36.2419 33.2937 36.7599 32.9267 37.2939 32.1567 37.4339 31.5907 37.1529 31.1307 36.9249 30.8837 36.3959 30.8907 35.8959V23.5699C30.8957 23.2029 30.8527 22.8229 30.9807 22.4719A1.26 1.26 0 0 1 31.7887 21.6869M21.2057 29.1769C21.8817 28.2139 23.0087 27.6169 24.1727 27.5059 25.4077 27.3689 26.7717 27.5789 27.7287 28.4279 28.6187 29.2099 29.0147 30.4079 29.0957 31.5599 29.1207 32.0139 29.1857 32.5099 28.9507 32.9219 28.7667 33.2479 28.3607 33.3339 28.0157 33.3359 26.2997 33.3399 24.5817 33.3339 22.8657 33.3379 22.9737 33.9779 23.2727 34.6609 23.9057 34.9279 24.7917 35.3059 25.7907 35.0849 26.6747 34.8179 27.0247 34.7149 27.3887 34.5859 27.7607 34.6379 28.2787 34.7499 28.6467 35.3049 28.5887 35.8249 28.5387 36.2209 28.2117 36.5049 27.8857 36.6949 27.2857 37.0249 26.6037 37.1589 25.9317 37.2379 24.6567 37.3859 23.2787 37.2879 22.1857 36.5559 21.1037 35.8559 20.4827 34.6089 20.3307 33.3559 20.1547 31.9259 20.3537 30.3759 21.2057 29.1779M23.7277 29.7729C23.0877 30.1099 22.9297 30.8889 22.8657 31.5449H26.6217C26.5737 30.8769 26.3507 30.1189 25.7117 29.7829A2.35 2.35 0 0 0 23.7277 29.7729M10.8657 27.5769C11.3257 27.4469 11.8677 27.5269 12.2127 27.8739 12.5047 28.1609 12.6217 28.5779 12.6187 28.9779Q12.6217 31.1899 12.6187 33.4009C12.6167 33.9329 12.8337 34.4979 13.2987 34.7929 13.7067 35.0569 14.2157 35.0829 14.6867 35.0259 15.0907 34.9759 15.4947 34.7859 15.7287 34.4429 15.9937 34.0689 16.0317 33.5929 16.0377 33.1489V28.8149C16.0407 28.3119 16.3437 27.8069 16.8217 27.6219 17.3397 27.4119 18.0097 27.5119 18.3747 27.9619 18.6577 28.2879 18.7127 28.7369 18.7047 29.1539 18.6947 30.4839 18.7147 31.8139 18.6947 33.1439 18.6687 34.2829 18.3597 35.5009 17.4937 36.2959 16.5637 37.1529 15.2317 37.3599 14.0117 37.3129 12.8887 37.2729 11.6957 36.9359 10.9297 36.0679 10.2277 35.2729 9.9657 34.1849 9.9537 33.1479Q9.9517 30.9809 9.9537 28.8149C9.9617 28.2649 10.3317 27.7299 10.8657 27.5769M43.6138 27.5909C44.8638 27.4339 46.2288 27.4909 47.3328 28.1689 48.0918 28.6239 48.6078 29.4089 48.8328 30.2569 48.9858 30.8169 49.0358 31.4019 49.0368 31.9829Q49.0348 33.8969 49.0368 35.8129C49.0448 36.2349 48.9068 36.6809 48.5828 36.9669 48.1068 37.3929 47.3258 37.4039 46.8288 37.0039A1.37 1.37 0 0 1 46.3468 35.8979C46.3508 34.6209 46.3468 33.3419 46.3488 32.0639 46.3518 31.5009 46.3718 30.8819 46.0288 30.3999 45.7488 29.9859 45.2428 29.7969 44.7588 29.7779 44.2788 29.7649 43.7578 29.8559 43.3988 30.1979 43.0658 30.5299 42.9488 31.0179 42.9518 31.4779 42.9548 32.9259 42.9518 34.3749 42.9548 35.8219 42.9548 36.1669 42.8798 36.5249 42.6648 36.8019 42.2068 37.4139 41.1878 37.4649 40.6628 36.9119 40.3998 36.6479 40.2828 36.2679 40.2858 35.9009V32.9839C40.2958 32.0959 40.2258 31.1909 40.4658 30.3239 40.6658 29.4979 41.1438 28.7309 41.8488 28.2459 42.3748 27.8889 42.9888 27.6859 43.6138 27.5909M52.2528 28.6409C53.1628 27.8409 54.4008 27.4909 55.5978 27.5209 56.7698 27.5229 57.9638 27.7629 58.9918 28.3449 59.4638 28.6009 59.8188 29.0989 59.8058 29.6499V37.9039C59.7898 39.1499 59.3898 40.4699 58.4158 41.3039 57.4398 42.1439 56.1008 42.3909 54.8458 42.3739 53.8798 42.3339 52.9088 42.0899 52.0778 41.5879 51.7778 41.3949 51.4948 41.1559 51.3198 40.8399 50.9998 40.2529 51.3718 39.4139 52.0268 39.2659 52.5088 39.1919 52.9598 39.4279 53.3938 39.6029A4.3 4.3 0 0 0 55.2678 39.9859C55.8178 39.9859 56.4078 39.8479 56.8078 39.4459 57.1778 39.0609 57.2918 38.5029 57.2878 37.9859 57.2858 37.5059 57.2828 37.0259 57.2878 36.5459 56.5328 37.2079 55.4758 37.3679 54.5058 37.3059 53.4888 37.2419 52.4938 36.7899 51.8288 36.0089 50.8918 34.9369 50.6158 33.4449 50.6918 32.0589 50.7568 30.7789 51.2658 29.4849 52.2518 28.6389M55.0598 29.7989A1.94 1.94 0 0 0 53.9678 30.3519C53.4428 30.9219 53.3238 31.7359 53.3238 32.4819 53.3338 33.1519 53.3878 33.8819 53.8038 34.4389 54.1978 34.9509 54.8968 35.0689 55.5068 35.0209 56.0868 34.9909 56.6608 34.6749 56.9288 34.1449 57.4288 33.1969 57.2518 32.0909 57.2858 31.0649 57.2678 30.7579 57.3758 30.3649 57.0718 30.1649 56.5018 29.7449 55.7368 29.6989 55.0608 29.7999M0.1357 28.2849C0.4177 27.7369 1.1157 27.5229 1.6897 27.6409 2.1467 27.7269 2.4737 28.1329 2.5877 28.5649 3.1137 30.3419 3.6427 32.1189 4.1647 33.8979A1.1 1.1 0 0 0 4.2997 34.1919C4.8517 32.3719 5.3867 30.5459 5.9267 28.7199 6.0297 28.3299 6.2167 27.9199 6.6007 27.7359 7.2157 27.4559 8.0637 27.6539 8.4137 28.2559 8.6337 28.6559 8.5787 29.1429 8.4177 29.5529 7.6677 31.6389 6.9337 33.7289 6.1877 35.8159 6.0307 36.2159 5.8807 36.6459 5.5677 36.9559 5.2437 37.2659 4.7707 37.2959 4.3477 37.2989 3.8777 37.3009 3.3537 37.2569 2.9937 36.9189 2.6627 36.6019 2.4897 36.1619 2.3337 35.7419 1.5927 33.6479 0.8567 31.5519 0.1127 29.4619-0.0243 29.0859-0.0583 28.6479 0.1357 28.2849M36.4658 27.7049C37.0258 27.4819 37.7398 27.6509 38.0808 28.1649 38.2848 28.4489 38.3308 28.8089 38.3288 29.1509Q38.3258 32.4849 38.3288 35.8179C38.3288 36.1899 38.2358 36.5779 37.9818 36.8609 37.5018 37.4279 36.5198 37.4439 36.0208 36.8949A1.5 1.5 0 0 1 35.6608 35.9049V28.9829C35.6458 28.4489 35.9558 27.8969 36.4668 27.7049"/><path fill="#ffcc00" d="M61.6348 22.6299A2.17 2.17 0 0 1 62.9448 22.6299C63.4678 22.7989 63.8828 23.2679 63.9748 23.8119 64.0308 24.2799 64.0118 24.7949 63.7248 25.1919 63.1648 25.9739 61.9538 26.0799 61.1928 25.5489 60.2128 24.8189 60.4128 22.9869 61.6358 22.6289"/></svg>
1
+ <svg role="img" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"><title>Vueling</title><path fill="#504f4e" d="M31.7887 21.6869C32.2407 21.5519 32.7687 21.6369 33.1257 21.9589 33.4257 22.2389 33.5537 22.6589 33.5557 23.0639V34.9799C33.5357 35.5749 33.6617 36.2419 33.2937 36.7599 32.9267 37.2939 32.1567 37.4339 31.5907 37.1529 31.1307 36.9249 30.8837 36.3959 30.8907 35.8959V23.5699C30.8957 23.2029 30.8527 22.8229 30.9807 22.4719A1.26 1.26 0 0 1 31.7887 21.6869M21.2057 29.1769C21.8817 28.2139 23.0087 27.6169 24.1727 27.5059 25.4077 27.3689 26.7717 27.5789 27.7287 28.4279 28.6187 29.2099 29.0147 30.4079 29.0957 31.5599 29.1207 32.0139 29.1857 32.5099 28.9507 32.9219 28.7667 33.2479 28.3607 33.3339 28.0157 33.3359 26.2997 33.3399 24.5817 33.3339 22.8657 33.3379 22.9737 33.9779 23.2727 34.6609 23.9057 34.9279 24.7917 35.3059 25.7907 35.0849 26.6747 34.8179 27.0247 34.7149 27.3887 34.5859 27.7607 34.6379 28.2787 34.7499 28.6467 35.3049 28.5887 35.8249 28.5387 36.2209 28.2117 36.5049 27.8857 36.6949 27.2857 37.0249 26.6037 37.1589 25.9317 37.2379 24.6567 37.3859 23.2787 37.2879 22.1857 36.5559 21.1037 35.8559 20.4827 34.6089 20.3307 33.3559 20.1547 31.9259 20.3537 30.3759 21.2057 29.1779M23.7277 29.7729C23.0877 30.1099 22.9297 30.8889 22.8657 31.5449H26.6217C26.5737 30.8769 26.3507 30.1189 25.7117 29.7829A2.35 2.35 0 0 0 23.7277 29.7729M10.8657 27.5769C11.3257 27.4469 11.8677 27.5269 12.2127 27.8739 12.5047 28.1609 12.6217 28.5779 12.6187 28.9779Q12.6217 31.1899 12.6187 33.4009C12.6167 33.9329 12.8337 34.4979 13.2987 34.7929 13.7067 35.0569 14.2157 35.0829 14.6867 35.0259 15.0907 34.9759 15.4947 34.7859 15.7287 34.4429 15.9937 34.0689 16.0317 33.5929 16.0377 33.1489V28.8149C16.0407 28.3119 16.3437 27.8069 16.8217 27.6219 17.3397 27.4119 18.0097 27.5119 18.3747 27.9619 18.6577 28.2879 18.7127 28.7369 18.7047 29.1539 18.6947 30.4839 18.7147 31.8139 18.6947 33.1439 18.6687 34.2829 18.3597 35.5009 17.4937 36.2959 16.5637 37.1529 15.2317 37.3599 14.0117 37.3129 12.8887 37.2729 11.6957 36.9359 10.9297 36.0679 10.2277 35.2729 9.9657 34.1849 9.9537 33.1479Q9.9517 30.9809 9.9537 28.8149C9.9617 28.2649 10.3317 27.7299 10.8657 27.5769M43.6138 27.5909C44.8638 27.4339 46.2288 27.4909 47.3328 28.1689 48.0918 28.6239 48.6078 29.4089 48.8328 30.2569 48.9858 30.8169 49.0358 31.4019 49.0368 31.9829Q49.0348 33.8969 49.0368 35.8129C49.0448 36.2349 48.9068 36.6809 48.5828 36.9669 48.1068 37.3929 47.3258 37.4039 46.8288 37.0039A1.37 1.37 0 0 1 46.3468 35.8979C46.3508 34.6209 46.3468 33.3419 46.3488 32.0639 46.3518 31.5009 46.3718 30.8819 46.0288 30.3999 45.7488 29.9859 45.2428 29.7969 44.7588 29.7779 44.2788 29.7649 43.7578 29.8559 43.3988 30.1979 43.0658 30.5299 42.9488 31.0179 42.9518 31.4779 42.9548 32.9259 42.9518 34.3749 42.9548 35.8219 42.9548 36.1669 42.8798 36.5249 42.6648 36.8019 42.2068 37.4139 41.1878 37.4649 40.6628 36.9119 40.3998 36.6479 40.2828 36.2679 40.2858 35.9009V32.9839C40.2958 32.0959 40.2258 31.1909 40.4658 30.3239 40.6658 29.4979 41.1438 28.7309 41.8488 28.2459 42.3748 27.8889 42.9888 27.6859 43.6138 27.5909M52.2528 28.6409C53.1628 27.8409 54.4008 27.4909 55.5978 27.5209 56.7698 27.5229 57.9638 27.7629 58.9918 28.3449 59.4638 28.6009 59.8188 29.0989 59.8058 29.6499V37.9039C59.7898 39.1499 59.3898 40.4699 58.4158 41.3039 57.4398 42.1439 56.1008 42.3909 54.8458 42.3739 53.8798 42.3339 52.9088 42.0899 52.0778 41.5879 51.7778 41.3949 51.4948 41.1559 51.3198 40.8399 50.9998 40.2529 51.3718 39.4139 52.0268 39.2659 52.5088 39.1919 52.9598 39.4279 53.3938 39.6029A4.3 4.3 0 0 0 55.2678 39.9859C55.8178 39.9859 56.4078 39.8479 56.8078 39.4459 57.1778 39.0609 57.2918 38.5029 57.2878 37.9859 57.2858 37.5059 57.2828 37.0259 57.2878 36.5459 56.5328 37.2079 55.4758 37.3679 54.5058 37.3059 53.4888 37.2419 52.4938 36.7899 51.8288 36.0089 50.8918 34.9369 50.6158 33.4449 50.6918 32.0589 50.7568 30.7789 51.2658 29.4849 52.2518 28.6389M55.0598 29.7989A1.94 1.94 0 0 0 53.9678 30.3519C53.4428 30.9219 53.3238 31.7359 53.3238 32.4819 53.3338 33.1519 53.3878 33.8819 53.8038 34.4389 54.1978 34.9509 54.8968 35.0689 55.5068 35.0209 56.0868 34.9909 56.6608 34.6749 56.9288 34.1449 57.4288 33.1969 57.2518 32.0909 57.2858 31.0649 57.2678 30.7579 57.3758 30.3649 57.0718 30.1649 56.5018 29.7449 55.7368 29.6989 55.0608 29.7999M.1357 28.2849C.4177 27.7369 1.1157 27.5229 1.6897 27.6409 2.1467 27.7269 2.4737 28.1329 2.5877 28.5649 3.1137 30.3419 3.6427 32.1189 4.1647 33.8979A1.1 1.1 0 0 0 4.2997 34.1919C4.8517 32.3719 5.3867 30.5459 5.9267 28.7199 6.0297 28.3299 6.2167 27.9199 6.6007 27.7359 7.2157 27.4559 8.0637 27.6539 8.4137 28.2559 8.6337 28.6559 8.5787 29.1429 8.4177 29.5529 7.6677 31.6389 6.9337 33.7289 6.1877 35.8159 6.0307 36.2159 5.8807 36.6459 5.5677 36.9559 5.2437 37.2659 4.7707 37.2959 4.3477 37.2989 3.8777 37.3009 3.3537 37.2569 2.9937 36.9189 2.6627 36.6019 2.4897 36.1619 2.3337 35.7419 1.5927 33.6479 .8567 31.5519 .1127 29.4619-.0243 29.0859-.0583 28.6479 .1357 28.2849M36.4658 27.7049C37.0258 27.4819 37.7398 27.6509 38.0808 28.1649 38.2848 28.4489 38.3308 28.8089 38.3288 29.1509Q38.3258 32.4849 38.3288 35.8179C38.3288 36.1899 38.2358 36.5779 37.9818 36.8609 37.5018 37.4279 36.5198 37.4439 36.0208 36.8949A1.5 1.5 0 0 1 35.6608 35.9049V28.9829C35.6458 28.4489 35.9558 27.8969 36.4668 27.7049"/><path fill="#ffcc00" d="M61.6348 22.6299A2.17 2.17 0 0 1 62.9448 22.6299C63.4678 22.7989 63.8828 23.2679 63.9748 23.8119 64.0308 24.2799 64.0118 24.7949 63.7248 25.1919 63.1648 25.9739 61.9538 26.0799 61.1928 25.5489 60.2128 24.8189 60.4128 22.9869 61.6358 22.6289"/></svg>
@@ -0,0 +1 @@
1
+ <svg role="img" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><title>Winair</title><path d="M19.53333 26.70556c1.02223 0 1.85556-.4889 1.85556-1.1s-.83333-1.1-1.85556-1.1-1.85555.48888-1.85555 1.1.83333 1.1 1.85555 1.1m31.27778 0c1.02222 0 1.85556-.4889 1.85556-1.1s-.83334-1.1-1.85556-1.1-1.85555.48888-1.85555 1.1.83333 1.1 1.85555 1.1m-33.25555 1.9h4.22222v10.88888h-4.22222zm30.66666 0h4.44445v10.88888h-4.44445zm14.88889 9.77777v-3.1111c0-.44445-.22222-1.77779-1.11111-1.77779 0 0 1.11111-.44444 1.11111-1.33333V29.9389c0-.96667-.88889-2.22222-2-2.22222h-28c-.66667 0-1.77778.53333-1.77778 1.55555v1.11111c0 .25556-.15555.61111-.44444.66667-.5.08889-.66667-.47778-.77778-.66667S28.96667 28.75 28.8889 28.60556s-.85556-.87778-1.77778-.87778-13.33333-.01111-14.02222-.01111c-1.31111 0-1.31111 1.48889-1.31111 2v8c0 .24444-.22222.66666-.66667.66666s-.66667-.44444-.66667-.66666v-9.9889h-4v9.9889c0 .22222-.22222.66666-.66666.66666s-.66667-.44444-.66667-.66666v-8c0-.44445 0-2-1.33333-2H0v.22222s1.11111-.14445 1.11111.88889v8c0 .44444.44445 2.66666 2.44445 2.66666h9.77777c2 0 2.44445-2.22222 2.44445-2.66666v-7.55556c0-1.1.88889-1.1111.88889-1.1111h5.77777c.13334 0 .8889.0111.8889 1.1111v7.55556c0 .44444.44444 2.44444-.8889 2.44444v.22222h4.66667v-5.1111l-3.46667-6.21112.8889-.02222 6.8 11.34444h4.22222V29.27222c0-.66666.22222-1.1.88888-1.1s3.55556-.0111 4.44445-.0111 1.77778.74444 1.77778 1.77777.0111 2.88889.0111 3.11111-.0111.66667-.56666.66667-.55555-.66667-.55555-.66667v-3.11111c0-.44445-.66667-1.33333-1.33334-1.33333h-2.88889V33.05l-.88889.44444v3.33334l.8889.44444v2.22222h4.22222v-2.22222s0-.66666.55555-.66666.56667.66666.56667.66666v.44445c0 .66666.43333 1.77777 1.76666 1.77777h3.33334v-.22222s-.8889.22222-.8889-.88889v-6.66666c0-1.1889-.67777-3.55556-2.44444-3.55556 0 0 8 .01111 8.22223.01111s1.1111-.0111 1.1111 1.1v10.22222h4v-4c0-.52222 0-.88888.53334-.88888.57778 0 .57778.44444.57778.88888v2.22223c0 .66666.44444 1.77777 1.55555 1.77777H64v-.22222s-.88889 0-.88889-.88889m-4.22222-5.88889c0 .31112-.24445.55556-.55556.55556s-.55555-.24444-.55555-.55556v-3.33333c0-.31111.24444-.55555.55555-.55555s.55556.24444.55556.55555z"/></svg>
@@ -0,0 +1 @@
1
+ <svg role="img" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="#cd2026"><title>Winair</title><path d="M19.53333 26.70556c1.02223 0 1.85556-.4889 1.85556-1.1s-.83333-1.1-1.85556-1.1-1.85555.48888-1.85555 1.1.83333 1.1 1.85555 1.1m31.27778 0c1.02222 0 1.85556-.4889 1.85556-1.1s-.83334-1.1-1.85556-1.1-1.85555.48888-1.85555 1.1.83333 1.1 1.85555 1.1m-33.25555 1.9h4.22222v10.88888h-4.22222zm30.66666 0h4.44445v10.88888h-4.44445zm14.88889 9.77777v-3.1111c0-.44445-.22222-1.77779-1.11111-1.77779 0 0 1.11111-.44444 1.11111-1.33333V29.9389c0-.96667-.88889-2.22222-2-2.22222h-28c-.66667 0-1.77778.53333-1.77778 1.55555v1.11111c0 .25556-.15555.61111-.44444.66667-.5.08889-.66667-.47778-.77778-.66667S28.96667 28.75 28.8889 28.60556s-.85556-.87778-1.77778-.87778-13.33333-.01111-14.02222-.01111c-1.31111 0-1.31111 1.48889-1.31111 2v8c0 .24444-.22222.66666-.66667.66666s-.66667-.44444-.66667-.66666v-9.9889h-4v9.9889c0 .22222-.22222.66666-.66666.66666s-.66667-.44444-.66667-.66666v-8c0-.44445 0-2-1.33333-2H0v.22222s1.11111-.14445 1.11111.88889v8c0 .44444.44445 2.66666 2.44445 2.66666h9.77777c2 0 2.44445-2.22222 2.44445-2.66666v-7.55556c0-1.1.88889-1.1111.88889-1.1111h5.77777c.13334 0 .8889.0111.8889 1.1111v7.55556c0 .44444.44444 2.44444-.8889 2.44444v.22222h4.66667v-5.1111l-3.46667-6.21112.8889-.02222 6.8 11.34444h4.22222V29.27222c0-.66666.22222-1.1.88888-1.1s3.55556-.0111 4.44445-.0111 1.77778.74444 1.77778 1.77777.0111 2.88889.0111 3.11111-.0111.66667-.56666.66667-.55555-.66667-.55555-.66667v-3.11111c0-.44445-.66667-1.33333-1.33334-1.33333h-2.88889V33.05l-.88889.44444v3.33334l.8889.44444v2.22222h4.22222v-2.22222s0-.66666.55555-.66666.56667.66666.56667.66666v.44445c0 .66666.43333 1.77777 1.76666 1.77777h3.33334v-.22222s-.8889.22222-.8889-.88889v-6.66666c0-1.1889-.67777-3.55556-2.44444-3.55556 0 0 8 .01111 8.22223.01111s1.1111-.0111 1.1111 1.1v10.22222h4v-4c0-.52222 0-.88888.53334-.88888.57778 0 .57778.44444.57778.88888v2.22223c0 .66666.44444 1.77777 1.55555 1.77777H64v-.22222s-.88889 0-.88889-.88889m-4.22222-5.88889c0 .31112-.24445.55556-.55556.55556s-.55555-.24444-.55555-.55556v-3.33333c0-.31111.24444-.55555.55555-.55555s.55556.24444.55556.55555z"/></svg>
@@ -4,6 +4,17 @@
4
4
 
5
5
  const r = (n) => Math.round(n * 1000) / 1000
6
6
 
7
+ // Top-level constants are inlined by the build like the functions; only
8
+ // functions may be exported (see scripts/build.js)
9
+ const HEX = /^#(?:[0-9A-F]{3}){1,2}$/i
10
+ // Paint keywords that are not colors to check or move
11
+ const PAINT_KEYWORDS = /^(none|currentColor|transparent|inherit)$/i
12
+
13
+ // Whether a file is a monochrome variant, drawn in currentColor
14
+ function isMonoFile(name) {
15
+ return name.toLowerCase().endsWith('-mono.svg')
16
+ }
17
+
7
18
  // Check: <title> exists and has non-empty text content
8
19
  function validateTitle(svg) {
9
20
  const title = svg.querySelector('title')
@@ -83,6 +94,17 @@ function validateNoTransforms(svg) {
83
94
  return { pass, detail }
84
95
  }
85
96
 
97
+ // Check: no <g> inside another <g> (a single level is fine for shared attributes)
98
+ function validateNoNestedGroups(svg) {
99
+ const nested = svg.querySelectorAll('g g').length
100
+ const pass = nested === 0
101
+
102
+ return {
103
+ pass,
104
+ detail: pass ? 'clean' : `${nested} nested <g> found`,
105
+ }
106
+ }
107
+
86
108
  // Check: geometry — fills viewBox, fits within it, and is centered.
87
109
  // Requires a pre-computed bbox (e.g. from getBBox() in the browser).
88
110
  // Returns an array of SvgValidation-shaped objects (may be 1–3 items).
@@ -151,13 +173,368 @@ function validateGeometry(type, bbox) {
151
173
  return results
152
174
  }
153
175
 
176
+ // Check: <title> is the first element inside <svg>, so screen readers and
177
+ // the catalog read it before anything else
178
+ function validateTitleFirst(svg) {
179
+ const title = svg.querySelector('title')
180
+ const first = svg.firstElementChild
181
+ const pass = !!title && first === title
182
+
183
+ return {
184
+ pass,
185
+ detail: pass
186
+ ? 'first child'
187
+ : title
188
+ ? `<${first.tagName.toLowerCase()}> comes before <title>`
189
+ : 'missing',
190
+ }
191
+ }
192
+
193
+ // Check: no width or height on the root <svg>; the viewBox sets the size, so
194
+ // the marks scale to whatever box they are placed in
195
+ function validateNoDimensions(svg) {
196
+ const attrs = ['width', 'height'].filter((a) => svg.hasAttribute(a))
197
+
198
+ return {
199
+ pass: attrs.length === 0,
200
+ detail: attrs.length
201
+ ? attrs.map((a) => `${a}="${svg.getAttribute(a)}"`).join(' ')
202
+ : 'clean',
203
+ attrs,
204
+ }
205
+ }
206
+
207
+ // Check: no comments, <metadata> or design-tool namespaces and attributes
208
+ // (Inkscape, Sketch, Illustrator…) inside <svg>
209
+ function validateNoEditorData(svg) {
210
+ const editorPrefix = /^(inkscape|sodipodi|sketch|serif|i|x|graph|a):/
211
+ const editorNs = /^xmlns:(?!xlink$)/
212
+ const walker = svg.ownerDocument.createTreeWalker(svg, 128) // comments
213
+ const comments = []
214
+ while (walker.nextNode()) comments.push(walker.currentNode)
215
+
216
+ const leftovers = new Set()
217
+ for (const el of [svg, ...svg.querySelectorAll('*')]) {
218
+ if (
219
+ el.tagName.toLowerCase() === 'metadata' ||
220
+ editorPrefix.test(el.tagName)
221
+ ) {
222
+ leftovers.add(`<${el.tagName}>`)
223
+ }
224
+ for (const { name } of el.attributes) {
225
+ if (editorPrefix.test(name) || editorNs.test(name)) {
226
+ leftovers.add(name)
227
+ }
228
+ }
229
+ }
230
+ const list = [...leftovers]
231
+ const found = comments.length ? ['comments', ...list] : list
232
+
233
+ return {
234
+ pass: found.length === 0,
235
+ detail: found.length ? found.join(', ') : 'clean',
236
+ comments,
237
+ leftovers: list,
238
+ }
239
+ }
240
+
241
+ // Check: path data is written the way SVGO writes it: at most five decimals,
242
+ // no negative zero and no leading zero (".5", not "0.5"). `paths` lists what
243
+ // each <path> breaks, with `trimmed` the d without leading zeros.
244
+ function validateNumberFormat(svg) {
245
+ const maxDecimals = 5
246
+ const paths = []
247
+ for (const el of svg.querySelectorAll('path[d]')) {
248
+ const d = el.getAttribute('d')
249
+ const long = d.match(new RegExp(`\\.\\d{${maxDecimals + 1},}`))
250
+ const negativeZero = /-0(?![\d.])/.test(d)
251
+ // "0.5" -> ".5" and "-0.5" -> "-.5": the same numbers, written shorter
252
+ const trimmed = d.replace(/(?<![\d.])0\.(?=\d)/g, '.')
253
+ if (long || negativeZero || trimmed !== d) {
254
+ paths.push({
255
+ el,
256
+ long: long?.[0] ?? null,
257
+ negativeZero,
258
+ trimmed: trimmed !== d ? trimmed : null,
259
+ })
260
+ }
261
+ }
262
+ const problems = [
263
+ paths.some((p) => p.long) &&
264
+ `more than ${maxDecimals} decimals ("${paths.find((p) => p.long).long}")`,
265
+ paths.some((p) => p.negativeZero) && 'negative zero',
266
+ paths.some((p) => p.trimmed) && 'leading zeros ("0.5" → ".5")',
267
+ ].filter(Boolean)
268
+
269
+ return {
270
+ pass: paths.length === 0,
271
+ detail: problems.length ? problems.join(' · ') : 'clean',
272
+ maxDecimals,
273
+ paths,
274
+ }
275
+ }
276
+
277
+ // The six-digit lowercase form of a hex color: #F60 -> #ff6600
278
+ function toFullHex(hex) {
279
+ return (
280
+ hex.length === 4
281
+ ? '#' + [...hex.slice(1)].map((c) => c + c).join('')
282
+ : hex
283
+ ).toLowerCase()
284
+ }
285
+
286
+ // Check: colors in fill, stroke and stop-color are six-digit lowercase hex.
287
+ // `invalid` holds values that aren't hex at all (color names, rgb()), `short`
288
+ // hex that only needs rewriting.
289
+ function validateHexColors(svg) {
290
+ const invalid = []
291
+ const short = []
292
+ for (const attr of ['fill', 'stroke', 'stop-color']) {
293
+ const els = [svg, ...svg.querySelectorAll(`[${attr}]`)]
294
+ for (const el of els.filter((e) => e.hasAttribute(attr))) {
295
+ const value = el.getAttribute(attr).trim()
296
+ if (PAINT_KEYWORDS.test(value) || /^url\(.*\)$/.test(value))
297
+ continue
298
+ if (!HEX.test(value)) {
299
+ invalid.push({ el, attr, value })
300
+ continue
301
+ }
302
+ const full = toFullHex(value)
303
+ if (value !== full) short.push({ el, attr, value, full })
304
+ }
305
+ }
306
+ const problems = [
307
+ ...invalid.map((c) => `${c.attr}="${c.value}" is not hex`),
308
+ ...short.map((c) => `"${c.value}" should be "${c.full}"`),
309
+ ]
310
+
311
+ return {
312
+ pass: problems.length === 0,
313
+ detail: problems.length ? problems.join(' · ') : 'clean',
314
+ invalid,
315
+ short,
316
+ }
317
+ }
318
+
319
+ // Check: a single-color SVG sets its fill once, on the root <svg>
320
+ // (currentColor for a -mono file), and none of its children has one; a
321
+ // multi-color SVG has no fill on the root. Gradients and non-hex fills are
322
+ // left alone (`skipped`): validateHexColors reports the latter.
323
+ // `rootFill` is the fill the root should have (null for none), `rootOk`
324
+ // whether it has it, and `redundant` the children whose fill should go.
325
+ function validateFillPlacement(svg, isMono = false) {
326
+ // The root counts: a single-color SVG keeps its fill there
327
+ const withFill = [svg, ...svg.querySelectorAll('[fill]')].filter((el) =>
328
+ el.hasAttribute('fill'),
329
+ )
330
+ const fills = withFill.map((el) => el.getAttribute('fill').trim())
331
+ const result = (pass, detail, rest) => ({
332
+ pass,
333
+ detail,
334
+ skipped: false,
335
+ rootFill: null,
336
+ rootOk: true,
337
+ redundant: [],
338
+ ...rest,
339
+ })
340
+
341
+ if (fills.some((f) => !HEX.test(f) && !PAINT_KEYWORDS.test(f))) {
342
+ return result(true, 'skipped: gradient or non-hex fill', {
343
+ skipped: true,
344
+ })
345
+ }
346
+
347
+ const colors = new Set(
348
+ fills.filter((f) => HEX.test(f)).map((f) => f.toLowerCase()),
349
+ )
350
+ const existing = svg.getAttribute('fill')
351
+
352
+ if (colors.size > 1) {
353
+ const rootOk = existing === null
354
+
355
+ return result(
356
+ rootOk,
357
+ rootOk
358
+ ? `${colors.size} colors, no root fill`
359
+ : 'root <svg> should have no fill in a multi-color SVG',
360
+ { rootOk },
361
+ )
362
+ }
363
+
364
+ const rootFill = isMono ? 'currentColor' : [...colors][0] || 'currentColor'
365
+ const rootOk = isMono
366
+ ? existing === rootFill
367
+ : existing?.toLowerCase() === rootFill
368
+ const redundant = withFill.filter((el) => el !== svg)
369
+ const problems = [
370
+ !rootOk && `root <svg> should have fill="${rootFill}"`,
371
+ redundant.length &&
372
+ `remove fill from ${redundant.length} child element${redundant.length > 1 ? 's' : ''}`,
373
+ ].filter(Boolean)
374
+
375
+ return result(
376
+ problems.length === 0,
377
+ problems.length ? problems.join(' · ') : `fill="${rootFill}"`,
378
+ { rootFill, rootOk, redundant },
379
+ )
380
+ }
381
+
382
+ // Check (warning): a single-color SVG draws everything in one <path>
383
+ function validateSinglePath(svg, isMono = false) {
384
+ const hexFill = /#[0-9a-f]{3}(?:[0-9a-f]{3})?\b/gi
385
+ const markup = svg.outerHTML
386
+ const usesPaint = /url\(#|stroke=|stroke:|<(clipPath|mask)\b/i.test(markup)
387
+ const fills = new Set(
388
+ [...svg.querySelectorAll('[fill], [style]')].flatMap((el) =>
389
+ (
390
+ `${el.getAttribute('fill') || ''} ${el.getAttribute('style') || ''}`.match(
391
+ hexFill,
392
+ ) || []
393
+ ).map((c) => c.toLowerCase()),
394
+ ),
395
+ )
396
+ if (!isMono && (usesPaint || fills.size > 1)) {
397
+ return { pass: true, detail: 'multi-color', count: 0 }
398
+ }
399
+
400
+ const count = [
401
+ ...svg.querySelectorAll(
402
+ 'path, circle, rect, ellipse, polygon, polyline, line',
403
+ ),
404
+ ].filter((el) => !el.closest('defs, clipPath, mask')).length
405
+
406
+ return {
407
+ pass: count <= 1,
408
+ detail: count <= 1 ? 'one shape' : `${count} shapes`,
409
+ count,
410
+ }
411
+ }
412
+
413
+ // The file with anything before <svg> (XML declaration, DOCTYPE, comment)
414
+ // removed
415
+ function stripProlog(source) {
416
+ const start = source.indexOf('<svg')
417
+
418
+ return start > 0 ? source.slice(start) : source
419
+ }
420
+
421
+ // The file with fill before d on every <path>
422
+ function orderPathAttrs(source) {
423
+ return source.replace(
424
+ /<path([^>]*?) (d="[^"]*?")([^>]*?) (fill="[^"]*?")/g,
425
+ (match, before, dAttr, after, fillAttr) =>
426
+ `<path${before} ${fillAttr} ${dAttr}${after}`,
427
+ )
428
+ }
429
+
430
+ // The file with the root <svg> attributes ordered role, viewBox, xmlns, fill,
431
+ // then the rest
432
+ function orderSvgAttrs(source) {
433
+ const first = ['role', 'viewBox', 'xmlns', 'fill']
434
+ const svgTag = source.match(/<svg([^>]*)>/)
435
+ if (!svgTag) return source
436
+
437
+ const attributes = {}
438
+ const attrRegex = /([a-zA-Z0-9:-]+)="([^"]*)"/g
439
+ let match
440
+ while ((match = attrRegex.exec(svgTag[1])) !== null) {
441
+ attributes[match[1]] = match[2]
442
+ }
443
+ const ordered = [
444
+ ...first.filter((k) => k in attributes),
445
+ ...Object.keys(attributes).filter((k) => !first.includes(k)),
446
+ ]
447
+ .map((k) => `${k}="${attributes[k]}"`)
448
+ .join(' ')
449
+ if (ordered.replace(/\s+/g, '') === svgTag[1].trim().replace(/\s+/g, '')) {
450
+ return source
451
+ }
452
+
453
+ return source.replace(svgTag[0], `<svg ${ordered}>`)
454
+ }
455
+
456
+ // Check: the file starts with <svg>, with nothing before it
457
+ function validateNoProlog(source) {
458
+ const pass = stripProlog(source) === source
459
+
460
+ return {
461
+ pass,
462
+ detail: pass ? 'clean' : 'content before <svg>',
463
+ }
464
+ }
465
+
466
+ // Check: root <svg> attributes come as role, viewBox, xmlns, fill, then the
467
+ // rest, and fill comes before d on <path>
468
+ function validateAttrOrder(source) {
469
+ const svgOk = orderSvgAttrs(source) === source
470
+ const pathOk = orderPathAttrs(source) === source
471
+ const problems = [
472
+ !svgOk && 'root <svg>: role, viewBox, xmlns, fill first',
473
+ !pathOk && '<path>: fill before d',
474
+ ].filter(Boolean)
475
+
476
+ return {
477
+ pass: problems.length === 0,
478
+ detail: problems.length ? problems.join(' · ') : 'clean',
479
+ }
480
+ }
481
+
482
+
483
+ // The same checks as `scripts/lint-svg.js`, in the browser. `fileName` tells
484
+ // a -mono.svg apart (its fill is currentColor); `source`, the file's text,
485
+ // adds the check that needs it (nothing before <svg>) and is what the
486
+ // attribute order is read from, falling back to the parsed element as the
487
+ // CLI does.
488
+ function runSvgValidations(svg, type, bbox = null, options = {}) {
489
+ const { fileName = '', source = null } = options
490
+ const isMono = isMonoFile(fileName)
491
+ const row = (group, label, result, level = 'error') => ({
492
+ group,
493
+ label,
494
+ level,
495
+ pass: result.pass,
496
+ detail: result.detail,
497
+ })
154
498
 
155
- function runSvgValidations(svg, type, bbox = null) {
156
499
  return [
157
- { label: 'Required attributes', ...validateRequiredAttrs(svg, type) },
158
- { label: 'No embedded scripts', ...validateNoScripts(svg) },
159
- { label: 'No transforms', ...validateNoTransforms(svg) },
160
- ...validateGeometry(type, bbox),
500
+ row(
501
+ 'Structure',
502
+ 'Required attributes',
503
+ validateRequiredAttrs(svg, type),
504
+ ),
505
+ row('Structure', 'Title first', validateTitleFirst(svg)),
506
+ row('Structure', 'No embedded scripts', validateNoScripts(svg)),
507
+ row('Structure', 'No transforms', validateNoTransforms(svg)),
508
+ row(
509
+ 'Structure',
510
+ 'No nested groups',
511
+ validateNoNestedGroups(svg),
512
+ 'warning',
513
+ ),
514
+ row(
515
+ 'Structure',
516
+ 'Single path',
517
+ validateSinglePath(svg, isMono),
518
+ 'warning',
519
+ ),
520
+ row('Format', 'No width or height', validateNoDimensions(svg)),
521
+ row('Format', 'No editor data', validateNoEditorData(svg)),
522
+ row('Format', 'Number format', validateNumberFormat(svg)),
523
+ ...(source === null
524
+ ? []
525
+ : [row('Format', 'Starts with <svg>', validateNoProlog(source))]),
526
+ row(
527
+ 'Format',
528
+ 'Attribute order',
529
+ validateAttrOrder(source ?? svg.outerHTML),
530
+ ),
531
+ row('Style', 'Hex colors', validateHexColors(svg)),
532
+ row('Style', 'Fill placement', validateFillPlacement(svg, isMono)),
533
+ ...validateGeometry(type, bbox).map((check) => ({
534
+ group: 'Geometry',
535
+ level: 'error',
536
+ ...check,
537
+ })),
161
538
  ]
162
539
  }
163
540
 
@@ -1,11 +1,23 @@
1
1
  export interface SvgValidation {
2
+ /** Section the check belongs to. */
3
+ group: 'Structure' | 'Format' | 'Style' | 'Geometry'
2
4
  label: string
5
+ /** `warning` checks are advice: `lint-svg.js --check` never fails on them. */
6
+ level: 'error' | 'warning'
3
7
  pass: boolean
4
8
  detail: string
5
9
  }
6
10
 
11
+ export interface SvgValidationOptions {
12
+ /** The file name, so a `-mono.svg` is expected to use `fill="currentColor"`. */
13
+ fileName?: string
14
+ /** The file's text: adds the check for anything before `<svg>`, and the attribute order is read from it rather than the parsed element. */
15
+ source?: string | null
16
+ }
17
+
7
18
  export function runSvgValidations(
8
19
  svg: SVGSVGElement,
9
20
  type: 'logo' | 'icon',
10
21
  bbox?: DOMRect | null,
22
+ options?: SvgValidationOptions,
11
23
  ): SvgValidation[]
@@ -1,11 +1,23 @@
1
1
  export interface SvgValidation {
2
+ /** Section the check belongs to. */
3
+ group: 'Structure' | 'Format' | 'Style' | 'Geometry'
2
4
  label: string
5
+ /** `warning` checks are advice: `lint-svg.js --check` never fails on them. */
6
+ level: 'error' | 'warning'
3
7
  pass: boolean
4
8
  detail: string
5
9
  }
6
10
 
11
+ export interface SvgValidationOptions {
12
+ /** The file name, so a `-mono.svg` is expected to use `fill="currentColor"`. */
13
+ fileName?: string
14
+ /** The file's text: adds the check for anything before `<svg>`, and the attribute order is read from it rather than the parsed element. */
15
+ source?: string | null
16
+ }
17
+
7
18
  export function runSvgValidations(
8
19
  svg: SVGSVGElement,
9
20
  type: 'logo' | 'icon',
10
21
  bbox?: DOMRect | null,
22
+ options?: SvgValidationOptions,
11
23
  ): SvgValidation[]