{"_id":"@cat-of-summer/st-style","_rev":"7-32ae040f524c6b594860eebb53e60fbd","name":"@cat-of-summer/st-style","dist-tags":{"latest":"1.0.9"},"versions":{"1.0.3":{"name":"@cat-of-summer/st-style","version":"1.0.3","license":"MIT","_id":"@cat-of-summer/st-style@1.0.3","maintainers":[{"name":"cat-of-summer","email":"personal.stendec@gmail.com"}],"homepage":"https://github.com/cat-of-summer/ST-style---framework#readme","bugs":{"url":"https://github.com/cat-of-summer/ST-style---framework/issues"},"dist":{"shasum":"16d2f611d25bb81d4ecbad0b4718c875c74e6b85","tarball":"https://registry.npmjs.org/@cat-of-summer/st-style/-/st-style-1.0.3.tgz","fileCount":47,"integrity":"sha512-rZuA0LULKwmGVxQnkRraWAC2vF3j8D0Gu92PMBPuiUZ/SnZ8JMMMiwpXpwdbr11FuJ38gdkv+eHUWVtcNmAT/A==","signatures":[{"sig":"MEUCIC/W39cSamvO3xUzzGEgQ67oMaMcyrjhVXQ3Zk9yjbJNAiEA5gUlRw1Uw+DKabajuBsHsN7rt0RF/WTOvkoVfai0AOo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":138949},"main":"dist/main.min.css","sass":"src/main/index.scss","type":"module","style":"dist/main.min.css","exports":{"./scss/*":"./src/*","./main.css":"./dist/main.min.css","./effects.css":"./dist/effects.min.css"},"gitHead":"7dd361ed761a0d5ef6cde4d337d8d3f1890d50fc","scripts":{"build":"node scripts/build.mjs","watch":"node scripts/build.mjs --watch","prepack":"node scripts/build.mjs","prepare":"node scripts/build.mjs"},"_npmUser":{"name":"cat-of-summer","email":"personal.stendec@gmail.com"},"repository":{"url":"git+https://github.com/cat-of-summer/ST-style---framework.git","type":"git"},"_npmVersion":"10.9.8","description":"Attribute-driven CSS utility framework (SCSS source, compiled CSS).","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.77.0"},"_npmOperationalInternal":{"tmp":"tmp/st-style_1.0.3_1783167643932_0.43998596068498697","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@cat-of-summer/st-style","version":"1.0.4","license":"MIT","_id":"@cat-of-summer/st-style@1.0.4","maintainers":[{"name":"cat-of-summer","email":"personal.stendec@gmail.com"}],"homepage":"https://github.com/cat-of-summer/ST-style---framework#readme","bugs":{"url":"https://github.com/cat-of-summer/ST-style---framework/issues"},"dist":{"shasum":"273f8f8390cf1358ec4ffdc3ae288feb3547c9ae","tarball":"https://registry.npmjs.org/@cat-of-summer/st-style/-/st-style-1.0.4.tgz","fileCount":46,"integrity":"sha512-rICGjyZws1QXQjsGFvGEkavSTFP1B96q+0v3MCuJPg9/dQWPRaQ9WiulqmrGXm6r9NjF5C6sd/pTYD3MJ6MRzA==","signatures":[{"sig":"MEUCIEW+YjCFGDvMEJfE3xq1WY54jMS7AOdCmrSKhWVaYEcFAiEAlb1+hgez0KD0XH3TgwH5GEfkkDH6E9RaYg3+ZDhEEa8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cat-of-summer%2fst-style@1.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":150720},"main":"dist/main.min.css","sass":"src/main/index.scss","type":"module","style":"dist/main.min.css","exports":{"./scss/*":"./src/*","./main.css":"./dist/main.min.css","./effects.css":"./dist/effects.min.css"},"gitHead":"da112ce1d35fb4977ae327d3e5bb99445fe60e00","scripts":{"build":"node scripts/build.mjs","watch":"node scripts/build.mjs --watch","prepack":"node scripts/build.mjs","prepare":"node scripts/build.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f4f46f15-d176-42c6-8373-5e4d2b133cb8"}},"repository":{"url":"git+https://github.com/cat-of-summer/ST-style---framework.git","type":"git"},"_npmVersion":"12.0.1","description":"Attribute-driven CSS utility framework (SCSS source, compiled CSS).","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.77.0"},"_npmOperationalInternal":{"tmp":"tmp/st-style_1.0.4_1784763057881_0.25429014803165195","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@cat-of-summer/st-style","version":"1.0.5","license":"MIT","_id":"@cat-of-summer/st-style@1.0.5","maintainers":[{"name":"cat-of-summer","email":"personal.stendec@gmail.com"}],"homepage":"https://github.com/cat-of-summer/ST-style---framework#readme","bugs":{"url":"https://github.com/cat-of-summer/ST-style---framework/issues"},"dist":{"shasum":"94e28c83af39e7061c611df1c58ba3a83b24ec3c","tarball":"https://registry.npmjs.org/@cat-of-summer/st-style/-/st-style-1.0.5.tgz","fileCount":45,"integrity":"sha512-Vwad+XY9DuKtNr8P2m3os622znjHHGrIEZBNJh0Om5HzQUUOtAanZmJfbdH6aepHtT1yTUPlRouAY+Gr+M+Oxw==","signatures":[{"sig":"MEUCIQCC+PtClJeUMALeZ0zVl9xBPLxaou/7TYb4UBEjS1upXAIga2rK21bc1wcppmYeqkfkURKFF07hwnWfUISfyEA1R+4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDjq/qcaFaaYveOWkPVmeEXRmQ8AxWljw8NNN/U09A5YgIhAMBMloUyEOTXZtqRmei1JLcvelw7ijNxXu0s2szK2VNc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cat-of-summer%2fst-style@1.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":118301},"main":"dist/main.min.css","sass":"src/main/index.scss","type":"module","style":"dist/main.min.css","exports":{"./scss/*":"./src/*","./main.css":"./dist/main.min.css","./effects.css":"./dist/effects.min.css"},"gitHead":"04627794bc4bb886033f7f916d2f12ec91276a65","scripts":{"build":"node scripts/build.mjs","watch":"node scripts/build.mjs --watch","prepack":"node scripts/build.mjs","prepare":"node scripts/build.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3f6dc28d-0324-4150-a3f5-fa533acfc258"}},"repository":{"url":"git+https://github.com/cat-of-summer/ST-style---framework.git","type":"git"},"_npmVersion":"12.1.0","description":"Attribute-driven CSS utility framework (SCSS source, compiled CSS).","directories":{},"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.77.0"},"_npmOperationalInternal":{"tmp":"tmp/st-style_1.0.5_1790329647106_0.15348028058938357","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@cat-of-summer/st-style","version":"1.0.6","license":"MIT","_id":"@cat-of-summer/st-style@1.0.6","maintainers":[{"name":"cat-of-summer","email":"personal.stendec@gmail.com"}],"homepage":"https://github.com/cat-of-summer/ST-style---framework#readme","bugs":{"url":"https://github.com/cat-of-summer/ST-style---framework/issues"},"dist":{"shasum":"3940b20249a519fb7e802ecac4fce13bc84fb621","tarball":"https://registry.npmjs.org/@cat-of-summer/st-style/-/st-style-1.0.6.tgz","fileCount":46,"integrity":"sha512-mnvkXvKyBpF8S4cRvi8jCijKfeYkhgk+xBFeteI+id3j7SMxJgAOfftNSx6IOg6ZRn3d5ODzTNyjmUaLFBVd2Q==","signatures":[{"sig":"MEQCIF13sXtpzuemb7OzzVkgNbMeu22WqeVyL7lpweyDhJzWAiBMWkVhswIEAYRR1CZ2ct5rR5821wRnoWkvm+crx3FiBA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDggjlBBTPKjOdPsiPFh3NrObN4xTOq4iGyNNRHJ76aWAiAEGV7IGq1o0BRCrigwA7ZwpsaG6Pycm9JK5iJT0tGc8g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cat-of-summer%2fst-style@1.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":121152},"main":"dist/main.min.css","sass":"src/main/index.scss","type":"module","style":"dist/main.min.css","exports":{"./scss/*":"./src/*","./main.css":"./dist/main.min.css","./effects.css":"./dist/effects.min.css"},"gitHead":"b4cc53eacd8332d7d58053246add070f1cc3e8b8","scripts":{"build":"node scripts/build.mjs","watch":"node scripts/build.mjs --watch","prepack":"node scripts/build.mjs","prepare":"node scripts/build.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3f6dc28d-0324-4150-a3f5-fa533acfc258"}},"repository":{"url":"git+https://github.com/cat-of-summer/ST-style---framework.git","type":"git"},"_npmVersion":"12.1.0","description":"Attribute-driven CSS utility framework (SCSS source, compiled CSS).","directories":{},"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.77.0"},"_npmOperationalInternal":{"tmp":"tmp/st-style_1.0.6_1790408319389_0.9196303780100767","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@cat-of-summer/st-style","version":"1.0.7","license":"MIT","_id":"@cat-of-summer/st-style@1.0.7","maintainers":[{"name":"cat-of-summer","email":"personal.stendec@gmail.com"}],"homepage":"https://github.com/cat-of-summer/ST-style---framework#readme","bugs":{"url":"https://github.com/cat-of-summer/ST-style---framework/issues"},"dist":{"shasum":"9d9a47199808e1eed8ecf5089ca38e07cfdb0dfb","tarball":"https://registry.npmjs.org/@cat-of-summer/st-style/-/st-style-1.0.7.tgz","fileCount":46,"integrity":"sha512-reu2oRyyJ0YK5QnDaC+1epr9Iv03xSLVeyT3FyTORZ3hXCJQ1t/zqGAF0IgLYYx608tSzEOoEUvI8aYcSkmcCQ==","signatures":[{"sig":"MEQCIFXYREHsJcRk6GPWpBzPA7uKfCADYrxrTiSQJch/L1SrAiBMQM4U7ftNqq9ivtH7L5orlYya9QsCqFnd6x3QsI/MjA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDnIYRri0418c3oxhv+nnGU+AWh9v/ZLgo3G0crfuYquAIgGCQCJQz+HcVsDpEGP1twlnFRESE5jcb8TvpfTRou1q0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cat-of-summer%2fst-style@1.0.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":121558},"main":"dist/main.min.css","sass":"src/main/index.scss","type":"module","style":"dist/main.min.css","exports":{"./scss/*":"./src/*","./main.css":"./dist/main.min.css","./effects.css":"./dist/effects.min.css"},"gitHead":"32154c4a9b48a7b2bb7ce9e341086b755e5fe47a","scripts":{"build":"node scripts/build.mjs","watch":"node scripts/build.mjs --watch","prepack":"node scripts/build.mjs","prepare":"node scripts/build.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3f6dc28d-0324-4150-a3f5-fa533acfc258"}},"repository":{"url":"git+https://github.com/cat-of-summer/ST-style---framework.git","type":"git"},"_npmVersion":"12.1.0","description":"Attribute-driven CSS utility framework (SCSS source, compiled CSS).","directories":{},"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.77.0"},"_npmOperationalInternal":{"tmp":"tmp/st-style_1.0.7_1790416732846_0.8548351825701062","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@cat-of-summer/st-style","version":"1.0.8","license":"MIT","_id":"@cat-of-summer/st-style@1.0.8","maintainers":[{"name":"cat-of-summer","email":"personal.stendec@gmail.com"}],"homepage":"https://github.com/cat-of-summer/ST-style---framework#readme","bugs":{"url":"https://github.com/cat-of-summer/ST-style---framework/issues"},"dist":{"shasum":"d1e654de2784ff851c398dbb1dbc5e8fafca9198","tarball":"https://registry.npmjs.org/@cat-of-summer/st-style/-/st-style-1.0.8.tgz","fileCount":46,"integrity":"sha512-7SUmMQbQ3Mac1xlXMeqIb8eeRiz/x/ph84CCuwh5AJjGiUaJHwS6kEGXnytIcym+OuI3+XlhizzwRbGyaghPYg==","signatures":[{"sig":"MEUCIFkTTGXJ5lANHk+dcvb91qeQsQ1dcsciJyR6AlOCBAp+AiEA8WgJ1X+vwvyJvOY8ynNSR8mUU90r2FS8QFLUr+Dl/HQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCc9bLOyZqHmv+db2KAx/JBeZA1Q3ubEvckL2ULw7xFdAIhAIw+/VDBBTt/ai6tHN+SOrmv7YOlzUAdi/b7Kk/23pZK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cat-of-summer%2fst-style@1.0.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":122393},"main":"dist/main.min.css","sass":"src/main/index.scss","type":"module","style":"dist/main.min.css","exports":{"./scss/*":"./src/*","./main.css":"./dist/main.min.css","./effects.css":"./dist/effects.min.css"},"gitHead":"ee0d795f2edce4431563698ef90deb2964076c7a","scripts":{"build":"node scripts/build.mjs","watch":"node scripts/build.mjs --watch","prepack":"node scripts/build.mjs","prepare":"node scripts/build.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3f6dc28d-0324-4150-a3f5-fa533acfc258"}},"repository":{"url":"git+https://github.com/cat-of-summer/ST-style---framework.git","type":"git"},"_npmVersion":"12.1.0","description":"Attribute-driven CSS utility framework (SCSS source, compiled CSS).","directories":{},"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.77.0"},"_npmOperationalInternal":{"tmp":"tmp/st-style_1.0.8_1790518145473_0.5671768311258871","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"_id":"@cat-of-summer/st-style@1.0.9","bugs":{"url":"https://github.com/cat-of-summer/ST-style---framework/issues"},"dist":{"shasum":"3671362b361f0998583c9094cf5d2c0001f4ff8e","tarball":"https://registry.npmjs.org/@cat-of-summer/st-style/-/st-style-1.0.9.tgz","fileCount":46,"integrity":"sha512-CHdqhqfq+QhjR4LIfxR+U3GDXbdVVZj1ZT8P8fu3uOtTpsY58mUHPyYumrk9A4aUogCed+88a/EfRz5yqEq+ug==","signatures":[{"sig":"MEYCIQD8siLZTr+VrB4L3OqstTcDaC0ZyUFIAZLGk7jKfAmY/gIhALPrQ5OJL/C4GvoBEagfh7q5X2MF7SsVZg/cTYQAWhz+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD1ZOXjuygqO95pMno/d92fNSMGIG41/kgc0oIdIZO+EAIhAOQtOtamSybGDGqFs6e39rhYmTPN22bk/MhTp2n+oXlF"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cat-of-summer%2fst-style@1.0.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":127590},"main":"dist/main.min.css","name":"@cat-of-summer/st-style","sass":"src/main/index.scss","type":"module","style":"dist/main.min.css","exports":{"./scss/*":"./src/*","./main.css":"./dist/main.min.css","./effects.css":"./dist/effects.min.css"},"gitHead":"7bc307b71ede30170d6c86914f44b1803a0c8bc0","license":"MIT","scripts":{"build":"node scripts/build.mjs","watch":"node scripts/build.mjs --watch","prepack":"node scripts/build.mjs","prepare":"node scripts/build.mjs"},"version":"1.0.9","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"3f6dc28d-0324-4150-a3f5-fa533acfc258"}},"homepage":"https://github.com/cat-of-summer/ST-style---framework#readme","repository":{"url":"git+https://github.com/cat-of-summer/ST-style---framework.git","type":"git"},"_npmVersion":"12.2.0","description":"Attribute-driven CSS utility framework (SCSS source, compiled CSS).","directories":{},"maintainers":[{"name":"cat-of-summer","email":"personal.stendec@gmail.com"}],"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.77.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/st-style_1.0.9_1791097743689_0.9068320609187905"}}},"time":{"created":"2026-07-04T12:20:43.796Z","modified":"2026-10-04T07:09:04.104Z","1.0.3":"2026-07-04T12:20:44.071Z","1.0.4":"2026-07-22T23:30:58.069Z","1.0.5":"2026-09-25T09:47:27.198Z","1.0.6":"2026-09-26T07:38:39.470Z","1.0.7":"2026-09-26T09:58:52.928Z","1.0.8":"2026-09-27T14:09:05.557Z","1.0.9":"2026-10-04T07:09:03.791Z"},"bugs":{"url":"https://github.com/cat-of-summer/ST-style---framework/issues"},"license":"MIT","homepage":"https://github.com/cat-of-summer/ST-style---framework#readme","repository":{"url":"git+https://github.com/cat-of-summer/ST-style---framework.git","type":"git"},"description":"Attribute-driven CSS utility framework (SCSS source, compiled CSS).","maintainers":[{"name":"cat-of-summer","email":"personal.stendec@gmail.com"}],"readme":"# st-style\n\nAttribute-driven CSS utility framework. Authored in SCSS, shipped as compiled CSS.\n\n- **`main`** — layout/typography/spacing/grid/display utilities + reset.\n- **`effects`** — hover/animation effects (`scale`, `pulse`, `float`, `ripple`, …).\n\nMarkup uses attributes instead of classes:\n\n```html\n<section container>\n  <div grid=\"gap-4\">\n    <article col=\"12 md-6\" p=\"4 md-8\" tx=\"p\">…</article>\n  </div>\n</section>\n<button scale=\"hover\" shadow=\"hover active\">Click</button>\n```\n\n## Масштабирование\n\n`font-size` у `html` задаётся в `vw` отдельно на каждом брейкпоинте:\n`font / design × 100vw`. На эталонной ширине `design` получается `1rem = font`\n(по умолчанию `design` = `min` брейкпоинта, `font` = 10px). Шрифты (`--fs-*`),\nотступы (`--space-step` = 0.4rem) и max-width `[container]` заданы в `rem`, поэтому\nвнутри брейкпоинта вся раскладка масштабируется пропорционально ширине окна и\nвыглядит одинаково: md на 768px и на 1000px — одна и та же картинка, просто крупнее.\nНа границе брейкпоинта масштаб скачком переходит к шкале следующего. Ниже первого и\nвыше последнего брейкпоинта масштабирование продолжается.\n\n| ширина | 1rem | h1 (3.2rem) |\n|--------|------|-------------|\n| 768px (md) | 10px | 32px |\n| 1023px (md) | 13.3px | 42.6px |\n| 1024px (lp) | 10px | 32px |\n\nРазмеры из макета переводятся делением на `font`: 16px → `1.6rem`, 320px → `32rem`.\n\n```scss\n@use '@cat-of-summer/st-style/scss/main/config' with (\n  $breakpoints: (\n    xs: (min: 360px,  design: 375px,  container: 343px),\n    md: (min: 768px,  container: 720px),\n    lg: (min: 1280px, design: 1440px, font: 12px, container: 1320px),\n  ),\n  $font-sizes: (h1: 4rem, h2: 3rem, h3: 2.4rem, h4: 2rem, h5: 1.8rem, h6: 1.6rem, p: 1.4rem),\n);\n@use '@cat-of-summer/st-style/scss/main';\n```\n\nБез пересборки токены переопределяются в CSS (`:root { --fs-h1: 4rem }`), шкала — правилом\nна `html`. `[tx=\"h1\"]` ставит размер токена на любой элемент, свой размер —\n`tx style=\"--tx: 1.8rem\"` или просто `font-size: 1.8rem`.\n\n> [!warning]\n> Шрифт в `vw` почти не реагирует на масштаб браузера (Ctrl +/−): при зуме меняется\n> ширина вьюпорта в CSS-пикселях, и `1rem` пересчитывается обратно. Это плата за\n> жёсткое масштабирование макета. При `$scale: false` (ниже) этого эффекта нет.\n\n### Без масштабирования (`$scale: false`)\n\nДля приложений и админок, где кнопки и поля не должны расти вместе с окном,\nмасштабирование выключается флагом:\n\n```scss\n@use '@cat-of-summer/st-style/scss/main/config' with ($scale: false);\n@use '@cat-of-summer/st-style/scss/main';\n```\n\nТогда `html { font-size }` на каждом брейкпоинте — фиксированный процент от\nбраузерных 16px: `font / 16px × 100%` (10px → `62.5%`). `1rem` по-прежнему равен\n`font`, так что токены, `rem()` и `[container]` считаются так же, но учитываются\nзум и размер шрифта, выбранный пользователем в браузере.\n\nС готовым `main.css` то же самое делается без пересборки — правилом в своём CSS:\n\n```css\nhtml { font-size: 62.5% }\n```\n\n## Development\n\n```bash\nnpm install      # installs sass, builds dist/ via the prepare script\nnpm run build    # compile src/ → dist/*.min.css\nnpm run watch    # rebuild on change\n```\n\nSource layout:\n\n```\nsrc/\n  main/      index.scss + _*.scss partials  # → dist/main.min.css\n             _config.scss (build config), _media.scss (SCSS helpers, no CSS)\n  effects/   index.scss + _*.scss partials  # → dist/effects.min.css\n```\n\n**Conventions** (`build.mjs` relies on these — no script edits needed to extend):\n\n- A **folder** under `src/` whose name does **not** start with `_` is a *bundle*.\n  Its `index.scss` is compiled to `dist/<folder>.min.css`. Drop a new\n  `src/<name>/index.scss` and it is built automatically.\n- A **file or folder** starting with `_` is shared content (a Sass *partial* /\n  partials folder), pulled in via `@use` and never compiled on its own.\n\n`dist/` is generated and git-ignored (only minified output is produced). It is\nbuilt on `npm install` (`prepare`), on `npm publish` (`prepack`), and in CI to\nattach artifacts to releases.\n\n## Configuration\n\nEach bundle has its own config partial in its folder — `src/main/_config.scss`\nand `src/effects/_config.scss` — since the two bundles share no settings.\n\nFor `main`, `$breakpoints` is the single source of truth: one map drives all\nresponsive utilities, the `html` font-size scale and the `[container]` ladder.\nEach breakpoint has a `min` (the `min-width` threshold) and optional `design`\n(mockup width, default = `min`), `font` (1rem at that width, default\n`$font-size` = 10px), `container` (the `[container]` max-width in px at the\ndesign width, emitted in rem; omit it to keep the container fluid there) and\n`gutter` (the `[container]` horizontal padding in px at the design width; a step\nwithout it keeps the previous one). Other\n`main` knobs are scales (`$space-max`/`$gap-max`/`$lc-max`), `$space-step`,\nthe typography tokens `$font-sizes`/`$font-weights`, `$scale` (`true` — vw scale,\n`false` — fixed rem, see «Без масштабирования») and `$user-select` (`auto` by\ndefault; `none` forbids text selection on `body`, inputs and contenteditable stay\nselectable). For `effects`, `$durations` is the duration map.\n\nProject SCSS gets the same breakpoints from `scss/main/media` (`up`, `down`,\n`between`, `rem`). Configure once in a project partial and `@use` it everywhere:\n\n```scss\n// _st.scss\n@forward '@cat-of-summer/st-style/scss/main/config' with ($breakpoints: ( … ));\n@forward '@cat-of-summer/st-style/scss/main/media';\n\n// any file\n@use 'st';\n.card { @include st.up(lp) { padding: st.rem(40px, lp); } }\n```\n\nEvery variable has `!default`, so a consumer overrides it **before** loading the\nrelevant bundle:\n\n```scss\n@use '@cat-of-summer/st-style/scss/main/config' with (\n  $breakpoints: (\n    xs: (min: 360px,  container: 340px),\n    sm: (min: 576px,  container: 540px),\n    md: (min: 768px,  container: 720px),\n    lg: (min: 1440px, container: 1320px),\n  ),\n  $space-max: 40\n);\n@use '@cat-of-summer/st-style/scss/main';\n\n@use '@cat-of-summer/st-style/scss/effects/config' with (\n  $durations: (fast: 0.2s, slow: 1s)\n);\n@use '@cat-of-summer/st-style/scss/effects';\n```\n\nRuntime theming (colours, step sizes, durations) is done with CSS custom\nproperties — override `--space-step`, `--fs-h1`, `--td-fast`, … in your own CSS.\n\n## Фокус\n\nReset снимает со всех элементов стили браузера (`all: unset`), но кольцо фокуса\nвозвращает для фокуса с клавиатуры: `:where(:focus-visible) { outline: revert }`.\nПри клике мышью рамки нет. Специфичность нулевая, поэтому своё кольцо задаётся\nобычным правилом:\n\n```css\n:focus-visible { outline: 2px solid #6366f1; outline-offset: 2px; }\n```\n\nУбирать кольцо целиком нельзя: с клавиатуры станет не видно, где фокус (WCAG 2.4.7).\n\n## Тёмная тема\n\nЦветов и тем во фреймворке нет, это задача проекта. Каркас переключения: системная\nтема по умолчанию, явный выбор пользователя в `data-theme` на `<html>`, который\nхранится в куке.\n\n```css\n:root {\n  color-scheme: light dark;\n  --bg: #fff;\n  --fg: #16181d;\n}\n/* Системная тёмная, если пользователь не выбрал светлую явно */\n@media (prefers-color-scheme: dark) {\n  :root:not([data-theme=\"light\"]) { --bg: #16181d; --fg: #e7eaf0; }\n}\n/* Явный выбор */\n:root[data-theme=\"light\"] { color-scheme: light; }\n:root[data-theme=\"dark\"]  { color-scheme: dark; --bg: #16181d; --fg: #e7eaf0; }\n\nbody { background: var(--bg); color: var(--fg); }\n```\n\nПереключатель (`theme` = `light` / `dark` / `auto`):\n\n```js\nfunction setTheme(theme) {\n  const root = document.documentElement;\n  if (theme === 'auto') root.removeAttribute('data-theme');\n  else root.dataset.theme = theme;\n  document.cookie = `theme=${theme}; path=/; max-age=31536000; SameSite=Lax`;\n}\n```\n\nЧтобы страница не мигала светлой темой при загрузке, `data-theme` должен стоять до\nпервой отрисовки. Лучше всего — проставить его на сервере из куки при рендере\n`<html>`. Если сервера нет — инлайн-скрипт в `<head>` до подключения CSS:\n\n```html\n<script>\n  const t = document.cookie.match(/(?:^|; )theme=(light|dark)/);\n  if (t) document.documentElement.dataset.theme = t[1];\n</script>\n```\n\nКука, а не `localStorage`, — как раз для того, чтобы тему видел сервер.\n\n## Releasing\n\nReleases are triggered by **pushing a `v*` tag** (not by ordinary pushes):\n\n```bash\ngit tag v1.2.3\ngit push origin v1.2.3\n```\n\n`.github/workflows/ci-cd.yml` (reusable workflow from `cat-of-summer/git_toolkit`)\nruns on every push. On a `v*` tag it additionally builds `dist/`, creates a GitHub\nRelease with `main.min.css` and `effects.min.css` attached and, with\n`PUBLISH_METHOD=npm`, publishes the package to **npm** (registry.npmjs.org). The\npublished version is derived from the tag (`v1.2.3` → `1.2.3`), so the tag is the\nsource of truth.\n\n## A. Use via npm\n\nПакет опубликован в публичном реестре npm — токен и `.npmrc` не нужны.\n\n### 1. Установить\n\n```bash\nnpm install @cat-of-summer/st-style\n```\n\n### 2. Использовать\n\nСкомпилированный CSS:\n\n```js\nimport '@cat-of-summer/st-style/main.css';\nimport '@cat-of-summer/st-style/effects.css';\n```\n\nИли SCSS-источник с переопределением конфига (см. **Configuration** выше):\n\n```scss\n@use '@cat-of-summer/st-style/scss/main/config' with (\n  $breakpoints: ( … )\n);\n@use '@cat-of-summer/st-style/scss/main';\n```\n\n## B. Скачать артефакты релиза\n\nК каждому GitHub Release прикреплены скомпилированные файлы:\n\n```bash\ngh release download v1.2.3 -R cat-of-summer/ST-style---framework\n```\n","readmeFilename":"README.md"}