html,
body,
ul,
ol
margin: 0
padding: 0

@import reset
body
font: 100% Helvetica, sans-serif
background-color: #efefef

$font-stack: Helvetica, sans-serif
$primary-color: #333

body
font: 100% $font-stack
color: $primary-color
.container
width: 100%

article[role="main"]
float: left
width: 600px / 960px * 100%

%message-shared
border: 1px solid #ccc
padding: 10px
color: #333

.message
@extend %message-shared

.success
@extend %message-shared
border-color: green

=transform($property)
-webkit-transform: $property
-ms-transform: $property
transform: $property
.box
+transform(rotate(30deg))

// This comment won't be included in the CSS.
This is also commented out.
#a
/* But this comment will, except in compressed mode.

/* It can also contain interpolation:
1 + 1 = #{1 + 1}
1 + 1 = #{1 + 1}
1 + 1 = #{1 + 1}
#a

// But this comment will, except in compressed mode.

// It can also contain interpolation:
1 + 1 = #{1 + 1}
1 + 1 = #{1 + 1}
1 + 1 = #{1 + 1}
#a

/*! This comment will be included even in compressed mode.

#a

/**/

p .sans
font: Helvetica, /* Inline comments must be closed. */ sans-serif

p .sans
font/*comment*/: Helvetica, /* Inline comments must be closed. */ sans-serif // comment

/// Computes an exponent.
///
/// @param {number} $base
/// The number to multiply by itself.
/// @param {integer (unitless)} $exponent
/// The number of `$base`s to multiply together.
/// @return {number} `$base` to the power of `$exponent`.
@function pow($base, $exponent)
$result: 1
@for $_ from 1 through $exponent
$result: $result * $base

@return $result

$roboto-font-path: "../fonts/roboto"

@font-face
// This is parsed as a normal function call that takes a quoted string.
src: url("#{$roboto-font-path}/Roboto-Thin.woff2") format("woff2")
src: url($roboto-font-path + "/Roboto-Light.woff2") format("woff2")
src: url(#{$roboto-font-path}/Roboto-Regular.woff2) format("woff2")

font-family: "Roboto"
font-weight: 100

.logo
$width: 800px
width: $width
position: absolute
left: calc(50% - #{$width / 2})
top: 0

$padding: 12px

.post
// Since these max() calls don't use any Sass features other than
// interpolation, they're compiled to CSS max() calls.
padding-left: max(#{$padding}, env(safe-area-inset-left))
padding-right: max(#{$padding}, env(safe-area-inset-right))


.sidebar
// Since these refer to a Sass variable without interpolation, they call
// Sass's built-in max() function.
padding-left: max($padding, 20px)
padding-right: max($padding, 20px)

.circle
$size: 100px
width: $size
height: $size
border-radius: $size / 2

@mixin prefix($property, $value, $prefixes)
@each $prefix in $prefixes
-#{$prefix}-#{$property}: $value

#{$property}: $value


.gray
@include prefix(filter, grayscale(50%), moz webkit)

.enlarge
font-size: 14px
transition:
property: font-size
duration: 4s
delay: 2s

&:hover
font-size: 36px

.info-page
margin: auto
bottom: 10px
top: 2px

$rounded-corners: false

.button
border: 1px solid black
border-radius: if($rounded-corners, 5px, null)

$primary: #81899b
$accent: #ab2e
$warn: #dfa612aa

:root
--primary: #{$primary}
--accent: #{$accent}
--warn: #{$warn}

// Even though this looks like a Sass variable, it's valid CSS so it's not
// evaluated.
--consumed-by-js: $primary

$font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto
$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas

:root
--font-family-sans-serif: #{inspect($font-family-sans-serif)}
--font-family-monospace: #{inspect($font-family-monospace)}

.alert
// The parent selector can be used to add pseudo-classes to the outer
// selector.
&:hover
font-weight: bold


// It can also be used to style the outer selector in a certain context, such
// as a body set to use a right-to-left language.
[dir=rtl] &
margin-left: 0
margin-right: 10px


// You can even use it as an argument to pseudo-class selectors.
:not(&)
opacity: 0.8

@mixin unify-parent($child)
@at-root #{selector-unify(&, $child)}
@content



.wrapper .field
@include unify-parent("input")

@mixin app-background($color)
#{if(&, '&.app-background', '.app-background')}
background-color: $color
color: rgba(#fff, 0.75)

@include app-background(#036)

.sidebar
@include app-background(#c6538c)

.accordion
max-width: 600px
margin: 4rem auto

&__copy
display: none
padding: 1rem 1.5rem 2rem 1.5rem
line-height: 1.6
font-size: 14px

&--open
display: block


.alert:hover, %strong-alert
font-weight: bold

%strong-alert:hover
color: red

%toolbelt
box-sizing: border-box
border-top: 1px rgba(#000, .12) solid

&:hover
border: 2px rgba(#000, .5) solid

.action-buttons
@extend %toolbelt
color: #4285f4

$border-dark: rgba($base-color, 0.88)
$black: #000 !default
$border-radius: 0.25rem !default
$box-shadow: 0 0.5rem 1rem rgba($black, 0.15) !default
$box-shadow: 0 0.5rem 1rem rgba($black, blue($black)) !default
$border-radius: 0.1rem

@import 'library'

$global-variable: global value

// This would fail, because $local-variable isn't in scope:
// local: $local-variable

$theme-colors: ("success": #28a745, "info": #17a2b8, "warning": #ffc107)

.alert
// Instead of $theme-color-#{warning}
background-color: map-get($theme-colors, "warning")

@mixin corner-icon($name, $top-or-bottom, $left-or-right)
.icon-#{$name}
background-image: url("/icons/#{$name}.svg")
position: absolute
#{$top-or-bottom}: 0
#{$left-or-right}: 0

@include corner-icon("mail", top, right)

@mixin inline-animation($duration)
$name: inline-#{unique-id()}

@keyframes #{$name}
@content

animation-name: $name
animation-duration: $duration
animation-iteration-count: infinite


.pulse
@include inline-animation(2s)
from
background-color: yellow
to
background-color: red

.example
unquoted: #{"string"}

& &
padding:
bottom: 0
left: 0

// style.sass
@import 'foundation/code', 'foundation/lists'

@import "theme.css"
@import "http://fonts.googleapis.com/css?family=Droid+Sans"
@import url(theme)
@import "landscape" screen and (orientation: landscape)

@mixin google-font($family)
@import url("http://fonts.googleapis.com/css?family=#{$family}")

@include google-font("Droid Sans")

@mixin horizontal-list
@include reset-list

li
display: inline-block
margin:
left: -2px
right: 2em

nav ul
@include horizontal-list

@mixin rtl($property, $ltr-value, $rtl-value)
#{$property}: $ltr-value

[dir=rtl] &
#{$property}: $rtl-value

.sidebar
@include rtl(float, left, right)

@mixin replace-text($image, $x: 50%, $y: 50%)
text-indent: -99999em
overflow: hidden
text-align: left

background:
image: $image
repeat: no-repeat
position: $x $y

.mail-icon
@include replace-text(url("/images/mail.svg"), 0)

@include order(150px, "input.name", "input.address", "input.zip")

@mixin syntax-colors($args...)
@debug keywords($args) // (string: #080, comment: #800, $variable: $60b)

@each $name, $color in keywords($args)
pre span.stx-#{$name}
color: $color

@include syntax-colors($string: #080, $comment: #800, $variable: #60b)

@mixin media($types...)
@each $type in $types
@media #{$type}
@content($type)

@include media(screen, print) using ($type)
h1
font-size: 40px
@if $type == print
font-family: Calluna

=reset-list
margin: 0
padding: 0
list-style: none

=horizontal-list
+reset-list

li
display: inline-block
margin:
left: -2px
right: 2em

nav ul
+horizontal-list
@function pow($base, $exponent)
$result: 1
@for $_ from 1 through $exponent
$result: $result * $base

@return $result

.sidebar
float: left
margin-left: pow(4, 3) * 1px

@function sum($numbers...)
$sum: 0
@each $number in $numbers
$sum: $sum + $number

@return $sum

.micro
width: sum(50px, 30px, 100px)
@function str-insert($string, $insert, $index)
// Avoid making new strings if we don't need to.
@if str-length($string) == 0
@return $insert

$before: str-slice($string, 0, $index)
$after: str-slice($string, $index)
@return $before + $insert + $after

.error
border: 1px #f00
background-color: #fdd

&--serious
@extend .error
border-width: 3px

@mixin reflexive-position($property, $value)
@if $property != left and $property != right
@error "Property #{$property} must be either left or right."

$left-value: if($property == right, initial, $value)
$right-value: if($property == right, $value, initial)

left: $left-value
right: $right-value
[dir=rtl] &
left: $right-value
right: $left-value

$known-prefixes: webkit, moz, ms, o

@mixin prefix($property, $value, $prefixes)
@each $prefix in $prefixes
@if not index($known-prefixes, $prefix)
@warn "Unknown prefix #{$prefix}."


-#{$prefix}-#{$property}: $value

#{$property}: $value


.tilt
// Oops, we typo'd "webkit" as "wekbit"!
@include prefix(transform, rotate(15deg), wekbit ms)

@mixin inset-divider-offset($offset, $padding)
$divider-offset: (2 * $padding) + $offset
@debug "divider offset: #{$divider-offset}"

margin-left: $divider-offset
width: calc(100% - #{$divider-offset})

@mixin unify-parent($child)
@at-root #{selector-unify(&, $child)}
@content


.square-av
@include avatar(100px, $circle: false)
.circle-av
@include avatar(100px, $circle: true)

@mixin theme-colors($light-theme: true)
@if $light-theme
background-color: $light-background
color: $light-text
@else
background-color: $dark-background
color: $dark-text

.banner
@include theme-colors($light-theme: true)
body.dark &
@include theme-colors($light-theme: false)

@mixin triangle($size, $color, $direction)
height: 0
width: 0

border-color: transparent
border-style: solid
border-width: $size / 2

@if $direction == up
border-bottom-color: $color
@else if $direction == right
border-left-color: $color
@else if $direction == down
border-top-color: $color
@else if $direction == left
border-right-color: $color
@else
@error "Unknown direction #{$direction}."

@each $size in $sizes
.icon-#{$size}
font-size: $size
height: $size
width: $size

$icons: ("eye": "\f112", "start": "\f12e", "stop": "\f12f")

@each $name, $glyph in $icons
.icon-#{$name}:before
display: inline-block
font-family: "Icon Font"
content: $glyph

$icons: "eye" "\f112" 12px, "start" "\f12e" 16px, "stop" "\f12f" 10px

@each $name, $glyph, $size in $icons
.icon-#{$name}:before
display: inline-block
font-family: "Icon Font"
content: $glyph
font-size: $size

@for $i from 1 through 3
ul:nth-child(3n + #{$i})
background-color: lighten($base-color, $i * 5%)

/// Divides `$value` by `$ratio` until it's below `$base`.
@function scale-below($value, $base, $ratio: 1.618)
@while $value > $base
$value: $value / $ratio
@return $value

@namespace svg url(http://www.w3.org/2000/svg)

@font-face
font-family: "Open Sans"
src: url("/fonts/OpenSans-Regular-webfont.woff2") format("woff2")

@counter-style thumbs
system: cyclic
symbols: "\1F44D"

@mixin sticky-position
position: fixed
@supports (position: sticky)
position: sticky

@media (hover: hover)
.button:hover
border: 2px solid black

@media (color)
border-color: #036

@keyframes slide-in
from
margin-left: 100%
width: 300%


70%
margin-left: 90%
width: 150%


to
margin-left: 0%
width: 100%

@debug 100 // 100
@debug 0.8 // 0.8
@debug 16px // 16px
@debug 5px * 2px // 10px*px (read "square pixels")
@debug 5.2e3 // 5200
@debug 6e-2 // 0.06
@debug 4px * 6px // 24px*px (read "square pixels")
@debug 5px / 2s // 2.5px/s (read "pixels per second")
@debug 5px * 30deg / 2s / 24em // 3.125px*deg/s*em
// (read "pixel-degrees per second-em")

$degrees-per-second: 20deg/1s
@debug $degrees-per-second // 20deg/s
@debug 1 / $degrees-per-second // 0.05s/deg
$transition-speed: 1s/50px

@debug unquote(".widget:hover") // .widget:hover
@debug quote(bold) // "bold"
@debug 0.012345678912345 // 0.0123456789
@debug 0.01234567891 == 0.01234567899 // true
@debug 1.00000000009 // 1
@debug 0.99999999991 // 1
@debug "\"" // '"'
@debug \.widget // \.widget
@debug "\a" // "\a" (a string containing only a newline)
@debug "line1\a line2" // "line1\a line2" (foo and bar are separated by a newline)
@debug "Nat + Liz \1F46D" // "Nat + Liz 👭"
@debug "Helvetica Neue" // "Helvetica Neue"
@debug "C:\\Program Files" // "C:\\Program Files"
@debug "\"Don't Fear the Reaper\"" // "\"Don't Fear the Reaper\""
@debug "line1\a line2" // "line1\a line2"

$roboto-variant: "Mono"
@debug "Roboto #{$roboto-variant}" // "Roboto Mono"
@debug bold // bold
@debug -webkit-flex // -webkit-flex
@debug --123 // --123

$prefix: ms
@debug -#{$prefix}-flex // -ms-flex
@debug \1F46D // 👭
@debug \21 // \!
@debug \7Fx // \7f x
@debug str-length(\7Fx) // 5
@debug str-index("Helvetica Neue", "Helvetica") // 1
@debug str-index("Helvetica Neue", "Neue") // 11
@debug str-slice("Roboto Mono", -4) // "Mono"
@debug #f2ece4 // #f2ece4
@debug #b37399aa // rgba(179, 115, 153, 67%)
@debug midnightblue // #191970
@debug rgb(204, 102, 153) // #c69
@debug rgba(107, 113, 127, 0.8) // rgba(107, 113, 127, 0.8)
@debug hsl(228, 7%, 86%) // #dadbdf
@debug hsla(20, 20%, 85%, 0.7) // rgb(225, 215, 210, 0.7)
$venus: #998099

@debug scale-color($venus, $lightness: +15%) // #a893a8
@debug mix($venus, midnightblue) // #594d85
@debug nth(10px 12px 16px, 2) // 12px
@debug nth([line1, line2, line3], -1) // line3
$prefixes-by-browser: ("firefox": moz, "safari": webkit, "ie": ms)

@function prefixes-for-browsers($browsers)
$prefixes: ()
@each $browser in $browsers
$prefixes: append($prefixes, map-get($prefixes-by-browser, $browser))

@return $prefixes

@debug prefixes-for-browsers("firefox" "ie") // moz ms
@mixin syntax-colors($args...)
@debug keywords($args) // (string: #080, comment: #800, $variable: $60b)

@each $name, $color in keywords($args)
pre span.stx-#{$name}
color: $color

@include syntax-colors($string: #080, $comment: #800, $variable: #60b);
$font-weights: ("regular": 400, "medium": 500, "bold": 700)

@debug map-get($font-weights, "medium") // 500
@debug map-get($font-weights, "extra-bold") // null
$icons: ("eye": "\f112", "start": "\f12e", "stop": "\f12f")

@each $name, $glyph in $icons
.icon-#{$name}:before
display: inline-block
font-family: "Icon Font"
content: $glyph

$prefixes-by-browser: ("firefox": moz, "safari": webkit, "ie": ms)

@mixin add-browser-prefix($browser, $prefix)
$prefixes-by-browser: map-merge($prefixes-by-browser, ($browser: $prefix))

@include add-browser-prefix("opera", o)
@debug $prefixes-by-browser
// ("firefox": moz, "safari": webkit, "ie": ms, "opera": o)
@debug 1px == 2px // false
@debug 1px == 1px // true
@debug 10px < 3px // false
@debug comparable(100px, 3in) // true

@debug str-index("Helvetica Neue", "Roboto") // null
@debug map-get(("large": 20px), "small") // null
@debug & // null
$fonts: ("serif": "Helvetica Neue", "monospace": "Consolas")

h3
font: 18px bold map-get($fonts, "sans")

$fonts: ("serif": "Helvetica Neue", "monospace": "Consolas")

h3
font:
size: 18px
weight: bold
family: map-get($fonts, "sans")

copy of $list with all elements for which $condition returns `true`
/// removed.
@function remove-where($list, $condition)
$new-list: ()
$separator: list-separator($list)
@each $element in $list
@if not call($condition, $element)
$new-list: append($new-list, $element, $separator: $separator)

@return $new-list

$fonts: Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif

content
@function contains-helvetica($string)
@return str-index($string, "Helvetica")

font-family: remove-where($fonts, get-function("contains-helvetica"))

@debug 1px == 1px // true
@debug 1px != 1em // true
@debug 1 != 1px // true
@debug 96px == 1in // true

@debug "Helvetica" == Helvetica // true
@debug "Helvetica" != "Arial" // true

@debug hsl(34, 35%, 92.1%) == #f2ece4 // true
@debug rgba(179, 115, 153, 0.5) != rgba(179, 115, 153, 0.8) // true

@debug (5px 7px 10px) == (5px 7px 10px) // true
@debug (5px 7px 10px) != (10px 14px 20px) // true
@debug (5px 7px 10px) != (5px, 7px, 10px) // true
@debug (5px 7px 10px) != [5px 7px 10px] // true

$theme: ("venus": #998099, "nebula": #d2e1dd)
@debug $theme == ("venus": #998099, "nebula": #d2e1dd) // true
@debug $theme != ("venus": #998099, "iron": #dadbdf) // true

@debug true == true // true
@debug true != false // true
@debug null != false // true

@debug get-function("rgba") == get-function("rgba") // true
@debug get-function("rgba") != get-function("hsla") // true

@debug 10s + 15s // 25s
@debug 1in - 10px // 0.8958333333in
@debug 5px * 3px // 15px*px
@debug (12px/4px) // 3
@debug 1in % 9px // 0.0625in
@debug 15px / 30px // 15px/30px
@debug (10px + 5px) / 30px // 0.5

$result: 15px / 30px
@debug $result // 0.5

@function fifteen-divided-by-thirty()
@return 15px / 30px

@debug fifteen-divided-by-thirty() // 0.5

@debug (15px/30px) // 0.5
@debug (bold 15px/30px sans-serif) // bold 15px/30px sans-serif
@debug 15px/30px + 1 // 1.5

@debug 4px * 6px // 24px*px (read "square pixels")
@debug 5px / 2s // 2.5px/s (read "pixels per second")
@debug 5px * 30deg / 2s / 24em // 3.125px*deg/s*em
// (read "pixel-degrees per second-em")

$degrees-per-second: 20deg/1s
@debug $degrees-per-second // 20deg/s
@debug 1 / $degrees-per-second // 0.05s/deg
@debug 100 > 50 // true
@debug 10px < 17px // true
@debug 96px >= 1in // true
@debug 1000ms <= 1s // true
@debug "Helvetica" + " Neue" // "Helvetica Neue"
@debug sans- + serif // sans-serif
@debug #{10px + 5px} / 30px // 15px/30px
@debug sans - serif // sans-serif

@debug "Elapsed time: " + 10s // "Elapsed time: 10s";
@debug true + " is a boolean value" // "true is a boolean value";

@debug / 15px // /15px
@debug - moz // -moz
@debug not true // false
@debug not false // true

@debug true and true // true
@debug true and false // false

@debug true or false // true
@debug false or false // false
@debug var(--main-bg-color) // var(--main-bg-color)

$primary: #f2ece4
$accent: #e1d7d2
@debug radial-gradient($primary, $accent) // radial-gradient(#f2ece4, #e1d7d2)
@debug str-index("Helvetica Neue", "Helvetica") // 1
@debug str-index("Helvetica Neue", "Neue") // 11
@debug comparable(2px, 1px) // true
@debug comparable(100px, 3em) // false
@debug comparable(10cm, 3mm) // true
@debug append(10px 20px, 30px) // 10px 20px 30px
@debug append((blue, red), green) // blue, red, green
@debug append(10px 20px, 30px 40px) // 10px 20px (30px 40px)
@debug append(10px, 20px, $separator: comma) // 10px, 20px
@debug append((blue, red), green, $separator: space) // blue red green
@mixin syntax-colors($args...)
@debug keywords($args) // (string: #080, comment: #800, $variable: $60b)

@each $name, $color in keywords($args)
pre span.stx-#{$name}
color: $color

@include syntax-colors($string: #080, $comment: #800, $variable: #60b);

$font-weights: ("regular": 400, "medium": 500, "bold": 700)

@debug map-values($font-weights) // 400, 500, 700

.icon-#{$name}
position: absolute
#{$top-or-bottom}: 0
-#{$prefix}-#{$property}: $value
.icon-#{$name}
position: absolute
#{$top-or-bottom}: 0
-#{$prefix}-#{$property}-image: $value