mypgs 1.0.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 (79) hide show
  1. package/README.md +33 -0
  2. package/assets/javascript/_pgs.js +214 -0
  3. package/assets/javascript/base/_darkmode.js +121 -0
  4. package/assets/javascript/base/_object.js +42 -0
  5. package/assets/javascript/components/_accordion.js +77 -0
  6. package/assets/javascript/components/_dropdown.js +107 -0
  7. package/assets/javascript/components/_exeNotifications.js +85 -0
  8. package/assets/javascript/components/_menu.js +92 -0
  9. package/assets/javascript/components/_modals.js +123 -0
  10. package/assets/javascript/components/_slides.js +183 -0
  11. package/assets/javascript/components/_steps.js +27 -0
  12. package/assets/javascript/components/_tabs.js +134 -0
  13. package/assets/javascript/functions/_formValidate.js +217 -0
  14. package/assets/javascript/functions/_notifications.js +74 -0
  15. package/assets/javascript/functions/_scrollY.js +77 -0
  16. package/assets/javascript/functions/_sendForm.js +100 -0
  17. package/assets/javascript/index.js +20 -0
  18. package/assets/javascript/patterns/_cookieConsent.js +209 -0
  19. package/assets/javascript/patterns/_header.js +134 -0
  20. package/assets/javascript/pgs.d.ts +23 -0
  21. package/assets/scss/base/_body.scss +151 -0
  22. package/assets/scss/base/_color.scss +56 -0
  23. package/assets/scss/base/_general.scss +58 -0
  24. package/assets/scss/base/_heading.scss +20 -0
  25. package/assets/scss/base/_html.scss +4 -0
  26. package/assets/scss/base/_reset.scss +15 -0
  27. package/assets/scss/base/_variables.scss +39 -0
  28. package/assets/scss/components/_accordion.scss +91 -0
  29. package/assets/scss/components/_breadcumbs.scss +40 -0
  30. package/assets/scss/components/_button.scss +28 -0
  31. package/assets/scss/components/_dropdown.scss +106 -0
  32. package/assets/scss/components/_form.scss +53 -0
  33. package/assets/scss/components/_logo.scss +51 -0
  34. package/assets/scss/components/_menu.scss +23 -0
  35. package/assets/scss/components/_modals.scss +120 -0
  36. package/assets/scss/components/_notification.scss +193 -0
  37. package/assets/scss/components/_searchbar.scss +68 -0
  38. package/assets/scss/components/_slides.scss +198 -0
  39. package/assets/scss/components/_steps.scss +111 -0
  40. package/assets/scss/components/_table.scss +59 -0
  41. package/assets/scss/components/_tabs.scss +69 -0
  42. package/assets/scss/components/_tooltip.scss +16 -0
  43. package/assets/scss/index.scss +64 -0
  44. package/assets/scss/layout/_flex.scss +47 -0
  45. package/assets/scss/layout/_gap.scss +12 -0
  46. package/assets/scss/layout/_grid.scss +11 -0
  47. package/assets/scss/layout/_layout.scss +41 -0
  48. package/assets/scss/layout/_pageShell.scss +171 -0
  49. package/assets/scss/mixin/_mx-base.scss +126 -0
  50. package/assets/scss/mixin/_mx-button.scss +186 -0
  51. package/assets/scss/mixin/_mx-card.scss +77 -0
  52. package/assets/scss/mixin/_mx-color.scss +34 -0
  53. package/assets/scss/mixin/_mx-form-addon.scss +180 -0
  54. package/assets/scss/mixin/_mx-form.scss +512 -0
  55. package/assets/scss/mixin/_mx-menu.scss +154 -0
  56. package/assets/scss/mixin/_mx-responsive.scss +353 -0
  57. package/assets/scss/mixin/_mx-semantic.scss +147 -0
  58. package/assets/scss/mixin/mixin.scss +36 -0
  59. package/assets/scss/patterns/_cookieConsent.scss +101 -0
  60. package/assets/scss/patterns/_footer.scss +180 -0
  61. package/assets/scss/patterns/_header.scss +143 -0
  62. package/dist/css/index.css +7026 -0
  63. package/dist/css/index.css.map +1 -0
  64. package/dist/css/index.min.css +1 -0
  65. package/dist/index.d.ts +24 -0
  66. package/dist/javascript/index.js +2034 -0
  67. package/dist/javascript/index.js.map +1 -0
  68. package/dist/javascript/index.min.js +1 -0
  69. package/package.json +40 -0
  70. package/templates/components/md-breadcumbs.html +23 -0
  71. package/templates/components/md-menu.html +6 -0
  72. package/templates/components/md-notification.html +10 -0
  73. package/templates/components/md-searchbar.html +24 -0
  74. package/templates/components/md-tooltip.html +5 -0
  75. package/templates/layout/md-body.html +20 -0
  76. package/templates/layout/md-cookieConsent.html +51 -0
  77. package/templates/layout/md-footer.html +16 -0
  78. package/templates/layout/md-header.html +43 -0
  79. package/webpack.config.js +131 -0
@@ -0,0 +1,209 @@
1
+ const STORAGE_KEY = 'pgs_cookie_preferences_v1';
2
+ const focusableSelectors = 'a[href], button:not([disabled]), input:not([disabled]), [tabindex]:not([tabindex="-1"])';
3
+
4
+ //+
5
+ function safeJsonParse(value) {
6
+ try {
7
+ return value ? JSON.parse(value) : null;
8
+ } catch (error) {
9
+ console.warn('PGS cookie consent: impossibile leggere le preferenze', error);
10
+ return null;
11
+ }
12
+ }
13
+
14
+ //+
15
+ function readPreferences() {
16
+ try {
17
+ return safeJsonParse(localStorage.getItem(STORAGE_KEY));
18
+ } catch (error) {
19
+ return null;
20
+ }
21
+ }
22
+
23
+ //+
24
+ function savePreferences(prefs) {
25
+ try {
26
+ localStorage.setItem(
27
+ STORAGE_KEY,
28
+ JSON.stringify({ ...prefs, updatedAt: new Date().toISOString() })
29
+ );
30
+ } catch (error) {
31
+ console.warn('PGS cookie consent: impossibile salvare le preferenze', error);
32
+ }
33
+ }
34
+
35
+ //+
36
+ function bootstrapGtag() {
37
+ window.dataLayer = window.dataLayer || [];
38
+ window.gtag = window.gtag || function gtag() {
39
+ window.dataLayer.push(arguments);
40
+ };
41
+ }
42
+
43
+ //+
44
+ function loadGoogleAnalytics(measurementId) {
45
+ if (!measurementId || window.__PGS_gaLoaded) return;
46
+ window.__PGS_gaLoaded = true;
47
+
48
+ const script = document.createElement('script');
49
+ script.async = true;
50
+ script.src = `https://www.googletagmanager.com/gtag/js?id=${measurementId}`;
51
+ document.head.appendChild(script);
52
+
53
+ window.gtag('js', new Date());
54
+ window.gtag('config', measurementId, {
55
+ anonymize_ip: true,
56
+ allow_google_signals: false,
57
+ });
58
+ }
59
+
60
+ //+
61
+ function applyAnalyticsConsent({ allowAnalytics, measurementId }) {
62
+ bootstrapGtag();
63
+ if (allowAnalytics) {
64
+ window.gtag('consent', 'update', { analytics_storage: 'granted' });
65
+ loadGoogleAnalytics(measurementId);
66
+ } else {
67
+ window.gtag('consent', 'update', { analytics_storage: 'denied' });
68
+ }
69
+ }
70
+
71
+ //+
72
+ function setPgsFlag(element, token, enabled) {
73
+ if (!(element instanceof HTMLElement) || !token) return;
74
+ const current = (element.getAttribute('pgs') || '').split(/\s+/).filter(Boolean);
75
+ const next = enabled ? [...new Set([...current, token])] : current.filter((item) => item !== token);
76
+ if (next.length > 0) {
77
+ element.setAttribute('pgs', next.join(' '));
78
+ } else {
79
+ element.removeAttribute('pgs');
80
+ }
81
+ }
82
+
83
+ //+
84
+ function assignCookieRuntimeAttributes({ root, analyticsToggle, acceptAllButton, rejectButton, openButtons }) {
85
+ root.dataset.cookieComponent = 'consent';
86
+ analyticsToggle?.setAttribute('data-cookie-toggle', 'analytics');
87
+ acceptAllButton?.setAttribute('data-cookie-action', 'accept');
88
+ rejectButton?.setAttribute('data-cookie-action', 'reject');
89
+
90
+ root.querySelector('[pgs~="cookieConsent-featureEssential"]')?.setAttribute('data-cookie-feature', 'essential');
91
+ root.querySelector('[pgs~="cookieConsent-featureAnalytics"]')?.setAttribute('data-cookie-feature', 'analytics');
92
+
93
+ openButtons.forEach((button) => {
94
+ button.setAttribute('data-cookie-action', 'open');
95
+ });
96
+ }
97
+
98
+ //= CookieConsent
99
+ document.addEventListener('DOMContentLoaded', function () {
100
+ const root = pgs(document).querySelector('cookieConsent');
101
+ if (!root) return;
102
+
103
+ const analyticsToggle = root.querySelector('[pgs~="cookieConsent-toggleAnalytics"]');
104
+ const acceptAllButton = root.querySelector('[pgs~="cookieConsent-actionAccept"]');
105
+ const rejectButton = root.querySelector('[pgs~="cookieConsent-actionReject"]');
106
+ const openButtons = document.querySelectorAll('[pgs~="cookieConsent-actionOpen"]');
107
+ const measurementId = (root.dataset.gaId || '').trim();
108
+ const prefersGa = measurementId.length > 0;
109
+ let lastFocusedElement = null;
110
+
111
+ assignCookieRuntimeAttributes({ root, analyticsToggle, acceptAllButton, rejectButton, openButtons });
112
+
113
+ if (analyticsToggle) {
114
+ analyticsToggle.disabled = !prefersGa;
115
+ if (!prefersGa) {
116
+ analyticsToggle.checked = false;
117
+ setPgsFlag(root, 'cookieConsent-gaUnavailable', true);
118
+ } else {
119
+ setPgsFlag(root, 'cookieConsent-gaUnavailable', false);
120
+ }
121
+ }
122
+
123
+ bootstrapGtag();
124
+ window.gtag('consent', 'default', { analytics_storage: 'denied' });
125
+
126
+ function setBannerVisibility(show) {
127
+ root.hidden = !show;
128
+ root.setAttribute('aria-hidden', String(!show));
129
+ document.body.classList.toggle('cookieConsent-open', show);
130
+ if (show) {
131
+ lastFocusedElement = document.activeElement;
132
+ setTimeout(() => {
133
+ root.focus();
134
+ }, 0);
135
+ } else if (lastFocusedElement instanceof HTMLElement) {
136
+ lastFocusedElement.focus({ preventScroll: true });
137
+ }
138
+ }
139
+
140
+ function closeBanner() {
141
+ setBannerVisibility(false);
142
+ }
143
+
144
+ function openBanner() {
145
+ setBannerVisibility(true);
146
+ }
147
+
148
+ function persistAndApply(allowAnalytics) {
149
+ savePreferences({ analytics: allowAnalytics });
150
+ setPgsFlag(root, 'cookieConsent-accepted', !!allowAnalytics);
151
+ setPgsFlag(root, 'cookieConsent-declined', !allowAnalytics);
152
+ applyAnalyticsConsent({ allowAnalytics: !!allowAnalytics, measurementId });
153
+ }
154
+
155
+ acceptAllButton?.addEventListener('click', () => {
156
+ if (analyticsToggle && prefersGa) analyticsToggle.checked = true;
157
+ persistAndApply(!!prefersGa);
158
+ closeBanner();
159
+ });
160
+
161
+ rejectButton?.addEventListener('click', () => {
162
+ const allowAnalytics = analyticsToggle ? analyticsToggle.checked && prefersGa : false;
163
+ if (!allowAnalytics && analyticsToggle) analyticsToggle.checked = false;
164
+ persistAndApply(allowAnalytics);
165
+ closeBanner();
166
+ });
167
+
168
+ analyticsToggle?.addEventListener('change', (event) => {
169
+ if (!prefersGa && event.target instanceof HTMLInputElement) {
170
+ event.target.checked = false;
171
+ }
172
+ });
173
+
174
+ root.addEventListener('keydown', (event) => {
175
+ if (event.key === 'Escape') {
176
+ event.preventDefault();
177
+ closeBanner();
178
+ } else if (event.key === 'Tab') {
179
+ const focusables = root.querySelectorAll(focusableSelectors);
180
+ if (focusables.length === 0) return;
181
+ const first = focusables[0];
182
+ const last = focusables[focusables.length - 1];
183
+ if (!event.shiftKey && document.activeElement === last) {
184
+ event.preventDefault();
185
+ first.focus();
186
+ }
187
+ if (event.shiftKey && document.activeElement === first) {
188
+ event.preventDefault();
189
+ last.focus();
190
+ }
191
+ }
192
+ });
193
+
194
+ openButtons.forEach((button) => {
195
+ button.addEventListener('click', (event) => {
196
+ event.preventDefault();
197
+ openBanner();
198
+ });
199
+ });
200
+
201
+ const savedPrefs = readPreferences();
202
+ if (savedPrefs && typeof savedPrefs.analytics === 'boolean') {
203
+ if (analyticsToggle) analyticsToggle.checked = !!savedPrefs.analytics && prefersGa;
204
+ persistAndApply(savedPrefs.analytics && prefersGa);
205
+ closeBanner();
206
+ } else {
207
+ setBannerVisibility(true);
208
+ }
209
+ });
@@ -0,0 +1,134 @@
1
+ //# HEADER
2
+ const header = pgs(document).querySelector("header");
3
+ const headerElements = pgs(header).querySelectorAll("header-element");
4
+ headerElements.forEach(element => PGS_header(element));
5
+
6
+ //= HEADER
7
+ export function PGS_header(selectHeader) {
8
+
9
+ //= INIT
10
+ if (selectHeader.getAttribute("data-initialize") == "true") return;
11
+ selectHeader.setAttribute("data-initialize", "true");
12
+
13
+ //= ACTIVE MOBILE
14
+ let menuAttivate = false;
15
+ let childsWidthSAVE;
16
+
17
+ function mobileActive(headerElement) {
18
+
19
+ //=== header
20
+ let style = window.getComputedStyle(headerElement);
21
+ let padding = parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);
22
+ let gap = parseFloat(style.gap);
23
+ let headerElementWidth = parseInt(headerElement.offsetWidth - padding);
24
+ let childsWidth;
25
+
26
+ if (menuAttivate) {
27
+ childsWidth = childsWidthSAVE;
28
+ } else {
29
+ let childs = [];
30
+
31
+ // Esclude l'area mobile dedicata e l'hamburger, poi misura i figli sempre visibili su desktop.
32
+ Array.from(headerElement.children)
33
+ .filter(el => !pgs(el).contains("header-element-onlyMobile"))
34
+ .forEach(child => {
35
+ if (pgs(child).contains("header-element-hamburger")) return;
36
+ childs.push(...child.children);
37
+ });
38
+
39
+ gap = Math.round(gap * (childs.length - 1));
40
+ let childsReduce = childs.reduce((totalWidth, child) => totalWidth + child.offsetWidth, 0) - 2;
41
+
42
+ childsWidth = childsReduce + gap;
43
+ }
44
+
45
+ //===set data
46
+ if (window.innerWidth < 600) {
47
+ header.setAttribute("data-header-mobileActive", "true");
48
+ selectHeader.setAttribute("data-header-mobileActive", "true");
49
+ } else if (headerElementWidth < childsWidth) {
50
+ header.setAttribute("data-header-mobileActive", "true");
51
+ headerElement.setAttribute("data-header-mobileActive", "true");
52
+ menuAttivate = true;
53
+ childsWidthSAVE = childsWidth;
54
+ } else {
55
+ header.setAttribute("data-header-mobileActive", "false");
56
+ headerElement.setAttribute("data-header-mobileActive", "false");
57
+ }
58
+ }
59
+
60
+ //== observer (throttled to avoid ResizeObserver loop warnings)
61
+ let resizeRafId = 0;
62
+ const scheduleMobileActive = () => {
63
+ if (resizeRafId) return;
64
+ resizeRafId = requestAnimationFrame(() => {
65
+ resizeRafId = 0;
66
+ mobileActive(selectHeader);
67
+ });
68
+ };
69
+
70
+ let observer = new ResizeObserver(scheduleMobileActive);
71
+ observer.observe(selectHeader);
72
+ scheduleMobileActive();
73
+
74
+ }
75
+
76
+
77
+
78
+
79
+ //= HEADER HEIGHT
80
+ const body = document.querySelector("body");
81
+ function headerHeight() {
82
+ const headerElements = document.querySelectorAll("header > [data-initialize=true]");
83
+ const wordPressBar = window.getComputedStyle(document.documentElement).marginTop ?? 0;
84
+
85
+ const totalHeight = Array.from(headerElements)
86
+ .map(el => el.offsetHeight)
87
+ .reduce((sum, h) => sum + h);
88
+
89
+ const height = totalHeight + parseInt(wordPressBar);
90
+
91
+ body.style.setProperty('--heightOfHeader', `${height}px`);
92
+ const scrollHeight = document.querySelector("header").getAttribute("data-header-scroll") === "true" ? 0 : height;
93
+ body.style.setProperty('--heightOfHeaderScroll', `${scrollHeight}px`);
94
+
95
+ }
96
+ headerHeight()
97
+ window.addEventListener("resize", headerHeight);
98
+ window.addEventListener("scroll", headerHeight);
99
+
100
+
101
+ //= SCROLL
102
+ // Nasconde l'header quando si scorre verso il basso e lo mostra quando si scorre verso l'alto su dispositivi con larghezza fino a 900px.
103
+ let lastScrollY = window.scrollY;
104
+ window.addEventListener("scroll", () => {
105
+ let currentScrollY = window.scrollY;
106
+
107
+ if (window.innerHeight <= 900) {
108
+ if (currentScrollY >= 80) {
109
+ if (currentScrollY > lastScrollY) {
110
+ header.style.transform = "translateY(-100%)";
111
+ header.setAttribute("data-header-scroll", true)
112
+ } else {
113
+ header.style.transform = "translateY(0px)";
114
+ header.setAttribute("data-header-scroll", false)
115
+ }
116
+ } else {
117
+ header.style.transform = "translateY(0)"; // Mostra sempre l'header se il scroll è inferiore a 80px
118
+ header.setAttribute("data-header-scroll", false)
119
+ }
120
+ }
121
+ lastScrollY = currentScrollY;
122
+
123
+ });
124
+
125
+ // Ripristina la posizione dell'header quando si esce dalla modalità mobile
126
+ window.addEventListener("resize", () => {
127
+ if (window.innerWidth > 768) header.style.transform = "translateY(0)";
128
+ });
129
+
130
+ // MOBILE ACTIVE
131
+ if (window.innerWidth < 600) {
132
+ document.querySelector("header").setAttribute("data-header-mobileActive", "true");
133
+ document.querySelector("[pgs~=header-element]").setAttribute("data-header-mobileActive", "true");
134
+ }
@@ -0,0 +1,23 @@
1
+ declare global {
2
+ interface PgsBag {
3
+ add: (...values: string[]) => void;
4
+ remove: (...values: string[]) => void;
5
+ toggle: (value: string) => boolean;
6
+ contains: (value: string) => boolean;
7
+ value: string;
8
+ querySelector: (value: string | string[]) => Element | null;
9
+ querySelectorAll: (value: string | string[]) => NodeListOf<Element>;
10
+ }
11
+
12
+ interface Element {
13
+ pgs: PgsBag;
14
+ }
15
+
16
+ interface Document {
17
+ pgs: {
18
+ querySelector: (value: string | string[]) => Element | null;
19
+ querySelectorAll: (value: string | string[]) => NodeListOf<Element>;
20
+ };
21
+ }
22
+ }
23
+ export {};
@@ -0,0 +1,151 @@
1
+ //== BASE
2
+ [pgs~="bodyBase"] {
3
+ background-color: var(--color-background);
4
+ position: relative;
5
+
6
+ section {
7
+ container-type: inline-size;
8
+ width: 100%;
9
+ }
10
+
11
+ aside {
12
+ container-type: inline-size;
13
+ width: 100%;
14
+ }
15
+
16
+ ul {
17
+ list-style: none;
18
+ color: var(--color-black);
19
+ }
20
+
21
+ hr {
22
+ margin: var(--gap-texts);
23
+ border-style: solid;
24
+ border-color: var(--color-primary-soft);
25
+ }
26
+
27
+ ::selection {
28
+ background: var(--color-secondary);
29
+ color: var(--color-whiteFixed);
30
+ }
31
+
32
+ :focus-visible {
33
+ outline: 0px solid;
34
+ }
35
+
36
+ @media (hover: hover) and (pointer: none) {
37
+ :focus-visible {
38
+ outline: var(--focus-visible);
39
+ }
40
+ }
41
+ }
42
+
43
+ //== IMG
44
+ [pgs~="bodyImg"] {
45
+ i {
46
+ line-height: 1.2 !important;
47
+ font-size: var(--fa-size);
48
+ transition: color 300ms;
49
+
50
+ &::before,
51
+ &::after {
52
+ transition: color 300ms;
53
+ }
54
+ }
55
+
56
+ img,
57
+ object,
58
+ lottie-player {
59
+ width: 100%;
60
+ height: auto;
61
+ overflow: hidden;
62
+ -webkit-user-drag: none;
63
+ user-drag: none;
64
+ pointer-events: none;
65
+ color-scheme: light;
66
+ transition: opacity 200ms;
67
+
68
+ @at-root body #{&} {
69
+ width: 100%;
70
+ height: auto;
71
+ }
72
+ }
73
+
74
+ svg {
75
+ fill: currentColor;
76
+ }
77
+
78
+ body:not(.object-loaded) :is(object[type="image/svg+xml"], lottie-player) {
79
+ opacity: 0;
80
+ }
81
+
82
+ picture {
83
+ display: block;
84
+ height: 100%;
85
+ }
86
+ }
87
+
88
+ //== TEXT
89
+ [pgs~="bodyText"] {
90
+ letter-spacing: 0.4px;
91
+ color: var(--color-black);
92
+ font-family: var(--font);
93
+ font-weight: 500;
94
+ font-size: 1.6rem;
95
+ font-optical-sizing: auto;
96
+ font-style: normal;
97
+
98
+ span {
99
+ overflow-wrap: anywhere;
100
+ }
101
+
102
+ p {
103
+ color: var(--color-text);
104
+ line-height: 1.5;
105
+ overflow-wrap: anywhere;
106
+
107
+ a {
108
+ color: var(--color-link);
109
+ text-decoration: underline;
110
+ }
111
+ }
112
+
113
+ a {
114
+ text-decoration: none;
115
+ overflow-wrap: anywhere;
116
+
117
+ &:hover {
118
+ color: color-mix(in srgb, var(--color-link) 100%, var(--color-whiteFixed) 50%);
119
+ text-decoration: underline;
120
+ }
121
+
122
+ img,
123
+ object,
124
+ lottie-player {
125
+ vertical-align: bottom;
126
+ }
127
+ }
128
+ }
129
+
130
+ //== heading
131
+ [pgs~="bodyHeading"] {
132
+ h1 {
133
+ @include h1();
134
+ }
135
+
136
+ h2 {
137
+ @include h2();
138
+ }
139
+
140
+ h3 {
141
+ @include h3();
142
+ }
143
+
144
+ h4 {
145
+ @include h4();
146
+ }
147
+
148
+ h5 {
149
+ @include h5();
150
+ }
151
+ }
@@ -0,0 +1,56 @@
1
+ //= COLOR
2
+ //== LIGHTMODE & DARKMODE
3
+ :root {
4
+ color-scheme: light;
5
+
6
+ &[data-darkmode=true] {
7
+ color-scheme: dark;
8
+ }
9
+ }
10
+
11
+ // == Primary colors
12
+ :root {
13
+ --color-primary: #5c7d6f;
14
+ --color-secondary: #3d5f4f;
15
+ --color-tertiary: #8fb082;
16
+ --color-quaternary: #10201c;
17
+ }
18
+
19
+ // == Base colors
20
+ :root {
21
+ --color-white: light-dark(#FFFFFF, #000000);
22
+ --color-black: light-dark(#000000, #FFFFFF);
23
+ --color-white-transparent: color-mix(in srgb, var(--color-white) 50%, transparent 100%);
24
+ --color-black-transparent: color-mix(in srgb, var(--color-black) 50%, transparent 100%);
25
+
26
+ --color-text: light-dark(#4a4a4a, #e3e3e3);
27
+
28
+ --color-box: light-dark(#F8F8F8, #3A3A3A);
29
+ --color-boxDark: light-dark(#3A3A3A, #F8F8F8);
30
+ --color-box-transparent: light-dark(color-mix(in srgb, #eeeeee 50%, transparent 50%), color-mix(in srgb, #3A3A3A 50%, transparent 50%));
31
+ --color-boxDark-transparent: light-dark(color-mix(in srgb, #3A3A3A 50%, transparent 50%), color-mix(in srgb, #eeeeee 50%, transparent 50%));
32
+
33
+ --color-linkBackgorud: light-dark(#a0dbff, #002a44);
34
+ --color-background: light-dark(#ffffff, #080808);
35
+ --color-whiteFixed: #FFFFFF;
36
+ --color-blackFixed: #000000;
37
+ --color-link: #009EFF;
38
+ --color-error: #ff6161;
39
+ --color-warning: #ffa900;
40
+ --color-success: #4ab94a;
41
+ --color-gray: #a4a4a4;
42
+ --color-icon-primary: var(--color-primary);
43
+ --color-icon-sceondary: var(--color-primary-soft);
44
+ --menu-dropdown-background: var(--color-box);
45
+ @include color-strongAndDark();
46
+ @include color-softAndLight();
47
+ @include color-status-background();
48
+ }
49
+
50
+ // :root {
51
+ // //== SVG
52
+ // // --svg-color-1: var(--color-primary) & var(--color-primary);
53
+ // // --svg-color-2: var(--color-secondary) & var(--color-secondary);
54
+ // // --svg-color-3: var(--color-tertiary) & var(--color-tertiary);
55
+ // // --svg-color-4: var(--color-quaternary) & var(--color-quaternary);
56
+ // }
@@ -0,0 +1,58 @@
1
+ //# GENERAL
2
+ [pgs~=card],
3
+ [pgs~=cardImg] {
4
+ @include card();
5
+
6
+ [pgs~=card-img] {
7
+ @include card-insideImg();
8
+ }
9
+ }
10
+
11
+ [pgs~=boxtext] {
12
+ @include boxtext();
13
+ }
14
+
15
+ [pgs~=darkmode] {
16
+ color-scheme: dark;
17
+ }
18
+
19
+ [pgs~=lightmode] {
20
+ color-scheme: light;
21
+ }
22
+
23
+ [pgs~=imgCover] {
24
+ object-fit: cover;
25
+ }
26
+
27
+ [pgs~=imgContain] {
28
+ object-fit: contain;
29
+ }
30
+
31
+ [pgs~=borderRadius] {
32
+ border-radius: var(--border-radius);
33
+ }
34
+
35
+ [pgs~=borderRadiusInput] {
36
+ border-radius: var(--border-radius-input);
37
+ }
38
+
39
+ [pgs~=borderRadiusExternal] {
40
+ border-radius: var(--border-radius-external);
41
+ }
42
+
43
+ [pgs~=blur] {
44
+ backdrop-filter: var(--blur);
45
+ }
46
+
47
+ [pgs~=appearanceNone] {
48
+ all: unset;
49
+ appearance: none;
50
+ }
51
+
52
+ [pgs~=pointer] {
53
+ cursor: pointer;
54
+ }
55
+
56
+ [pgs~=hidden] {
57
+ display: none !important;
58
+ }
@@ -0,0 +1,20 @@
1
+ //# HEADING
2
+ [pgs~=h1] {
3
+ @include h1();
4
+ }
5
+
6
+ [pgs~=h2] {
7
+ @include h2();
8
+ }
9
+
10
+ [pgs~=h3] {
11
+ @include h3();
12
+ }
13
+
14
+ [pgs~=h4] {
15
+ @include h4();
16
+ }
17
+
18
+ [pgs~=h5] {
19
+ @include h5();
20
+ }
@@ -0,0 +1,4 @@
1
+ [pgs~="htmlBase"] {
2
+ scroll-behavior: smooth;
3
+ font-size: 62.5%;
4
+ }
@@ -0,0 +1,15 @@
1
+ //= Reset properties
2
+ * {
3
+ margin: 0;
4
+ padding: 0;
5
+ box-sizing: border-box;
6
+ scroll-margin-top: calc(var(--heightOfHeader) + 5vh);
7
+ }
8
+
9
+ :root {
10
+ interpolate-size: allow-keywords;
11
+ }
12
+
13
+ @view-transition {
14
+ navigation: auto;
15
+ }