@jjlmoya/utils-finance 1.30.0 → 1.32.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 (215) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/en.ts +1 -1
  3. package/src/category/i18n/es.ts +4 -4
  4. package/src/category/i18n/fr.ts +159 -159
  5. package/src/category/i18n/pl.ts +1 -1
  6. package/src/category/i18n/ru.ts +158 -158
  7. package/src/category/index.ts +39 -38
  8. package/src/category/seo.astro +1 -1
  9. package/src/components/PreviewNavSidebar.astro +1 -1
  10. package/src/components/PreviewToolbar.astro +1 -1
  11. package/src/data.ts +1 -1
  12. package/src/entries.ts +4 -1
  13. package/src/env.d.ts +1 -1
  14. package/src/index.ts +1 -0
  15. package/src/layouts/PreviewLayout.astro +113 -113
  16. package/src/pages/index.astro +1 -1
  17. package/src/tests/bibliography_wellformed_export.test.ts +46 -0
  18. package/src/tests/category_seo_quality.test.ts +76 -0
  19. package/src/tests/faq_count.test.ts +1 -1
  20. package/src/tests/locale_completeness.test.ts +2 -2
  21. package/src/tests/mocks/astro_mock.js +1 -1
  22. package/src/tests/no_h1_in_components.test.ts +1 -1
  23. package/src/tests/script_density.test.ts +94 -94
  24. package/src/tests/seo_length.test.ts +23 -23
  25. package/src/tests/seo_translation_completeness.test.ts +69 -0
  26. package/src/tests/seo_wellformed_export.test.ts +65 -0
  27. package/src/tests/tool_validation.test.ts +17 -17
  28. package/src/tool/compoundInterest/compound-interest-calculator.css +236 -236
  29. package/src/tool/compoundInterest/entry.ts +32 -32
  30. package/src/tool/compoundInterest/i18n/de.ts +195 -195
  31. package/src/tool/compoundInterest/i18n/fr.ts +195 -195
  32. package/src/tool/compoundInterest/i18n/it.ts +195 -195
  33. package/src/tool/compoundInterest/i18n/pl.ts +194 -194
  34. package/src/tool/compoundInterest/i18n/ru.ts +195 -195
  35. package/src/tool/compoundInterest/i18n/tr.ts +195 -195
  36. package/src/tool/compoundInterest/i18n/zh.ts +189 -189
  37. package/src/tool/compoundInterest/seo.astro +15 -15
  38. package/src/tool/courtFeeCalculator/i18n/it.ts +158 -158
  39. package/src/tool/courtFeeCalculator/i18n/ru.ts +158 -158
  40. package/src/tool/courtFeeCalculator/i18n/tr.ts +158 -158
  41. package/src/tool/courtFeeCalculator/seo.astro +15 -15
  42. package/src/tool/courtFeeCalculator/spanish-court-fees-calculator.css +197 -197
  43. package/src/tool/debtSnowball/bibliography.ts +12 -12
  44. package/src/tool/debtSnowball/i18n/de.ts +16 -16
  45. package/src/tool/debtSnowball/i18n/id.ts +16 -16
  46. package/src/tool/debtSnowball/i18n/it.ts +168 -168
  47. package/src/tool/debtSnowball/i18n/nl.ts +16 -16
  48. package/src/tool/debtSnowball/i18n/pl.ts +168 -168
  49. package/src/tool/debtSnowball/i18n/pt.ts +1 -1
  50. package/src/tool/debtSnowball/i18n/ru.ts +1 -1
  51. package/src/tool/debtSnowball/i18n/sv.ts +22 -29
  52. package/src/tool/debtSnowball/i18n/tr.ts +168 -168
  53. package/src/tool/debtSnowball/i18n/zh.ts +168 -168
  54. package/src/tool/debtSnowball/seo.astro +15 -15
  55. package/src/tool/dividendYield/bibliography.astro +14 -0
  56. package/src/tool/dividendYield/bibliography.ts +12 -0
  57. package/src/tool/dividendYield/component.astro +83 -0
  58. package/src/tool/dividendYield/controller.ts +85 -0
  59. package/src/tool/dividendYield/dividend-yield-calculator.css +352 -0
  60. package/src/tool/dividendYield/dom-views.ts +58 -0
  61. package/src/tool/dividendYield/entry.ts +29 -0
  62. package/src/tool/dividendYield/evaluator.ts +16 -0
  63. package/src/tool/dividendYield/i18n/de.ts +53 -0
  64. package/src/tool/dividendYield/i18n/en.ts +138 -0
  65. package/src/tool/dividendYield/i18n/es.ts +49 -0
  66. package/src/tool/dividendYield/i18n/fr.ts +49 -0
  67. package/src/tool/dividendYield/i18n/id.ts +49 -0
  68. package/src/tool/dividendYield/i18n/it.ts +49 -0
  69. package/src/tool/dividendYield/i18n/ja.ts +49 -0
  70. package/src/tool/dividendYield/i18n/ko.ts +25 -0
  71. package/src/tool/dividendYield/i18n/nl.ts +25 -0
  72. package/src/tool/dividendYield/i18n/pl.ts +25 -0
  73. package/src/tool/dividendYield/i18n/pt.ts +25 -0
  74. package/src/tool/dividendYield/i18n/ru.ts +25 -0
  75. package/src/tool/dividendYield/i18n/sv.ts +25 -0
  76. package/src/tool/dividendYield/i18n/tr.ts +25 -0
  77. package/src/tool/dividendYield/i18n/zh.ts +25 -0
  78. package/src/tool/dividendYield/index.ts +11 -0
  79. package/src/tool/dividendYield/logic.test.ts +73 -0
  80. package/src/tool/dividendYield/logic.ts +55 -0
  81. package/src/tool/dividendYield/seo.astro +14 -0
  82. package/src/tool/dividendYield/storage.ts +24 -0
  83. package/src/tool/dividendYield/ui.ts +33 -0
  84. package/src/tool/financialFreedom/financial-freedom-calculator.css +311 -311
  85. package/src/tool/financialFreedom/i18n/en.ts +182 -182
  86. package/src/tool/financialFreedom/i18n/fr.ts +128 -128
  87. package/src/tool/financialFreedom/i18n/id.ts +24 -7
  88. package/src/tool/financialFreedom/i18n/it.ts +24 -7
  89. package/src/tool/financialFreedom/i18n/ja.ts +1 -1
  90. package/src/tool/financialFreedom/i18n/nl.ts +24 -7
  91. package/src/tool/financialFreedom/i18n/pl.ts +24 -7
  92. package/src/tool/financialFreedom/i18n/pt.ts +24 -7
  93. package/src/tool/financialFreedom/i18n/ru.ts +128 -128
  94. package/src/tool/financialFreedom/i18n/sv.ts +1 -1
  95. package/src/tool/financialFreedom/i18n/tr.ts +2 -2
  96. package/src/tool/financialFreedom/i18n/zh.ts +128 -128
  97. package/src/tool/fireCalculator/i18n/it.ts +241 -241
  98. package/src/tool/fireCalculator/i18n/ru.ts +241 -241
  99. package/src/tool/fireCalculator/i18n/tr.ts +241 -241
  100. package/src/tool/fireCalculator/i18n/zh.ts +241 -241
  101. package/src/tool/fireCalculator/seo.astro +15 -15
  102. package/src/tool/ibanBicSwiftConverter/i18n/fr.ts +151 -151
  103. package/src/tool/ibanBicSwiftConverter/i18n/it.ts +118 -118
  104. package/src/tool/ibanBicSwiftConverter/i18n/ru.ts +118 -118
  105. package/src/tool/ibanBicSwiftConverter/i18n/tr.ts +118 -118
  106. package/src/tool/ibanBicSwiftConverter/iban-to-bic-swift-converter.css +366 -366
  107. package/src/tool/ibanBicSwiftConverter/seo.astro +15 -15
  108. package/src/tool/inflation/bibliography.ts +20 -20
  109. package/src/tool/inflation/entry.ts +32 -32
  110. package/src/tool/inflation/i18n/de.ts +284 -284
  111. package/src/tool/inflation/i18n/fr.ts +284 -284
  112. package/src/tool/inflation/i18n/it.ts +284 -284
  113. package/src/tool/inflation/i18n/nl.ts +284 -284
  114. package/src/tool/inflation/i18n/pl.ts +284 -284
  115. package/src/tool/inflation/i18n/pt.ts +284 -284
  116. package/src/tool/inflation/i18n/ru.ts +284 -284
  117. package/src/tool/inflation/i18n/sv.ts +284 -284
  118. package/src/tool/inflation/i18n/tr.ts +284 -284
  119. package/src/tool/inflation/i18n/zh.ts +284 -284
  120. package/src/tool/inflation/seo.astro +15 -15
  121. package/src/tool/lateInterest/bibliography.ts +16 -16
  122. package/src/tool/lateInterest/entry.ts +32 -32
  123. package/src/tool/lateInterest/i18n/de.ts +213 -213
  124. package/src/tool/lateInterest/i18n/es.ts +213 -213
  125. package/src/tool/lateInterest/i18n/it.ts +213 -213
  126. package/src/tool/lateInterest/i18n/nl.ts +213 -213
  127. package/src/tool/lateInterest/i18n/pl.ts +213 -213
  128. package/src/tool/lateInterest/i18n/pt.ts +213 -213
  129. package/src/tool/lateInterest/i18n/ru.ts +213 -213
  130. package/src/tool/lateInterest/i18n/sv.ts +213 -213
  131. package/src/tool/lateInterest/i18n/tr.ts +213 -213
  132. package/src/tool/lateInterest/i18n/zh.ts +213 -213
  133. package/src/tool/lateInterest/seo.astro +15 -15
  134. package/src/tool/legalInterestRate/i18n/it.ts +129 -129
  135. package/src/tool/legalInterestRate/i18n/ru.ts +129 -129
  136. package/src/tool/legalInterestRate/i18n/tr.ts +128 -121
  137. package/src/tool/legalInterestRate/i18n/zh.ts +11 -4
  138. package/src/tool/legalInterestRate/seo.astro +15 -15
  139. package/src/tool/lotteryOptimizer/i18n/it.ts +163 -163
  140. package/src/tool/lotteryOptimizer/i18n/pl.ts +163 -163
  141. package/src/tool/lotteryOptimizer/i18n/ru.ts +163 -163
  142. package/src/tool/lotteryOptimizer/i18n/tr.ts +163 -163
  143. package/src/tool/lotteryOptimizer/i18n/zh.ts +162 -155
  144. package/src/tool/lotteryOptimizer/seo.astro +15 -15
  145. package/src/tool/mortgage/bibliography.ts +20 -20
  146. package/src/tool/mortgage/entry.ts +32 -32
  147. package/src/tool/mortgage/i18n/de.ts +210 -210
  148. package/src/tool/mortgage/i18n/es.ts +210 -210
  149. package/src/tool/mortgage/i18n/fr.ts +210 -210
  150. package/src/tool/mortgage/i18n/id.ts +210 -210
  151. package/src/tool/mortgage/i18n/it.ts +210 -210
  152. package/src/tool/mortgage/i18n/nl.ts +210 -210
  153. package/src/tool/mortgage/i18n/pl.ts +210 -210
  154. package/src/tool/mortgage/i18n/ru.ts +210 -210
  155. package/src/tool/mortgage/i18n/tr.ts +210 -210
  156. package/src/tool/mortgage/i18n/zh.ts +210 -210
  157. package/src/tool/mortgage/mortgage-calculator.css +595 -595
  158. package/src/tool/mortgage/seo.astro +15 -15
  159. package/src/tool/percentageCalculator/bibliography.ts +16 -16
  160. package/src/tool/percentageCalculator/entry.ts +32 -32
  161. package/src/tool/percentageCalculator/i18n/de.ts +220 -220
  162. package/src/tool/percentageCalculator/i18n/en.ts +220 -220
  163. package/src/tool/percentageCalculator/i18n/es.ts +220 -220
  164. package/src/tool/percentageCalculator/i18n/fr.ts +220 -220
  165. package/src/tool/percentageCalculator/i18n/it.ts +220 -220
  166. package/src/tool/percentageCalculator/i18n/pl.ts +220 -220
  167. package/src/tool/percentageCalculator/i18n/ru.ts +220 -220
  168. package/src/tool/percentageCalculator/i18n/tr.ts +220 -220
  169. package/src/tool/percentageCalculator/i18n/zh.ts +220 -220
  170. package/src/tool/percentageCalculator/seo.astro +15 -15
  171. package/src/tool/profitability/i18n/de.ts +24 -7
  172. package/src/tool/profitability/i18n/fr.ts +121 -104
  173. package/src/tool/profitability/i18n/id.ts +2 -2
  174. package/src/tool/profitability/i18n/it.ts +24 -7
  175. package/src/tool/profitability/i18n/ja.ts +1 -1
  176. package/src/tool/profitability/i18n/nl.ts +24 -7
  177. package/src/tool/profitability/i18n/pl.ts +1 -1
  178. package/src/tool/profitability/i18n/pt.ts +24 -7
  179. package/src/tool/profitability/i18n/ru.ts +118 -118
  180. package/src/tool/profitability/i18n/sv.ts +1 -1
  181. package/src/tool/profitability/i18n/tr.ts +1 -1
  182. package/src/tool/profitability/i18n/zh.ts +118 -118
  183. package/src/tool/profitability/profitability-calculator.css +229 -229
  184. package/src/tool/rentIncreaseCalculator/i18n/it.ts +125 -125
  185. package/src/tool/rentIncreaseCalculator/i18n/tr.ts +125 -125
  186. package/src/tool/rentIncreaseCalculator/rent-increase-calculator.css +326 -326
  187. package/src/tool/rentIncreaseCalculator/seo.astro +15 -15
  188. package/src/tool/revolvingCardCalculator/i18n/de.ts +38 -20
  189. package/src/tool/revolvingCardCalculator/i18n/es.ts +19 -18
  190. package/src/tool/revolvingCardCalculator/i18n/fr.ts +32 -28
  191. package/src/tool/revolvingCardCalculator/i18n/id.ts +18 -18
  192. package/src/tool/revolvingCardCalculator/i18n/it.ts +18 -18
  193. package/src/tool/revolvingCardCalculator/i18n/ja.ts +2 -2
  194. package/src/tool/revolvingCardCalculator/i18n/ko.ts +2 -2
  195. package/src/tool/revolvingCardCalculator/i18n/nl.ts +22 -19
  196. package/src/tool/revolvingCardCalculator/i18n/pl.ts +2 -2
  197. package/src/tool/revolvingCardCalculator/i18n/pt.ts +2 -2
  198. package/src/tool/revolvingCardCalculator/i18n/ru.ts +2 -2
  199. package/src/tool/revolvingCardCalculator/i18n/sv.ts +2 -2
  200. package/src/tool/revolvingCardCalculator/i18n/tr.ts +2 -2
  201. package/src/tool/revolvingCardCalculator/i18n/zh.ts +6 -6
  202. package/src/tool/salaryEmployerCost/i18n/de.ts +10 -10
  203. package/src/tool/salaryEmployerCost/i18n/fr.ts +9 -9
  204. package/src/tool/salaryEmployerCost/i18n/id.ts +9 -9
  205. package/src/tool/salaryEmployerCost/i18n/it.ts +9 -9
  206. package/src/tool/salaryEmployerCost/i18n/ja.ts +1 -1
  207. package/src/tool/salaryEmployerCost/i18n/ko.ts +1 -1
  208. package/src/tool/salaryEmployerCost/i18n/nl.ts +2 -2
  209. package/src/tool/salaryEmployerCost/i18n/pl.ts +2 -2
  210. package/src/tool/salaryEmployerCost/i18n/pt.ts +2 -2
  211. package/src/tool/salaryEmployerCost/i18n/ru.ts +2 -2
  212. package/src/tool/salaryEmployerCost/i18n/sv.ts +2 -2
  213. package/src/tool/salaryEmployerCost/i18n/tr.ts +2 -2
  214. package/src/tool/salaryEmployerCost/i18n/zh.ts +2 -2
  215. package/src/tools.ts +2 -1
@@ -1,18 +1,18 @@
1
- .prof-root {
2
- --prof-brand: #10b981;
3
- --prof-brand-light: #34d399;
4
- --prof-brand-dark: #059669;
5
- --prof-danger: #ef4444;
6
- --prof-bg: var(--surface-1);
7
- --prof-card-bg: var(--surface-2);
8
- --prof-input-bg: var(--surface-3);
9
- --prof-text: var(--text-1);
10
- --prof-text-muted: var(--text-2);
11
- --prof-border: var(--border-color);
12
-
13
- display: flex;
14
- flex-direction: column;
15
- gap: 2rem;
1
+ .prof-root {
2
+ --prof-brand: #10b981;
3
+ --prof-brand-light: #34d399;
4
+ --prof-brand-dark: #059669;
5
+ --prof-danger: #ef4444;
6
+ --prof-bg: var(--surface-1);
7
+ --prof-card-bg: var(--surface-2);
8
+ --prof-input-bg: var(--surface-3);
9
+ --prof-text: var(--text-1);
10
+ --prof-text-muted: var(--text-2);
11
+ --prof-border: var(--border-color);
12
+
13
+ display: flex;
14
+ flex-direction: column;
15
+ gap: 2rem;
16
16
  width: 100%;
17
17
  max-width: 1000px;
18
18
  margin: 0 auto;
@@ -24,256 +24,256 @@
24
24
  .prof-root *::after {
25
25
  box-sizing: border-box;
26
26
  }
27
-
28
- .theme-dark .prof-root {
29
- --prof-input-bg: #064e3b;
30
- --prof-card-bg: #022c22;
31
- --prof-border: #065f46;
32
- }
33
-
34
- .prof-card {
35
- background: var(--prof-card-bg);
36
- border: 2px solid var(--prof-border);
37
- border-radius: 2.5rem;
38
- padding: 3.5rem;
27
+
28
+ .theme-dark .prof-root {
29
+ --prof-input-bg: #064e3b;
30
+ --prof-card-bg: #022c22;
31
+ --prof-border: #065f46;
32
+ }
33
+
34
+ .prof-card {
35
+ background: var(--prof-card-bg);
36
+ border: 2px solid var(--prof-border);
37
+ border-radius: 2.5rem;
38
+ padding: 3.5rem;
39
39
  box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.2);
40
40
  transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
41
41
  position: relative;
42
42
  min-width: 0;
43
43
  overflow: hidden;
44
44
  }
45
-
46
- .prof-card.positive {
47
- border-color: var(--prof-brand);
48
- box-shadow: 0 25px 50px -12px rgba(16, 185, 129, 0.2);
49
- }
50
-
51
- .prof-card.negative {
52
- border-color: var(--prof-danger);
53
- box-shadow: 0 25px 50px -12px rgba(239, 68, 68, 0.2);
54
- }
55
-
56
- .prof-grid {
57
- display: grid;
45
+
46
+ .prof-card.positive {
47
+ border-color: var(--prof-brand);
48
+ box-shadow: 0 25px 50px -12px rgba(16, 185, 129, 0.2);
49
+ }
50
+
51
+ .prof-card.negative {
52
+ border-color: var(--prof-danger);
53
+ box-shadow: 0 25px 50px -12px rgba(239, 68, 68, 0.2);
54
+ }
55
+
56
+ .prof-grid {
57
+ display: grid;
58
58
  grid-template-columns: 1fr 1fr;
59
59
  gap: 5rem;
60
60
  align-items: center;
61
61
  min-width: 0;
62
62
  }
63
-
64
- @media (max-width: 900px) {
65
- .prof-grid {
66
- grid-template-columns: 1fr;
67
- gap: 3rem;
68
- }
69
- }
70
-
71
- .prof-input-group {
72
- margin-bottom: 2rem;
73
- }
74
-
75
- .prof-label-row {
76
- display: flex;
63
+
64
+ @media (max-width: 900px) {
65
+ .prof-grid {
66
+ grid-template-columns: 1fr;
67
+ gap: 3rem;
68
+ }
69
+ }
70
+
71
+ .prof-input-group {
72
+ margin-bottom: 2rem;
73
+ }
74
+
75
+ .prof-label-row {
76
+ display: flex;
77
77
  justify-content: space-between;
78
78
  align-items: center;
79
79
  margin-bottom: 0.75rem;
80
80
  gap: 0.75rem;
81
81
  min-width: 0;
82
82
  }
83
-
84
- .prof-currency-select {
85
- background: none;
86
- border: none;
87
- color: var(--prof-brand);
88
- font-weight: 900;
89
- font-size: 1.1rem;
90
- cursor: pointer;
91
- padding-right: 1.5rem;
92
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='%2310b981' stroke-width='4' %3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E");
93
- background-repeat: no-repeat;
94
- background-position: right center;
95
- background-size: 1rem;
96
- }
97
-
98
- .prof-currency-select:focus {
99
- outline: none;
100
- }
101
-
102
- :global(.theme-dark) .prof-currency-select {
103
- color: #34d399;
104
- }
105
-
106
- .prof-label {
107
- display: block;
108
- font-size: 0.95rem;
109
- font-weight: 800;
110
- color: var(--prof-text-muted);
111
- margin-bottom: 0.75rem;
112
- text-transform: uppercase;
113
- letter-spacing: 0.05em;
114
- }
115
-
116
- .prof-input-field {
117
- width: 100%;
118
- background: var(--prof-input-bg);
119
- border: 2px solid var(--prof-border);
120
- border-radius: 1.25rem;
121
- padding: 1.25rem 1.5rem;
122
- font-size: 1.75rem;
123
- font-weight: 900;
124
- color: var(--prof-text);
83
+
84
+ .prof-currency-select {
85
+ background: none;
86
+ border: none;
87
+ color: var(--prof-brand);
88
+ font-weight: 900;
89
+ font-size: 1.1rem;
90
+ cursor: pointer;
91
+ padding-right: 1.5rem;
92
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='%2310b981' stroke-width='4' %3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E");
93
+ background-repeat: no-repeat;
94
+ background-position: right center;
95
+ background-size: 1rem;
96
+ }
97
+
98
+ .prof-currency-select:focus {
99
+ outline: none;
100
+ }
101
+
102
+ :global(.theme-dark) .prof-currency-select {
103
+ color: #34d399;
104
+ }
105
+
106
+ .prof-label {
107
+ display: block;
108
+ font-size: 0.95rem;
109
+ font-weight: 800;
110
+ color: var(--prof-text-muted);
111
+ margin-bottom: 0.75rem;
112
+ text-transform: uppercase;
113
+ letter-spacing: 0.05em;
114
+ }
115
+
116
+ .prof-input-field {
117
+ width: 100%;
118
+ background: var(--prof-input-bg);
119
+ border: 2px solid var(--prof-border);
120
+ border-radius: 1.25rem;
121
+ padding: 1.25rem 1.5rem;
122
+ font-size: 1.75rem;
123
+ font-weight: 900;
124
+ color: var(--prof-text);
125
125
  transition: all 0.3s;
126
126
  box-shadow: inset 0 2px 4px rgba(0,0,0,0.1);
127
127
  min-width: 0;
128
128
  }
129
-
130
- .prof-input-field:hover {
131
- border-color: var(--prof-brand-light);
132
- }
133
-
134
- .prof-input-field:focus {
135
- border-color: var(--prof-brand);
136
- background: var(--prof-card-bg);
137
- outline: none;
138
- box-shadow: 0 0 0 6px rgba(16, 185, 129, 0.2);
139
- }
140
-
141
- .prof-time-row {
142
- display: flex;
143
- gap: 1rem;
144
- }
145
-
146
- .prof-unit-select {
147
- appearance: none;
148
- background-color: var(--prof-input-bg);
149
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='%2310b981' stroke-width='3' %3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E");
150
- background-repeat: no-repeat;
151
- background-position: right 1rem center;
152
- background-size: 1.25rem;
153
- border: 2px solid var(--prof-border);
154
- border-radius: 1.25rem;
155
- color: var(--prof-text);
156
- cursor: pointer;
157
- font-weight: 800;
158
- padding: 0 3.5rem 0 1.5rem;
159
- transition: all 0.2s;
160
- }
161
-
162
- .prof-unit-select:hover {
163
- border-color: var(--prof-brand);
164
- }
165
-
166
- .prof-unit-select option {
167
- background-color: var(--prof-card-bg);
168
- color: var(--prof-text);
169
- padding: 1rem;
170
- }
171
-
172
- :global(.theme-dark) .prof-unit-select {
173
- background-color: #064e3b;
174
- color: #ecfdf5;
175
- border-color: #065f46;
176
- }
177
-
178
- :global(.theme-dark) .prof-unit-select option {
179
- background-color: #064e3b;
180
- color: #ecfdf5;
181
- }
182
-
129
+
130
+ .prof-input-field:hover {
131
+ border-color: var(--prof-brand-light);
132
+ }
133
+
134
+ .prof-input-field:focus {
135
+ border-color: var(--prof-brand);
136
+ background: var(--prof-card-bg);
137
+ outline: none;
138
+ box-shadow: 0 0 0 6px rgba(16, 185, 129, 0.2);
139
+ }
140
+
141
+ .prof-time-row {
142
+ display: flex;
143
+ gap: 1rem;
144
+ }
145
+
146
+ .prof-unit-select {
147
+ appearance: none;
148
+ background-color: var(--prof-input-bg);
149
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='%2310b981' stroke-width='3' %3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E");
150
+ background-repeat: no-repeat;
151
+ background-position: right 1rem center;
152
+ background-size: 1.25rem;
153
+ border: 2px solid var(--prof-border);
154
+ border-radius: 1.25rem;
155
+ color: var(--prof-text);
156
+ cursor: pointer;
157
+ font-weight: 800;
158
+ padding: 0 3.5rem 0 1.5rem;
159
+ transition: all 0.2s;
160
+ }
161
+
162
+ .prof-unit-select:hover {
163
+ border-color: var(--prof-brand);
164
+ }
165
+
166
+ .prof-unit-select option {
167
+ background-color: var(--prof-card-bg);
168
+ color: var(--prof-text);
169
+ padding: 1rem;
170
+ }
171
+
172
+ :global(.theme-dark) .prof-unit-select {
173
+ background-color: #064e3b;
174
+ color: #ecfdf5;
175
+ border-color: #065f46;
176
+ }
177
+
178
+ :global(.theme-dark) .prof-unit-select option {
179
+ background-color: #064e3b;
180
+ color: #ecfdf5;
181
+ }
182
+
183
183
  .prof-results {
184
184
  display: flex;
185
185
  flex-direction: column;
186
186
  gap: 2rem;
187
187
  min-width: 0;
188
188
  }
189
-
190
- .prof-status-badge {
191
- display: inline-flex;
192
- padding: 0.75rem 1.5rem;
193
- border-radius: 2rem;
194
- font-weight: 900;
195
- font-size: 1rem;
196
- text-transform: uppercase;
197
- margin-bottom: 1.5rem;
198
- }
199
-
200
- .prof-status-badge.positive {
201
- background: var(--prof-brand);
202
- color: white;
203
- }
204
-
205
- .prof-status-badge.negative {
206
- background: var(--prof-danger);
207
- color: white;
208
- }
209
-
210
- .prof-main-metric {
211
- margin-bottom: 2rem;
212
- }
213
-
214
- .prof-metric-val {
215
- font-size: 5.5rem;
216
- font-weight: 900;
217
- line-height: 1;
189
+
190
+ .prof-status-badge {
191
+ display: inline-flex;
192
+ padding: 0.75rem 1.5rem;
193
+ border-radius: 2rem;
194
+ font-weight: 900;
195
+ font-size: 1rem;
196
+ text-transform: uppercase;
197
+ margin-bottom: 1.5rem;
198
+ }
199
+
200
+ .prof-status-badge.positive {
201
+ background: var(--prof-brand);
202
+ color: white;
203
+ }
204
+
205
+ .prof-status-badge.negative {
206
+ background: var(--prof-danger);
207
+ color: white;
208
+ }
209
+
210
+ .prof-main-metric {
211
+ margin-bottom: 2rem;
212
+ }
213
+
214
+ .prof-metric-val {
215
+ font-size: 5.5rem;
216
+ font-weight: 900;
217
+ line-height: 1;
218
218
  letter-spacing: -0.06em;
219
219
  margin: 0.5rem 0;
220
220
  filter: drop-shadow(0 4px 8px rgba(0,0,0,0.1));
221
221
  overflow-wrap: anywhere;
222
222
  }
223
-
224
- .positive .prof-metric-val { color: var(--prof-brand); }
225
- .negative .prof-metric-val { color: var(--prof-danger); }
226
-
227
- .prof-submetrics {
228
- display: grid;
229
- grid-template-columns: 1fr 1fr;
230
- gap: 1.5rem;
231
- }
232
-
233
- .prof-submetric-card {
234
- background: var(--prof-input-bg);
235
- padding: 1.75rem;
236
- border-radius: 1.5rem;
237
- border: 1px solid var(--prof-border);
238
- text-align: center;
239
- }
240
-
241
- .prof-submetric-val {
242
- display: block;
243
- font-size: 2rem;
244
- font-weight: 900;
223
+
224
+ .positive .prof-metric-val { color: var(--prof-brand); }
225
+ .negative .prof-metric-val { color: var(--prof-danger); }
226
+
227
+ .prof-submetrics {
228
+ display: grid;
229
+ grid-template-columns: 1fr 1fr;
230
+ gap: 1.5rem;
231
+ }
232
+
233
+ .prof-submetric-card {
234
+ background: var(--prof-input-bg);
235
+ padding: 1.75rem;
236
+ border-radius: 1.5rem;
237
+ border: 1px solid var(--prof-border);
238
+ text-align: center;
239
+ }
240
+
241
+ .prof-submetric-val {
242
+ display: block;
243
+ font-size: 2rem;
244
+ font-weight: 900;
245
245
  color: var(--prof-text);
246
246
  margin-top: 0.5rem;
247
247
  overflow-wrap: anywhere;
248
248
  }
249
-
250
- .prof-copy-btn {
251
- display: flex;
252
- align-items: center;
253
- justify-content: center;
254
- gap: 0.75rem;
255
- width: 100%;
256
- padding: 1.5rem;
257
- background: var(--prof-text);
258
- color: var(--prof-card-bg);
259
- border: none;
260
- border-radius: 1.5rem;
261
- font-weight: 900;
262
- font-size: 1.25rem;
263
- cursor: pointer;
264
- transition: all 0.3s;
265
- margin-top: 1rem;
266
- box-shadow: 0 10px 20px rgba(0,0,0,0.2);
267
- }
268
-
269
- .prof-copy-btn:hover {
270
- transform: translateY(-3px);
271
- box-shadow: 0 15px 30px rgba(0,0,0,0.3);
272
- }
273
-
274
- .prof-chart-wrap {
275
- margin-top: 4rem;
276
- padding-top: 3.5rem;
249
+
250
+ .prof-copy-btn {
251
+ display: flex;
252
+ align-items: center;
253
+ justify-content: center;
254
+ gap: 0.75rem;
255
+ width: 100%;
256
+ padding: 1.5rem;
257
+ background: var(--prof-text);
258
+ color: var(--prof-card-bg);
259
+ border: none;
260
+ border-radius: 1.5rem;
261
+ font-weight: 900;
262
+ font-size: 1.25rem;
263
+ cursor: pointer;
264
+ transition: all 0.3s;
265
+ margin-top: 1rem;
266
+ box-shadow: 0 10px 20px rgba(0,0,0,0.2);
267
+ }
268
+
269
+ .prof-copy-btn:hover {
270
+ transform: translateY(-3px);
271
+ box-shadow: 0 15px 30px rgba(0,0,0,0.3);
272
+ }
273
+
274
+ .prof-chart-wrap {
275
+ margin-top: 4rem;
276
+ padding-top: 3.5rem;
277
277
  border-top: 2px solid var(--prof-border);
278
278
  height: 400px;
279
279
  min-width: 0;