home / skills / pluginagentmarketplace / custom-plugin-css / css-sass
npx playbooks add skill pluginagentmarketplace/custom-plugin-css --skill css-sassReview the files below or copy the command above to add this skill to your agents.
---
name: css-sass
description: Use Sass/SCSS for advanced CSS preprocessing with modern @use/@forward syntax
sasmp_version: "1.3.0"
version: "2.0.0"
updated: "2025-12-30"
bonded_agent: 05-css-preprocessors
bond_type: PRIMARY_BOND
---
# CSS Sass/SCSS Skill
Master Sass/SCSS preprocessing with modern @use/@forward syntax, mixins, functions, and modular architecture.
## Overview
This skill provides atomic, focused guidance on Sass/SCSS with current dart-sass syntax and migration patterns from deprecated @import.
## Skill Metadata
| Property | Value |
|----------|-------|
| **Category** | Preprocessing |
| **Complexity** | Intermediate to Advanced |
| **Dependencies** | css-fundamentals, css-architecture |
| **Bonded Agent** | 05-css-preprocessors |
## Usage
```
Skill("css-sass")
```
## Parameter Schema
```yaml
parameters:
feature:
type: string
required: true
enum: [variables, mixins, functions, nesting, modules, extends]
description: Sass feature to explore
syntax:
type: string
required: false
default: scss
enum: [scss, sass]
description: Sass syntax format
modern_syntax:
type: boolean
required: false
default: true
description: Use @use/@forward instead of deprecated @import
validation:
- rule: feature_required
message: "feature parameter is required"
- rule: valid_feature
message: "feature must be one of: variables, mixins, functions, nesting, modules, extends"
```
## Topics Covered
### Variables
- Declaration and usage
- Scope rules (local vs global)
- Default values and !default flag
- Maps and lists
### Mixins
- Declaration with @mixin
- Parameters and default values
- Content blocks with @content
- Responsive mixins
### Functions
- Built-in functions
- Custom functions with @function
- Return values
- Pure vs impure functions
### Modules (@use/@forward)
- Module loading with @use
- Namespace handling
- Forwarding with @forward
- Configuring defaults
## Retry Logic
```yaml
retry_config:
max_attempts: 3
backoff_type: exponential
initial_delay_ms: 1000
max_delay_ms: 10000
```
## Logging & Observability
```yaml
logging:
entry_point: skill_invoked
exit_point: skill_completed
metrics:
- invocation_count
- feature_usage
- modern_syntax_adoption
```
## Quick Reference
### Module System (Modern)
```scss
// _variables.scss
$primary-color: #3b82f6 !default;
$spacing-unit: 8px !default;
// _mixins.scss
@use 'variables' as vars;
@mixin button-base {
padding: vars.$spacing-unit * 2;
background: vars.$primary-color;
}
// main.scss
@use 'variables' as v;
@use 'mixins' as m;
.button {
@include m.button-base;
color: v.$primary-color;
}
```
### @forward for Library Exports
```scss
// abstracts/_index.scss
@forward 'variables';
@forward 'mixins';
@forward 'functions';
// main.scss
@use 'abstracts';
.element {
color: abstracts.$primary-color;
}
```
### Common Mixins
```scss
// Responsive breakpoints
@mixin respond-to($breakpoint) {
@if $breakpoint == 'sm' {
@media (min-width: 640px) { @content; }
} @else if $breakpoint == 'md' {
@media (min-width: 768px) { @content; }
} @else if $breakpoint == 'lg' {
@media (min-width: 1024px) { @content; }
}
}
// Flexbox center
@mixin flex-center {
display: flex;
justify-content: center;
align-items: center;
}
// Typography scale
@mixin text-style($size, $weight: 400) {
font-size: $size;
font-weight: $weight;
line-height: 1.5;
}
```
### Useful Functions
```scss
// Rem conversion
@function rem($pixels, $base: 16) {
@return #{$pixels / $base}rem;
}
// Color manipulation
@function tint($color, $percentage) {
@return mix(white, $color, $percentage);
}
@function shade($color, $percentage) {
@return mix(black, $color, $percentage);
}
```
## Migration Guide: @import to @use
```scss
/* OLD (deprecated) */
@import 'variables';
@import 'mixins';
.button {
color: $primary-color;
@include button-base;
}
/* NEW (recommended) */
@use 'variables' as v;
@use 'mixins' as m;
.button {
color: v.$primary-color;
@include m.button-base;
}
```
## File Structure
```
scss/
├── abstracts/
│ ├── _index.scss # @forward all
│ ├── _variables.scss
│ ├── _mixins.scss
│ └── _functions.scss
├── base/
│ ├── _index.scss
│ ├── _reset.scss
│ └── _typography.scss
├── components/
│ ├── _index.scss
│ ├── _button.scss
│ └── _card.scss
├── layouts/
│ ├── _index.scss
│ └── _grid.scss
└── main.scss
```
## Test Template
```javascript
describe('CSS Sass Skill', () => {
test('validates feature parameter', () => {
expect(() => skill({ feature: 'invalid' }))
.toThrow('feature must be one of: variables, mixins...');
});
test('returns @use syntax when modern_syntax is true', () => {
const result = skill({ feature: 'modules', modern_syntax: true });
expect(result).toContain('@use');
expect(result).not.toContain('@import');
});
test('includes namespace examples for modules', () => {
const result = skill({ feature: 'modules' });
expect(result).toContain('as');
});
});
```
## Error Handling
| Error Code | Cause | Recovery |
|------------|-------|----------|
| INVALID_FEATURE | Unknown feature | Show valid options |
| DEPRECATED_SYNTAX | Using @import | Show @use migration |
| NAMESPACE_CONFLICT | Duplicate namespace | Suggest unique alias |
## Related Skills
- css-fundamentals (prerequisite)
- css-architecture (file organization)
- css-performance (compilation optimization)