html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
    margin: 0;
    padding: 0;
    border: 0;
    font-size: 100%;
    font: inherit;
    vertical-align: baseline;
}

/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
    display: block;
}
body {
    line-height: 1;
}
ol, ul {
    list-style: none;
}
blockquote, q {
    quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
    content: '';
    content: none;
}

table {
    border-collapse: collapse;
    border-spacing: 0;
}

body {
    font-family: 'PT Sans', sans-serif;
    min-height: 740px;
}

h1,h2,h3,h4 {
    text-align: center;
}

h1 { 
    font-size: 80px;
}

b, strong { font-weight: bold }
i, em { font-style: italic }

a {
    color: inherit;
    text-decoration: none;
    padding: 0 0.1em;
    background: rgba(255,255,255,0.5);
    text-shadow: -1px -1px 2px rgba(100,100,100,0.9);
    border-radius: 0.2em;

    -webkit-transition: 0.5s;
    -moz-transition:    0.5s;
    -ms-transition:     0.5s;
    -o-transition:      0.5s;
    transition:         0.5s;
}

a:hover,
a:focus {
    background: rgba(255,255,255,1);
    text-shadow: -1px -1px 2px rgba(100,100,100,0.5);
}

.fallback-message {
    font-family: sans-serif;
    line-height: 1.3;

    width: 780px;
    padding: 10px 10px 0;
    margin: 20px auto;

    border: 1px solid #E4C652;
    border-radius: 10px;
    background: #EEDC94;
}

.fallback-message p {
    margin-bottom: 10px;
}

.flides-supported .fallback-message {
    display: none;
}

.step {
    position: relative;
    width: 900px;
    padding: 40px;
    margin: 20px auto;

    -webkit-box-sizing: border-box;
    -moz-box-sizing:    border-box;
    -ms-box-sizing:     border-box;
    -o-box-sizing:      border-box;
    box-sizing:         border-box;

    font-family: 'PT Serif', georgia, serif;
    font-size: 48px;
    line-height: 1.5;
}

.flides-enabled .step {
    margin: 0;
    opacity: 0.3;

    -webkit-transition: opacity 1s;
    -moz-transition:    opacity 1s;
    -ms-transition:     opacity 1s;
    -o-transition:      opacity 1s;
    transition:         opacity 1s;
}

.flides-enabled .step.active { opacity: 1 }

table {
    width: 100%;
    text-align: center;
}

.right {
    border-left: 5px black solid;
}

/*
	Slides specific part
*/


/* Title */

#title {
    padding: 0;
}

#title h2 {
    font-size: 100px;

    -webkit-transform: translateZ(50px);
    -moz-transform:    translateZ(50px);
    -ms-transform:     translateZ(50px);
    -o-transform:      translateZ(50px);
    transform:         translateZ(50px);
}

#title h3 {
    font-size: 40px;

    -webkit-transform: translateZ(50px);
    -moz-transform:    translateZ(50px);
    -ms-transform:     translateZ(50px);
    -o-transform:      translateZ(50px);
    transform:         translateZ(50px);
}

#title h4 {
    font-size: 30px;

    -webkit-transform: translateZ(50px);
    -moz-transform:    translateZ(50px);
    -ms-transform:     translateZ(50px);
    -o-transform:      translateZ(50px);
    transform:         translateZ(50px);
}

/* Global view */

#global_view {
    padding: 0; 
    background-image: url("loco.jpg");
    background-size: 800px;
    background-position: center;
    background-repeat: no-repeat;
}

#global_view h1 {
    font-size: 200px;
}

/* Definition */

#definition {
    padding: 0;
}

#definition h2 {
    font-size: 60px;
}

#definition h3 {
    font-size: 40px;
}

/* Examples */

#examples td {
    height: 130px;
}

#examples th {
    background-color: #f1f1c1;
} 

/* not */

#not {
    padding: 0;
}

#not ul {
    display: block;
    list-style-type: disc;
}

/* Remarks */

#remarks {
    padding: 0;
}

#remarks ul {
    display: block;
    list-style-type: disc;
}

/* pa */

#pa {
    padding: 0;
}

/* exponential */

#exponential {
    padding: 0;
}

#exponential img {
    width: 70%;
    float: center;
}

/* Research */

#research {
    padding: 0;
}

#research ul {
    display: block;
    list-style-type: disc;
}

#overview { display: none }

.flides-on-overview .step {
    opacity: 1;
    cursor: pointer;
}


/*
    Now, when we have all the steps styled let's give users a hint how to navigate
    around the presentation.

    The best way to do this would be to use JavaScript, show a delayed hint for a
    first time users, then hide it and store a status in cookie or localStorage...

    But I wanted to have some CSS fun and avoid additional scripting...

    Let me explain it first, so maybe the transition magic will be more readable
    when you read the code.

    First of all I wanted the hint to appear only when user is idle for a while.
    You can't detect the 'idle' state in CSS, but I delayed a appearing of the
    hint by 5s using transition-delay.

    You also can't detect in CSS if the user is a first-time visitor, so I had to
    make an assumption that I'll only show the hint on the first step. And when
    the step is changed hide the hint, because I can assume that user already
    knows how to navigate.

    To summarize it - hint is shown when the user is on the first step for longer
    than 5 seconds.

    The other problem I had was caused by the fact that I wanted the hint to fade
    in and out. It can be easily achieved by transitioning the opacity property.
    But that also meant that the hint was always on the screen, even if totally
    transparent. It covered part of the screen and you couldn't correctly clicked
    through it.
    Unfortunately you cannot transition between display `block` and `none` in pure
    CSS, so I needed a way to not only fade out the hint but also move it out of
    the screen.

    I solved this problem by positioning the hint below the bottom of the screen
    with CSS transform and moving it up to show it. But I also didn't want this move
    to be visible. I wanted the hint only to fade in and out visually, so I delayed
    the fade in transition, so it starts when the hint is already in its correct
    position on the screen.

    I know, it sounds complicated ... maybe it would be easier with the code?
*/

.hint {
    /*
        We hide the hint until presentation is started and from browsers not supporting
        flides.js, as they will have a linear scrollable view ...
    */
    display: none;

    /*
        ... and give it some fixed position and nice styles.
    */
    position: fixed;
    left: 0;
    right: 0;
    bottom: 200px;

    background: rgba(0,0,0,0.5);
    color: #EEE;
    text-align: center;

    font-size: 50px;
    padding: 20px;

    z-index: 100;

    /*
        By default we don't want the hint to be visible, so we make it transparent ...
    */
    opacity: 0;

    /*
        ... and position it below the bottom of the screen (relative to it's fixed position)
    */
    -webkit-transform: translateY(400px);
    -moz-transform:    translateY(400px);
    -ms-transform:     translateY(400px);
    -o-transform:      translateY(400px);
    transform:         translateY(400px);

    /*
        Now let's imagine that the hint is visible and we want to fade it out and move out
        of the screen.

        So we define the transition on the opacity property with 1s duration and another
        transition on transform property delayed by 1s so it will happen after the fade out
        on opacity finished.

        This way user will not see the hint moving down.
    */
    -webkit-transition: opacity 1s, -webkit-transform 0.5s 1s;
    -moz-transition:    opacity 1s,    -moz-transform 0.5s 1s;
    -ms-transition:     opacity 1s,     -ms-transform 0.5s 1s;
    -o-transition:      opacity 1s,      -o-transform 0.5s 1s;
    transition:         opacity 1s,         transform 0.5s 1s;
}

/*
    Now we 'enable' the hint when presentation is initialized ...
*/
.flides-enabled .hint { display: block }

/*
    ... and we will show it when the first step (with id 'bored') is active.
*/
.flides-on-bored .hint {
    /*
        We remove the transparency and position the hint in its default fixed
        position.
    */
    opacity: 1;

    -webkit-transform: translateY(0px);
    -moz-transform:    translateY(0px);
    -ms-transform:     translateY(0px);
    -o-transform:      translateY(0px);
    transform:         translateY(0px);

    /*
        Now for fade in transition we have the oposite situation from the one
        above.

        First after 4.5s delay we animate the transform property to move the hint
        into its correct position and after that we fade it in with opacity
        transition.
    */
    -webkit-transition: opacity 1s 5s, -webkit-transform 0.5s 4.5s;
    -moz-transition:    opacity 1s 5s,    -moz-transform 0.5s 4.5s;
    -ms-transition:     opacity 1s 5s,     -ms-transform 0.5s 4.5s;
    -o-transition:      opacity 1s 5s,      -o-transform 0.5s 4.5s;
    transition:         opacity 1s 5s,         transform 0.5s 4.5s;
}

/*
    And as the last thing there is a workaround for quite strange bug.
    It happens a lot in Chrome. I don't remember if I've seen it in Firefox.

    Sometimes the element positioned in 3D (especially when it's moved back
    along Z axis) is not clickable, because it falls 'behind' the <body>
    element.

    To prevent this, I decided to make <body> non clickable by setting
    pointer-events property to `none` value.
    Value if this property is inherited, so to make everything else clickable
    I bring it back on the #flides element.

    If you want to know more about `pointer-events` here are some docs:
    https://developer.mozilla.org/en/CSS/pointer-events

    There is one very important thing to notice about this workaround - it makes
    everything 'unclickable' except what's in #flides element.

    So use it wisely ... or don't use at all.
*/
.flides-enabled          { pointer-events: none }
.flides-enabled #flides { pointer-events: auto }

