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

Example(s)

Primary button Secondary button Tertiary button Disabled button

Chat Module

Chat Module as seen on homepage

modifiers chat-module--is-collapsed

Example(s)

Welkom, ik ben Kanbot

Uw virtuele assistent

  1. 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)

Kies het aantal personen
Kies het aantal personen
1
Kies het aantal personen
3
Bepaal uw jaarinkomen
45.000

Chat — Card

Card (holds the amount chooser and form)

Example(s)

Wat bedraagt uw jaarinkomen?

Een korte beschrijving over het jaarinkomen

Kies het aantal personen
Kies het aantal personen
1
Kies het aantal personen
3
Bepaal uw jaarinkomen
45.000

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)

  1. Wil je zelf een proefberekening maken voor zorgtoeslag of huurtoeslag? Ga naar de Belastingdienst pagina.

  2. Eenpersoonshuishouden inkomen moet onder € 22.400 per jaar zijn.

  3. Ja vertel mij meer

  1. 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".

  2. Eenpersoonshuishouden inkomen moet onder € 22.400 per jaar zijn.

  3. Avatar changes when the guide is typing

  4. 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)

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.

  1. List item 1
  2. List item 2
  3. List item 3
  4. List item 4 Over pensioen, lijfrente, geld opzij zetten, belasting… Domme vragen bestaan niet. Makkelijke wel, en die worden direct beantwoord door onze bot.
  5. List item 5
  6. 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 gids

Datepicker

Datepicker, custom styled Flatpickr element

Example(s)

Form examples

Form displaying several input types

Example(s)

Regular inputs
Checkbox examples
Radio examples
Select example

Hamburger

Hamburger

Example(s)

Image Block

Image Block with blob backdrop

Example(s)

Moeder en twee kinderen zitten op de bank en kijken naar het scherm van een tablet

Logo List

Logo List

Page CTA

Page CTA, usually fixed positioned (but not in the styleguide)

Example(s)

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)

Social List

List of social network icons

Table

Table

Example(s)

Deze tabel bevat informatie over ...
Hoeveel uur per maand moet ik werken wil ik meer verdienen dan WW? Jim 8 jan 2019 om 9:49
:-)
Goed
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
:-)
Goed
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
:-)
Goed
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
:-)
Goed
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.

    54.048 vragen beantwoord
  • Wij vinden een gids

    Er is altijd iemand die je verder kan helpen met een iets ingewikkelder vraag. Wij zoeken snel de juiste persoon.

    220 actieve gidsen
  • 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.

    8,9/10 klant ervaring

Video Block

Responsive video embed

Example(s)