/* * Pure CSS linear visual novel tool. * * Copyright 2015 Kevin Lange * * * */ @font-face { font-family: 'VTC Letterer pro'; font-style: normal; font-weight: 400; src: url(assets/ui/fonts/VTC_letterer_pro.ttf); } body { padding: 0px; margin: 0px; width: 100%; height: 100%; background: #000; overflow: hidden; font-family: 'VTC Letterer pro'; } /* * The viewport holds all the frames. * It should fill screen. */ div.viewport { padding: 0px; position: absolute; left: 0px; right: 0px; top: 0px; bottom: 0px; overflow: hidden; } /* * The stage contains all of the elements that should * apppear on screen together. Usually, a frame * will have two stages - a previous viewpoint to * transition from, and the actual contents of the * current frame. Timed transitions might use three * stages - previous content, the content to automatically * transition away from, and the content for the "next" * frame after the transition. */ div.stage { position: absolute; left: 0px; top: 0px; width: 100vw; height: 100vh; padding: 0; margin: 0; overflow: hidden; } /* * Character positioning. */ img.pirogoeth { height: 100%; } .center-character { text-align: center; width: 100%; height: 100%; position: absolute; bottom: 0; left: 0; } .right-character { text-align: right; width: 100%; height: 100%; position: absolute; bottom: 0; left: 0; } .left-character { text-align: left; width: 100%; height: 100%; position: absolute; bottom: 0; left: 0; } /* * Scene overlays. */ .overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .screen-color-10 { background-color: rgba(0,0,0,0.1); } .screen-color-20 { background-color: rgba(0,0,0,0.2); } .screen-color-30 { background-color: rgba(0,0,0,0.3); } .screen-color-40 { background-color: rgba(0,0,0,0.4); } .screen-color-50 { background-color: rgba(0,0,0,0.5); } .screen-color-60 { background-color: rgba(0,0,0,0.6); } .screen-color-70 { background-color: rgba(0,0,0,0.7); } .screen-color-80 { background-color: rgba(0,0,0,0.8); } .screen-color-90 { background-color: rgba(0,0,0,0.9); } /* * Animations */ .slide-from-right { animation: slide-from-right 1s 1; -webkit-animation: slide-from-right 1s 1; } .fade-in { animation: fade-in 0.5s 1; -webkit-animation: fade-in 0.5s 1; } .fade-in-slow { animation: fade-in 5s 1; -webkit-animation: fade-in 5s 1; } .shake { animation: shake-it 0.1s 3 linear alternate; -webkit-animation: shake-it 0.1s 3 linear alternate; } /* * Traditional VN dialogue boxes. */ .sayscreen-border { /* * This should be customized to the theme of * the VN, and also probably to the individual * character that the dialogue is for. * * This default is black, semi-transparent, with * orange borders. This is what dialogue in the * Megatokyo Visual Novel is supposed to look like. */ background-color: rgba(0,0,0,0.75); border-radius: 2vh; border: solid; border-color: #ffc137; border-width: 0.5vh; } div.sayscreen-holder { position: absolute; bottom: 1%; left: 11.5%; width: 75%; height: 25%; padding: 0%; } div.sayscreen-character { /* This is whre the character name appears. */ padding-left: 0.7vh; padding-top: 0.3vh; color: #ff8400; font-size: 5vh; } div.sayscreen { height: 70%; } div.sayscreen-title { height: 20%; width: 25vh; margin-bottom: 0.4vh; } div.sayscreen-text { /* This is where the text shows up */ padding: 2vh; color: #FFFFFF; font-size: 5vh; } /* * Wordbubbles. * These are primarily for speech for the protagonist. */ div.wordbubble { color: #000; font-size: 5vh; width: 30%; text-align: center; bottom: 1%; left: 35%; position: absolute; background-color: #fff; border: 1vh solid #000; border-radius: 100%; } div.wordbubble-character { color: #000; font-size: 5vh; width: 30%; text-align: center; position: absolute; top: 30vh; left: 10vh; background-color: #fff; border: 1vh solid #000; border-radius: 100%; } div.wordbubble-text { position: absolute; left: 0; top: 0; width: 100%; height: 100%; } div.wordbubble-content { padding: 6vh; } /* * Wordboxes are the same as bubbles, * but formatted as boxes instead. */ div.wordbox { color: #000; font-size: 5vh; width: 30%; border: 1vh solid #000; background-color: #fff; text-align: center; bottom: 1%; left: 35%; position: absolute; border-radius: 1vh; } .wordbox-content { padding: 2vh; } /* * Animation keyframe definitions. */ @keyframes slide-from-right { 0% { left: 60%; opacity: 0.0; } 100% { left: 40%; opacity: 1.0; } } @-webkit-keyframes slide-from-right { 0% { left: 60%; opacity: 0.0; } 100% { left: 40%; opacity: 1.0; } } @keyframes fade-in { 0% { opacity: 0.0; } 100% { opacity: 1.0; } } @-webkit-keyframes fade-in { 0% { opacity: 0.0; } 100% { opacity: 1.0; } } @keyframes shake-it { 0% { top: -10vh; } 100% { top: 10vh; } } @-webkit-keyframes shake-it { 0% { top: -5vh; } 100% { top: 5vh; } } /* * Centered white text. * This can be used for title screens, * or for internal dialogue of the protagonist * to describe the scene. Use with a black or * otherwise dark background. */ .centered-white-text { position: absolute; font-size: 5vh; color: #fff; left: 0px; right: 0px; bottom: 2vh; text-align: center; padding: 10vh; padding-left: 30vh; padding-right: 30vh; line-height: 5vh; } .centered-white-text > a { color: #fff; } .centered-white-text.vertical-one-line { bottom: 47.55vh; padding: 0; } .centered-white-text.vertical-two-line { bottom: 45vh; padding: 0; } .centered-white-text.vertical-three-line { bottom: 42.5vh; padding: 0; } .centered-white-text.vertical-four-line { bottom: 40.0vh; padding: 0; } .centered-white-text.vertical-five-line { bottom: 37.5vh; padding: 0; } /* * These are the critical controls * for the VN and control how transition * elements are formatted and frames get * displayed. Don't mess with them unless you * know what you are doing. */ .frame > form { position: absolute; display: block; left: 0; top: 0; width: 100%; height: 100%; } .frame > form > button { position: absolute; display: block; left: 0; top: 0; width: 100%; height: 100%; opacity: 0.0; } .frame > a.framelink { position: absolute; display: block; left: 0; top: 0; width: 100%; height: 100%; opacity: 0.0; } audio { position: absolute; left: 0; top: 0; background-color: #fff; } #preload { position: absolute; left: 0; top: 0; width: 1; height 1; opacity: 0.0; } .frame { display: none; } :target { display: block; }