aboutsummaryrefslogtreecommitdiffstats
path: root/examples/tg16/web/stream.gathering.org/ng
diff options
context:
space:
mode:
Diffstat (limited to 'examples/tg16/web/stream.gathering.org/ng')
-rw-r--r--examples/tg16/web/stream.gathering.org/ng/README.md5
-rw-r--r--examples/tg16/web/stream.gathering.org/ng/index.html410
-rw-r--r--examples/tg16/web/stream.gathering.org/ng/media-queries.css1
-rw-r--r--examples/tg16/web/stream.gathering.org/ng/reset.css1
-rw-r--r--examples/tg16/web/stream.gathering.org/ng/style.css1
5 files changed, 418 insertions, 0 deletions
diff --git a/examples/tg16/web/stream.gathering.org/ng/README.md b/examples/tg16/web/stream.gathering.org/ng/README.md
new file mode 100644
index 0000000..379dcb5
--- /dev/null
+++ b/examples/tg16/web/stream.gathering.org/ng/README.md
@@ -0,0 +1,5 @@
+# Copying
+
+The content of this directory is a pure copy-paste from Steinar H.
+Gunderson's site 'stream.sesse.net'. It was used for testing purposes.
+Copyrights/license for the respective owners might apply. \ No newline at end of file
diff --git a/examples/tg16/web/stream.gathering.org/ng/index.html b/examples/tg16/web/stream.gathering.org/ng/index.html
new file mode 100644
index 0000000..ca523aa
--- /dev/null
+++ b/examples/tg16/web/stream.gathering.org/ng/index.html
@@ -0,0 +1,410 @@
+<html>
+ <head>
+ <title>Steinar-style Videostream</title>
+ <link rel="stylesheet" href="reset.css" type="text/css" media="screen"/>
+ <link rel="stylesheet" href="style.css" type="text/css" media="screen"/>
+ <link rel="stylesheet" href="media-queries.css" type="text/css" media="screen"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ </head>
+<body>
+ <style>
+ #videowrapper {
+ margin-top: 0.5em;
+ margin-left: auto;
+ margin-right: auto;
+ position: relative;
+ }
+ #video {
+ max-height: 100%;
+ max-width: 100%;
+ width: auto;
+ border: 1px solid black;
+ }
+ #loader {
+ width: 100%;
+ display: none;
+ background: black;
+ border: 1px solid black;
+ }
+ #castposter {
+ width: 100%;
+ display: none;
+ background: black;
+ border: 1px solid black;
+ }
+ #castposteri {
+ margin-top: 0;
+ margin-bottom: 0;
+ position: relative;
+ }
+ #castposteri:after {
+ padding-top: 56.25%; /* 16:9 aspect */
+ display: block;
+ content: '';
+ }
+ #castposterii {
+ position: absolute; top: 0; bottom: 0; left: 0; right: 0;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ }
+ #castposteriii {
+ color: white;
+ }
+ #castposteriii p { margin-bottom: 0; }
+ #streamchoice {
+ margin-bottom: 0;
+ }
+ </style>
+
+<p id="streamchoice"></p>
+
+<div id="videowrapper">
+ <canvas id="loader"></canvas>
+ <div id="castposter"><div id="castposteri"><div id="castposterii"><div id="castposteriii"><p id="nowcasting">Now casting to <strong id="casttarget"></strong></p><p><a href="javascript:stop_casting();">Stop casting</a></p></div></div></div></div>
+ <video controls="controls" id="video" preload="none">
+ <source src="http://cubemap.tg16.gathering.org/event.mp4" type="video/mp4">
+ </video>
+</div>
+
+<p style="margin-top: 1em; margin-bottom: 0">For use with a non-web player (e.g. VLC), use
+ <a id="vlcurl"></a> (MP4) or <a id="vlchlsurl"></a> (HLS).
+ Also <a href="https://chrome.google.com/webstore/detail/google-cast/boadgeojelhgndaghljhdicfkmllpafd" id="casturl">Google Cast</a> enabled.</p>
+
+<script type="text/javascript" src="https://www.gstatic.com/cv/js/sender/v1/cast_sender.js"></script>
+<script>
+<!--
+
+// CONFIG
+
+var global_title = 'Scenesat live stream';
+var enable_loader = false;
+var streams = [
+ {
+ name: "720p (2.0 Mbit/sec)",
+ url: "http://cubemap.tg16.gathering.org/event.mp4",
+ hlsurl: "http://stream.tg16.gathering.org/hls/event.m3u8",
+ width: 1280,
+ height: 720
+ },
+];
+
+// GLOBALS
+
+var video = document.getElementById('video');
+var loader = document.getElementById('loader');
+var castposter = document.getElementById('castposter');
+var use_hls;
+
+// LOADER PICTURE
+
+// C64 font. Yes, mixing up Amiga and C64 is a sin, I know.
+var text = [
+ ' xx xxxx xx xxxx xxxx xx xx xxxx ',
+ ' xx xx xx xxxx xx xx xx xxx xx xx xx ',
+ ' xx xx xx xx xx xx xx xx xxxxxx xx ',
+ ' xx xx xx xxxxxx xx xx xx xxxxxx xx xxx ',
+ ' xx xx xx xx xx xx xx xx xx xxx xx xx ',
+ ' xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ',
+ ' xxxxxx xxxx xx xx xxxx xxxx xx xx xxxx xx xx xx '
+];
+
+function raster() {
+ var ctx = loader.getContext("2d");
+ var width = 352; // overscan
+ var height = 288; // overscan
+ var border_width = 18; // really 16
+ var border_height = 24; // really 16
+ var scalefac_w = loader.width/width;
+ var scalefac_h = loader.height/height;
+
+ for (var y = 0; y < height; ++y) {
+ var r = Math.round(Math.random() * 16).toString(16);
+ var g = Math.round(Math.random() * 16).toString(16);
+ var b = Math.round(Math.random() * 16).toString(16);
+ ctx.fillStyle = '#' + r + r + g + g + b + b;
+
+ var start_y = Math.round(y * scalefac_h);
+ var next_y = Math.round((y + 1) * scalefac_h);
+ if (y < border_height || y >= height-border_height) {
+ ctx.fillRect(0, start_y, loader.width, next_y - start_y);
+ } else {
+ ctx.fillRect(0, start_y, border_width * scalefac_w, next_y - start_y);
+ ctx.fillRect((width - border_width) * scalefac_w, start_y, border_width * scalefac_w, next_y - start_y);
+ }
+ }
+
+ // Use the same scalefactor to get square pixels despite the changed aspect.
+ var scalefac_ch = Math.round(scalefac_h);
+ if (scalefac_ch < 1) scalefac_ch = 1;
+ var offset_y = Math.round(loader.height / 2 - text.length * scalefac_ch / 2);
+ var offset_x = Math.round(loader.width / 2 - text[0].length * scalefac_ch / 2);
+
+ ctx.fillStyle = '#ffffff';
+ for (var line = 0; line < text.length; ++line) {
+ var start_y = Math.round(line * scalefac_ch) + offset_y;
+ for (var ch = 0; ch < text[line].length; ++ch) {
+ if (text[line].substr(ch, 1) === ' ') {
+ continue;
+ }
+
+ var start_x = Math.round(ch * scalefac_ch) + offset_x;
+ ctx.fillRect(start_x, start_y, scalefac_ch, scalefac_ch);
+ }
+ }
+}
+
+var loader_interval = null;
+
+function start_loader() {
+ if (!enable_loader) return;
+
+ if (video.readyState === 4) {
+ // No need to show a loader screen. This can happen because we call start_loader()
+ // on the 'play' event, but we could already have enough buffering (especially on
+ // mobile, where the play event is delayed), so we'd never get the 'canplay' event.
+ console.log("Not starting loader screen, already enough to play");
+ return;
+ }
+
+ console.log("STARTING LOADER SCREEN");
+ var ctx = loader.getContext("2d");
+ ctx.clearRect(0, 0, loader.width, loader.height);
+ loader_interval = setInterval(raster, 1000/20); // 20 fps ought to be enough for anyone
+
+ loader.style.display = 'inline';
+ video.style.display = 'none';
+ castposter.style.display = 'none';
+}
+
+function stop_loader() {
+ if (!enable_loader) return;
+
+ console.log("STOPPING LOADER SCREEN");
+ clearInterval(loader_interval);
+
+ if (castposter.style.display !== 'block') {
+ loader.style.display = 'none';
+ video.style.display = 'inline';
+ castposter.style.display = 'none';
+ }
+}
+
+// GOOGLE CAST
+
+var current_media;
+var session;
+
+function show_castposter() {
+ stop_loader();
+ castposter.style.display = 'block';
+ loader.style.display = 'none';
+ video.style.display = 'none';
+}
+
+function hide_castposter() {
+ castposter.style.display = 'none';
+ loader.style.display = 'none';
+ video.style.display = 'inline';
+}
+
+function stop_casting() {
+ hide_castposter();
+ if (current_media) {
+ var media = current_media;
+ current_media = null;
+ media.stop();
+ }
+ if (session) {
+ session.stop();
+ session = null;
+ }
+}
+
+function cast_current_video() {
+ if (session === undefined || selected_stream === undefined) {
+ return;
+ }
+ var title = streams[selected_stream].name;
+ var url = streams[selected_stream].url;
+ document.getElementById('casttarget').textContent = session.receiver.friendlyName;
+ show_castposter();
+ video.pause();
+ // If we are already casting this, do nothing.
+ if (current_media && current_media.media.contentId === url) {
+ console.log("Already casting " + url + " to " + session.receiver.friendlyName + " (" + current_media.playerState + ")");
+ return;
+ }
+ if (current_media) {
+ current_media = null; // Signal to on_media_status_update.
+ }
+ var media_info = new chrome.cast.media.MediaInfo(url, "video/mp4");
+ media_info.metadata = new chrome.cast.media.GenericMediaMetadata();
+ media_info.metadata.title = global_title; // + ': ' + title;
+ var request = new chrome.cast.media.LoadRequest(media_info);
+ session.loadMedia(request,
+ on_media_discovered.bind(this, 'loadMedia'),
+ on_media_error);
+}
+
+function on_media_status_update(active) {
+ console.log("media status update: " + active);
+ if (current_media !== null && !active) { // If current_media is null, we intended to stop it, so don't bother.
+ console.log("Unexpected end, quitting.");
+ stop_casting();
+ }
+}
+
+function on_media_discovered(how, media) {
+ console.log("media discovered, how: " + how);
+ console.log(media);
+ current_media = media;
+ cast_current_video();
+ media.addUpdateListener(on_media_status_update);
+}
+
+function on_media_error(e) {
+ console.log("media error:");
+ console.log(e);
+}
+
+function on_session_status_update(active) {
+ console.log("session status update: " + active);
+ if (!active) {
+ stop_casting();
+ }
+}
+
+function session_listener(e) {
+ session = e;
+ if (session.media.length != 0) {
+ on_media_discovered('onRequestSessionSuccess', session.media[0]);
+ }
+ session.addUpdateListener(on_session_status_update);
+ cast_current_video();
+}
+
+function receiver_listener(e) {
+// console.log("receiver status: " + e);
+}
+
+function on_cast_init_success() {
+ document.getElementById('casturl').href = "javascript:chrome.cast.requestSession(session_listener)";
+}
+
+function on_cast_init_error() {
+ console.log("google cast init error");
+}
+
+var initialize_cast_api = function() {
+ var session_request = new chrome.cast.SessionRequest(
+ chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID);
+ var api_config = new chrome.cast.ApiConfig(
+ session_request,
+ session_listener,
+ receiver_listener);
+ chrome.cast.initialize(api_config, on_cast_init_success, on_cast_init_error);
+};
+
+window['__onGCastApiAvailable'] = function(loaded, error_info) {
+ if (loaded) {
+ initialize_cast_api();
+ } else {
+ console.log(error_info);
+ }
+}
+
+// ACTUAL VIDEO STUFF
+
+if (navigator.userAgent.match(/iPad|iPhone|iPod/)) {
+ // iOS claims to support video/mp4, but it doesn't work for these streams.
+ // They play the HLS fine, though.
+ use_hls = true;
+} else if (navigator.userAgent.match(/Safari/) && !navigator.userAgent.match(/Chrome/)) {
+ // Same with Safari (on OS X; not on Windows, but who cares about Safari on Windows).
+ use_hls = true;
+} else if (video.canPlayType('video/mp4') === '' && video.canPlayType('application/vnd.apple.mpegURL') !== '') {
+ // Explicitly no MP4 support, but HLS support.
+ use_hls = true;
+} else {
+ // Default to the normal stream (less latency, less muxer overhead).
+ use_hls = false;
+}
+
+var selected_stream;
+
+function update_stream_list() {
+ var stream_html = "";
+ for (var i = 0; i < streams.length; ++i) {
+ if (i != 0) {
+ stream_html += " | ";
+ }
+ if (i == selected_stream) {
+ stream_html += "<strong>" + streams[i].name + "</strong>";
+ } else {
+ stream_html += "<a href=\"javascript:select_stream(" + i + ")\">" + streams[i].name + "</a>";
+ }
+ }
+ document.getElementById('streamchoice').innerHTML = stream_html;
+}
+function select_stream(s) {
+ selected_stream = s;
+ update_stream_list();
+
+ var vlcurl = document.getElementById('vlcurl');
+ vlcurl.href = streams[s].url;
+ vlcurl.innerHTML = streams[s].url;
+
+ var vlchlsurl = document.getElementById('vlchlsurl');
+ vlchlsurl.href = streams[s].hlsurl;
+ vlchlsurl.innerHTML = streams[s].hlsurl;
+
+ var videowrapper = document.getElementById('videowrapper');
+ var video = document.getElementById('video');
+ var url = streams[s].url;
+ if (use_hls && streams[s].hlsurl) {
+ url = streams[s].hlsurl;
+ }
+ loader.width = streams[s].width;
+ loader.height = streams[s].height;
+ loader.style.maxWidth = streams[s].width + "px";
+ loader.style.maxHeight = streams[s].height + "px";
+ castposter.style.maxWidth = streams[s].width + "px";
+ castposter.style.maxHeight = streams[s].height + "px";
+ videowrapper.style.maxWidth = streams[s].width + "px";
+ videowrapper.style.maxHeight = streams[s].height + "px";
+
+ if (session) {
+ cast_current_video();
+ } else {
+ video.src = url;
+ video.load();
+ video.play();
+ }
+}
+
+function setup_listeners() {
+ video.addEventListener('pause', on_pause);
+ video.addEventListener('play', start_loader);
+ video.addEventListener('canplay', stop_loader);
+ video.addEventListener('error', stop_loader);
+}
+
+var on_pause;
+on_pause = function(e) {
+ // The only real way to make it reload without buffering up
+ // the current content.
+ video.outerHTML = video.outerHTML;
+ video = document.getElementById('video');
+ setup_listeners(); // Since we have a new object.
+
+ stop_loader();
+};
+
+setup_listeners();
+select_stream(0);
+
+//alert("MP4: " + video.canPlayType('video/mp4') + "; HLS: " + video.canPlayType('application/vnd.apple.mpegURL'));
+-->
+</script>
+
diff --git a/examples/tg16/web/stream.gathering.org/ng/media-queries.css b/examples/tg16/web/stream.gathering.org/ng/media-queries.css
new file mode 100644
index 0000000..057b601
--- /dev/null
+++ b/examples/tg16/web/stream.gathering.org/ng/media-queries.css
@@ -0,0 +1 @@
+@media only screen and (min-width: 768px) and (max-width: 919px) {.container{width:728px;}#primary-content,.primary{width:728px;float:none;}#sidebar,.timeslot-thumb,#sponsors-full{display:none;}.widget_search #s{width:146px;}#talks,.the-talk{width:638px!important;}.talk-image{width:100px;}.talk-info{width:508px!important;}#talks-pager{padding:20px 0 25px!important;}#speakers-full .speaker:nth-child(3n){margin-right:20px;}.timeslot-desc,.timeslot-content{width:420px;}}@media only screen and (max-width: 767px) {#top .location,#top .identity{width:280px;}#navigation #primarymenu{display:none;}#navigation select.select-menu,#navigation span.select{display:block;}.container,#primary-content,.primary{width:280px;}#sidebar,#talks-full,#sponsors-full,.timeslot-thumb{display:none;}.location h2 span{line-height:26px;}.timeslot-desc{float:none;}.timeslot-desc,.timeslot-content{width:220px;}#footer p#credits,#footer p#footer-copy{float:none;}select.select-menu{width:230px!important;}span.select{width:230px;background:url(../images/selectbg_small.png) no-repeat center;}#commentform p label,#commentform p.comment-form-author span,#commentform p.comment-form-email span{position:relative;top:0;left:0;}}@media only screen and (min-width: 480px) and (max-width: 767px) {.container{width:440px;}#top .location,#top .identity{width:440px;}#navigation #primarymenu,.timeslot-thumb,#sidebar,#talks-full{display:none;}#navigation select.select-menu,#navigation span.select{display:block;}#primary-content,.primary{width:440px;}#speakers-full .speaker:nth-child(3n){margin-right:20px;}.timeslot-desc,.timeslot-content{width:380px;}select.select-menu{width:390px!important;}span.select{width:390px;background:url(../images/selectbg.png) no-repeat center;}} \ No newline at end of file
diff --git a/examples/tg16/web/stream.gathering.org/ng/reset.css b/examples/tg16/web/stream.gathering.org/ng/reset.css
new file mode 100644
index 0000000..8ad64aa
--- /dev/null
+++ b/examples/tg16/web/stream.gathering.org/ng/reset.css
@@ -0,0 +1 @@
+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,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;outline:0;font-size:100%;font:inherit;vertical-align:baseline;}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;}ins{text-decoration:none;}del{text-decoration:line-through;}table{border-collapse:collapse;border-spacing:0;} \ No newline at end of file
diff --git a/examples/tg16/web/stream.gathering.org/ng/style.css b/examples/tg16/web/stream.gathering.org/ng/style.css
new file mode 100644
index 0000000..d169861
--- /dev/null
+++ b/examples/tg16/web/stream.gathering.org/ng/style.css
@@ -0,0 +1 @@
+.alignnone{margin:5px 20px 20px 0;}.aligncenter,div.aligncenter{display:block;margin:5px auto 5px auto;}.alignright{float:right;margin:5px 0 20px 20px;}.alignleft{float:left;margin:5px 20px 20px 0;}.aligncenter{display:block;margin:5px auto 5px auto;}a img.alignright{float:right;margin:5px 0 20px 20px;}a img.alignnone{margin:5px 20px 20px 0;}a img.alignleft{float:left;margin:5px 20px 20px 0;}a img.aligncenter{display:block;margin-left:auto;margin-right:auto}.wp-caption{background:#fff;border:1px solid #f0f0f0;max-width:96%;padding:5px 3px 10px;text-align:center;}.wp-caption.alignnone{margin:5px 20px 20px 0;}.wp-caption.alignleft{margin:5px 20px 20px 0;}.wp-caption.alignright{margin:5px 0 20px 20px;}.wp-caption img{border:0 none;height:auto;margin:0;max-width:98.5%;padding:0;width:auto;}.wp-caption p.wp-caption-text{font-size:11px;line-height:17px;margin:0;padding:0 4px 5px;}.sticky{}.gallery-caption{}.bypostauthor{}body{text-align:center;background:#fff;}.container{width:920px;margin:0 auto;text-align:left;position:relative;}#header{margin:0 auto;}#primary-content,.primary{width:640px;float:left;}#sidebar{width:240px;float:right;}img.scale-with-grid,img{max-width:100%;height:auto;}.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden;}.clearfix{display:inline-block;}.clearfix{display:block;}.none{display:none;}body,input,textarea,button{font:13px/21px "Helvetica Neue",Helvetica,Arial,sans-serif;color:#787878;}h1,h2,h3,h4,h5,h6{margin:0 0 15px;color:#444;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:bold;}p{margin:0 0 20px;}h1{font-size:26px;line-height:30px;letter-spacing:-1px;}h2{font-size:24px;line-height:28px;letter-spacing:-1px;}h3{font-size:18px;line-height:24px;}h4{font-size:16px;line-height:22px;}h5{font-size:14px;line-height:20px;}h6{font-size:12px;line-height:18px;}a{text-decoration:none;-moz-transition:background-color .1s linear,color .1s linear;-webkit-transition:background-color .1s linear,color .1s linear;-o-transition:background-color .1s linear,color .1s linear;-ms-transition:background-color .1s linear,color .1s linear;transition:background-color .1s linear,color .1s linear;}a:link,a:visited{color:#777;border-bottom:1px dotted #a9a8a8;}a:hover{color:#333;}code,pre{font:12px/18px Consolas,"Andale Mono",Courier,"Courier New",monospace;background:#f7f7f8;}em{font-style:italic;}strong{font-weight:bold;}small{font-size:11px;}blockquote,blockquote p{font-size:17px;line-height:24px;color:#777;font-style:italic;}blockquote{margin:0 0 20px;padding:9px 20px 0 19px;border-left:1px solid #ddd;}blockquote cite{display:block;font-size:12px;color:#555;}blockquote cite:before{content:"\2014 \0020";}blockquote cite a,blockquote cite a:visited,blockquote cite a:visited{color:#555;}hr{border:solid #ddd;border-width:1px 0 0;clear:both;margin:10px 0 30px;height:0;}ul,ol{margin-bottom:20px;list-style-type:square;margin-left:20px;}ul{list-style:none outside;list-style-type:square;}ol{list-style:decimal;}ol,ul.square,ul.circle,ul.disc{margin-left:30px;}ul.square{list-style:square outside;list-style-type:square;}ul.circle{list-style:circle outside;}ul.disc{list-style:disc outside;}ul ul,ul ol,ol ol,ol ul{margin:4px 0 2px 15px;}ul ul li,ul ol li,ol ol li,ol ul li{margin-bottom:2px;}li{line-height:21px;margin-bottom:2px;}ul.large li{line-height:21px;}li p{line-height:21px;}#header-full{background:url(images/headerbg_2015.jpg) center no-repeat;-webkit-background-size:cover;-moz-background-size:cover;background-size:cover;padding:40px 0 0;margin-bottom:40px;}.page-template-homepage-php #header-full{margin-bottom:0px;padding:50px 0 0}#top{text-align:center;margin:0 0 40px;}.page-template-homepage-php #top{margin:0 0 50px;}#top .location,#top .identity{width:700px;margin:0 auto;}.identity img{display:block;margin:0 auto;}.page-template-homepage-php .identity img{margin:0 auto 20px;}.identity h1{color:#fff;font-size:44px;line-height:44px;font-weight:bold;letter-spacing:-1px;margin:0;}.identity h1 span{display:block;font-weight:normal;font-size:26px;}.location h2{color:#fff;font-size:36px;line-height:36px;margin:0 0 15px;text-shadow:0px 1px 1px #4a4a4a;}.location h2 span{display:block;font-size:18px;}.location p{color:#fff;text-shadow:0px 1px 1px #4a4a4a;font-size:16px;font-family:Helvetica,Arial,sans-serif;line-height:22px;margin:0 0 30px;}a.register-cta:link,a.register-cta:visited{display:inline-block;padding:8px 15px;color:#9c663a;text-shadow:0px 1px 1px #fee4b4;font-size:18px;font-family:Helvetica,Arial,sans-serif;letter-spacing:-1px;font-weight:bold;margin:0;border:1px solid #c99237;background:#fed76e;background-image:-webkit-gradient(linear,0% 0%,0% 100%,from(#fed76e),to(#feba4b));background-image:-webkit-linear-gradient(top,#fed76e,#feba4b);background-image:-moz-linear-gradient(top,#fed76e,#feba4b);background-image:-ms-linear-gradient(top,#fed76e,#feba4b);background-image:-o-linear-gradient(top,#fed76e,#feba4b);border-radius:3px;}a.register-cta:hover{background:#fed76e;}#navigation #mobilemenu,#navigation select.select-menu,#navigation span.select{display:none;}#navigation{margin:0;padding:15px 25px;z-index:30;background:url(images/nav_bg.png) 0 0 repeat;position:relative;}#navigation a{border:0;}#navigation ul{margin:0;}#navigation li{position:relative;margin:0;padding:0;list-style:none;display:inline-block;text-transform:uppercase;font-size:12px;}#navigation li a{display:block;margin:0 20px 0 0;padding:0;font-weight:bold;color:#fff;text-shadow:0px 1px 1px #000;border-bottom:3px solid transparent;}#navigation .nav-search{margin-right:25px;}#navigation li a:hover,#navigation li a:focus,#navigation li.current_page_item a{border-color:#808181;}#navigation li ul{z-index:9999;position:absolute;display:none;left:0;height:auto;margin:15px 0 0 0;padding:5px 15px;background:#eee;}#navigation li ul li{width:150px;float:left;border-bottom:1px solid #cfcfcf;}#navigation li ul li:last-child{border:none;}#navigation li ul li a{text-transform:none;color:#444;text-shadow:none;margin:0;padding:5px 0;text-decoration:none;text-align:left;border:none;}#navigation li ul li a:hover{color:#777;border:0;}#navigation li ul li ul,#navigation li ul li ul li ul{margin:-38px 0 0 165px;padding:5px 15px!important;background-color:#eee;}.page-template-homepage-php #navigation li ul{background:#fff;}.page-template-homepage-php #navigation li ul li{border-bottom:1px solid #dedede;}.page-template-homepage-php #navigation li ul li:last-child{border:none;}#mobile-container{position:relative;}select.select-menu{position:relative;z-index:10;height:43px!important;line-height:26px;}span.select{position:absolute;bottom:0px;left:0px;float:left;height:43px;line-height:43px;font-size:14px;font-weight:bold;text-shadow:1px 1px #fff;color:#444;text-indent:10px;z-index:1;}#footer-full{padding:20px 0;margin:20px 0 0;background:#333;}.page-template-homepage-php #footer-full{margin:0;}#footer p{margin:0;color:#e3e3e3;text-shadow:0px 1px 1px #000;font-size:11px;font-weight:bold;}#footer a{color:#ccc;}#footer a:hover{color:#8b8b8b;}#footer #credits{float:left;}#footer #footer-copy{float:right;}input,textarea{background:#f8f9fe;border:1px solid #e6e8ed;color:#abadb7;padding:9px 12px;width:230px;}textarea{width:96%;height:200px;}button,#submit{background:#333;color:#fff;cursor:pointer;padding:5px 10px;width:auto;border:none;-moz-transition:color .1s linear,background .1s linear,border-color .1s linear;-webkit-transition:color .1s linear,background .1s linear,border-color .1s linear;-ms-transition:color .1s linear,background .1s linear,border-color .1s linear;-o-transition:color .1s linear,background .1s linear,border-color .1s linear;transition:color .1s linear,background .1s linear,border-color .1s linear;}input:focus,textarea:focus{border-color:#d1d3d8;}#submit:hover,button:hover{background:#555;}#talks-full{width:100%;background:#eaeaea;padding:30px 0 0;}#talks-full>.container{text-align:center;}#talks,.the-talk{position:relative;width:810px;margin:0 auto;text-align:left;}.talk-image{width:100px;float:left;}.talk-info{width:680px;float:right;}.talk-info h2{margin:0 0 10px;font-size:22px;}.talk-info p{margin:0;}.talk-image img{display:block;}a.talk-nav{position:absolute;top:40px;width:14px;height:21px;text-indent:-9999px;border:0;}#next-talk{right:0;background:url(images/arrow-right.png) 0 0 no-repeat;}#prev-talk{left:0;background:url(images/arrow-left.png) 0 0 no-repeat;}#talks-pager{margin:0 auto;height:9px;overflow:hidden;padding:15px 0 25px;}#talks-pager a{display:inline-block;width:9px;height:9px;background:url('images/talks_nav_sprite.png') 0 0 no-repeat;text-indent:-9999px;border:0;margin:0 3px 0 0;}#talks-pager a.activeSlide{background-position:-11px 0;}#speakers-full{width:100%;background:#f1f1f1;padding:40px 0 20px;}.speaker{width:200px;float:left;margin:0 20px 20px 0;text-align:left;position:relative;}.speaker h4{position:absolute;bottom:0;left:0;font-size:12px;background:#101010;padding:5px 10px;color:#fff;margin:0;}.speaker img,.sponsor img{display:block;}#speakers-full .speaker:nth-child(3n){margin-right:0;}#story-full{padding:40px 0 20px;background:#eaeaea;}#sponsors-full{padding:15px 0 0;background:#f1f1f1;}.sponsor{width:207px;float:left;margin:0 20px 15px 0;}#sponsors-full .sponsor:nth-child(4n){margin-right:0;}.speaker-single-thumb img{display:block;float:left;margin:0 20px 5px 0;}#schedule{margin:0 0 40px;}#schedule .timeslot:first-child{border-top:1px solid #d9d9d9;}.timeslot{padding:30px 30px 10px;border-bottom:1px solid #d9d9d9;background:#fcfcfc;}.timeslot h2{margin:0 0 5px;}.timeslot-detail p{margin:0;}.timeslot-detail{width:220px;float:left;margin:0 0 20px;}.timeslot-desc{width:610px;float:right;}.timeslot-content{width:400px;float:left;}.timeslot-thumb{width:180px;float:right;height:140px;}.timeslot-thumb img{display:block;}.contactform li{margin:0 0 15px;padding:0;display:block;}.contactform li:last-child{margin:0;}.contactform li input{display:inline;}.contactform li label{display:inline;padding:0 0 0 10px;}p.email-error{padding:5px 10px;margin:0;background:#fe7550;display:inline-block;color:#fff;}p.email-sent{padding:5px 10px;margin:0;background:#fff666;display:inline-block;color:#222;}.contactform li span{font-size:11px;display:block;padding-top:5px;color:#fe7550;}.post{margin:0 0 40px;}#primary-content .post:last-child{margin:0;}span.the-format{height:36px;width:36px;display:inline-block;margin:0 10px 0 0;text-indent:-9999px;}span.format-standard{background:url(images/format_standard.jpg) 0 0 no-repeat;}span.format-video{background:url(images/format_video.jpg) 0 0 no-repeat;}.post-meta{margin:0;padding:5px 0 0;border-top:1px solid #d9dbe1;font-size:11px;}.post-thumbnail,.post-title{margin:0 0 20px;}.post-thumbnail img{display:block;}ol.commentlist{margin:0 0 40px;}.commentlist{list-style:none;margin:0 auto;}.commentlist>li.comment{margin:0 0 15px;position:relative;padding:20px 20px 20px 90px;background:#f9f9f9;}.commentlist .pingback{margin:0 0 15px;}.commentlist .children{list-style:none;margin:0;}.commentlist .children li.comment{position:relative;padding:20px 0 0 80px;}.commentlist .children li.comment .fn{display:block;}.comment-meta .fn{font-style:normal;}.comment-meta{color:#666;font-size:12px;margin:0 0 5px;}.commentlist .children li.comment .comment-meta{}.commentlist .children li.comment .comment-content{}.comment-meta a{font-weight:bold;}.commentlist .avatar{position:absolute;top:20px;left:20px;padding:0;}.commentlist>li:before{left:-21px;position:absolute;}.commentlist>li.pingback:before{content:'';}.commentlist .children .avatar{}a.comment-reply-link{display:inline-block;font-size:12px;}a.comment-reply-link>span{display:inline-block;position:relative;top:-1px;}#commentform p{position:relative;}#commentform p input{display:block;}#commentform p label{position:absolute;top:0;left:270px;}#commentform p.comment-form-author span,#commentform p.comment-form-email span{position:absolute;top:0;left:308px;}#commentform p.comment-form-comment label{display:none;}.widget{margin:0 0 30px;}#sidebar .widget:last-child{margin:0;}.widget ul{margin:0;}#twitter_update_list{margin:0;}#twitter_update_list li{margin:0 0 10px;}.widget_search #s{width:214px;}.widget_search form,.widget_search fieldset{margin:0;} \ No newline at end of file