diff options
| author | Leitwolf11 | 2026-10-12 03:59:12 +0300 |
|---|---|---|
| committer | Leitwolf11 | 2026-10-12 03:59:12 +0300 |
| commit | ec4e67ef067aec8a1cbd1a3980e81a355af1eff5 (patch) | |
| tree | f0bd6477a19ac826b1a02c113466c562b01ea949 | |
| parent | a225cd0bde4a124dc1a4fa298abab12983ebd746 (diff) | |
| download | website-ec4e67ef067aec8a1cbd1a3980e81a355af1eff5.tar.gz | |
Show the Tala logo and announce the coming change of domain
The language is now Tala. The home page and the social image use the new
logo; the mascot is the same drawing, and the test that compares the mark
with the leopard of the full logo still holds. The logo of the site is the
supplied drawing without its opaque background.
On xsharp-lang.xyz and its subdomains a line above the header says that the
site moves to a new domain within a month and that xsharp-lang.xyz keeps
working and will redirect. The line is written in each of the four languages
of the site and follows the language switch; it is not shown on any other
host, so a preview or the new domain does not carry it.
The rest of the text of the site still says Visual X#; that follows with the
new domain.
| -rw-r--r-- | REUSE.toml | 4 | ||||
| -rw-r--r-- | forum/visual-xsharp.svg | 7 | ||||
| -rw-r--r-- | frontend/index.html | 2 | ||||
| -rw-r--r-- | frontend/public/tala-social.png | bin | 0 -> 217207 bytes | |||
| -rw-r--r-- | frontend/public/tala.svg | 20 | ||||
| -rw-r--r-- | frontend/public/visual-xsharp-social.png | bin | 296875 -> 0 bytes | |||
| -rw-r--r-- | frontend/public/visual-xsharp.svg | 21 | ||||
| -rw-r--r-- | frontend/src/App.vue | 13 | ||||
| -rw-r--r-- | frontend/src/pages/HomePage.vue | 2 | ||||
| -rw-r--r-- | frontend/src/styles/site.css | 9 | ||||
| -rw-r--r-- | frontend/tests/site-integrity.test.mjs | 16 |
11 files changed, 62 insertions, 32 deletions
@@ -13,9 +13,9 @@ path = [ "frontend/package-lock.json", "frontend/package.json", "frontend/public/sitemap.xml", - "frontend/public/visual-xsharp.svg", + "frontend/public/tala.svg", "frontend/public/visual-xsharp-mark.svg", - "frontend/public/visual-xsharp-social.png", + "frontend/public/tala-social.png", "frontend/tsconfig.json", ] precedence = "aggregate" diff --git a/forum/visual-xsharp.svg b/forum/visual-xsharp.svg index 50262fd..a281693 100644 --- a/forum/visual-xsharp.svg +++ b/forum/visual-xsharp.svg @@ -1,6 +1,6 @@ <svg xmlns="http://www.w3.org/2000/svg" width="1672" height="941" viewBox="0 0 1672 941"> - <title>Visual X#</title> - <desc>Editable vector reconstruction of the approved Visual X# logo composition.</desc> + <title>Tala</title> + <desc>Tala logo with purple leopard.</desc> <defs> <linearGradient id="purple" x1="0" y1="0" x2="1" y2="1"> <stop offset="0" stop-color="#c9b0ff"/> @@ -15,7 +15,6 @@ <g id="logo" fill-rule="evenodd" clip-rule="evenodd"> <path id="leopard" d="M 686 527 L 673 527 L 665 535 L 658 539 L 632 535 L 621 535 L 629 539 L 656 558 L 662 558 L 673 553 L 678 548 L 683 540 Z M 618 524 L 604 517 L 589 513 L 570 513 L 561 516 L 551 522 L 541 534 L 536 550 L 537 570 L 545 592 L 546 573 L 551 555 L 558 543 L 567 534 L 587 525 L 605 523 Z M 491 506 L 486 506 L 485 516 L 493 511 L 493 508 Z M 431 476 L 429 484 L 430 499 L 435 512 L 447 529 L 483 566 L 547 624 L 483 535 L 480 528 L 476 508 L 476 497 L 478 490 L 468 500 L 461 515 Z M 511 470 L 503 476 L 503 483 L 508 490 L 517 495 L 523 492 L 525 488 L 520 473 L 518 471 Z M 543 459 L 544 463 L 550 468 L 556 466 L 561 462 L 559 458 L 552 453 L 548 453 L 544 456 Z M 453 455 L 456 457 L 463 457 L 474 462 L 477 462 L 488 456 L 486 450 L 478 444 L 466 444 L 460 447 Z M 497 428 L 516 444 L 520 444 L 525 439 L 520 423 L 518 421 L 509 420 Z M 541 417 L 547 424 L 554 420 L 550 415 L 543 415 Z M 459 403 L 438 410 L 415 422 L 398 434 L 390 442 L 386 459 L 386 493 L 397 469 L 416 442 L 434 423 Z M 573 401 L 584 404 L 599 411 L 609 423 L 618 429 L 641 433 L 650 438 L 640 423 L 643 409 L 628 403 L 608 400 Z M 470 306 L 463 316 L 457 330 L 456 349 L 459 363 L 463 372 L 476 387 L 498 398 L 481 377 L 476 365 L 474 355 L 477 334 L 486 320 L 500 323 L 511 328 L 538 348 L 555 348 L 578 352 L 610 364 L 618 370 L 625 380 L 633 380 L 660 405 L 662 409 L 663 425 L 679 445 L 690 462 L 681 469 L 701 474 L 705 477 L 703 484 L 699 488 L 694 484 L 687 483 L 691 487 L 692 493 L 689 500 L 684 505 L 671 512 L 654 517 L 681 518 L 692 515 L 693 518 L 699 512 L 704 502 L 705 491 L 716 479 L 719 473 L 719 469 L 681 422 L 677 400 L 637 359 L 620 350 L 594 341 L 564 335 L 548 334 L 519 313 L 488 299 L 480 297 Z" fill="url(#purple)"/> <path id="divider" d="M 772 324 L 771 594 L 772 600 L 774 600 L 774 324 Z" fill="#aa82ff"/> - <path id="visual" d="M 1220 412 L 1219 421 L 1212 430 L 1205 433 L 1199 433 L 1194 431 L 1191 428 L 1190 420 L 1194 415 L 1198 413 L 1218 410 Z M 1070 364 L 1071 368 L 1070 369 L 1070 419 L 1074 436 L 1082 446 L 1093 451 L 1100 452 L 1109 451 L 1121 445 L 1128 437 L 1130 450 L 1131 449 L 1132 450 L 1156 449 L 1156 364 L 1128 364 L 1128 417 L 1124 425 L 1115 430 L 1106 429 L 1102 426 L 1098 416 L 1098 364 Z M 955 364 L 955 449 L 983 449 L 983 364 Z M 1173 370 L 1172 373 L 1174 390 L 1188 383 L 1198 381 L 1207 381 L 1213 383 L 1218 388 L 1219 394 L 1215 396 L 1187 399 L 1174 405 L 1167 412 L 1164 420 L 1165 435 L 1170 443 L 1181 450 L 1199 451 L 1210 447 L 1218 438 L 1219 439 L 1219 449 L 1245 449 L 1246 448 L 1245 390 L 1239 375 L 1229 366 L 1216 362 L 1192 363 L 1181 366 Z M 1022 362 L 1011 365 L 999 373 L 994 383 L 994 396 L 998 405 L 1002 409 L 1009 413 L 1030 419 L 1034 421 L 1037 426 L 1033 431 L 1030 432 L 1016 432 L 1008 430 L 996 424 L 992 443 L 1000 447 L 1014 451 L 1034 451 L 1045 448 L 1054 443 L 1058 439 L 1063 429 L 1063 417 L 1058 407 L 1053 403 L 1039 397 L 1028 395 L 1024 393 L 1020 387 L 1024 382 L 1037 381 L 1052 385 L 1058 389 L 1058 368 L 1055 366 L 1040 362 Z M 821 324 L 870 449 L 900 449 L 950 324 L 917 324 L 891 401 L 887 409 L 885 408 L 856 324 Z M 1259 322 L 1258 323 L 1258 449 L 1286 449 L 1286 323 L 1285 322 Z M 971 322 L 960 325 L 954 333 L 954 342 L 956 346 L 959 349 L 966 352 L 977 350 L 981 347 L 984 342 L 983 330 L 980 326 Z" fill="url(#white)"/> - <path id="xsharp" d="M 1101 526 L 1102 527 L 1120 527 L 1121 526 L 1123 528 L 1119 548 L 1117 550 L 1096 550 L 1095 549 L 1099 528 Z M 1087 474 L 1080 504 L 1079 505 L 1059 505 L 1058 506 L 1054 526 L 1055 527 L 1074 527 L 1075 530 L 1071 548 L 1069 550 L 1049 550 L 1046 571 L 1064 571 L 1065 572 L 1060 600 L 1084 600 L 1088 579 L 1091 571 L 1112 571 L 1113 572 L 1107 600 L 1131 600 L 1137 573 L 1139 571 L 1160 571 L 1164 550 L 1144 550 L 1143 546 L 1147 528 L 1149 526 L 1169 526 L 1173 505 L 1154 505 L 1153 504 L 1159 476 L 1158 474 L 1134 474 L 1128 503 L 1126 505 L 1106 505 L 1105 504 L 1111 475 L 1110 474 Z M 916 473 L 959 535 L 911 600 L 951 600 L 980 558 L 987 567 L 1007 600 L 1048 600 L 1003 536 L 1005 531 L 1046 476 L 1047 473 L 1009 473 L 983 512 L 981 511 L 957 473 Z" fill="url(#purple)"/> + <text id="tala" x="1053" y="521" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif" font-weight="700" font-size="170" fill="url(#white)">Tala</text> </g> </svg> diff --git a/frontend/index.html b/frontend/index.html index 1899637..ad51958 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -18,7 +18,7 @@ property="og:description" content="A native language with a clear source model, explicit ownership, and an inspectable compiler." /> - <meta property="og:image" content="https://xsharp-lang.xyz/visual-xsharp-social.png" /> + <meta property="og:image" content="https://xsharp-lang.xyz/tala-social.png" /> <meta property="og:image:width" content="1280" /> <meta property="og:image:height" content="640" /> <meta name="twitter:card" content="summary_large_image" /> diff --git a/frontend/public/tala-social.png b/frontend/public/tala-social.png Binary files differnew file mode 100644 index 0000000..650ee29 --- /dev/null +++ b/frontend/public/tala-social.png diff --git a/frontend/public/tala.svg b/frontend/public/tala.svg new file mode 100644 index 0000000..a281693 --- /dev/null +++ b/frontend/public/tala.svg @@ -0,0 +1,20 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1672" height="941" viewBox="0 0 1672 941"> + <title>Tala</title> + <desc>Tala logo with purple leopard.</desc> + <defs> + <linearGradient id="purple" x1="0" y1="0" x2="1" y2="1"> + <stop offset="0" stop-color="#c9b0ff"/> + <stop offset="0.48" stop-color="#a77bff"/> + <stop offset="1" stop-color="#8457ea"/> + </linearGradient> + <linearGradient id="white" x1="0" y1="0" x2="0" y2="1"> + <stop offset="0" stop-color="#ffffff"/> + <stop offset="1" stop-color="#f0edf7"/> + </linearGradient> + </defs> + <g id="logo" fill-rule="evenodd" clip-rule="evenodd"> + <path id="leopard" d="M 686 527 L 673 527 L 665 535 L 658 539 L 632 535 L 621 535 L 629 539 L 656 558 L 662 558 L 673 553 L 678 548 L 683 540 Z M 618 524 L 604 517 L 589 513 L 570 513 L 561 516 L 551 522 L 541 534 L 536 550 L 537 570 L 545 592 L 546 573 L 551 555 L 558 543 L 567 534 L 587 525 L 605 523 Z M 491 506 L 486 506 L 485 516 L 493 511 L 493 508 Z M 431 476 L 429 484 L 430 499 L 435 512 L 447 529 L 483 566 L 547 624 L 483 535 L 480 528 L 476 508 L 476 497 L 478 490 L 468 500 L 461 515 Z M 511 470 L 503 476 L 503 483 L 508 490 L 517 495 L 523 492 L 525 488 L 520 473 L 518 471 Z M 543 459 L 544 463 L 550 468 L 556 466 L 561 462 L 559 458 L 552 453 L 548 453 L 544 456 Z M 453 455 L 456 457 L 463 457 L 474 462 L 477 462 L 488 456 L 486 450 L 478 444 L 466 444 L 460 447 Z M 497 428 L 516 444 L 520 444 L 525 439 L 520 423 L 518 421 L 509 420 Z M 541 417 L 547 424 L 554 420 L 550 415 L 543 415 Z M 459 403 L 438 410 L 415 422 L 398 434 L 390 442 L 386 459 L 386 493 L 397 469 L 416 442 L 434 423 Z M 573 401 L 584 404 L 599 411 L 609 423 L 618 429 L 641 433 L 650 438 L 640 423 L 643 409 L 628 403 L 608 400 Z M 470 306 L 463 316 L 457 330 L 456 349 L 459 363 L 463 372 L 476 387 L 498 398 L 481 377 L 476 365 L 474 355 L 477 334 L 486 320 L 500 323 L 511 328 L 538 348 L 555 348 L 578 352 L 610 364 L 618 370 L 625 380 L 633 380 L 660 405 L 662 409 L 663 425 L 679 445 L 690 462 L 681 469 L 701 474 L 705 477 L 703 484 L 699 488 L 694 484 L 687 483 L 691 487 L 692 493 L 689 500 L 684 505 L 671 512 L 654 517 L 681 518 L 692 515 L 693 518 L 699 512 L 704 502 L 705 491 L 716 479 L 719 473 L 719 469 L 681 422 L 677 400 L 637 359 L 620 350 L 594 341 L 564 335 L 548 334 L 519 313 L 488 299 L 480 297 Z" fill="url(#purple)"/> + <path id="divider" d="M 772 324 L 771 594 L 772 600 L 774 600 L 774 324 Z" fill="#aa82ff"/> + <text id="tala" x="1053" y="521" text-anchor="middle" font-family="Segoe UI, Arial, sans-serif" font-weight="700" font-size="170" fill="url(#white)">Tala</text> + </g> +</svg> diff --git a/frontend/public/visual-xsharp-social.png b/frontend/public/visual-xsharp-social.png Binary files differdeleted file mode 100644 index d94b980..0000000 --- a/frontend/public/visual-xsharp-social.png +++ /dev/null diff --git a/frontend/public/visual-xsharp.svg b/frontend/public/visual-xsharp.svg deleted file mode 100644 index 50262fd..0000000 --- a/frontend/public/visual-xsharp.svg +++ /dev/null @@ -1,21 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="1672" height="941" viewBox="0 0 1672 941"> - <title>Visual X#</title> - <desc>Editable vector reconstruction of the approved Visual X# logo composition.</desc> - <defs> - <linearGradient id="purple" x1="0" y1="0" x2="1" y2="1"> - <stop offset="0" stop-color="#c9b0ff"/> - <stop offset="0.48" stop-color="#a77bff"/> - <stop offset="1" stop-color="#8457ea"/> - </linearGradient> - <linearGradient id="white" x1="0" y1="0" x2="0" y2="1"> - <stop offset="0" stop-color="#ffffff"/> - <stop offset="1" stop-color="#f0edf7"/> - </linearGradient> - </defs> - <g id="logo" fill-rule="evenodd" clip-rule="evenodd"> - <path id="leopard" d="M 686 527 L 673 527 L 665 535 L 658 539 L 632 535 L 621 535 L 629 539 L 656 558 L 662 558 L 673 553 L 678 548 L 683 540 Z M 618 524 L 604 517 L 589 513 L 570 513 L 561 516 L 551 522 L 541 534 L 536 550 L 537 570 L 545 592 L 546 573 L 551 555 L 558 543 L 567 534 L 587 525 L 605 523 Z M 491 506 L 486 506 L 485 516 L 493 511 L 493 508 Z M 431 476 L 429 484 L 430 499 L 435 512 L 447 529 L 483 566 L 547 624 L 483 535 L 480 528 L 476 508 L 476 497 L 478 490 L 468 500 L 461 515 Z M 511 470 L 503 476 L 503 483 L 508 490 L 517 495 L 523 492 L 525 488 L 520 473 L 518 471 Z M 543 459 L 544 463 L 550 468 L 556 466 L 561 462 L 559 458 L 552 453 L 548 453 L 544 456 Z M 453 455 L 456 457 L 463 457 L 474 462 L 477 462 L 488 456 L 486 450 L 478 444 L 466 444 L 460 447 Z M 497 428 L 516 444 L 520 444 L 525 439 L 520 423 L 518 421 L 509 420 Z M 541 417 L 547 424 L 554 420 L 550 415 L 543 415 Z M 459 403 L 438 410 L 415 422 L 398 434 L 390 442 L 386 459 L 386 493 L 397 469 L 416 442 L 434 423 Z M 573 401 L 584 404 L 599 411 L 609 423 L 618 429 L 641 433 L 650 438 L 640 423 L 643 409 L 628 403 L 608 400 Z M 470 306 L 463 316 L 457 330 L 456 349 L 459 363 L 463 372 L 476 387 L 498 398 L 481 377 L 476 365 L 474 355 L 477 334 L 486 320 L 500 323 L 511 328 L 538 348 L 555 348 L 578 352 L 610 364 L 618 370 L 625 380 L 633 380 L 660 405 L 662 409 L 663 425 L 679 445 L 690 462 L 681 469 L 701 474 L 705 477 L 703 484 L 699 488 L 694 484 L 687 483 L 691 487 L 692 493 L 689 500 L 684 505 L 671 512 L 654 517 L 681 518 L 692 515 L 693 518 L 699 512 L 704 502 L 705 491 L 716 479 L 719 473 L 719 469 L 681 422 L 677 400 L 637 359 L 620 350 L 594 341 L 564 335 L 548 334 L 519 313 L 488 299 L 480 297 Z" fill="url(#purple)"/> - <path id="divider" d="M 772 324 L 771 594 L 772 600 L 774 600 L 774 324 Z" fill="#aa82ff"/> - <path id="visual" d="M 1220 412 L 1219 421 L 1212 430 L 1205 433 L 1199 433 L 1194 431 L 1191 428 L 1190 420 L 1194 415 L 1198 413 L 1218 410 Z M 1070 364 L 1071 368 L 1070 369 L 1070 419 L 1074 436 L 1082 446 L 1093 451 L 1100 452 L 1109 451 L 1121 445 L 1128 437 L 1130 450 L 1131 449 L 1132 450 L 1156 449 L 1156 364 L 1128 364 L 1128 417 L 1124 425 L 1115 430 L 1106 429 L 1102 426 L 1098 416 L 1098 364 Z M 955 364 L 955 449 L 983 449 L 983 364 Z M 1173 370 L 1172 373 L 1174 390 L 1188 383 L 1198 381 L 1207 381 L 1213 383 L 1218 388 L 1219 394 L 1215 396 L 1187 399 L 1174 405 L 1167 412 L 1164 420 L 1165 435 L 1170 443 L 1181 450 L 1199 451 L 1210 447 L 1218 438 L 1219 439 L 1219 449 L 1245 449 L 1246 448 L 1245 390 L 1239 375 L 1229 366 L 1216 362 L 1192 363 L 1181 366 Z M 1022 362 L 1011 365 L 999 373 L 994 383 L 994 396 L 998 405 L 1002 409 L 1009 413 L 1030 419 L 1034 421 L 1037 426 L 1033 431 L 1030 432 L 1016 432 L 1008 430 L 996 424 L 992 443 L 1000 447 L 1014 451 L 1034 451 L 1045 448 L 1054 443 L 1058 439 L 1063 429 L 1063 417 L 1058 407 L 1053 403 L 1039 397 L 1028 395 L 1024 393 L 1020 387 L 1024 382 L 1037 381 L 1052 385 L 1058 389 L 1058 368 L 1055 366 L 1040 362 Z M 821 324 L 870 449 L 900 449 L 950 324 L 917 324 L 891 401 L 887 409 L 885 408 L 856 324 Z M 1259 322 L 1258 323 L 1258 449 L 1286 449 L 1286 323 L 1285 322 Z M 971 322 L 960 325 L 954 333 L 954 342 L 956 346 L 959 349 L 966 352 L 977 350 L 981 347 L 984 342 L 983 330 L 980 326 Z" fill="url(#white)"/> - <path id="xsharp" d="M 1101 526 L 1102 527 L 1120 527 L 1121 526 L 1123 528 L 1119 548 L 1117 550 L 1096 550 L 1095 549 L 1099 528 Z M 1087 474 L 1080 504 L 1079 505 L 1059 505 L 1058 506 L 1054 526 L 1055 527 L 1074 527 L 1075 530 L 1071 548 L 1069 550 L 1049 550 L 1046 571 L 1064 571 L 1065 572 L 1060 600 L 1084 600 L 1088 579 L 1091 571 L 1112 571 L 1113 572 L 1107 600 L 1131 600 L 1137 573 L 1139 571 L 1160 571 L 1164 550 L 1144 550 L 1143 546 L 1147 528 L 1149 526 L 1169 526 L 1173 505 L 1154 505 L 1153 504 L 1159 476 L 1158 474 L 1134 474 L 1128 503 L 1126 505 L 1106 505 L 1105 504 L 1111 475 L 1110 474 Z M 916 473 L 959 535 L 911 600 L 951 600 L 980 558 L 987 567 L 1007 600 L 1048 600 L 1003 536 L 1005 531 L 1046 476 L 1047 473 L 1009 473 L 983 512 L 981 511 L 957 473 Z" fill="url(#purple)"/> - </g> -</svg> diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 56b38f5..552d731 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -18,6 +18,8 @@ const labels = { language: "Language", status: "In active development", footer: "A Progmasoft project. Visual X# is an independent language identity.", + domainNotice: + "This site is moving to a new domain within a month. xsharp-lang.xyz will keep working and will redirect to the new address.", }, "de-DE": { home: "Startseite", @@ -29,6 +31,8 @@ const labels = { language: "Sprache", status: "In aktiver Entwicklung", footer: "Ein Progmasoft-Projekt. Visual X# hat eine eigenständige Sprachidentität.", + domainNotice: + "Diese Website zieht innerhalb eines Monats auf eine neue Domain um. xsharp-lang.xyz bleibt erreichbar und leitet dann auf die neue Adresse weiter.", }, "ru-RU": { home: "Главная", @@ -40,6 +44,8 @@ const labels = { language: "Язык", status: "В активной разработке", footer: "Проект Progmasoft. Visual X# — самостоятельный язык со своей идентичностью.", + domainNotice: + "В течение месяца сайт переедет на новый домен. xsharp-lang.xyz продолжит работать и будет перенаправлять на новый адрес.", }, "he-IL": { home: "בית", @@ -51,10 +57,16 @@ const labels = { language: "שפה", status: "בפיתוח פעיל", footer: "פרויקט של Progmasoft. ל-Visual X# זהות שפה עצמאית.", + domainNotice: + "האתר יעבור לדומיין חדש בתוך חודש. xsharp-lang.xyz ימשיך לפעול ויפנה לכתובת החדשה.", }, } as const; const copy = computed(() => labels[locale.value]); +// The notice belongs to the domain that is being left: a visitor of the new +// domain, or of a preview, has nothing to be told. +const onDepartingDomain = /(^|\.)xsharp-lang\.xyz$/.test(window.location.hostname); + function toggleTheme() { theme.value = theme.value === "dark" ? "light" : "dark"; } @@ -63,6 +75,7 @@ function toggleTheme() { <template> <a class="skip-link" href="#main">Skip to content</a> <div class="site-shell"> + <p v-if="onDepartingDomain" class="domain-notice" role="status">{{ copy.domainNotice }}</p> <header class="site-header"> <RouterLink class="brand" to="/" :aria-label="`Visual X# ${copy.home}`"> <img src="/visual-xsharp-mark.svg" width="31" height="31" alt="" /> diff --git a/frontend/src/pages/HomePage.vue b/frontend/src/pages/HomePage.vue index f432632..65bb3f4 100644 --- a/frontend/src/pages/HomePage.vue +++ b/frontend/src/pages/HomePage.vue @@ -267,7 +267,7 @@ public class HelloWorld { <template> <section class="hero section-wrap"> - <img class="hero-logo" src="/visual-xsharp.svg" width="520" height="293" alt="Visual X# logo" /> + <img class="hero-logo" src="/tala.svg" width="520" height="293" alt="Tala logo" /> <div class="hero-copy"> <div class="eyebrow">{{ c.eyebrow }}</div> <h1>{{ c.title }}</h1> diff --git a/frontend/src/styles/site.css b/frontend/src/styles/site.css index 96a1a0c..c793cdb 100644 --- a/frontend/src/styles/site.css +++ b/frontend/src/styles/site.css @@ -110,6 +110,15 @@ p { margin: 0 auto; } +.domain-notice { + margin: 0; + padding: 7px max(24px, calc((100vw - 1050px) / 2)); + border-bottom: 1px solid var(--border); + color: var(--muted); + font-size: 13px; + line-height: 1.45; + text-align: center; +} .site-header { display: flex; align-items: center; diff --git a/frontend/tests/site-integrity.test.mjs b/frontend/tests/site-integrity.test.mjs index 8b917cf..6a5320d 100644 --- a/frontend/tests/site-integrity.test.mjs +++ b/frontend/tests/site-integrity.test.mjs @@ -47,7 +47,7 @@ test("the forum placeholder is explicitly non-indexable and not an account servi }); test("the browser identity uses the supplied logo without an opaque background", () => { - const svg = read("public/visual-xsharp.svg"); + const svg = read("public/tala.svg"); const mark = read("public/visual-xsharp-mark.svg"); assert.match(svg, /<svg\b/); assert.doesNotMatch(svg, /<rect\s+id="background"/); @@ -62,11 +62,11 @@ test("the browser identity uses the supplied logo without an opaque background", }); test("the social image is a 1280 by 640 PNG suitable for the page metadata", () => { - const image = readFileSync(join(root, "public/visual-xsharp-social.png")); + const image = readFileSync(join(root, "public/tala-social.png")); assert.equal(image.toString("hex", 0, 8), "89504e470d0a1a0a"); assert.equal(image.readUInt32BE(16), 1280); assert.equal(image.readUInt32BE(20), 640); - assert.match(read("index.html"), /visual-xsharp-social\.png/); + assert.match(read("index.html"), /tala-social\.png/); }); test("the site has no retired public login or registry links", () => { @@ -252,3 +252,13 @@ test("language and theme controls remain labeled and keyboard focus is visible", assert.match(styles, /prefers-reduced-motion: reduce/); assert.match(styles, /\.language-control select,\s*\.icon-button\s*\{[^}]*border-radius: 9px/s); }); + +test("the notice about the coming domain is localized and shown only on the departing domain", () => { + const app = read("src/App.vue"); + const notices = [...app.matchAll(/domainNotice:\s*"([^"]+)"/g)].map((match) => match[1]); + assert.equal(notices.length, 4, "every locale must carry the notice"); + assert.equal(new Set(notices).size, 4, "the notice must be translated, not repeated"); + for (const notice of notices) assert.match(notice, /xsharp-lang\.xyz/); + assert.match(app, /onDepartingDomain = \/\(\^\|\\.\)xsharp-lang\\.xyz\$\/\.test\(window\.location\.hostname\)/); + assert.match(app, /<p v-if="onDepartingDomain" class="domain-notice" role="status">/); +}); |