@jjlmoya/utils-diy 1.16.0 → 1.18.0

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 (95) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/fr.ts +5 -5
  3. package/src/layouts/PreviewLayout.astro +1 -0
  4. package/src/tests/diacritics_density.test.ts +118 -0
  5. package/src/tests/inverted_punctuation.test.ts +84 -0
  6. package/src/tests/no_en_dash.test.ts +70 -0
  7. package/src/tests/script_density.test.ts +94 -0
  8. package/src/tool/balusterCalculator/i18n/de.ts +7 -7
  9. package/src/tool/balusterCalculator/i18n/en.ts +4 -4
  10. package/src/tool/balusterCalculator/i18n/es.ts +2 -2
  11. package/src/tool/balusterCalculator/i18n/fr.ts +3 -3
  12. package/src/tool/balusterCalculator/i18n/it.ts +16 -16
  13. package/src/tool/balusterCalculator/i18n/ru.ts +14 -14
  14. package/src/tool/balusterCalculator/i18n/tr.ts +5 -5
  15. package/src/tool/clayCalculator/i18n/fr.ts +3 -3
  16. package/src/tool/clayCalculator/i18n/ru.ts +3 -3
  17. package/src/tool/concreteCalculator/i18n/en.ts +4 -4
  18. package/src/tool/concreteCalculator/i18n/fr.ts +2 -2
  19. package/src/tool/concreteCalculator/i18n/ko.ts +2 -2
  20. package/src/tool/concreteCalculator/i18n/ru.ts +3 -3
  21. package/src/tool/cutOptimizer/i18n/en.ts +4 -4
  22. package/src/tool/cutOptimizer/i18n/fr.ts +2 -2
  23. package/src/tool/cutOptimizer/i18n/ru.ts +2 -2
  24. package/src/tool/drillCalculator/bibliography.ts +2 -2
  25. package/src/tool/drillCalculator/i18n/ru.ts +5 -5
  26. package/src/tool/drillCalculator/i18n/zh.ts +2 -2
  27. package/src/tool/drillSharpener/i18n/ru.ts +3 -3
  28. package/src/tool/epoxyCalculator/epoxy-resin-calculator.css +117 -2
  29. package/src/tool/epoxyCalculator/i18n/de.ts +2 -2
  30. package/src/tool/epoxyCalculator/i18n/en.ts +2 -2
  31. package/src/tool/epoxyCalculator/i18n/es.ts +2 -2
  32. package/src/tool/epoxyCalculator/i18n/fr.ts +3 -3
  33. package/src/tool/epoxyCalculator/i18n/id.ts +2 -2
  34. package/src/tool/epoxyCalculator/i18n/it.ts +2 -2
  35. package/src/tool/epoxyCalculator/i18n/ja.ts +2 -2
  36. package/src/tool/epoxyCalculator/i18n/ko.ts +2 -2
  37. package/src/tool/epoxyCalculator/i18n/nl.ts +2 -2
  38. package/src/tool/epoxyCalculator/i18n/pl.ts +2 -2
  39. package/src/tool/epoxyCalculator/i18n/pt.ts +2 -2
  40. package/src/tool/epoxyCalculator/i18n/ru.ts +5 -5
  41. package/src/tool/epoxyCalculator/i18n/sv.ts +2 -2
  42. package/src/tool/epoxyCalculator/i18n/tr.ts +2 -2
  43. package/src/tool/epoxyCalculator/i18n/zh.ts +4 -4
  44. package/src/tool/furnitureFit/i18n/de.ts +2 -2
  45. package/src/tool/furnitureFit/i18n/en.ts +4 -4
  46. package/src/tool/furnitureFit/i18n/es.ts +2 -2
  47. package/src/tool/furnitureFit/i18n/fr.ts +3 -3
  48. package/src/tool/furnitureFit/i18n/id.ts +2 -2
  49. package/src/tool/furnitureFit/i18n/it.ts +2 -2
  50. package/src/tool/furnitureFit/i18n/ja.ts +2 -2
  51. package/src/tool/furnitureFit/i18n/ko.ts +2 -2
  52. package/src/tool/furnitureFit/i18n/nl.ts +2 -2
  53. package/src/tool/furnitureFit/i18n/pl.ts +2 -2
  54. package/src/tool/furnitureFit/i18n/pt.ts +2 -2
  55. package/src/tool/furnitureFit/i18n/ru.ts +6 -6
  56. package/src/tool/furnitureFit/i18n/sv.ts +2 -2
  57. package/src/tool/furnitureFit/i18n/tr.ts +2 -2
  58. package/src/tool/furnitureFit/i18n/zh.ts +2 -2
  59. package/src/tool/mortarCalculator/i18n/en.ts +3 -3
  60. package/src/tool/mortarCalculator/i18n/ru.ts +6 -6
  61. package/src/tool/mortarCalculator/i18n/zh.ts +3 -3
  62. package/src/tool/passepartoutCalculator/i18n/en.ts +4 -4
  63. package/src/tool/passepartoutCalculator/i18n/ru.ts +7 -7
  64. package/src/tool/passepartoutCalculator/i18n/zh.ts +6 -6
  65. package/src/tool/passepartoutCalculator/passepartout-calculator.css +113 -3
  66. package/src/tool/pythagoreanRightAngleCalculator/i18n/fr.ts +3 -3
  67. package/src/tool/pythagoreanRightAngleCalculator/i18n/pl.ts +2 -2
  68. package/src/tool/pythagoreanRightAngleCalculator/i18n/ru.ts +5 -5
  69. package/src/tool/stairCalculator/i18n/ru.ts +6 -6
  70. package/src/tool/stairCalculator/stair-calculator.css +140 -6
  71. package/src/tool/thermalExpansionCalculator/bibliography.ts +4 -4
  72. package/src/tool/thermalExpansionCalculator/i18n/en.ts +2 -2
  73. package/src/tool/thermalExpansionCalculator/i18n/fr.ts +3 -3
  74. package/src/tool/thermalExpansionCalculator/i18n/ru.ts +4 -4
  75. package/src/tool/twoStrokeMixtureCalculator/i18n/de.ts +12 -12
  76. package/src/tool/twoStrokeMixtureCalculator/i18n/en.ts +13 -13
  77. package/src/tool/twoStrokeMixtureCalculator/i18n/fr.ts +18 -18
  78. package/src/tool/twoStrokeMixtureCalculator/i18n/id.ts +12 -12
  79. package/src/tool/twoStrokeMixtureCalculator/i18n/it.ts +4 -4
  80. package/src/tool/twoStrokeMixtureCalculator/i18n/nl.ts +6 -6
  81. package/src/tool/twoStrokeMixtureCalculator/i18n/pl.ts +6 -6
  82. package/src/tool/twoStrokeMixtureCalculator/i18n/pt.ts +10 -10
  83. package/src/tool/twoStrokeMixtureCalculator/i18n/ru.ts +9 -9
  84. package/src/tool/twoStrokeMixtureCalculator/i18n/sv.ts +8 -8
  85. package/src/tool/twoStrokeMixtureCalculator/i18n/tr.ts +4 -4
  86. package/src/tool/twoStrokeMixtureCalculator/i18n/zh.ts +7 -7
  87. package/src/tool/voltageDropCalculator/i18n/en.ts +2 -2
  88. package/src/tool/voltageDropCalculator/i18n/es.ts +4 -4
  89. package/src/tool/voltageDropCalculator/i18n/ru.ts +4 -4
  90. package/src/tool/workshopFractionConverter/bibliography.ts +2 -2
  91. package/src/tool/workshopFractionConverter/i18n/de.ts +2 -2
  92. package/src/tool/workshopFractionConverter/i18n/es.ts +2 -2
  93. package/src/tool/workshopFractionConverter/i18n/fr.ts +2 -2
  94. package/src/tool/workshopFractionConverter/i18n/ru.ts +9 -9
  95. package/src/tool/workshopFractionConverter/i18n/zh.ts +6 -6
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { FurnitureFitUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -84,7 +84,7 @@ export const content: ToolLocaleContent<FurnitureFitUI> = {
84
84
  { type: 'title', text: 'Il Problema del Divano nel Corridoio', level: 3 },
85
85
  { type: 'card', icon: 'mdi:sofa', title: 'Margine di Manovra', html: '<p>Un errore comune è assumere che se il mobile misura 80cm e il vano 80cm, passerà. Non è così. Le mani dei trasportatori, l\'elasticità del tessuto e le imperfezioni delle pareti richiedono un margine minimo di <strong>2-5 cm</strong>. Senza questo margine, il mobile si graffierà o rimarrà incastrato per pressione.</p>' },
86
86
  { type: 'title', text: 'I 3 Errori che Rovinano un Traslocco', level: 3 },
87
- { type: 'paragraph', html: 'Anche con misure corrette, questi fattori invisibili causano spesso disastri: <strong>La Lampada a Soffitto</strong> dimenticata durante la rotazione diagonale; <strong>Il Raggio di Rotazione del Mobile</strong> un mobile rigido non si piega; <strong>L\'Imballaggio</strong> il pluriball può aggiungere da 1 a 3 cm per lato.' },
87
+ { type: 'paragraph', html: 'Anche con misure corrette, questi fattori invisibili causano spesso disastri: <strong>La Lampada a Soffitto</strong> - dimenticata durante la rotazione diagonale; <strong>Il Raggio di Rotazione del Mobile</strong> - un mobile rigido non si piega; <strong>L\'Imballaggio</strong> - il pluriball può aggiungere da 1 a 3 cm per lato.' },
88
88
  ],
89
89
  ui: {
90
90
  conTitle: 'Dimensioni dello Spazio',
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { FurnitureFitUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -84,7 +84,7 @@ export const content: ToolLocaleContent<FurnitureFitUI> = {
84
84
  { type: 'title', text: '廊下のソファ問題', level: 3 },
85
85
  { type: 'card', icon: 'mdi:sofa', title: '操作の余裕', html: '<p>家具が80cmで開口部が80cmなら通ると思い込むのはよくある間違いです。そうではありません。作業員の手、生地の弾力性、壁の凹凸などを考慮すると、最低 <strong>2〜5 cm</strong> の余裕が必要です。この余裕がないと、家具が傷ついたり圧迫されて動かなくなったりします。</p>' },
86
86
  { type: 'title', text: '引越しを台無しにする3つの間違い', level: 3 },
87
- { type: 'paragraph', html: '正しい採寸をしていても、これら見えない要因が災いをもたらすことがあります:<strong>天井の照明</strong> 対角線回転中に忘れられがちです。<strong>家具の回転半径</strong> 固い家具は曲がりません。<strong>梱包</strong> プチプチや保護用ダンボールは各辺に1〜3cm加わります。' },
87
+ { type: 'paragraph', html: '正しい採寸をしていても、これら見えない要因が災いをもたらすことがあります:<strong>天井の照明</strong> - 対角線回転中に忘れられがちです。<strong>家具の回転半径</strong> - 固い家具は曲がりません。<strong>梱包</strong> - プチプチや保護用ダンボールは各辺に1〜3cm加わります。' },
88
88
  ],
89
89
  ui: {
90
90
  conTitle: 'スペースの寸法',
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { FurnitureFitUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -84,7 +84,7 @@ export const content: ToolLocaleContent<FurnitureFitUI> = {
84
84
  { type: 'title', text: '복도의 소파 문제', level: 3 },
85
85
  { type: 'card', icon: 'mdi:sofa', title: '조작 여유 공간', html: '<p>가구가 80cm이고 입구가 80cm라면 들어갈 것이라고 생각하는 것은 흔한 실수입니다. 그렇지 않습니다. 작업자의 손, 원단의 탄성, 벽의 미세한 굴곡 등을 고려하면 최소 <strong>2~5cm</strong>의 여유가 필요합니다. 이 여유가 없으면 가구가 긁히거나 끼어버릴 수 있습니다.</p>' },
86
86
  { type: 'title', text: '이사를 망치는 3가지 실수', level: 3 },
87
- { type: 'paragraph', html: '치수를 정확히 쟀더라도 이러한 보이지 않는 요인이 종종 문제를 일으킵니다: <strong>천장 조명</strong> 대각선 회전 중에 잊어버리기 쉽습니다. <strong>가구의 회전 반경</strong> 딱딱한 가구는 구부러지지 않습니다. <strong>포장</strong> 뽁뽁이(에어캡)나 보호용 박스는 각 면에 1~3cm를 추가합니다.' },
87
+ { type: 'paragraph', html: '치수를 정확히 쟀더라도 이러한 보이지 않는 요인이 종종 문제를 일으킵니다: <strong>천장 조명</strong> - 대각선 회전 중에 잊어버리기 쉽습니다. <strong>가구의 회전 반경</strong> - 딱딱한 가구는 구부러지지 않습니다. <strong>포장</strong> - 뽁뽁이(에어캡)나 보호용 박스는 각 면에 1~3cm를 추가합니다.' },
88
88
  ],
89
89
  ui: {
90
90
  conTitle: '공간 치수',
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { FurnitureFitUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -84,7 +84,7 @@ export const content: ToolLocaleContent<FurnitureFitUI> = {
84
84
  { type: 'title', text: 'Het Bank-in-de-Gang Probleem', level: 3 },
85
85
  { type: 'card', icon: 'mdi:sofa', title: 'Manoeuvreerruimte', html: '<p>Een veelvoorkomende fout is aan te nemen dat als het meubel 80cm breed is en de opening ook 80cm, het zal passen. Dat is niet zo. De handen van verhuizers, de elasticiteit van de stof en oneffenheden van de muren vereisen een minimale marge van <strong>2 tot 5 cm</strong>. Zonder deze marge wordt het meubel bekrast of raakt het klem.</p>' },
86
86
  { type: 'title', text: '3 Fouten die een Verhuizing Verpesten', level: 3 },
87
- { type: 'paragraph', html: 'Zelfs met de juiste maten veroorzaken deze onzichtbare factoren vaak rampen: <strong>De Plafondlamp</strong> vaak vergeten tijdens het schuin draaien. <strong>De Draaicirkel van het Meubel</strong> een stijf meubel buigt niet. <strong>De Verpakking</strong> bubbeltjesplastic kan aan elke kant 1 tot 3 cm toevoegen.' },
87
+ { type: 'paragraph', html: 'Zelfs met de juiste maten veroorzaken deze onzichtbare factoren vaak rampen: <strong>De Plafondlamp</strong> - vaak vergeten tijdens het schuin draaien. <strong>De Draaicirkel van het Meubel</strong> - een stijf meubel buigt niet. <strong>De Verpakking</strong> - bubbeltjesplastic kan aan elke kant 1 tot 3 cm toevoegen.' },
88
88
  ],
89
89
  ui: {
90
90
  conTitle: 'Afmetingen van de Ruimte',
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { FurnitureFitUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -84,7 +84,7 @@ export const content: ToolLocaleContent<FurnitureFitUI> = {
84
84
  { type: 'title', text: 'Problem Sofy w Korytarzu', level: 3 },
85
85
  { type: 'card', icon: 'mdi:sofa', title: 'Margines Manewru', html: '<p>Częstym błędem jest zakładanie, że jeśli mebel ma 80 cm, a otwór 80 cm, to przejdzie. Tak nie jest. Ręce tragarzy, elastyczność tkaniny i nierówności ścian wymagają minimalnego marginesu <strong>od 2 do 5 cm</strong>. Bez tego marginesu mebel zostanie porysowany lub zaklinuje się pod naciskiem.</p>' },
86
86
  { type: 'title', text: '3 Błędy, które Ruinują Przeprowadzkę', level: 3 },
87
- { type: 'paragraph', html: 'Nawet przy poprawnych wymiarach, te niewidoczne czynniki często powodują katastrofy: <strong>Lampa Sufitowa</strong> często pomijana podczas obracania po skosie. <strong>Promień Skrętu Mebla</strong> sztywny mebel się nie zgina. <strong>Opakowanie</strong> folia bąbelkowa i tektura ochronna mogą dodać od 1 do 3 cm z każdej strony.' },
87
+ { type: 'paragraph', html: 'Nawet przy poprawnych wymiarach, te niewidoczne czynniki często powodują katastrofy: <strong>Lampa Sufitowa</strong> - często pomijana podczas obracania po skosie. <strong>Promień Skrętu Mebla</strong> - sztywny mebel się nie zgina. <strong>Opakowanie</strong> - folia bąbelkowa i tektura ochronna mogą dodać od 1 do 3 cm z każdej strony.' },
88
88
  ],
89
89
  ui: {
90
90
  conTitle: 'Wymiary Przestrzeni',
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { FurnitureFitUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -84,7 +84,7 @@ export const content: ToolLocaleContent<FurnitureFitUI> = {
84
84
  { type: 'title', text: 'O Problema do Sofá no Corredor', level: 3 },
85
85
  { type: 'card', icon: 'mdi:sofa', title: 'Margem de Manobra', html: '<p>Um erro comum é assumir que se o móvel mede 80cm e o vão 80cm, passará. Não é assim. As mãos dos transportadores, a elasticidade do tecido e as imperfeições das paredes requerem uma margem mínima de <strong>2 a 5 cm</strong>. Sem esta margem, o móvel ficará riscado ou encravado por pressão.</p>' },
86
86
  { type: 'title', text: 'Os 3 Erros que Arruínam uma Mudança', level: 3 },
87
- { type: 'paragraph', html: 'Mesmo com medidas corretas, estes fatores invisíveis costumam causar desastres: <strong>O Candeeiro do Teto</strong> esquecido durante a rotação diagonal. <strong>O Raio de Rotação do Móvel</strong> um móvel rígido não se dobra. <strong>A Embalagem</strong> o plástico de bolhas pode adicionar de 1 a 3 cm a cada lado.' },
87
+ { type: 'paragraph', html: 'Mesmo com medidas corretas, estes fatores invisíveis costumam causar desastres: <strong>O Candeeiro do Teto</strong> - esquecido durante a rotação diagonal. <strong>O Raio de Rotação do Móvel</strong> - um móvel rígido não se dobra. <strong>A Embalagem</strong> - o plástico de bolhas pode adicionar de 1 a 3 cm a cada lado.' },
88
88
  ],
89
89
  ui: {
90
90
  conTitle: 'Dimensões do Espaço',
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { FurnitureFitUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -18,11 +18,11 @@ const faqData = [
18
18
  },
19
19
  {
20
20
  question: 'Как правильно измерить лифт?',
21
- answer: 'Не меряйте только пол. Измерьте ширину открытой двери, полезную глубину и общую высоту. Диагональ от основания двери до верхнего заднего угла самый важный показатель.',
21
+ answer: 'Не меряйте только пол. Измерьте ширину открытой двери, полезную глубину и общую высоту. Диагональ от основания двери до верхнего заднего угла - самый важный показатель.',
22
22
  },
23
23
  {
24
24
  question: 'Какие детали нужно снимать в первую очередь?',
25
- answer: 'Ножки диванов, ручки шкафов и дверцы холодильников часто дают те самые критические 510 см, которые определяют, поместится мебель или останется на улице.',
25
+ answer: 'Ножки диванов, ручки шкафов и дверцы холодильников часто дают те самые критические 5-10 см, которые определяют, поместится мебель или останется на улице.',
26
26
  },
27
27
  ];
28
28
 
@@ -78,13 +78,13 @@ export const content: ToolLocaleContent<FurnitureFitUI> = {
78
78
  schemas: [faqSchema, howToSchema, appSchema],
79
79
  seo: [
80
80
  { type: 'title', text: 'Наука переезда и теорема Пифагора', level: 2 },
81
- { type: 'paragraph', html: 'Переезд это не просто испытание физической силы; это сложная геометрическая головоломка. Видимое пространство комнаты или лифта часто обманчиво, особенно если игнорировать третье измерение. Математика может сэкономить вам немало денег на возврате товаров и неудачных перевозках.' },
81
+ { type: 'paragraph', html: 'Переезд - это не просто испытание физической силы; это сложная геометрическая головоломка. Видимое пространство комнаты или лифта часто обманчиво, особенно если игнорировать третье измерение. Математика может сэкономить вам немало денег на возврате товаров и неудачных перевозках.' },
82
82
  { type: 'title', text: 'Трюк с 3D-диагональю', level: 3 },
83
83
  { type: 'card', icon: 'mdi:math-log', title: 'Золотое правило', html: '<p>Никогда не меряйте только саму мебель. Всегда измеряйте <strong>критические точки доступа</strong>: ширину дверной коробки, самую низкую точку потолка в подъезде и реальную глубину лифта при закрытых дверях. Формула <code>d = √(w² + h² + z²)</code> покажет, пройдет ли вещь под наклоном.</p>' },
84
84
  { type: 'title', text: 'Проблема дивана в коридоре', level: 3 },
85
- { type: 'card', icon: 'mdi:sofa', title: 'Запас для маневра', html: '<p>Распространенная ошибка полагать, что если мебель 80 см и проем 80 см, то она пройдет. Это не так. Руки грузчиков, эластичность ткани и неровности стен требуют минимального запаса от <strong>2 до 5 см</strong>. Без этого запаса мебель поцарапается или намертво застрянет.</p>' },
85
+ { type: 'card', icon: 'mdi:sofa', title: 'Запас для маневра', html: '<p>Распространенная ошибка - полагать, что если мебель 80 см и проем 80 см, то она пройдет. Это не так. Руки грузчиков, эластичность ткани и неровности стен требуют минимального запаса от <strong>2 до 5 см</strong>. Без этого запаса мебель поцарапается или намертво застрянет.</p>' },
86
86
  { type: 'title', text: '3 ошибки, которые портят переезд', level: 3 },
87
- { type: 'paragraph', html: 'Даже при правильных замерах эти невидимые факторы часто приводят к катастрофам: <strong>Потолочный светильник</strong> забытый во время диагонального поворота; <strong>Радиус поворота мебели</strong> жесткая мебель не гнется; <strong>Упаковка</strong> пузырчатая пленка может добавить по 13 см с каждой стороны.' },
87
+ { type: 'paragraph', html: 'Даже при правильных замерах эти невидимые факторы часто приводят к катастрофам: <strong>Потолочный светильник</strong> - забытый во время диагонального поворота; <strong>Радиус поворота мебели</strong> - жесткая мебель не гнется; <strong>Упаковка</strong> - пузырчатая пленка может добавить по 1-3 см с каждой стороны.' },
88
88
  ],
89
89
  ui: {
90
90
  conTitle: 'Размеры пространства',
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { FurnitureFitUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -84,7 +84,7 @@ export const content: ToolLocaleContent<FurnitureFitUI> = {
84
84
  { type: 'title', text: 'Soffproblemet i korridoren', level: 3 },
85
85
  { type: 'card', icon: 'mdi:sofa', title: 'Manövreringsutrymme', html: '<p>Ett vanligt misstag är att anta att om möbeln mäter 80 cm och öppningen är 80 cm, så går den igenom. Så är det inte. Flyttkarlarnas händer, tygets elasticitet och väggarnas ojämnheter kräver en minsta marginal på <strong>2 till 5 cm</strong>. Utan denna marginal blir möbeln repad eller fastnar genom tryck.</p>' },
86
86
  { type: 'title', text: '3 fel som förstör en flytt', level: 3 },
87
- { type: 'paragraph', html: 'Även med korrekta mått orsakar dessa osynliga faktorer ofta katastrofer: <strong>Taklampan</strong> ofta bortglömd vid diagonal rotation. <strong>Möbelns svängradie</strong> en stel möbel böjer sig inte. <strong>Förpackningen</strong> bubbelplast och skyddskartong kan lägga till 1 till 3 cm på varje sida.' },
87
+ { type: 'paragraph', html: 'Även med korrekta mått orsakar dessa osynliga faktorer ofta katastrofer: <strong>Taklampan</strong> - ofta bortglömd vid diagonal rotation. <strong>Möbelns svängradie</strong> - en stel möbel böjer sig inte. <strong>Förpackningen</strong> - bubbelplast och skyddskartong kan lägga till 1 till 3 cm på varje sida.' },
88
88
  ],
89
89
  ui: {
90
90
  conTitle: 'Utrymmets dimensioner',
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { FurnitureFitUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -84,7 +84,7 @@ export const content: ToolLocaleContent<FurnitureFitUI> = {
84
84
  { type: 'title', text: 'Koridordaki Kanepe Problemi', level: 3 },
85
85
  { type: 'card', icon: 'mdi:sofa', title: 'Manevra Payı', html: '<p>Mobilya 80 cm ve boşluk 80 cm ise geçeceğini varsaymak yaygın bir hatadır. Öyle değildir. Taşıyıcıların elleri, kumaşın esnekliği ve duvarlardaki kusurlar en az <strong>2 ila 5 cm</strong> pay gerektirir. Bu pay olmadan mobilya çizilir veya baskı nedeniyle sıkışıp kalır.</p>' },
86
86
  { type: 'title', text: 'Taşınmayı Mahveden 3 Hata', level: 3 },
87
- { type: 'paragraph', html: 'Doğru ölçümlerle bile bu görünmez faktörler felaketlere yol açar: <strong>Tavan Lambası</strong> diyagonal dönüş sırasında unutulur; <strong>Mobilya Dönüş Yarıçapı</strong> sert mobilyalar bükülmez; <strong>Paketleme</strong> balonlu naylon her iki tarafa da 1-3 cm ekleyebilir.' },
87
+ { type: 'paragraph', html: 'Doğru ölçümlerle bile bu görünmez faktörler felaketlere yol açar: <strong>Tavan Lambası</strong> - diyagonal dönüş sırasında unutulur; <strong>Mobilya Dönüş Yarıçapı</strong> - sert mobilyalar bükülmez; <strong>Paketleme</strong> - balonlu naylon her iki tarafa da 1-3 cm ekleyebilir.' },
88
88
  ],
89
89
  ui: {
90
90
  conTitle: 'Alan Boyutları',
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { FurnitureFitUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -84,7 +84,7 @@ export const content: ToolLocaleContent<FurnitureFitUI> = {
84
84
  { type: 'title', text: '走廊沙发问题', level: 3 },
85
85
  { type: 'card', icon: 'mdi:sofa', title: '操作余量', html: '<p>一个常见的错误是假设如果家具宽 80 厘米,门洞宽 80 厘米,就能通过。并非如此。工人的手、织物的弹性以及墙面的不平整都需要至少 <strong>2 到 5 厘米</strong> 的余量。如果没有这个余量,家具会被刮花或被挤住。</p>' },
86
86
  { type: 'title', text: '毁掉搬家的 3 个错误', level: 3 },
87
- { type: 'paragraph', html: '即使尺寸正确,这些看不见的因素也常会导致灾难:<strong>吸顶灯</strong> —— 在对角线旋转期间常被遗忘;<strong>家具的转弯半径</strong> —— 硬家具不会弯曲;<strong>包装</strong> —— 气泡膜和保护纸板会在每边增加 1 到 3 厘米。' },
87
+ { type: 'paragraph', html: '即使尺寸正确,这些看不见的因素也常会导致灾难:<strong>吸顶灯</strong> - 在对角线旋转期间常被遗忘;<strong>家具的转弯半径</strong> - 硬家具不会弯曲;<strong>包装</strong> - 气泡膜和保护纸板会在每边增加 1 到 3 厘米。' },
88
88
  ],
89
89
  ui: {
90
90
  conTitle: '空间尺寸',
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { MortarCalculatorUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -101,7 +101,7 @@ export const content: ToolLocaleContent<MortarCalculatorUI> = {
101
101
  },
102
102
  {
103
103
  type: 'paragraph',
104
- html: 'Natural Hydraulic Lime (NHL) mortars are the material of choice for heritage restoration, conservation projects, and traditional masonry. Unlike cement, which traps moisture and damages old stone, NHL lime mortar is breathable, flexible, and compatible with historic substrates. This calculator uses the proportional system codified by the Roman architect Vitruvius in 25 BC a system still valid today.',
104
+ html: 'Natural Hydraulic Lime (NHL) mortars are the material of choice for heritage restoration, conservation projects, and traditional masonry. Unlike cement, which traps moisture and damages old stone, NHL lime mortar is breathable, flexible, and compatible with historic substrates. This calculator uses the proportional system codified by the Roman architect Vitruvius in 25 BC - a system still valid today.',
105
105
  },
106
106
  {
107
107
  type: 'card',
@@ -153,7 +153,7 @@ export const content: ToolLocaleContent<MortarCalculatorUI> = {
153
153
  },
154
154
  {
155
155
  type: 'paragraph',
156
- html: 'The aggregate is not a filler it is <strong>60-75% of your mortar by volume</strong>. Sand quality directly determines mortar quality. Sharp washed sand with angular grains creates stronger mechanical keying. Rounded river sand gives a more workable mix but lower strength. For heritage pointing, always try to match the colour and texture of the original mortar through petrographic analysis.',
156
+ html: 'The aggregate is not a filler - it is <strong>60-75% of your mortar by volume</strong>. Sand quality directly determines mortar quality. Sharp washed sand with angular grains creates stronger mechanical keying. Rounded river sand gives a more workable mix but lower strength. For heritage pointing, always try to match the colour and texture of the original mortar through petrographic analysis.',
157
157
  },
158
158
  {
159
159
  type: 'card',
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { MortarCalculatorUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -10,7 +10,7 @@ const description = 'Бесплатный калькулятор для изве
10
10
  const faqData = [
11
11
  {
12
12
  question: 'Почему стоит использовать известь вместо цемента?',
13
- answer: 'Известь это «живой» и дышащий материал, который позволяет водяному пару выходить наружу, предотвращая появление сырости от конденсата. Кроме того, она более гибкая, чем цемент, что снижает риск появления трещин в старых стенах.',
13
+ answer: 'Известь - это "живой" и дышащий материал, который позволяет водяному пару выходить наружу, предотвращая появление сырости от конденсата. Кроме того, она более гибкая, чем цемент, что снижает риск появления трещин в старых стенах.',
14
14
  },
15
15
  {
16
16
  question: 'Какова идеальная пропорция для обрызга (базового слоя)?',
@@ -30,7 +30,7 @@ const howToData = [
30
30
  { name: 'Определить тип основания', text: 'Проверьте, будете ли вы работать по камню, старому кирпичу или блоку. Основание должно быть чистым и слегка влажным.' },
31
31
  { name: 'Выбрать гранулометрию песка', text: 'Используйте крупный песок для базового слоя и мелкий песок для декоративной отделки. Чистота песка определяет качество раствора.' },
32
32
  { name: 'Смешивание компонентов', text: 'Смешайте известь и песок всухую перед добавлением воды. Консистенция должна быть пластичной, а не жидкой.' },
33
- { name: 'Нанесение и затирка', text: 'Распределите раствор кельмой и используйте терку для выравнивания поверхности, когда раствор начнет «схватываться».' },
33
+ { name: 'Нанесение и затирка', text: 'Распределите раствор кельмой и используйте терку для выравнивания поверхности, когда раствор начнет "схватываться".' },
34
34
  ];
35
35
 
36
36
  const faqSchema: WithContext<FAQPage> = {
@@ -78,11 +78,11 @@ export const content: ToolLocaleContent<MortarCalculatorUI> = {
78
78
  schemas: [faqSchema, howToSchema, appSchema],
79
79
  seo: [
80
80
  { type: 'title', text: 'Трактат о растворах: мудрость Витрувия', level: 2 },
81
- { type: 'paragraph', html: 'Марк Витрувий Поллион в VII книге своего труда <em>Десять книг об архитектуре</em> описал не только техники, но и философию. Он понимал, что долговечность здания заключается в его соединениях. Раствор это не просто клей, это соединительная ткань. Его пропорции (1:3, 1:2, 1:1) являются наследием столетий римских эмпирических наблюдений в поисках идеального баланса между прочностью и гибкостью.' },
81
+ { type: 'paragraph', html: 'Марк Витрувий Поллион в VII книге своего труда <em>Десять книг об архитектуре</em> описал не только техники, но и философию. Он понимал, что долговечность здания заключается в его соединениях. Раствор - это не просто клей, это соединительная ткань. Его пропорции (1:3, 1:2, 1:1) являются наследием столетий римских эмпирических наблюдений в поисках идеального баланса между прочностью и гибкостью.' },
82
82
  { type: 'title', text: 'Гранулометрия заполнителя: ключ к качеству', level: 3 },
83
- { type: 'paragraph', html: 'Качество известкового раствора во многом зависит от гранулометрии заполнителя. Для <strong>Trullissatio</strong> (базового слоя) используется крупный речной песок 2-5 мм. Для <strong>Arenato</strong> (промежуточного слоя) промытый средний песок 0,5-2 мм. Для <strong>Marmorato</strong> (чистовой отделки) мраморная пыль менее 0,5 мм.' },
83
+ { type: 'paragraph', html: 'Качество известкового раствора во многом зависит от гранулометрии заполнителя. Для <strong>Trullissatio</strong> (базового слоя) используется крупный речной песок 2-5 мм. Для <strong>Arenato</strong> (промежуточного слоя) - промытый средний песок 0,5-2 мм. Для <strong>Marmorato</strong> (чистовой отделки) - мраморная пыль менее 0,5 мм.' },
84
84
  { type: 'title', text: 'Тайна механического сцепления', level: 3 },
85
- { type: 'paragraph', html: 'Сцепление носит не химический, а <strong>механический</strong> характер. Представьте миллионы микроскопических корней. Раствор должен проникать в поры кирпича, создавая физический «замок». Без пористости не будет анкеровки.' },
85
+ { type: 'paragraph', html: 'Сцепление носит не химический, а <strong>механический</strong> характер. Представьте миллионы микроскопических корней. Раствор должен проникать в поры кирпича, создавая физический "замок". Без пористости не будет анкеровки.' },
86
86
  ],
87
87
  ui: {
88
88
  leftTitle: 'Витрувианская система',
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { MortarCalculatorUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -10,7 +10,7 @@ const description = '石灰和砂浆免费计算器。根据传统方法(维
10
10
  const faqData = [
11
11
  {
12
12
  question: '为什么要使用石灰而不是水泥?',
13
- answer: '石灰是一种“活的”透气材料,允许水蒸汽排出,防止因冷凝产生的湿气。此外,它比水泥更具柔韧性,可以减少旧墙体裂缝的出现。',
13
+ answer: '石灰是一种"活的"透气材料,允许水蒸汽排出,防止因冷凝产生的湿气。此外,它比水泥更具柔韧性,可以减少旧墙体裂缝的出现。',
14
14
  },
15
15
  {
16
16
  question: '粗抹灰的理想比例是多少?',
@@ -82,7 +82,7 @@ export const content: ToolLocaleContent<MortarCalculatorUI> = {
82
82
  { type: 'title', text: '骨料粒径:质量的关键', level: 3 },
83
83
  { type: 'paragraph', html: '石灰砂浆的质量在很大程度上取决于骨料的粒径。对于 <strong>Trullissatio</strong>(基层粉刷),使用 2-5 毫米的粗河沙。对于 <strong>Arenato</strong>(中层抹灰),使用 0.5-2 毫米的洗净中沙。对于 <strong>Marmorato</strong>(精抹灰),使用小于 0.5 毫米的石灰石粉。' },
84
84
  { type: 'title', text: '机械嵌锁的奥秘', level: 3 },
85
- { type: 'paragraph', html: '这种结合不是化学性的,而是<strong>机械性</strong>的。想象一下数以百万计的微观根须。砂浆必须渗透到砖块的孔隙中,创造一个物理“锁扣”。没有孔隙,就没有锚固。' },
85
+ { type: 'paragraph', html: '这种结合不是化学性的,而是<strong>机械性</strong>的。想象一下数以百万计的微观根须。砂浆必须渗透到砖块的孔隙中,创造一个物理"锁扣"。没有孔隙,就没有锚固。' },
86
86
  ],
87
87
  ui: {
88
88
  leftTitle: '维特鲁威系统',
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { PassepartoutCalculatorUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -22,7 +22,7 @@ const faqData = [
22
22
  {
23
23
  question: 'How do I choose the mat board color?',
24
24
  answer:
25
- 'Off-white or soft cream are the safe professional standards they do not compete with the artwork. A dark mat can emphasize highlights in photography. Colored mats should be used carefully and only to complement specific tones in the piece, never to overpower it.',
25
+ 'Off-white or soft cream are the safe professional standards - they do not compete with the artwork. A dark mat can emphasize highlights in photography. Colored mats should be used carefully and only to complement specific tones in the piece, never to overpower it.',
26
26
  },
27
27
  {
28
28
  question: 'What is the ideal mat margin width?',
@@ -101,7 +101,7 @@ export const content: ToolLocaleContent<PassepartoutCalculatorUI> = {
101
101
  },
102
102
  {
103
103
  type: 'paragraph',
104
- html: 'A <strong>passepartout</strong> (or mat board) is not merely decorative cardboard it is the breathing space that allows your artwork to exist independently from its frame. This calculator gives you the exact dimensions to cut your mat, ensuring the artwork is optically centred or balanced within the frame to professional gallery standards.',
104
+ html: 'A <strong>passepartout</strong> (or mat board) is not merely decorative cardboard - it is the breathing space that allows your artwork to exist independently from its frame. This calculator gives you the exact dimensions to cut your mat, ensuring the artwork is optically centred or balanced within the frame to professional gallery standards.',
105
105
  },
106
106
  {
107
107
  type: 'title',
@@ -112,7 +112,7 @@ export const content: ToolLocaleContent<PassepartoutCalculatorUI> = {
112
112
  type: 'card',
113
113
  icon: 'mdi:eye-outline',
114
114
  title: 'The optical center illusion',
115
- html: '<p>The human eye perceives the geometric vertical center of a rectangle as being slightly lower than it actually is. Artwork framed with perfectly equal top and bottom margins appears to be "falling" or sinking.</p><p><strong>Bottom weighting</strong> corrects this by making the bottom margin 5-15% wider than the top. The artwork is lifted optically and appears perfectly centered a technique used in every professional gallery worldwide.</p>',
115
+ html: '<p>The human eye perceives the geometric vertical center of a rectangle as being slightly lower than it actually is. Artwork framed with perfectly equal top and bottom margins appears to be "falling" or sinking.</p><p><strong>Bottom weighting</strong> corrects this by making the bottom margin 5-15% wider than the top. The artwork is lifted optically and appears perfectly centered - a technique used in every professional gallery worldwide.</p>',
116
116
  },
117
117
  {
118
118
  type: 'title',
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { PassepartoutCalculatorUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -10,7 +10,7 @@ const description = 'Инструмент для расчета полей па
10
10
  const faqData = [
11
11
  {
12
12
  question: 'Что такое оптическая коррекция центра (Bottom Weighting)?',
13
- answer: 'Это принцип дизайна и оформления, при котором нижнее поле делается чуть шире остальных. Это корректирует оптическую иллюзию, из-за которой геометрический центр кажется «просевшим», когда смотришь на висящую работу.',
13
+ answer: 'Это принцип дизайна и оформления, при котором нижнее поле делается чуть шире остальных. Это корректирует оптическую иллюзию, из-за которой геометрический центр кажется "просевшим", когда смотришь на висящую работу.',
14
14
  },
15
15
  {
16
16
  question: 'Из какого материала должно быть паспарту?',
@@ -22,7 +22,7 @@ const faqData = [
22
22
  },
23
23
  {
24
24
  question: 'Какова идеальная ширина поля?',
25
- answer: 'Профессиональный стандарт составляет от 5 до 8 см. Если поле слишком узкое, работа кажется «зажатой». Если очень широкое, оно может придать небольшим работам монументальный и минималистичный вид.',
25
+ answer: 'Профессиональный стандарт составляет от 5 до 8 см. Если поле слишком узкое, работа кажется "зажатой". Если очень широкое, оно может придать небольшим работам монументальный и минималистичный вид.',
26
26
  },
27
27
  ];
28
28
 
@@ -78,11 +78,11 @@ export const content: ToolLocaleContent<PassepartoutCalculatorUI> = {
78
78
  schemas: [faqSchema, howToSchema, appSchema],
79
79
  seo: [
80
80
  { type: 'title', text: 'Наука идеального оформления', level: 2 },
81
- { type: 'paragraph', html: '<strong>Паспарту</strong> это не просто декоративный картон; это легкие, которые позволяют вашему произведению искусства дышать. Этот калькулятор поможет вам определить точные размеры для вырезания картона, гарантируя, что работа будет идеально центрирована или оптически сбалансирована внутри рамы.' },
82
- { type: 'title', text: 'Почему важен «тяжелый низ» или Bottom Weighting?', level: 3 },
83
- { type: 'card', icon: 'mdi:eye-outline', title: 'Оптическая иллюзия геометрического центра', html: '<p>Человеческий глаз склонен воспринимать вертикальный геометрический центр чуть ниже, чем он есть на самом деле. Если вы оформите работу точно по центру, будет казаться, что она «падает».</p><p><strong>Bottom Weighting</strong> корректирует эту иллюзию, оставляя нижнее поле чуть больше, визуально приподнимая работу, чтобы она казалась идеально центрированной.</p>' },
81
+ { type: 'paragraph', html: '<strong>Паспарту</strong> - это не просто декоративный картон; это легкие, которые позволяют вашему произведению искусства дышать. Этот калькулятор поможет вам определить точные размеры для вырезания картона, гарантируя, что работа будет идеально центрирована или оптически сбалансирована внутри рамы.' },
82
+ { type: 'title', text: 'Почему важен "тяжелый низ" или Bottom Weighting?', level: 3 },
83
+ { type: 'card', icon: 'mdi:eye-outline', title: 'Оптическая иллюзия геометрического центра', html: '<p>Человеческий глаз склонен воспринимать вертикальный геометрический центр чуть ниже, чем он есть на самом деле. Если вы оформите работу точно по центру, будет казаться, что она "падает".</p><p><strong>Bottom Weighting</strong> корректирует эту иллюзию, оставляя нижнее поле чуть больше, визуально приподнимая работу, чтобы она казалась идеально центрированной.</p>' },
84
84
  { type: 'title', text: 'Материалы для консервационного оформления', level: 3 },
85
- { type: 'card', icon: 'mdi:palette-swatch-outline', title: 'Безкислотный картон для консервации', html: '<p>При выборе картона всегда ищите пометки <strongAcid-Free»</strong> или <strongMuseum Quality»</strong>. Дешевый картон из древесной массы может со временем пожелтеть и выделять кислоты, которые «прожгут» ваше произведение искусства (фоксинг), непоправимо испортив его.</p>' },
85
+ { type: 'card', icon: 'mdi:palette-swatch-outline', title: 'Безкислотный картон для консервации', html: '<p>При выборе картона всегда ищите пометки <strong>"Acid-Free"</strong> или <strong>"Museum Quality"</strong>. Дешевый картон из древесной массы может со временем пожелтеть и выделять кислоты, которые "прожгут" ваше произведение искусства (фоксинг), непоправимо испортив его.</p>' },
86
86
  ],
87
87
  ui: {
88
88
  sectionTitle: 'Размеры',
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { PassepartoutCalculatorUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -10,7 +10,7 @@ const description = '用于计算具有视觉偏差补偿(底部加权)的
10
10
  const faqData = [
11
11
  {
12
12
  question: '什么是视觉中心修正(底部加权)?',
13
- answer: '这是一种平面设计和装裱原则,即底部边距略宽于其他边距。这修正了当人观看挂起的作品时,几何中心看起来似乎“下掉”的视觉错觉。',
13
+ answer: '这是一种平面设计和装裱原则,即底部边距略宽于其他边距。这修正了当人观看挂起的作品时,几何中心看起来似乎"下掉"的视觉错觉。',
14
14
  },
15
15
  {
16
16
  question: '卡纸应该使用什么材料?',
@@ -22,7 +22,7 @@ const faqData = [
22
22
  },
23
23
  {
24
24
  question: '理想的边距宽度是多少?',
25
- answer: '专业标准在 5 到 8 厘米之间。如果边距太窄,作品看起来会像被“窒息”了。如果非常宽,可以赋予小作品一种英勇且极简的氛围。',
25
+ answer: '专业标准在 5 到 8 厘米之间。如果边距太窄,作品看起来会像被"窒息"了。如果非常宽,可以赋予小作品一种英勇且极简的氛围。',
26
26
  },
27
27
  ];
28
28
 
@@ -79,10 +79,10 @@ export const content: ToolLocaleContent<PassepartoutCalculatorUI> = {
79
79
  seo: [
80
80
  { type: 'title', text: '完美装嵌的科学', level: 2 },
81
81
  { type: 'paragraph', html: '<strong>卡纸</strong>不仅是一张装饰纸板;它是让您的艺术品呼吸的肺。此计算器可帮助您确定裁切卡纸的精确尺寸,确保作品在画框内完美居中或在视觉上达到平衡。' },
82
- { type: 'title', text: '为什么要进行“底部加权” (Bottom Weighting)?', level: 3 },
83
- { type: 'card', icon: 'mdi:eye-outline', title: '几何中心的视觉错觉', html: '<p>人类的眼睛往往会将垂直几何中心感知为比实际位置略低一点。如果您将作品完全放在正中心,它看起来会像是在“下坠”。</p><p><strong>底部加权</strong>通过多预留一点底部边距来修正这种错觉,从而在视觉上提升作品,使其看起来完美居中。</p>' },
82
+ { type: 'title', text: '为什么要进行"底部加权" (Bottom Weighting)?', level: 3 },
83
+ { type: 'card', icon: 'mdi:eye-outline', title: '几何中心的视觉错觉', html: '<p>人类的眼睛往往会将垂直几何中心感知为比实际位置略低一点。如果您将作品完全放在正中心,它看起来会像是在"下坠"。</p><p><strong>底部加权</strong>通过多预留一点底部边距来修正这种错觉,从而在视觉上提升作品,使其看起来完美居中。</p>' },
84
84
  { type: 'title', text: '卡纸的保护材料', level: 3 },
85
- { type: 'card', icon: 'mdi:palette-swatch-outline', title: '用于保存的无酸卡纸', html: '<p>选择卡纸时,请始终寻找 <strong>“Acid-Free”</strong>(无酸)或 <strong>“Museum Quality”</strong>(博物馆品质)等术语。廉价的木浆卡纸会随时间变黄,并释放酸性物质,从而“烧坏”您的艺术品(产生狐斑),造成不可逆转的损坏。</p>' },
85
+ { type: 'card', icon: 'mdi:palette-swatch-outline', title: '用于保存的无酸卡纸', html: '<p>选择卡纸时,请始终寻找 <strong>"Acid-Free"</strong>(无酸)或 <strong>"Museum Quality"</strong>(博物馆品质)等术语。廉价的木浆卡纸会随时间变黄,并释放酸性物质,从而"烧坏"您的艺术品(产生狐斑),造成不可逆转的损坏。</p>' },
86
86
  ],
87
87
  ui: {
88
88
  sectionTitle: '尺寸',
@@ -1,4 +1,4 @@
1
- .pp-root {
1
+ .pp-root {
2
2
  width: 100%;
3
3
  max-width: 1100px;
4
4
  margin: 0 auto;
@@ -323,6 +323,7 @@
323
323
 
324
324
  .pp-frame-wrapper {
325
325
  position: relative;
326
+ width: min(100%, 520px);
326
327
  height: 100%;
327
328
  max-height: 60vh;
328
329
  display: flex;
@@ -332,9 +333,10 @@
332
333
 
333
334
  .pp-frame {
334
335
  position: relative;
336
+ width: 100%;
335
337
  box-shadow: 0 25px 50px rgba(0, 0, 0, 0.25);
336
338
  background: #fff;
337
- height: 100%;
339
+ max-width: 100%;
338
340
  max-height: 60vh;
339
341
  transition: all 0.7s cubic-bezier(0.34, 1.56, 0.64, 1);
340
342
  }
@@ -510,7 +512,115 @@
510
512
  }
511
513
 
512
514
  @media (max-width: 1023px) {
515
+ .pp-root {
516
+ border-radius: 1rem;
517
+ }
518
+
519
+ .pp-inputs {
520
+ border-right: 0;
521
+ border-bottom: 1px solid #e2e8f0;
522
+ }
523
+
524
+ .theme-dark .pp-inputs {
525
+ border-bottom-color: #2d2d3f;
526
+ }
527
+
513
528
  .pp-preview {
514
529
  padding: 4rem 3rem;
515
530
  }
516
- }
531
+ }
532
+
533
+ @media (max-width: 640px) {
534
+ .pp-root {
535
+ border-radius: 0.875rem;
536
+ }
537
+
538
+ .pp-inputs {
539
+ padding: 1rem;
540
+ gap: 1.25rem;
541
+ }
542
+
543
+ .pp-section-title {
544
+ font-size: 1.05rem;
545
+ }
546
+
547
+ .pp-row {
548
+ grid-template-columns: 1fr;
549
+ gap: 0.75rem;
550
+ }
551
+
552
+ .pp-input {
553
+ font-size: 1rem;
554
+ padding: 0.7rem 0.85rem;
555
+ }
556
+
557
+ .pp-toggle-label {
558
+ align-items: flex-start;
559
+ }
560
+
561
+ .pp-offset-row {
562
+ gap: 0.75rem;
563
+ }
564
+
565
+ .pp-preview {
566
+ min-height: 360px;
567
+ padding: 3.25rem 1rem;
568
+ }
569
+
570
+ .pp-frame-wrapper {
571
+ width: min(100%, 76vw);
572
+ max-height: 320px;
573
+ }
574
+
575
+ .pp-frame {
576
+ max-height: 320px;
577
+ }
578
+
579
+ .pp-border-left {
580
+ left: 0.35rem;
581
+ align-items: flex-start;
582
+ padding-right: 0;
583
+ transform: translateY(-50%);
584
+ }
585
+
586
+ .pp-border-right {
587
+ right: 0.35rem;
588
+ align-items: flex-end;
589
+ padding-left: 0;
590
+ transform: translateY(-50%);
591
+ }
592
+
593
+ .pp-border-val {
594
+ font-size: 0.95rem;
595
+ }
596
+
597
+ .pp-border-tag {
598
+ font-size: 0.55rem;
599
+ letter-spacing: 0.04em;
600
+ max-width: 2.75rem;
601
+ overflow-wrap: anywhere;
602
+ text-align: inherit;
603
+ }
604
+
605
+ .pp-border-unit {
606
+ font-size: 0.55rem;
607
+ }
608
+
609
+ .pp-art-placeholder {
610
+ max-width: 100%;
611
+ padding: 0 0.25rem;
612
+ text-align: center;
613
+ overflow-wrap: anywhere;
614
+ }
615
+ }
616
+
617
+ @media (max-width: 380px) {
618
+ .pp-preview {
619
+ padding-right: 0.75rem;
620
+ padding-left: 0.75rem;
621
+ }
622
+
623
+ .pp-frame-wrapper {
624
+ width: min(100%, 70vw);
625
+ }
626
+ }
@@ -1,10 +1,10 @@
1
- import type { WithContext, FAQPage, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { PythagoreanRightAngleCalculatorUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
5
5
 
6
6
  const slug = 'calculatrice-angle-droit-pythagore-regle-3-4-5';
7
- const title = 'Calculatrice d\'Angle Droit (Théorème de Pythagore) : Règle 3 4 5 pour Équerrages Parfaits';
7
+ const title = 'Calculatrice d\'Angle Droit (Théorème de Pythagore): Règle 3 4 5 pour Équerrages Parfaits';
8
8
  const description = 'Vérifiez si vos structures sont parfaitement d\'équerre (90°) en utilisant le théorème de Pythagore et la règle 3-4-5. Outil essentiel pour la construction, la menuiserie et le bricolage.';
9
9
 
10
10
  const faqData = [
@@ -83,7 +83,7 @@ export const content: ToolLocaleContent<PythagoreanRightAngleCalculatorUI> = {
83
83
  schemas: [faqSchema, howToSchema, appSchema],
84
84
  seo: [
85
85
  { type: 'title', text: 'Le Théorème de Pythagore en Pratique', level: 2 },
86
- { type: 'paragraph', html: 'Un angle parfait de 90 degrés est fondamental pour une construction de qualité. Les murs doivent être perpendiculaires, les fondations doivent être d\'équerre et les cadres doivent être d\'aplomb. Le théorème de Pythagore fournit une méthode mathématiquement garantie : a² + b² = c².' },
86
+ { type: 'paragraph', html: 'Un angle parfait de 90 degrés est fondamental pour une construction de qualité. Les murs doivent être perpendiculaires, les fondations doivent être d\'équerre et les cadres doivent être d\'aplomb. Le théorème de Pythagore fournit une méthode mathématiquement garantie: a² + b² = c².' },
87
87
  { type: 'title', text: 'Pourquoi la règle 3-4-5 fonctionne', level: 3 },
88
88
  { type: 'paragraph', html: 'La règle 3-4-5 est le triplet pythagoricien le plus simple. Que vous mesuriez en pouces, en pieds ou dans n\'importe quelle autre unité, les côtés de 3, 4 et 5 unités garantissent un angle de 90 degrés. Cela a été prouvé mathématiquement et testé dans la construction depuis des siècles.' },
89
89
  { type: 'title', text: 'La précision sans outils spécialisés', level: 3 },
@@ -1,4 +1,4 @@
1
- import type { WithContext, FAQPage, SoftwareApplication } from 'schema-dts';
1
+ import type { WithContext, FAQPage, SoftwareApplication } from 'schema-dts';
2
2
  import type { ToolLocaleContent } from '../../../types';
3
3
  import type { PythagoreanRightAngleCalculatorUI } from '../ui';
4
4
  import { bibliography } from '../bibliography';
@@ -18,7 +18,7 @@ const faqData = [
18
18
  },
19
19
  {
20
20
  question: 'Co jeśli moja przekątna jest inna?',
21
- answer: 'Jeśli zmierzona przekątna różni się od idealnej, kalkulator pokaże odchylenie. Kolor zielony oznacza ideał, żółty akceptowalne odchylenie, czerwony brak kąta prostego. Narzędzie podpowie również, czy należy zwiększyć czy zmniejszyć kąt.',
21
+ answer: 'Jeśli zmierzona przekątna różni się od idealnej, kalkulator pokaże odchylenie. Kolor zielony oznacza ideał, żółty - akceptowalne odchylenie, czerwony - brak kąta prostego. Narzędzie podpowie również, czy należy zwiększyć czy zmniejszyć kąt.',
22
22
  },
23
23
  {
24
24
  question: 'Czy to jest wystarczająco dokładne do budowy?',