SEPHORA STYLE GUIDE

Colour

Brand

RED

#DD0031

$brand-primary

BLACK

#000

$black

Utility

SUCCESS

#007C5A

$brand-success

INFO

#1E78C2

$brand-info

ERROR

#E81728

$brand-error

BLACK

#000

$black

Greyscale

WHITE

#fff

$white

GREY LIGHT

#f1f1f1

$grey-light

GREY

#ccc

$grey

GREY MID

#aaa

$grey-mid

GREY DARK

#666

$grey-dark

BLACK

#000

$black

Fonts

Avalon


Aa

Aa

Aa

Book 400

Demi 600

Bold 700

.text-avalon-book
@include font-avalon-book

.text-avalon-demi
@include font-avalon-demi

.text-avalon-bold
@include font-avalon-bold

Sephora Sans


Aa

Aa

Aa

Aa

Light 300

Book 400

Medium 500

Bold 700

.text-sephora-sans
@include font-sephora-sans

Sephora Serif


Aa

Aa

Book 400

Book Italic 400

.text-sephora-book
@include font-sephora-serif

.text-sephora-italic
@include font-sephora-serif-italic

Text Styles

.page-title

{{ text }}

.page-title-italic

{{ text }}

.h1

{{ text }}

.h2

{{ text }}

.h3

{{ text }}

.h4

{{ text }}

.h5

{{ text }}

p

{{ text }}

.rule-header

{{ text }}

Icons

Navigation and Menu

Home

.svg-icon.home

Categories

.svg-icon.categories

Arrow Small

.svg-icon.arrow-small

Bag Black

.svg-icon.bag-black

Bag Red

.svg-icon.bag-red

Bag White

.svg-icon.bag-white

My Account

.svg-icon.account

Settings

.svg-icon.settings

Beauty Pass

.svg-icon.beautypass

Sale

.svg-icon.sale

Brands

.svg-icon.brands

Logout

.svg-icon.logout

Help

.svg-icon.help

Menu

.svg-icon.menu

Filter

.svg-icon.filter

Orders and Shipping Status

Awaiting Collection

.svg-icon.awaiting-collection

Awaiting Drop off

.svg-icon.awaiting-drop-off

Booked for Delivery

.svg-icon.booked-for-delivery

Completed

.svg-icon.completed

Customs Awaiting Payment

.svg-icon.customs-awaiting-payment

Customs Failed

.svg-icon.customs-failed

Customs on Hold

.svg-icon.customs-on-hold

Damaged

.svg-icon.damaged

Delivery Attempted

.svg-icon.delivery-attempted

Delivery Failed

.svg-icon.delivery-failed

Delivered

.svg-icon.delivered

Delivery

.svg-icon.delivery

Dispatch In Progress

.svg-icon.packing-order

Home

.svg-icon.home

In Transit

.svg-icon.in-transit

Insufficient Address

.svg-icon.insufficient-address

Invalidated

.svg-icon.invalidated

lost

.svg-icon.lost

Order Cancelled

.svg-icon.order-cancelled

Order Placed

.svg-icon.order-placed

Payment Cancelled

.svg-icon.payment-cancelled

Payment Expired

.svg-icon.payment-expired

Payment Failed

.svg-icon.payment-failed

Payment Paid

.svg-icon.payment-paid

Payment Pending

.svg-icon.payment-pending

PopStation Barcode

.svg-icon.pop-scan-barcode

PopStation Location

.svg-icon.pop-location

PopStation Parcel

.svg-icon.pop-parcel

PopStation Payment

.svg-icon.pop-payment

PopStation SMS

.svg-icon.pop-sms

Pickup Failed

.svg-icon.pickup-failed

Ready For Pickup

.svg-icon.preparing-to-ship

Return Booked

.svg-icon.return-booked

Return Booking Failed

.svg-icon.return-booking-failed

Return Requested

.svg-icon.return-requested

Returned to Sender

.svg-icon.returned-to-sender

Shipped

.svg-icon.shipped

With Customs

.svg-icon.customs

With Driver

.svg-icon.with-driver

Payment Types

Hong Kong SAR flag

.sprite-icon.hk.icon_30x20

Singapore flag

.sprite-icon.sg.icon_30x20

Philippines flag

.sprite-icon.ph.icon_30x20

Malaysia flag

.sprite-icon.my.icon_30x20

Australia flag

.sprite-icon.au.icon_30x20

New Zealand flag

.sprite-icon.nz.icon_30x20

Thailand flag

.sprite-icon.th.icon_30x20

Indonesia flag

.sprite-icon.id.icon_30x20

Korea flag

.sprite-icon.kr.icon_30x20

My Account

Orders

.svg-icon.orders

Point History

.svg-icon.point-history

Beauty Profile

.svg-icon.beauty-profile

Waitlist

.svg-icon.waitlist

Back In Stock

.svg-icon.stock

Product Reviews

.svg-icon.reviews

Product Reviews Alt

.svg-icon.reviews-red

Wishlist

.svg-icon.heart-empty

Wishlisted

.svg-icon.heart-fill

Wishlist - White

.svg-icon.heart-white

Purchases

.svg-icon.purchase

No Purchase

.svg-icon.purchase-zero

Review Approved

.svg-icon.review-approved

Review Unapproved

.svg-icon.review-unapproved

Review Rejected

.svg-icon.review-rejected

Beauty Pass

White Card

.svg-icon.white-card

Black Card

.svg-icon.black-card

Gold Card

.svg-icon.gold-card

Black Tier

.svg-icon.black-tier

Gold Tier

.svg-icon.gold-tier

Birthday Gift

.svg-icon.birthday-gift

Welcome Bonus

.svg-icon.welcome-gift

Benefits

.svg-icon.benefits

Member Points

.svg-icon.member-points

Boutique Rewards

.svg-icon.rewards-boutique

Functions

Left Arrow

.svg-icon.chevron-left

Right Arrow

.svg-icon.chevron-right

Up Arrow

.svg-icon.chevron-up

Down Arrow

.svg-icon.chevron-down

Dropdown Arrow

.svg-icon.arrow-dropdown

Approval

.svg-icon.certified

Close

.svg-icon.close2

Delete

.svg-icon.delete

Edit

.svg-icon.edit-icon

Video Play Black

.svg-icon.video-play-black

Video Play White

.svg-icon.video-play-white

Search Black

.svg-icon.search-black

Search White

.svg-icon.search-white

Scan

.svg-icon.scan

Wishlist Circle Black

.svg-icon.heart-empty-bg

Wishlist Circle Red

.svg-icon.heart-empty-red-bg

Wishlisted Circle

.svg-icon.heart-fill-bg

Social Media and Email

Instagram

.svg-icon.instagram

Snapchat

.svg-icon.snapchat

Youtube

.svg-icon.youtube

Twitter

.svg-icon.twitter

Google

.svg-icon.google

Facebook

.svg-icon.facebook

Email

.svg-icon.email

Pinterest

.svg-icon.pinterest

Line

.svg-icon.line

Flags

Australia

.svg-icon.australia

Bahrain

.svg-icon.bahrain

Brazil

.svg-icon.brazil

Canada

.svg-icon.canada

China

.svg-icon.china

Czech Republic

.svg-icon.czech-republic

Denmark

.svg-icon.denmark

France

.svg-icon.france

Germany

.svg-icon.germany

Greece

.svg-icon.greece

Hong Kong SAR

.svg-icon.hong-kong

Indonesia

.svg-icon.indonesia

Italy

.svg-icon.italy

Korea

.svg-icon.korea

Kuwait

.svg-icon.kuwait

Luxembourg

.svg-icon.luxembourg

Malaysia

.svg-icon.malaysia

Mexico

.svg-icon.mexico

Monaco

.svg-icon.monaco

New Zealand

.svg-icon.new-zealand

Oman

.svg-icon.oman

Philippines

.svg-icon.philippines

Poland

.svg-icon.poland

Portugal

.svg-icon.portugal

Qatar

.svg-icon.qatar

Romania

.svg-icon.romania

Russia

.svg-icon.russia

Saudi Arabia

.svg-icon.saudi-arabia

Serbia

.svg-icon.serbia

Singapore

.svg-icon.singapore

Slovakia

.svg-icon.slovakia

Spain

.svg-icon.spain

Switzerland

.svg-icon.switzerland

Thailand

.svg-icon.thailand

Turkey

.svg-icon.turkey

United Arab Emirates

.svg-icon.united-arab-emirates

United States

.svg-icon.united-states

Bangladesh

.svg-icon.bangladesh

Brunei

.svg-icon.brunei

Japan

.svg-icon.japan

Laos

.svg-icon.laos

Myanmar

.svg-icon.myanmar

Pakistan

.svg-icon.pakistan

Sri Lanka

.svg-icon.sri-lanka

Taiwan

.svg-icon.taiwan

Vietnam

.svg-icon.vietnam

Booking Services

Store Black

.svg-icon.store-black

Store White

.svg-icon.store-white

Location

.svg-icon.location

Store Location

.svg-icon.store-location

Store Location White

.svg-icon.store-location-white

Calendar

.svg-icon.calendar

Calendar White

.svg-icon.calendar-white

Others

Lipstick Rated

.svg-icon.lipstick-filled

Lipstick Unrated

.svg-icon.lipstick-empty

Print

.svg-icon.print

Save as PDF

.svg-icon.pdf

Samples

.svg-icon.makeup-2

No Filter Found

.svg-icon.makeup-1

Triangle

.svg-icon.triangle

Triangle Black

.svg-icon.triangle-black

Size

.svg-icon.size

Show

.svg-icon.show-icon

Shade

.svg-icon.shade

Triangle Black

.svg-icon.triangle-black

Processing

.svg-icon.processing

Field Error

.svg-icon.field-error

Field Success

.svg-icon.field-succeed

Radio Disabled Selected

.svg-icon.radio-disabled-selected

Radio Disabled Unselected

.svg-icon.radio-disabled-unselected

Radio Selected

.svg-icon.radio-selected

Radio Unselected

.svg-icon.radio-unselected

Selected Option

.svg-icon.selected-option-icon

Giftcard

.svg-icon.giftcard



Input Fields

Input States

Empty Field

Pug

.form-group.floating-labels
  label.control-label for='email' Email (Empty Field)
  input#email.form-control type='email'

Filled Field

Pug

.form-group.floating-labels
  label.control-label(for='email2') Email (Filled Field)
  input#email2.form-control(type='email' value='test@email.com')

Field Error

Pug

.form-group.has-error.floating-labels
  label.control-label(for='email3') Email (Field Error)
  input#email3.form-control(type='email' value='testemail')
  .form-control-feedback= 'Error: Email is incorrect'
  .input-error

Prefilled (Editable)

Pug

.form-group.floating-labels.editable-verification
  label.control-label(for='text1') Prefilled (Editable)
  input#text1.form-control(type='text' value='Flora Wong')
  .input-success

Verified (Readonly Field)

Pug

.form-group.floating-labels.non-editable-verification
  label.control-label(for='text2') Verified (Readonly Field)
  input#text2.form-control(type='text' value='Flora Wong' readonly=true)
  .input-success

Readonly Field

Pug

.form-group.floating-labels
  label.control-label(for='email4') Email (Readonly Field)
  input#email4.form-control(type='email' value='testemail' readonly=true)

Disabled Field

Pug

.form-group.floating-labels
  label.control-label(for='email5') Email (Disabled Field)
  input#email5.form-control(type='email' value='testemail' disabled=true)

Input Types

Textarea

Pug

.form-group.floating-labels.textarea
  label.control-label(for='textarea1') Textarea
  textarea#textarea1.form-control

CSS

// Required CSS for textareas to look as per the style guide
.form-group.floating-labels.textarea {
  @include textarea(90px);
}

Prefilled (Editable)

Pug

.form-group.floating-labels.textarea.filled.focused
  label.control-label(for='textarea') Textarea
  textarea#textarea.form-control Change Me

Text Input

Pug

.form-group.floating-labels.filled.focused
  label.control-label(for='text') Text Input
  input#text.form-control(type='text' value='Text Input')

URL Input

Pug

.form-group.floating-labels.filled.focused
  label.control-label(for='url') URL Input
  input#url.form-control(type='url' value='https://url.input')

Telephone Input

Pug

.form-group.floating-labels.filled.focused
  label.control-label(for='telephone') Telephone Input
  input#telephone.form-control(type='tel' value='+65 9123 5678')

Password Input

Pug

.form-group.floating-labels.filled.focused
  label.control-label(for='password') Password Input
  input#password.form-control(type='password' value='Password Input')

Number Input

Pug

.form-group.floating-labels.filled.focused
  label.control-label for='number' Number Input
  input#number.form-control(type='number' value='123456')

Credit Card

Pug

.form-group.floating-labels.filled.focused
  label.control-label(for='credit-card') Credit Card
  input#credit-card.form-control(type='text' value='4111111111111111' maxlength=19)

Date of Birth

Pug

.clearfix
  label.control-title = 'Date of Birth'
  .form-group.floating-labels#date-group
    label.control-label(for='date') DD
    input#date.form-control(type='number' max=31 min=1 maxlength=2)
  .form-group.floating-labels#month-group
    label.control-label(for='month') MM
    input#month.form-control(type='number' max=12 min=1 maxlength=2)
  .form-group.floating-labels#year-group
    label.control-label(for='year') YYYY
    input#year.form-control(type='number' max=2999 min=1899)

CSS

// Required CSS for DOB fields to look as per the style guide
#date-group, #month-group {
  width: 50px;
  float: left;
  margin-right: 9px;
}

#year-group {
  width: 100px;
  float: left;
}

Checkboxes

Pug

.row
  .col-4
    .form-check
      label.form-check-label(@click='toggleCheckbox')
        span.form-check-input.checkbox(:class='{ "checked" : isCheckboxChecked }') Default 1
  .col-4
    .form-check.disabled
      label.form-check-label
        span.form-check-input.checkbox Disabled
  .col-4
    .form-check.disabled
      label.form-check-label
        span.form-check-input.checkbox.checked Disabled Checked

JavaScript

toggleCheckbox () {
  this.isCheckboxChecked = !this.isCheckboxChecked
}

Radio

Pug

.row
  .col-4
    .form-check
      label.form-check-label(@click='toggleRadio')
        span.form-check-input.radio(:class='{ "selected" : isRadioSelected }') Default 1
  .col-4
    .form-check.disabled
      label.form-check-label
        span.form-check-input.radio Disabled
  .col-4
    .form-check.disabled
      label.form-check-label
        span.form-check-input.radio.checked Selected

JavaScript

toggleRadio () {
  this.isRadioSelected = !this.isRadioSelected
}

Select


.form-group
  label.control-label-inline Select:
  select.form-control
    option.form-option.selected(:value='1') 1
    option.form-option(:value='2') 2
    option.form-option(:value='3') 3
  i.dropdown-arrow

Grid

Introduction

The grid is modelled closely to Bootsrap's Grid layout, thus you can refer to their very comprehensive documentation.

Grid with .container

Col
Col
Col
Col
Col
Col
Col
Col
Col
Col
Col
Col
Col
Col
Col
Col

Grid with .container-fluid

Col
Col
Col
Col
Col
Col
Col
Col
Col
Col
Col
Col
Col
Col
Col
Col

Alerts

Pug

/- Define a method to be called on click that modifies showAlert
button.btn.alert-btn(data-target='alert' @click='alertSuccess') Success
transition(name='alert-fade')
  .alert.alert-success(role='alert' v-if='showAlert')
    .alert-container
      .alert-message You've successfully signed in.
      button.close(type='button' data-dismiss='alert' aria-label='Close' @click='closeAlerts')

JavaScript

alertSuccess () {
  this.showAlertSuccess = true

  // Prevent double rendering if button is clicked too fast
  clearTimeout(this.alertTimeout)

  this.alertTimeout = setTimeout(() => {
    this.showAlertSuccess = false
  }, 3500)
}

Accordion

Group Collapsible

Mr. and Mrs. Dursley, of number four, Privet Drive, were proud to say that they were perfectly normal, thank you very much. They were the last people you’d expect to be involved in anything strange or mysterious, because they just didn’t hold with such nonsense.
Mr. Dursley was the director of a firm called Grunnings, which made drills. He was a big, beefy man with hardly any neck, although he did have a very large mustache. Mrs. Dursley was thin and blonde and had nearly twice the usual amount of neck, which came in very useful as she spent so much of her time craning over garden fences, spying on the neighbors. The Dursleys had a small son called Dudley and in their opinion there was no finer boy anywhere.
The Dursleys had everything they wanted, but they also had a secret, and their greatest fear was that somebody would discover it. They didn’t think they could bear it if anyone found out about the Potters. Mrs. Potter was Mrs. Dursley’s sister, but they hadn’t met for several years; in fact, Mrs. Dursley pretended she didn’t have a sister, because her sister and her good-for-nothing husband were as unDursleyish as it was possible to be. The Dursleys shuddered to think what the neighbors would say if the Potters arrived in the street. The Dursleys knew that the Potters had a small son, too, but they had never even seen him. This boy was another good reason for keeping the Potters away; they didn’t want Dudley mixing with a child like that.

Pug

.accordion#default-accordion(aria-multiselectable='true' role='tablist')

  .card.card-primary
    .card-header.cursor#heading-one(role='tab' data-toggle='collapse' data-target='#collapse-one' aria-expanded='true' aria-controls='collapse-one')
      h3.h3
        | HEADING (PRIMARY)

    .collapse.show#collapse-one(aria-labelledby='heading-one' role='tabpanel' data-parent='#default-accordion')
      .card-block
        | Change Me

  .card.card-primary.card-disabled
    .card-header.cursor#heading-two(role='tab' data-toggle='collapse' data-target='#collapse-two' aria-expanded='false' aria-controls='collapse-two')
      h3.h3
        | HEADING (DISABLED)

    .collapse#collapse-two(aria-labelledby='heading-two' role='tabpanel' data-parent='#default-accordion')
      .card-block
        | Change Me

  .card
    .card-header.cursor#heading-three(role='tab' data-toggle='collapse' data-target='#collapse-three' aria-expanded='false' aria-controls='collapse-three')
      h3.h3
        | HEADING

    .collapse#collapse-three(aria-labelledby='heading-three' role='tabpanel' data-parent='#default-accordion')
      .card-block
        | Change Me

Sidebar


Pug

.accordion.accordion-sidebar#sidebar-accordion(role='tablist')
  .card.card-light
    .card-header#skin-concerns-heading(data-toggle='collapse' data-target='#skin-concerns-collapse' role='tab')
      i.collapse-arrow
      h4.h4 SKINCARE

    .collapse.show#skin-concerns-collapse(aria-labelledby='skin-concerns-heading' role='tabpanel' data-parent='#sidebar-accordion')
      .card-block
        ul
          li
            a(href='#0') Cleanser & Exfoliator
            span.badge.badge-default 512
          li
            a(href='#0') Toner
            span.badge.badge-default 304
          li
            a(href='#0') Moisturiser
            span.badge.badge-default 96

            ul.secondary
              li
                a(href='#0') Day Moisturiser
                span.badge.badge-default 17
              li
                a(href='#0') Night Cream
                span.badge.badge-default 8

          li
            a(href='#0') Masks & Treatments
            span.badge.badge-default 7

  .card.card-light
    .card-header.collapsed#brands-heading(data-toggle='collapse' data-target='#brands-collapse' role='tab')
      i.collapse-arrow
      h4.h4 BRANDS

    .collapse#brands-collapse(role='tabpanel' aria-labelledby='brands-heading' data-parent='#sidebar-accordion')
      .card-block
        ul
          li
            a(href='#0') Alpha-H
            span.badge.badge-default 16
          li
            a(href='#0') Aromatherapy Associates
            span.badge.badge-default 4
          li
            a(href='#0') tarte
            span.badge.badge-default 9

  .card.card-light
    .card-header.collapsed#price-heading(data-toggle='collapse' data-target='#price-collapse' role='tab')
      i.collapse-arrow
      h4.h4 PRICE

    .collapse#price-collapse(role='tabpanel' aria-labelledby='price-heading' data-parent='#sidebar-accordion')
      .card-block
        ul
          li
            a(href='#0') Under $25
          li
            a(href='#0') $25 - $50
          li
            a(href='#0') $50 - $100
          li
            a(href='#0') $100 - $150

Buttons

Preview Settings




Variants

Default




Primary

btn-primary




White

btn-white




Grey

btn-grey




Disabled

disabled




To change the colour, refer to the class names underneath the desired colour

button.btn.btn-sm.btn-primary Small
button.btn.btn-primary Default
button.btn.btn-lg.btn-primary Large
button.btn.btn-block.btn-primary Block

Loaders

Spinner

Pug

.loader-spinner

Pagination Buttons

Top














Bottom












/- For between pages (Top)
nav.pagination
  a.page.prev
  a.page 7
  a.page.current 8
  a.page 9
  a.page.next

/- For between pages (Bottom)
nav.pagination
  a.page.prev
  a.page 1
  a.page.continue ...
  a.page.current 7
  a.page 8
  a.page 9
  a.page.continue ...
  a.page 12
  a.page.next

Modals

Sizes

Open Small Modal Open Modal Open Large Modal

Pug

a.btn(href='#sample-modal' data-toggle='modal') Open Modal

.modal.fade#sample-modal(aria-hidden='true' role='dialog' tabindex='-1')
.modal-dialog(role='document')
  .modal-content
    .modal-header
      .modal-title This is a normal modal
      button.close(type='button' data-dismiss='modal' aria-label='Close')
    .modal-body
      p Lorem ...

Class NameOptionsDescription
.modal-xxsm, lgControls the size of the modal. Add this class to the .modal-dialog element

Tables

Default

OptionShipping TimeTimeslot
Standard Shipping3 - 5 business daysNo
Standard+ Shipping3 business daysYes
Premium Shipping1 business dayYes

Pug

table.table
  thead
    tr
      th Option
      th Shipping Time
      th Timeslot
  tbody.text-center
    tr
      td Standard Shipping
      td 3 - 5 business days
      td No
    tr
      td Standard+ Shipping
      td 3 business days
      td Yes
    tr
      td Premium Shipping
      td 1 business day
      td Yes

Tabs

Default

About

Achieve eye perfection with this high-pigment, waterproof liner that stays put all day for a fade-, melt-, crack-, and run-resistant finish. The superfine and flexible tip glides across the lashline for fluid application, allowing you to create a variety of looks with ease. Benefits Unlike traditional felt tip liners, this brush tip will not fray. Cruelty-free; no animal-derived ingredients and not tested on animals.

Benefits

  • Unlike traditional felt tip liners, this brush tip will not fray.
  • Cruelty-free; no animal-derived ingredients and not tested on animals.

Magenta Contour Brush:   create the perfect contour, strobe or highlight with dense, flat bristles

Pink Powder Brush:   apply just the right amount of foundation or finishing powder for an airbrushed look.

Green Blending Shadow Brush:   defines the crease while blending out harsh lines.

Synthetic bristles

Achieve eye perfection with this high-pigment, waterproof liner that stays put all day for a fade-, melt-, crack-, and run-resistant finish. The superfine and flexible tip glides across the lashline for fluid application, allowing you to create a variety of looks with ease. Benefits Unlike traditional felt tip liners, this brush tip will not fray. Cruelty-free; no animal-derived ingredients and not tested on animals.


Primary

About

Achieve eye perfection with this high-pigment, waterproof liner that stays put all day for a fade-, melt-, crack-, and run-resistant finish. The superfine and flexible tip glides across the lashline for fluid application, allowing you to create a variety of looks with ease. Benefits Unlike traditional felt tip liners, this brush tip will not fray. Cruelty-free; no animal-derived ingredients and not tested on animals.

Benefits

  • Unlike traditional felt tip liners, this brush tip will not fray.
  • Cruelty-free; no animal-derived ingredients and not tested on animals.

Magenta Contour Brush:   create the perfect contour, strobe or highlight with dense, flat bristles

Pink Powder Brush:   apply just the right amount of foundation or finishing powder for an airbrushed look.

Green Blending Shadow Brush:   defines the crease while blending out harsh lines.

Synthetic bristles

Achieve eye perfection with this high-pigment, waterproof liner that stays put all day for a fade-, melt-, crack-, and run-resistant finish. The superfine and flexible tip glides across the lashline for fluid application, allowing you to create a variety of looks with ease. Benefits Unlike traditional felt tip liners, this brush tip will not fray. Cruelty-free; no animal-derived ingredients and not tested on animals.

Pug

.tabs-container
  ul.nav.nav-tabs.nav-tabs-default(role='tablist')
    li.nav-item
      a.nav-link.active(data-toggle='tab' href='#description' role='tab') Description
    li.nav-item
      a.nav-link(data-toggle='tab' href='#how-to' role='tab') How-To
    li.nav-item
      a.nav-link(data-toggle='tab' href='#ingredients' role='tab') Ingredients

.tab-content.tab-content-default
  .tab-pane.active#description(role='tabpanel')
    h4 About
    p Achieve eye perfection with this high-pigment, waterproof liner that stays put all day for a fade-, melt-, crack-, and run-resistant finish.

    h4 Benefits
    ul
      li Unlike traditional felt tip liners, this brush tip will not fray.
      li Cruelty-free; no animal-derived ingredients and not tested on animals.

  .tab-pane#how-to(role='tabpanel')
    .text.markdown
      p
        b Magenta Contour Brush:   
        span create the perfect contour, strobe or highlight with dense, flat bristles

      p
        b Pink Powder Brush:   
        span apply just the right amount of foundation or finishing powder for an airbrushed look.

      p
        b Green Blending Shadow Brush:   
        span defines the crease while blending out harsh lines.
  .tab-pane#ingredients(role='tabpanel')
    h4 Synthetic bristles
    p Achieve eye perfection with this high-pigment, waterproof liner that stays put all day for a fade-, melt-, crack-, and run-resistant finish.

To use the Primary styling change the following classes in the code snippet:

nav-tabs-default to nav-tabs-primary
tab-content-default to tab-content-primary

Slider

Slider

Pug

.range-slider
  input.js-range-slider(data-min='0' data-max='1000' data-step='20' data-prefix='$' data-from='0' data-to='600')

AttributesTypeDescription
data-minintMinimum price range i.e. leftmost value
data-maxintMaximum price range i.e. rightmost value
data-stepintValue increments/decrements when moving sliders
data-prefixstringString to be appended before value i.e. price symbol
data-fromintInitial position/value of left slider
data-tointInitial position/value of right slider

Product Card

Pug

.col-6.col-md-3
  .product-card(name='product' @mouseover='mouseoverProductCard' @mouseleave='mouseleaveProductCard')
    a.product-card-image-container(href='#product-link')
        .out-of-stock(v-if='isOutOfStock') Out of stock
        img.product-card-image(src='examples/product1-400x400.png')
    .product-card-heart-filled(v-if='productIsWishListed' @click='setWishList')
    .product-card-heart(v-if='!productIsWishListed' @click='setWishList')
    .product-card-actions(v-show='showProductActions')
        button.btn.btn-sm.btn-block.btn-primary.product-card-add-to-bag Add to Bag
        .product-card-variants-carousel
        i.carousel-arrow-left.arrow-left
        i.carousel-arrow-right.arrow-right
        p.carousel-more-variants +2
        .product-card-variants.variants-overflow
        span.variant-container(name='variant1' @click='selectVariant')
            img.product-variant.active(src='examples/variant1.jpg')
        span.variant-container(name='variant2' @click='selectVariant')
            i.out-of-stock.icon-sm
            img.product-variant(src='examples/variant2.jpg')
    a.product-card-description(href='#product-link')
        p.product-card-label
          span.product-card-label-primary New
          span  | Limited Edition
        p.product-card-brand Clinique
        p.product-card-product Chubby Stick Moisturizing Lip Colour Balm
        p.product-price $26.00
        .product-card-rating.rating-container
          .rateit(data-rateit-resetable='false' data-rateit-readonly='true' data-rateit-starwidth='14.65' data-rateit-starheight='12' data-rateit-value='1' data-rateit-ispreset='true')
        .product-card-variants-count 13 shades

JavaScript

mouseoverProductCard () {
  this.showProductActions = true
},

mouseleaveProductCard () {
  this.showProductActions = false
},

setWishList(e) {
  const targetClass = e.target.className;
  if (targetClass === 'product-card-heart' || targetClass === 'product-card-heart-filled') {
    this.productIsWishListed = !this.productIsWishListed;
  }
}

Video

Default (Home)

Pug

.container
  .row
    .col-12.col-md-6.offset-lg-6.offset-md-3
      .media-container-lg
        .video-panel
          iframe(width='100%' height='100%' src='//www.youtube.com/embed/VIDEOID?rel=0&autoplay=1&loop=1&mute=1&playlist=RvY-YNMp-1w&enablejsapi=1&modestbranding=1' frameborder='0' allowfullscreen)
          a.video-link.js-video-link(href='#lg-video' data-toggle='modal' data-video='lgVideo')
            .video-image-overlay
            img.video-image-lg(src='//img.youtube.com/vi/VIDEOID/maxresdefault.jpg')
            .video-play-icon
        a.video-link(href='#')
          span.video-text-container
            p.video-text Change me and VIDEOID

      .modal.fade.media-modal.js-video-modal#lg-video(aria-hidden='true' role='dialog' tabindex='-1')
        .modal-dialog(role='document')
          .modal-content
            .modal-header
              a.video-link(href='#')
                .modal-title Change me and VIDEOID
              button.close(type='button' data-dismiss='modal' aria-label='Close')
            .modal-body
              .modal-video
                iframe#lgVideo(width='100%' height='100%' src='//www.youtube.com/embed/VIDEOID?rel=0&enablejsapi=1&modestbranding=1' frameborder='0' allowfullscreen)

Note that .js-video-link and .js-video-modal classes is needed for autoplay and autopause

Regular Thumbnail (Learn More)

Pug

.media-container
  a.video-link(href='#md-video-one' data-toggle='modal' data-video='mdVideoOne')
    .video-image-overlay
    img.video-image(src='//img.youtube.com/vi/VIDEOID/maxresdefault.jpg')
    .video-play-icon
  a.video-link.js-video-link(href='#md-video-one' data-toggle='modal' data-video='mdVideoOne')
    p.video-text Change me and VIDEOID

.modal.fade.media-modal.js-video-modal#md-video-one(aria-hidden='true' role='dialog' tabindex='-1')
  .modal-dialog role='document'
    .modal-content
      .modal-header
        .modal-title Change me and VIDEOID
        button.close(type='button' data-dismiss='modal' aria-label='Close')
      .modal-body
        .modal-video
          iframe#mdVideoOne(width="560" height="315" src='//www.youtube.com/embed/VIDEOID?rel=0&enablejsapi=1&modestbranding=1' frameborder='0' allowfullscreen)

Note that .js-video-link and .js-video-modal classes is needed for autoplay and autopause

Small Thumbnail (Product Show)

Pug

.media-container-sm
  a.video-link.js-video-link(href='#sm-video-one' data-toggle='modal' data-video='smVideoOne')
    .video-image-overlay
    img.video-image-sm(src='//img.youtube.com/vi/VIDEOID/maxresdefault.jpg')
    .video-play-icon

.modal.fade.media-modal.js-video-modal#sm-video-one(aria-hidden='true' role='dialog' tabindex='-1')
  .modal-dialog(role='document')
    .modal-content
      .modal-header
        .modal-title Change me and VIDEOID
        button.close(type='button' data-dismiss='modal' aria-label='Close')
      .modal-body
        .modal-video
          iframe#smVideoOne(width='100%' height='100%' src='//www.youtube.com/embed/VIDEOID?rel=0&enablejsapi=1&modestbranding=1' frameborder='0' allowfullscreen)

Note that .js-video-link and .js-video-modal classes is needed for autoplay and autopause