- Avatar
- Avatar Group
- Button
- Chat Module
- Chat — Amount Chooser
- Chat — Card
- Chat — Chat Entry Box
- Chat — Chat Form
- Chat — Conversation
- Chat — FAQ
- Chat — Header
- Chat — Loader
- Chat — Reactions
- Chat — Website links
- Checkbox
- Content Block
- CTA Block
- Datepicker
- Footer Menu
- Form examples
- Hamburger
- Image Block
- Logo List
- Nav Overlay
- Page CTA
- Page Header
- Progess bar
- Radio
- Select / dropdown
- Site Footer
- Site Header
- Site Menu
- Skiplink
- Social List
- Table
- Testimonials
- USP's Block
- Video Block
Global styles
Base layout
/**
* Imports
*/
@import 'utility/functions';
@import 'utility/mixins';
@import 'utility/font-imports';
@import 'utility/variables';
@import 'utility/font-mixins';
@import 'utility/form-mixins';
/**
* Bootstrap imports
*/
// Required
@import '../../node_modules/bootstrap/scss/functions';
@import '../../node_modules/bootstrap/scss/variables';
@import '../../node_modules/bootstrap/scss/mixins';
// Optional
@import '../../node_modules/bootstrap/scss/grid';
// Add modules like this:
// @import '../../node_modules/bootstrap/scss/tooltip';
/**
* Primer
*/
html {
box-sizing: border-box; font-size: 62.5%; line-height: 1.6;
scroll-behavior: smooth;
}
.page-has-expanded-nav,
.page-has-expanded-nav body {
height: 100%; max-height: 100%; overflow: hidden;
overflow: hidden; height: 100%; max-height: 100%;
overscroll-behavior: contain;
}
*,
*::before,
*::after {
box-sizing: inherit;
}
html,
body {
width: 100%; min-height: 100%; overflow-x: hidden;
}
body {
@include font-smoothing; @include body-font;
margin: 0; padding: 0;
background-color: $body-bg-color; color: $text-color;
font-size: $font-size-small; line-height: 1.75;
@include bp-min($medium) {
font-size: $font-size-medium;
}
@include bp-min($large) {
font-size: $font-size-large; line-height: 1.6;
}
}
body.template--chat {
overflow: hidden; height: 100%;
background-color: $nude;
}
main {
min-height: 100%;
}
p {
margin: 0 0 1.5em;
}
a {
color: inherit;
text-underline-position: under;
}
figure {
margin: 0; padding: 0;
}
figure > img {
display: block;
}
h1,
h2,
h3,
h4,
h5,
h6 {
@include heading-font;
margin: 0 0 $gutter-small;
line-height: 1.1;
}
h1 {
margin: 0 0 $gutter-small;
font-size: 38px;
@include bp-min($medium-large) {
font-size: 55px;
}
}
h2 {
font-size: 32px;
@include bp-min($medium-large) {
font-size: 40px;
}
}
h3 {
margin: 0 0 $gutter-tiny;
font-size: 22px;
@include bp-min($medium-large) {
font-size: 28px;
}
}
h4 {
font-size: 1.2em;
margin: 0 0 $gutter-tiny;
}
h5 {
font-size: 1em;
}
h6 {
font-size: .85em;
}
h5,
h6 {
@include body-font-bold;
}
// Lists
ul,
ol {
margin: 0; padding: 0 0 .5em 1.05em;
}
li {
margin-bottom: 1em;
}
ul:last-child li:last-child,
ol:last-child li:last-child {
margin-bottom: 0;
}
// Helpers
.sr-only {
@include hide-text;
}
/**
* Module imports
*/
@import 'layout/**/*';
@import 'modules/**/*';
Sass variables
/**
* Colors
*/
$white: #FFFFFF;
$black: #000000;
$blackish: #363636;
$grey-lighter: #F5F5F7;
$grey-light: #DDDDDD;
$grey: #9E9E9D;
$grey-medium: #595959;
$blue-light: #E1ECFA;
$blue-medium: #8CBDFA;
$blue: #1E38FA;
$blue-dark: #091047;
$nude: #FAF0EA;
$yellow-light: #FFE9BF;
$yellow: #FFBC41;
$yellow-dark: #FFB401;
$red: #D0021B;
/**
* Color usage
*/
$primary-color: $yellow;
$secondary-color: $white;
$tertiary-color: $blue;
$text-color: $blue-dark;
$body-bg-color: $white;
$error-color: $red;
/**
* Fonts
*/
$system-font: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica,
Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
$custom-font: "Ronnia BoldItalic", Arial, Helvetica, sans-serif;
$heading-font: $custom-font;
$ui-font: $system-font;
$body-font: $system-font;
$font-size-tiny: 14px;
$font-size-small: 16px;
$font-size-medium: 18px;
$font-size-large: 20px;
/**
* Magic numbers
*/
$gutter-tiny: 4px;
$gutter-small: 10px;
$gutter-medium: 20px;
$gutter-large: 30px;
$gutter-huge: 50px;
$border-radius-small: 2px;
$border-radius: 4px;
$border-radius-large: 8px;
$box-shadow: 0 4px 22px rgba($black, .15);
$tap-size: 44px;
$radio-size: 18px;
$radio-checked-size: 10px;
$checkbox-size: 18px;
$logo-small-width: 115px;
$logo-small-height: 30px;
$logo-medium-width: 130px;
$logo-medium-height: 32px;
$logo-large-width: 160px;
$logo-large-height: 40px;
$avatar-size-small: 24px;
$avatar-size-medium: 70px;
$avatar-size-large: 100px;
$avatar-size-huge: 140px;
$loading-circle-size: 14px;
$collapsed-module-width: 400px;
$chat-component-size: 500px;
$chat-amount-button-size: 64px;
$chat-entry-box-height: 70px;
$chat-entry-box-button-size: 30px;
$chat-entry-box-expand-size: 10px;
$chat-reaction-size: 50px;
$testimonial-min-width: 300px;
$testimonial-amount: 3;
$table-cell-padding-small: $gutter-small $gutter-medium;
$table-cell-padding-medium: $gutter-medium;
$button-themes: (
primary: (
background-color: $blue,
color: $white,
),
secondary: (
background-color: $blue-light,
color: $text-color,
),
tertiary: (
background-color: $white,
color: $blue,
),
);
$button-active-themes: (
primary: (
background-color: $blue-light,
color: $text-color,
),
secondary: (
background-color: $blue,
color: $white,
),
tertiary: (
background-color: $blue,
color: $white,
)
);
/**
* Form inputs
*/
$input-border: $grey-light;
$input-border-focus: $blue-medium;
$input-border-error: $red;
/**
* Breakpoints
* @see: https://medium.com/re-write/designing-a-responsive-grid-in-2016-58e4db6db786
*/
$tiny: 320;
$small: 540;
$medium: 680;
$medium-large: 900;
$large: 1200;
$extra-large: 1400;
$huge: 1700;
$nav-switch: 755;
$chat-module-switch: 900;
/**
* Widths & Sizes
*/
$site-width-small: 700;
$site-width-medium: 900px;
$site-width-large: 1160px;
$site-width-huge: 1200px;
$site-widths: (
small: $site-width-small,
medium: $site-width-medium,
large: $site-width-large,
);
$row-margins: (
small: 1.5vw,
medium: 3vw,
large: 4.5vw,
);
/**
* Bootstrap overrides
*/
$grid-gutter-width: $gutter-large;
$container-max-widths: (
sm: $site-width-small,
md: $site-width-medium,
lg: $site-width-large,
xl: $site-width-huge
);
Sass functions
/* ==========================================================================
functions
========================================================================== */
/**
* For converting pixels to ems
* Based on a 10px font-size on the html
* Usage:
* div { width: px-to-em(300); }
* Returns:
* div { width: 30em; }
*/
@function px-to-em($pixels) {
@return ($pixels / 16) + 0em;
}
Sass mixins
/**
* Font smoothing
*/
@mixin font-smoothing($enabled: true) {
@if $enabled {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
} @else {
-webkit-font-smoothing: initial;
-moz-osx-font-smoothing: initial;
}
}
/**
* Smooth scrolling
*/
@mixin smooth-scrolling {
scroll-behavior: smooth;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar;
}
/**
* Placeholder styling
*/
@mixin placeholder {
&:placeholder {
@content;
}
&::placeholder {
@content;
}
&::-webkit-input-placeholder {
@content;
}
&:-moz-placeholder {
@content;
}
&::-moz-placeholder {
@content;
}
&:-ms-input-placeholder {
@content;
}
}
/**
* Clearfix
* Actually an @extend, but we don't want to depend on inclusion order
*
* Usage:
* section { @include clearfix(); }
*/
@mixin clearfix {
&::after {
display: table; clear: both; content: '';
}
}
/*
* Bare button
*
* Get rid of button-style
*/
@mixin bare-button {
margin: 0; padding: 0;
background: none; border: none;
font-family: inherit; font-size: inherit; font-weight: inherit;
text-align: inherit;
}
/*
* Bare list
*
* Get rid of list-style and padding
*/
@mixin bare-list {
margin: 0; padding: 0; list-style-type: none;
}
/*
* Bare fieldset
*
* Get rid of fieldset
*/
@mixin bare-fieldset {
margin: 0; padding: 0; border: 0;
}
/**
* For image replacement
*/
@mixin hide-text {
overflow: hidden;
display: block; height: 0; width: 0;
background-color: transparent; color: transparent;
font-family: a; font-size: 0; line-height: 0; text-shadow: none;
border: 0 none;
}
/**
* Media query breakpoints mixins
*
* Usage:
* div { width: 60px;
* @include bp-min($small) { width: 80px; }
* }
*/
@mixin bp-min($point: 0) {
@media (min-width: px-to-em($point)) {
@content;
}
}
@mixin bp-max($point: 0) {
@media (max-width: (px-to-em($point) - 0.0625em)) {
@content;
}
}
@mixin bp-min-max($min-point: 0, $max-point: 0) {
@media (min-width: px-to-em($min-point)) and (max-width: (px-to-em($max-point) - 0.0625em)) {
@content;
}
}
@mixin body-font {
font-family: $body-font; font-weight: normal;
}
@mixin body-font-bold {
font-family: $body-font; font-weight: bold;
}
@mixin heading-font {
font-family: $heading-font; font-weight: normal;
}
@mixin ui-font {
font-family: $ui-font;
}
Font styling
@font-face {
font-family: 'Ronnia BoldItalic';
src: url('/../fonts/ronnia-bolditalic.eot') format('eot'),
url('/../fonts/ronnia-bolditalic.svg') format('svg'),
url('/../fonts/ronnia-bolditalic.woff') format('woff'),
url('/../fonts/ronnia-bolditalic.woff2') format('woff2');
font-weight: normal;
font-style: normal;
}
@mixin body-font {
font-family: $body-font; font-weight: normal;
}
@mixin body-font-bold {
font-family: $body-font; font-weight: bold;
}
@mixin heading-font {
font-family: $heading-font; font-weight: normal;
}
@mixin ui-font {
font-family: $ui-font;
}
Avatar
The avatar is used within chat bubbles, the chat header and cards
| type | kanbot, photo |
|---|---|
| class | whatever you need |
| size | small (24x24 pixels), medium (70x70 pixels), large (84x84 pixels) |
| color | yellow, yellow-light |
| modifiers | shadow |
Example(s)
This is a macro and its example will be included in "Avatar group".
Avatar Group
A set of three avatars
Example(s)
Button
Button types
| type | primary, secondary, disabled |
|---|
Chat Module
Chat Module as seen on homepage
| modifiers | chat-module--is-collapsed |
|---|
Example(s)
Welkom, ik ben Kanbot
Uw virtuele assistent
-
Hallo, ik ben de Kanbot. Kandoor heeft me gecreëerd om zoveel mogelijk mensen tegelijk te kunnen helpen met financiële vragen.
Chat — Amount Chooser
Amount chooser, showing different states.
The width of this component will be determined by the parent
Example(s)
Chat — Card
Card (holds the amount chooser and form)
Example(s)
Wat bedraagt uw jaarinkomen?
Een korte beschrijving over het jaarinkomen
Spreek met een van onze gidsen
Hier is plek voor een korte beschrijving over de gidsen.
Uw bericht is verstuurd!
Op basis van de expertise van de gids en de snelheid waarmee de gids kan antwoorden gaan we je aan een gids koppelen.
Chat — Chat Entry Box
Form user input chat
Example(s)
Chat — Chat Form
Forms that can be used within the chat
| type | chat-form__input--valid, chat-form__input--invalid |
|---|
Example(s)
Chat — Conversation
Conversation bubbles
| modifiers | chat-conversation__item--left, chat-conversation__item--right, chat-conversation__item--has-avatar, chat-conversation__item--actions, chat-conversation__item--actions-are-expanding, chat-conversation__item--actions-are-collapsing |
|---|
Example(s)
-
-
Wil je zelf een proefberekening maken voor zorgtoeslag of huurtoeslag? Ga naar de Belastingdienst pagina.
-
Eenpersoonshuishouden inkomen moet onder € 22.400 per jaar zijn.
-
Ja vertel mij meer
-
Vermogen
Heb je geen toeslagpartner? Dan ligt de vermogensgrens op € 30.000,- op jaarbasis.
Een vermogen is de waarde van wat je bezit min de schulden die je hebt. De belastingdienst omschrijft het volgende:
"Wat u wel en niet als vermogen moet meetellen, is hetzelfde als bij uw belastingaangifte. Spaargeld, aandelen en een vakantiehuis in Nederland of het buitenland tellen bijvoorbeeld mee. Uw auto of eigen woning tellen meestal niet mee".
-
Eenpersoonshuishouden inkomen moet onder € 22.400 per jaar zijn.
-
Avatar changes when the guide is typing
-
Ja vertel mij meer
-
Chat — FAQ
FAQ item within the Kandoor Chat
Example(s)
Chat — Header
This is the header of the Kandoor chatservice
Example(s)
Welkom, ik ben Kanbot
Uw virtuele assistent
Chat — Loader
Example(s)
Chat — Reactions
Emoji reaction module (design to be determined)
Example(s)
Chat — Website links
Chat module containing external links
Checkbox
Checkboxes with different status (:checked, disabled & default)
Example(s)
This is a macro and its example will be included in "Form examples".
Content Block
Content Block
| modifiers | content-block--has-blob |
|---|
Example(s)
Level 2 heading
Een korte introductie zo werkt het. Over pensioen, lijfrente, geld opzij zetten, belasting… Domme vragen bestaan niet. Makkelijke wel, en die worden direct beantwoord door onze bot.
Zo werkt het
Een korte introductie zo werkt het. Over pensioen, lijfrente, geld opzij zetten, belasting… Domme vragen bestaan niet. Makkelijke wel, en die worden direct beantwoord door onze bot.
Een korte introductie zo werkt het. Over pensioen, lijfrente, geld opzij zetten, belasting… Domme vragen bestaan niet. Makkelijke wel, en die worden direct beantwoord door onze bot. Een korte introductie zo werkt het. Over pensioen, lijfrente, geld opzij zetten, belasting… Domme vragen bestaan niet. Makkelijke wel, en die worden direct beantwoord door onze bot.
- List item 1
- List item 2
- List item 3
- List item 4 Over pensioen, lijfrente, geld opzij zetten, belasting… Domme vragen bestaan niet. Makkelijke wel, en die worden direct beantwoord door onze bot.
- List item 5
- List item 6
Level 3 heading
Een korte introductie zo werkt het. Over pensioen, lijfrente, geld opzij zetten, belasting… Domme vragen bestaan niet. Makkelijke wel, en die worden direct beantwoord door onze bot. Een korte introductie zo werkt het. Over pensioen, lijfrente, geld opzij zetten, belasting… Domme vragen bestaan niet. Makkelijke wel, en die worden direct beantwoord door onze bot.
Level 4 heading
Een korte introductie zo werkt het. Over pensioen, lijfrente, geld opzij zetten, belasting… Domme vragen bestaan niet. Makkelijke wel, en die worden direct beantwoord door onze bot. Een korte introductie zo werkt het. Over pensioen, lijfrente, geld opzij zetten, belasting… Domme vragen bestaan niet. Makkelijke wel, en die worden direct beantwoord door onze bot.
Level 5 heading
Een korte introductie zo werkt het. Over pensioen, lijfrente, geld opzij zetten, belasting… Domme vragen bestaan niet. Makkelijke wel, en die worden direct beantwoord door onze bot. Een korte introductie zo werkt het. Over pensioen, lijfrente, geld opzij zetten, belasting… Domme vragen bestaan niet. Makkelijke wel, en die worden direct beantwoord door onze bot.
Level 6 heading
Een korte introductie zo werkt het. Over pensioen, lijfrente, geld opzij zetten, belasting… Domme vragen bestaan niet. Makkelijke wel, en die worden direct beantwoord door onze bot. Een korte introductie zo werkt het. Over pensioen, lijfrente, geld opzij zetten, belasting… Domme vragen bestaan niet. Makkelijke wel, en die worden direct beantwoord door onze bot.
- List item 1
- List item 2
- List item 3
- List item 4 Over pensioen, lijfrente, geld opzij zetten, belasting… Domme vragen bestaan niet. Makkelijke wel, en die worden direct beantwoord door onze bot.
- List item 5
- List item 6
CTA Block
Call to Action Block
| modifiers | cta-block--has-avatar-group |
|---|
Example(s)
Eén van onze 211 financiële gidsen helpt jou op weg
Kandoor bestaat omdat wij zien dat mensen steeds meer financiële keuzes moeten maken.
Word gidsDatepicker
Datepicker, custom styled Flatpickr element
Example(s)
Form examples
Form displaying several input types
Example(s)
Hamburger
Hamburger
Example(s)
Image Block
Image Block with blob backdrop
Example(s)
Page CTA
Page CTA, usually fixed positioned (but not in the styleguide)
Example(s)
Page Header
Page header on top of every page
| modifiers | page-header--homepage |
|---|
Example(s)
Word gids bij Kandoor
Onze financiële gidsen, professionals uit het veld, beantwoorden kosteloos jouw vraag.
Progess bar
Progress bar, "value" should be adjusted dynamically, through JavaScript
Example(s)
Radio
Radios with different status (:checked, disabled & default)
Example(s)
This is a macro and its example will be included in "Form examples".
Select / dropdown
Select dropdown
Example(s)
Site Header
Site header with logo and menu
Example(s)
Skiplink
Skiplink, initally hidden until user uses the keyboard to tab through page
Example(s)
Ga direct naar contentTable
Table
Example(s)
| Hoeveel uur per maand moet ik werken wil ik meer verdienen dan WW? | Jim | 8 jan 2019 om 9:49 |
|
Kolom 5 | Kolom 6 | Kolom 7 | Kolom 8 | Kolom 9 | Kolom 10 | Kolom 11 | Kolom 12 | Kolom 13 | Kolom 14 | Kolom 15 | Kolom 16 | Kolom 17 | Kolom 18 | Kolom 19 | Kolom 20 | Kolom 21 | Kolom 22 | Kolom 23 | Kolom 24 | Bekijk/waardeer |
| Waarom moet ik werken? | Katie | 8 jan 2019 om 9:49 |
|
Kolom 5 | Kolom 6 | Kolom 7 | Kolom 8 | Kolom 9 | Kolom 10 | Kolom 11 | Kolom 12 | Kolom 13 | Kolom 14 | Kolom 15 | Kolom 16 | Kolom 17 | Kolom 18 | Kolom 19 | Kolom 20 | Kolom 21 | Kolom 22 | Kolom 23 | Kolom 24 | Bekijk/waardeer |
| Wanneer krijg ik AOW? | Jim | 8 jan 2019 om 9:49 |
|
Kolom 5 | Kolom 6 | Kolom 7 | Kolom 8 | Kolom 9 | Kolom 10 | Kolom 11 | Kolom 12 | Kolom 13 | Kolom 14 | Kolom 15 | Kolom 16 | Kolom 17 | Kolom 18 | Kolom 19 | Kolom 20 | Kolom 21 | Kolom 22 | Kolom 23 | Kolom 24 | Bekijk/waardeer |
| Hoeveel pensioen heb ik opgebouwd? | Anique | 8 jan 2019 om 9:49 |
|
Kolom 5 | Kolom 6 | Kolom 7 | Kolom 8 | Kolom 9 | Kolom 10 | Kolom 11 | Kolom 12 | Kolom 13 | Kolom 14 | Kolom 15 | Kolom 16 | Kolom 17 | Kolom 18 | Kolom 19 | Kolom 20 | Kolom 21 | Kolom 22 | Kolom 23 | Kolom 24 | Bekijk/waardeer |
Testimonials
Testimonials, uses the avatar module
Example(s)
-
“Het leuke van Kandoor is dat je een beeld krijgt van vragen waar mensen mee zitten. Het geeft waardevolle inzichten.” Gids Ernst
-
“Mijn kennis dank ik aan de mensen die hun kennis met mij hebben gedeeld. Via Kandoor kan ik mijn kennis delen.” Gids Emile
-
“Het is zo belangrijk om je financiën op orde te hebben. Juist als je niet thuis bent in de financiële wereld.” Gids Daniëlle
USP's Block
USP's block
Example(s)
-
Stel je vraag
Over pensioen, lijfrente, geld opzij zetten, belasting… Domme vragen bestaan niet. Makkelijke wel, en die worden direct beantwoord door onze bot.
-
Wij vinden een gids
Er is altijd iemand die je verder kan helpen met een iets ingewikkelder vraag. Wij zoeken snel de juiste persoon.
-
Snel en duidelijk antwoord
Je gids geeft schriftelijk antwoord op je vraag, meestal al binnen één dag. Nog niet helemaal duidelijk? Praat je gewoon even verder.
Video Block
Responsive video embed
Social List
List of social network icons
Source code
Markup
Styles
Example(s)