Skip to content

Instantly share code, notes, and snippets.

@ytnobody
Created June 18, 2013 03:46
Show Gist options
  • Save ytnobody/5802550 to your computer and use it in GitHub Desktop.
Save ytnobody/5802550 to your computer and use it in GitHub Desktop.
ytnobody flavored markdown2impress.pl - support image syntax

秒速ではないけれど、割と手っ取り早くDENYされたお話

![ytnobody][http://ytnobody.net/impress/hachiojipm-26/img/ytnobody_char.png]

hachioji.pm #26 - ytnobody

なんか、最近迷惑電話が多いなあ

そう思って、google先生に、発信元の電話番号について聞いてみた。

そして、みつけた。

電話番号に関する口コミをまとめたサイト

わりと有名どころだったらしい(知りませんでした)

思いついた!

ここの最新口コミから電話番号と口コミ情報をもってきて、形態素解析すれば、なーんとなく悪そうな電話番号のリストをつくれるのでは?

よし!

素敵で平和なテレッフォーンライフを送るために、ワイはやったる!

つくった

WWW::JPNumberCom

https://github.com/ytnobody/WWW-JPNumberCom

こいつを使って、解析結果をMySQLにためこむぞ!!

  • crontabで30分おきに最新の口コミを取得

  • 口コミを、Text::MeCabを使って解析

  • 解析結果と電話番号をひもづけてDBに格納。

DBに収めるために、ORM使っとくかー

Iroha

  • https://github.com/ytnobody/Iroha

  • 拙作の、どうしようもなく如何ともしがたいORM

  • Schema-less ORM (NOT TENGa)

  • お、俺の方が先だかんね!(未来を一年分くらい先取り)

コレジャナイ!

![iroha][http://ytnobody.net/impress/hachiojipm-26/img/iroha.jpg]

で、クローラーができました。

データをかき集めたのですよ!

こーんな塩梅。

![ytnobody][http://ytnobody.net/impress/hachiojipm-26/img/abuse_data.png]

クローラー稼働から4時間ほど経過。

突然のDENY!!!!

敗因

  • 面倒くさがってスロットリングしてなかった

  • 面倒くさがってrobots.txtを全力無視した

  • 面倒くさがって先方にコンタクト入れてなかった

  • 面倒くさがってUA偽装しなかった

エラー受け取るようにしてたので、すぐに対応

と言ってもcrontabエントリをコメントアウトしただけ

App-Shiroh

自分専用Twitter-BOTをつかって、Dを自分のアカウントに送る

https://github.com/ytnobody/App-Shiroh

まとめ

  • キラキラネームは、一年先をゆくネーミングセンスで!

  • 面倒も行きすぎるとろくな目に合わない

  • IPで制限かけられてもTorとかProxyとかつかうといいんじゃないかな!

  • エラー受けとるとはかどるし、Githubに色々あげとくとはかどる

おしまい

#!/usr/bin/env perl
use strict;
use Cwd;
use Getopt::Long;
use Data::Section::Simple qw( get_data_section );
use File::Path qw( make_path );
use File::Spec;
use Path::Class;
use Text::Markdown qw( markdown );
use Text::Xslate qw( mark_raw );
my %opts = (
width => 1200,
height => 800,
max_column => 5,
outputdir => getcwd(),
);
GetOptions(
'width=i' => \$opts{ width },
'height=i' => \$opts{ height },
'column=i' => \$opts{ max_column },
'outputdir=s' => \$opts{ outputdir },
);
my $SectionRe = qr{(.+[ \t]*\n[-=]+[ \t]*\n*(?:(?!.+[ \t]*\n[-=]+[ \t]*\n*)(?:.|\n))*)};
$opts{ outputdir } = File::Spec->canonpath( $opts{ outputdir } );
output_static_files( $opts{ outputdir } );
my $outputfile = 'index.html';
$outputfile = File::Spec->catfile( $opts{ outputdir }, $outputfile );
my $mdfile = $ARGV[0] or die;
my $content = parse_markdown( join '', file( $mdfile )->slurp );
my $index_html = get_data_section( 'index.html' );
my $tx = Text::Xslate->new;
my $output = $tx->render_string( $index_html, {
content => mark_raw( $content ),
} );
my $outputfile_fh = file( $outputfile )->open( 'w' ) or die $!;
print $outputfile_fh $output;
close $outputfile_fh;
sub parse_markdown {
my $md = shift;
my $content;
my @sections;
while ( $md =~ /$SectionRe/g ) {
push @sections, $1;
}
my $bored = 1;
my $x = 0;
my $y = 0;
my $current_column = 0;
for my $section ( @sections ) {
$section =~ s/\!\[(.+?)\]\[(.+?)\]/<p><img src="$2" title="$1"><\/p>/g;
my %attrs;
$attrs{ class } = 'step'; # default
while ( $section =~ /^<!\-{2,}\s*([^\s]+)\s*\-{2,}>/gm ) {
my $attr = $1;
if ( $attr =~ /(.+)="?([^"]+)?"?/ ) {
$attrs{ $1 } = $attrs{ $1 } ? [ $attrs{ $1 }, $2 ] : $2;
}
}
if ( !defined $attrs{ id } && $x == 0 && $y == 0 ) {
$attrs{ id } = 'title'; # for first presentation
}
unless ( defined $attrs{ 'data-x' } ) {
$attrs{ 'data-x' } = $x;
$x += $opts{ width };
}
unless ( defined $attrs{ 'data-y' } ) {
$attrs{ 'data-y' } = $y;
$current_column++;
if ( $current_column >= $opts{ max_column } ) {
$x = 0;
$y += $opts{ height };
$current_column = 0;
}
}
my $attrs = join ' ', map {
if ( ref $attrs{ $_ } eq 'ARRAY' ) {
sprintf '%s="%s"', $_, join ' ', @{ $attrs{$_} };
}
else {
sprintf '%s="%s"', $_, $attrs{$_};
}
} keys %attrs;
$content .= sprintf <<'HTML', $attrs, markdown( $section );
<div %s>
%s
</div>
HTML
;
$bored = undef;
}
return $content;
}
sub output_static_files {
my $dir = shift;
my $impress_js = get_data_section( 'impress.js' );
my $impress_demo_css = get_data_section( 'impress.css' );
my $jsdir = File::Spec->catfile( $dir, 'js' );
unless ( -d $jsdir ) {
make_path( $jsdir );
}
my $cssdir = File::Spec->catfile( $dir, 'css' );
unless ( -d $cssdir ) {
make_path( $cssdir );
}
my $jsfile = file( File::Spec->catfile( $jsdir, 'impress.js' ) );
unless ( -f $jsfile ) {
my $jsfh = $jsfile->openw;
print $jsfh $impress_js;
$jsfh->close;
}
my $cssfile = file( File::Spec->catfile( $cssdir, 'impress.css' ) );
unless ( -f $cssfile ) {
my $cssfh = $cssfile->openw;
print $cssfh $impress_demo_css;
$cssfh->close;
}
}
__DATA__
@@ index.html
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title><: $title :></title>
<link href="http://fonts.googleapis.com/css?family=Open+Sans:regular,semibold,italic,italicsemibold|PT+Sans:400,700,400italic,700italic|PT+Serif:400,700,400italic,700italic" rel="stylesheet" />
<link href="css/impress.css" rel="stylesheet" />
</head>
<body>
<div id="impress" class="impress-not-supported">
<div class="fallback-message">
<p>Your browser <b>doesn't support the features required</b> by impress.js, so you are presented with a simplified version of this presentation.</p>
<p>For the best experience please use the latest <b>Chrome</b> or <b>Safari</b> browser. Firefox 10 (to be released soon) will also handle it.</p>
</div>
<: $content :>
<div id="overview" class="step" data-x="3000" data-y="1500" data-scale="10">
</div>
</div>
<div class="hint">
<p>Use a spacebar or arrow keys to navigate</p>
</div>
<script>
if ("ontouchstart" in document.documentElement) {
document.querySelector(".hint").innerHTML = "<p>Tap on the left or right to navigate</p>";
}
</script>
<script src="js/impress.js"></script>
</body>
</html>
@@ impress.js
/**
* impress.js
*
* impress.js is a presentation tool based on the power of CSS3 transforms and transitions
* in modern browsers and inspired by the idea behind prezi.com.
*
* MIT Licensed.
*
* Copyright 2011 Bartek Szopka (@bartaz)
*/
(function ( document, window ) {
'use strict';
// HELPER FUNCTIONS
var pfx = (function () {
var style = document.createElement('dummy').style,
prefixes = 'Webkit Moz O ms Khtml'.split(' '),
memory = {};
return function ( prop ) {
if ( typeof memory[ prop ] === "undefined" ) {
var ucProp = prop.charAt(0).toUpperCase() + prop.substr(1),
props = (prop + ' ' + prefixes.join(ucProp + ' ') + ucProp).split(' ');
memory[ prop ] = null;
for ( var i in props ) {
if ( style[ props[i] ] !== undefined ) {
memory[ prop ] = props[i];
break;
}
}
}
return memory[ prop ];
}
})();
var arrayify = function ( a ) {
return [].slice.call( a );
};
var css = function ( el, props ) {
var key, pkey;
for ( key in props ) {
if ( props.hasOwnProperty(key) ) {
pkey = pfx(key);
if ( pkey != null ) {
el.style[pkey] = props[key];
}
}
}
return el;
}
var byId = function ( id ) {
return document.getElementById(id);
}
var $ = function ( selector, context ) {
context = context || document;
return context.querySelector(selector);
};
var $$ = function ( selector, context ) {
context = context || document;
return arrayify( context.querySelectorAll(selector) );
};
var translate = function ( t ) {
return " translate3d(" + t.x + "px," + t.y + "px," + t.z + "px) ";
};
var rotate = function ( r, revert ) {
var rX = " rotateX(" + r.x + "deg) ",
rY = " rotateY(" + r.y + "deg) ",
rZ = " rotateZ(" + r.z + "deg) ";
return revert ? rZ+rY+rX : rX+rY+rZ;
};
var scale = function ( s ) {
return " scale(" + s + ") ";
}
// CHECK SUPPORT
var ua = navigator.userAgent.toLowerCase();
var impressSupported = ( pfx("perspective") != null ) &&
( ua.search(/(iphone)|(ipod)|(ipad)|(android)/) == -1 );
// DOM ELEMENTS
var impress = byId("impress");
if (!impressSupported) {
impress.className = "impress-not-supported";
return;
} else {
impress.className = "";
}
var canvas = document.createElement("div");
canvas.className = "canvas";
arrayify( impress.childNodes ).forEach(function ( el ) {
canvas.appendChild( el );
});
impress.appendChild(canvas);
var steps = $$(".step", impress);
// SETUP
// set initial values and defaults
document.documentElement.style.height = "100%";
css(document.body, {
height: "100%",
overflow: "hidden"
});
var props = {
position: "absolute",
transformOrigin: "top left",
transition: "all 0s ease-in-out",
transformStyle: "preserve-3d"
}
css(impress, props);
css(impress, {
top: "50%",
left: "50%",
perspective: "1000px"
});
css(canvas, props);
var current = {
translate: { x: 0, y: 0, z: 0 },
rotate: { x: 0, y: 0, z: 0 },
scale: 1
};
steps.forEach(function ( el, idx ) {
var data = el.dataset,
step = {
translate: {
x: data.x || 0,
y: data.y || 0,
z: data.z || 0
},
rotate: {
x: data.rotateX || 0,
y: data.rotateY || 0,
z: data.rotateZ || data.rotate || 0
},
scale: data.scale || 1
};
el.stepData = step;
if ( !el.id ) {
el.id = "step-" + (idx + 1);
}
css(el, {
position: "absolute",
transform: "translate(-50%,-50%)" +
translate(step.translate) +
rotate(step.rotate) +
scale(step.scale),
transformStyle: "preserve-3d"
});
});
// making given step active
var active = null;
var hashTimeout = null;
var select = function ( el ) {
if ( !el || !el.stepData || el == active) {
// selected element is not defined as step or is already active
return false;
}
// Sometimes it's possible to trigger focus on first link with some keyboard action.
// Browser in such a case tries to scroll the page to make this element visible
// (even that body overflow is set to hidden) and it breaks our careful positioning.
//
// So, as a lousy (and lazy) workaround we will make the page scroll back to the top
// whenever slide is selected
//
// If you are reading this and know any better way to handle it, I'll be glad to hear about it!
window.scrollTo(0, 0);
var step = el.stepData;
if ( active ) {
active.classList.remove("active");
}
el.classList.add("active");
impress.className = "step-" + el.id;
// `#/step-id` is used instead of `#step-id` to prevent default browser
// scrolling to element in hash
//
// and it has to be set after animation finishes, because in chrome it
// causes transtion being laggy
window.clearTimeout( hashTimeout );
hashTimeout = window.setTimeout(function () {
window.location.hash = "#/" + el.id;
}, 1000);
var target = {
rotate: {
x: -parseInt(step.rotate.x, 10),
y: -parseInt(step.rotate.y, 10),
z: -parseInt(step.rotate.z, 10)
},
translate: {
x: -step.translate.x,
y: -step.translate.y,
z: -step.translate.z
},
scale: 1 / parseFloat(step.scale)
};
// check if the transition is zooming in or not
var zoomin = target.scale >= current.scale;
// if presentation starts (nothing is active yet)
// don't animate (set duration to 0)
var duration = (active) ? "600ms" : "0";
css(impress, {
// to keep the perspective look similar for different scales
// we need to 'scale' the perspective, too
perspective: step.scale * 1000 + "px",
transform: scale(target.scale),
transitionDuration: duration,
transitionDelay: (zoomin ? "500ms" : "0ms")
});
css(canvas, {
transform: rotate(target.rotate, true) + translate(target.translate),
transitionDuration: duration,
transitionDelay: (zoomin ? "0ms" : "500ms")
});
current = target;
active = el;
return el;
};
var selectPrev = function () {
var prev = steps.indexOf( active ) - 1;
prev = prev >= 0 ? steps[ prev ] : steps[ steps.length-1 ];
return select(prev);
};
var selectNext = function () {
var next = steps.indexOf( active ) + 1;
next = next < steps.length ? steps[ next ] : steps[ 0 ];
return select(next);
};
// EVENTS
document.addEventListener("keydown", function ( event ) {
if ( event.keyCode == 9 || ( event.keyCode >= 32 && event.keyCode <= 34 ) || (event.keyCode >= 37 && event.keyCode <= 40) ) {
switch( event.keyCode ) {
case 33: ; // pg up
case 37: ; // left
case 38: // up
selectPrev();
break;
case 9: ; // tab
case 32: ; // space
case 34: ; // pg down
case 39: ; // right
case 40: // down
selectNext();
break;
}
event.preventDefault();
}
}, false);
document.addEventListener("click", function ( event ) {
// event delegation with "bubbling"
// check if event target (or any of its parents is a link or a step)
var target = event.target;
while ( (target.tagName != "A") &&
(!target.stepData) &&
(target != document.body) ) {
target = target.parentNode;
}
if ( target.tagName == "A" ) {
var href = target.getAttribute("href");
// if it's a link to presentation step, target this step
if ( href && href[0] == '#' ) {
target = byId( href.slice(1) );
}
}
if ( select(target) ) {
event.preventDefault();
}
}, false);
var getElementFromUrl = function () {
// get id from url # by removing `#` or `#/` from the beginning,
// so both "fallback" `#slide-id` and "enhanced" `#/slide-id` will work
return byId( window.location.hash.replace(/^#\/?/,"") );
}
window.addEventListener("hashchange", function () {
select( getElementFromUrl() );
}, false);
// START
// by selecting step defined in url or first step of the presentation
select(getElementFromUrl() || steps[0]);
})(document, window);
@@ impress.css
/**
* This is a stylesheet for a demo presentation for impress.js
*
* It is not meant to be a part of impress.js and is not required by impress.js.
* I expect that anyone creating a presentation for impress.js would create their own
* set of styles.
*/
/* http://meyerweb.com/eric/tools/css/reset/
v2.0 | 20110126
License: none (public domain)
*/
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;
background: rgb(215, 215, 215);
background: -webkit-gradient(radial, 50% 50%, 0, 50% 50%, 500, from(rgb(240, 240, 240)), to(rgb(190, 190, 190)));
background: -webkit-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
background: -moz-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
background: -o-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
background: radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
-webkit-font-smoothing: antialiased;
}
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 {
background: rgba(255,255,255,1);
text-shadow: -1px -1px 2px rgba(100,100,100,0.5);
}
/* enable clicking on elements 'hiding' behind body in 3D */
body { pointer-events: none; }
#impress { pointer-events: auto; }
/* COMMON STEP STYLES */
.step {
width: 900px;
padding: 40px;
-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: 30px;
line-height: 1.5;
}
/* fade out inactive slides */
.step {
-webkit-transition: opacity 1s;
-moz-transition: opacity 1s;
-ms-transition: opacity 1s;
-o-transition: opacity 1s;
transition: opacity 1s;
}
.step:not(.active) {
opacity: 0.3;
}
.step h1 {
font-size: 80px;
line-height: 1.2em;
padding-bottom: 20px;
}
.step h2 {
font-size: 60px;
line-height: 1.2em;
padding-bottom: 20px;
}
.step h3 {
font-size: 40px;
line-height: 1.2em;
padding-bottom: 20px;
}
.step ul {
list-style: circle;
padding-left: 30px;
}
.step ol {
list-style: decimal;
padding-left: 30px;
}
.step pre {
overflow: auto;
white-space: pre-wrap;
word-wrap: break-word;
background-color: #ffffff;
color: #000000;
padding: 5px;
border-radius: 10px;
margin: 15px 0;
}
.step code {
font-family: monospace;
font-size: 1em;
line-height: 1.2;
}
/* STEP SPECIFIC STYLES */
/* hint on the first slide */
.hint {
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;
opacity: 0;
-webkit-transform: translateY(400px);
-moz-transform: translateY(400px);
-ms-transform: translateY(400px);
-o-transform: translateY(400px);
transform: translateY(400px);
-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;
}
.step-bored + .hint {
opacity: 1;
-webkit-transition: opacity 1s 5s, -webkit-transform 0.5s;
-moz-transition: opacity 1s 5s, -moz-transform 0.5s;
-ms-transition: opacity 1s 5s, -ms-transform 0.5s;
-o-transition: opacity 1s 5s, -o-transform 0.5s;
transition: opacity 1s 5s, transform 0.5s;
-webkit-transform: translateY(0px);
-moz-transform: translateY(0px);
-ms-transform: translateY(0px);
-o-transform: translateY(0px);
transform: translateY(0px);
}
/* impress.js title */
#title {
padding: 0;
}
#title .try {
font-size: 64px;
position: absolute;
top: -0.5em;
left: 1.5em;
-webkit-transform: translateZ(20px);
-moz-transform: translateZ(20px);
-ms-transform: translateZ(20px);
-o-transform: translateZ(20px);
transform: translateZ(20px);
}
#title h1 {
font-size: 90px;
-webkit-transform: translateZ(50px);
-moz-transform: translateZ(50px);
-ms-transform: translateZ(50px);
-o-transform: translateZ(50px);
transform: translateZ(50px);
}
#title .footnote {
font-size: 32px;
}
/* big thoughts */
#big {
width: 600px;
text-align: center;
font-size: 60px;
line-height: 1;
}
#big b {
display: block;
font-size: 250px;
line-height: 250px;
}
#big .thoughts {
font-size: 90px;
line-height: 150px;
}
/* tiny ideas */
#tiny {
width: 500px;
text-align: center;
}
#ing {
width: 500px;
}
#ing b {
display: inline-block;
-webkit-transition: 0.5s;
-moz-transition: 0.5s;
-ms-transition: 0.5s;
-o-transition: 0.5s;
transition: 0.5s;
}
#ing.active .positioning {
-webkit-transform: translateY(-10px);
-moz-transform: translateY(-10px);
-ms-transform: translateY(-10px);
-o-transform: translateY(-10px);
transform: translateY(-10px);
-webkit-transition-delay: 1.5s;
-moz-transition-delay: 1.5s;
-ms-transition-delay: 1.5s;
-o-transition-delay: 1.5s;
transition-delay: 1.5s;
}
#ing.active .rotating {
-webkit-transform: rotate(-10deg);
-moz-transform: rotate(-10deg);
-ms-transform: rotate(-10deg);
-o-transform: rotate(-10deg);
transform: rotate(-10deg);
-webkit-transition-delay: 1.75s;
-moz-transition-delay: 1.75s;
-ms-transition-delay: 1.75s;
-o-transition-delay: 1.75s;
transition-delay: 1.75s;
}
#ing.active .scaling {
-webkit-transform: scale(0.7);
-moz-transform: scale(0.7);
-ms-transform: scale(0.7);
-o-transform: scale(0.7);
transform: scale(0.7);
-webkit-transition-delay: 2s;
-moz-transition-delay: 2s;
-ms-transition-delay: 2s;
-o-transition-delay: 2s;
transition-delay: 2s;
}
/* imagination */
#imagination {
width: 600px;
}
#imagination .imagination {
font-size: 78px;
}
/* it's in 3D */
#its-in-3d p {
-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d; /* Y U need this Firefox?! */
-ms-transform-style: preserve-3d;
-o-transform-style: preserve-3d;
transform-style: preserve-3d;
}
#its-in-3d span,
#its-in-3d b {
display: inline-block;
-webkit-transform: translateZ(40px);
-moz-transform: translateZ(40px);
-ms-transform: translateZ(40px);
-o-transform: translateZ(40px);
transform: translateZ(40px);
-webkit-transition: 0.5s;
-moz-transition: 0.5s;
-ms-transition: 0.5s;
-o-transition: 0.5s;
transition: 0.5s;
}
#its-in-3d .have {
-webkit-transform: translateZ(-40px);
-moz-transform: translateZ(-40px);
-ms-transform: translateZ(-40px);
-o-transform: translateZ(-40px);
transform: translateZ(-40px);
}
#its-in-3d .you {
-webkit-transform: translateZ(20px);
-moz-transform: translateZ(20px);
-ms-transform: translateZ(20px);
-o-transform: translateZ(20px);
transform: translateZ(20px);
}
#its-in-3d .noticed {
-webkit-transform: translateZ(-40px);
-moz-transform: translateZ(-40px);
-ms-transform: translateZ(-40px);
-o-transform: translateZ(-40px);
transform: translateZ(-40px);
}
#its-in-3d .its {
-webkit-transform: translateZ(60px);
-moz-transform: translateZ(60px);
-ms-transform: translateZ(60px);
-o-transform: translateZ(60px);
transform: translateZ(60px);
}
#its-in-3d .in {
-webkit-transform: translateZ(-10px);
-moz-transform: translateZ(-10px);
-ms-transform: translateZ(-10px);
-o-transform: translateZ(-10px);
transform: translateZ(-10px);
}
#its-in-3d .footnote {
font-size: 32px;
-webkit-transform: translateZ(-10px);
-moz-transform: translateZ(-10px);
-ms-transform: translateZ(-10px);
-o-transform: translateZ(-10px);
transform: translateZ(-10px);
}
#its-in-3d.active span,
#its-in-3d.active b {
-webkit-transform: translateZ(0px);
-moz-transform: translateZ(0px);
-ms-transform: translateZ(0px);
-o-transform: translateZ(0px);
transform: translateZ(0px);
-webkit-transition-delay: 1s;
-moz-transition-delay: 1s;
-ms-transition-delay: 1s;
-o-transition-delay: 1s;
transition-delay: 1s;
}
/* overview step */
#overview {
z-index: -1;
padding: 0;
}
/* on overview step everything is visible */
#impress.step-overview .step {
opacity: 1;
cursor: pointer;
}
/*
* SLIDE STEP STYLES
*
* inspired by: http://html5slides.googlecode.com/svn/trunk/styles.css
*
* ;)
*/
.slide {
display: block;
width: 900px;
height: 700px;
padding: 40px 60px;
border-radius: 10px;
background-color: white;
box-shadow: 0 2px 6px rgba(0, 0, 0, .1);
border: 1px solid rgba(0, 0, 0, .3);
font-family: 'Open Sans', Arial, sans-serif;
color: rgb(102, 102, 102);
text-shadow: 0 2px 2px rgba(0, 0, 0, .1);
font-size: 30px;
line-height: 36px;
letter-spacing: -1px;
}
.slide q {
display: block;
font-size: 50px;
line-height: 72px;
margin-top: 100px;
}
.slide q strong {
white-space: nowrap;
}
/* IMPRESS NOT SUPPORTED STYLES */
.fallback-message {
font-family: sans-serif;
line-height: 1.3;
display: none;
width: 780px;
padding: 10px 10px 0;
margin: 20px auto;
border-radius: 10px;
border: 1px solid #E4C652;
background: #EEDC94;
}
.fallback-message p {
margin-bottom: 10px;
}
.impress-not-supported .step {
position: relative;
opacity: 1;
margin: 20px auto;
}
.impress-not-supported .fallback-message {
display: block;
}
__END__
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment