Initial commit
BIN
img/Internet_map_4096.GIF
Normal file
After Width: | Height: | Size: 2.9 MiB |
BIN
img/ReRn3Tl.png
Normal file
After Width: | Height: | Size: 64 KiB |
BIN
img/admin.png
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
img/appci.png
Normal file
After Width: | Height: | Size: 136 KiB |
BIN
img/apps.mp4
Normal file
BIN
img/apps.png
Normal file
After Width: | Height: | Size: 173 KiB |
BIN
img/blog.png
Normal file
After Width: | Height: | Size: 226 KiB |
BIN
img/brique2.png
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
img/chatons.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
img/chatons_librehosters.png
Normal file
After Width: | Height: | Size: 100 KiB |
BIN
img/datacenter.jpg
Normal file
After Width: | Height: | Size: 103 KiB |
BIN
img/debian.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
img/degoogleify-resized.gif
Normal file
After Width: | Height: | Size: 3 MiB |
BIN
img/degoogleify.gif
Normal file
After Width: | Height: | Size: 8.4 MiB |
BIN
img/dns.png
Normal file
After Width: | Height: | Size: 128 KiB |
BIN
img/doc.png
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
img/dude_yunohost.jpg
Normal file
After Width: | Height: | Size: 59 KiB |
BIN
img/ecosystem.png
Normal file
After Width: | Height: | Size: 88 KiB |
BIN
img/f2f.png
Normal file
After Width: | Height: | Size: 70 KiB |
BIN
img/foss.png
Normal file
After Width: | Height: | Size: 200 KiB |
BIN
img/framasoft.mp4
Normal file
BIN
img/framasoft_services.png
Normal file
After Width: | Height: | Size: 186 KiB |
BIN
img/garden.jpg
Normal file
After Width: | Height: | Size: 75 KiB |
BIN
img/googlesoft.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
img/icon-debian.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
BIN
img/icon-door.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
img/icon-globe.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
img/icon-lock.png
Normal file
After Width: | Height: | Size: 7.1 KiB |
BIN
img/icon-mail.png
Normal file
After Width: | Height: | Size: 6.7 KiB |
BIN
img/icon-medic.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
img/icon-messaging.png
Normal file
After Width: | Height: | Size: 4.7 KiB |
BIN
img/icon-package.png
Normal file
After Width: | Height: | Size: 8.8 KiB |
BIN
img/icon-shield.png
Normal file
After Width: | Height: | Size: 6.8 KiB |
BIN
img/icon-tools.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
img/icon-users.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
img/iknowselfhosting.png
Normal file
After Width: | Height: | Size: 152 KiB |
BIN
img/internet.jpg
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
img/internet2.jpg
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
img/internet3.jpg
Normal file
After Width: | Height: | Size: 63 KiB |
BIN
img/internet4.jpg
Normal file
After Width: | Height: | Size: 71 KiB |
BIN
img/internet5.jpg
Normal file
After Width: | Height: | Size: 70 KiB |
BIN
img/libreplatforms.jpg
Normal file
After Width: | Height: | Size: 132 KiB |
BIN
img/libreplatforms.png
Normal file
After Width: | Height: | Size: 462 KiB |
BIN
img/localnetwork.png
Normal file
After Width: | Height: | Size: 82 KiB |
BIN
img/logo_horizontal_black.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
img/logo_horizontal_white.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
img/mailman.jpg
Normal file
After Width: | Height: | Size: 91 KiB |
BIN
img/mastodon.png
Normal file
After Width: | Height: | Size: 286 KiB |
BIN
img/neutribox.png
Normal file
After Width: | Height: | Size: 154 KiB |
BIN
img/nextcloud.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
img/ni.png
Normal file
After Width: | Height: | Size: 558 KiB |
BIN
img/nobodygottimeforthat.jpg
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
img/oldcomputer.jpg
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
img/onedoesnotsimply.png
Normal file
After Width: | Height: | Size: 233 KiB |
BIN
img/preinstalled.png
Normal file
After Width: | Height: | Size: 126 KiB |
BIN
img/rainbow.jpg
Normal file
After Width: | Height: | Size: 97 KiB |
BIN
img/raspberrypi.jpg
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
img/remotebackup.png
Normal file
After Width: | Height: | Size: 56 KiB |
BIN
img/selfhostingfreedom.jpg
Normal file
After Width: | Height: | Size: 84 KiB |
BIN
img/serveimage.png
Normal file
After Width: | Height: | Size: 458 KiB |
BIN
img/server.png
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
img/sso.mp4
Normal file
BIN
img/stacks.jpg
Normal file
After Width: | Height: | Size: 9 KiB |
BIN
img/surveillancecapitalism.png
Normal file
After Width: | Height: | Size: 175 KiB |
BIN
img/testimonies.png
Normal file
After Width: | Height: | Size: 359 KiB |
BIN
img/theywantoursouls.png
Normal file
After Width: | Height: | Size: 360 KiB |
BIN
img/toocomplicated.png
Normal file
After Width: | Height: | Size: 482 KiB |
BIN
img/tsq_021_profilage_de_code_et_fraude_fiscale.png
Normal file
After Width: | Height: | Size: 548 KiB |
BIN
img/user_panel.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
img/vps.png
Normal file
After Width: | Height: | Size: 51 KiB |
BIN
img/ynh_logo_black_300dpi.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
img/ynh_logo_white_300dpi.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
img/yoloswagteam.png
Normal file
After Width: | Height: | Size: 183 KiB |
BIN
img/yunohost.jpg
Normal file
After Width: | Height: | Size: 17 KiB |
477
slides.md
Normal file
|
@ -0,0 +1,477 @@
|
||||||
|
title: YunoHost - An essential building block to decentralize internet
|
||||||
|
class: animation-fade
|
||||||
|
layout: true
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
class: impact
|
||||||
|
|
||||||
|
.center[
|
||||||
|
![](./img/ynh_logo_black_300dpi.png)
|
||||||
|
]
|
||||||
|
|
||||||
|
## The operating system
|
||||||
|
## to build the decentralized Internet
|
||||||
|
|
||||||
|
*Aleks - on behalf of the YunoHost project*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
.center[
|
||||||
|
<br>
|
||||||
|
# **Surveillance Capitalism**
|
||||||
|
### [GAFAM et al.]
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
# **Global Surveillance Madness**
|
||||||
|
### [FVEY et al.]
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
class: full
|
||||||
|
|
||||||
|
.center[
|
||||||
|
![](img/theywantoursouls.png)
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
.center[
|
||||||
|
# <red>**The Evil Cloud**</red>
|
||||||
|
|
||||||
|
![](img/surveillancecapitalism.png)
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
.center[
|
||||||
|
<small>
|
||||||
|
### concrete,<br>
|
||||||
|
### straightfoward,<br>
|
||||||
|
### **not-just-for-nerds**,<br>
|
||||||
|
### scalable,
|
||||||
|
### long-term<br>
|
||||||
|
</small>
|
||||||
|
## **alternatives?**
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
.center[
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
### **If Google disappeared tomorrow,**
|
||||||
|
<br>
|
||||||
|
### **How would we**
|
||||||
|
### **build <emph>the decentralized internet</emph> ?**
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
.center[
|
||||||
|
# FOSS services / social media
|
||||||
|
|
||||||
|
![](img/foss.png)
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
class: full
|
||||||
|
|
||||||
|
.center[
|
||||||
|
![](img/libreplatforms.jpg)
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
class: img-560
|
||||||
|
|
||||||
|
.center[
|
||||||
|
### Framasoft's De-google-ify campaign
|
||||||
|
|
||||||
|
![](img/degoogleify.gif)
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
.center[
|
||||||
|
<!--
|
||||||
|
<video width="auto" height="600" autoplay loop>
|
||||||
|
<source src="img/framasoft.mp4" type="video/mp4">
|
||||||
|
Your browser does not support the video tag.
|
||||||
|
</video>
|
||||||
|
-->
|
||||||
|
|
||||||
|
![](img/framasoft_services.png)
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
.center[
|
||||||
|
# But #1
|
||||||
|
### The point is <emph>**decentralization!**</emph>
|
||||||
|
|
||||||
|
![](img/chatons_librehosters.png)
|
||||||
|
]
|
||||||
|
|
||||||
|
- **make it easy** to replicate Framasoft's model
|
||||||
|
- **spread it** into a variety of local entities (CHATONS, LibreHosters)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
.center[
|
||||||
|
# But #2
|
||||||
|
### What about <emph>**emails**</emph> and <emph>**file storage**</emph>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
Complex, expensive,<br>
|
||||||
|
not easy for small-scale third parties
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
But what if you had<br>
|
||||||
|
**your own server**<br>
|
||||||
|
<small>and data on your own drives</small>
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
.center[
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
# We have personal computers
|
||||||
|
# Why not <emph>**personal servers**</emph>
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
.center[
|
||||||
|
# Server administration is <red>**madness**</red>
|
||||||
|
|
||||||
|
![](img/onedoesnotsimply.png)
|
||||||
|
|
||||||
|
time sinkhole<br>
|
||||||
|
complicated as hell
|
||||||
|
|
||||||
|
# But <emph>**does it has to be?**</emph>
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
class: bigblack
|
||||||
|
|
||||||
|
.center[
|
||||||
|
<br>
|
||||||
|
# What's at stake
|
||||||
|
|
||||||
|
**<emph>We *won't*</emph>** get rid of surveillance capitalism<br>
|
||||||
|
**<emph>if only a tech elite</emph><br>
|
||||||
|
**can deploy and** <emph>maintain servers</emph>**
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
.center[
|
||||||
|
<br>
|
||||||
|
![](img/yunohost.jpg)
|
||||||
|
|
||||||
|
# "The Ubuntu of self-hosting"
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
.center[
|
||||||
|
# Buy a machine
|
||||||
|
]
|
||||||
|
|
||||||
|
.col-6[
|
||||||
|
.center[
|
||||||
|
### At home
|
||||||
|
![](img/raspberrypi.jpg)
|
||||||
|
|
||||||
|
![](img/oldcomputer.jpg)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
.col-6[
|
||||||
|
.center[
|
||||||
|
### In a datacenter
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
![](img/vps.png)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
.center[
|
||||||
|
# Install YunoHost
|
||||||
|
]
|
||||||
|
|
||||||
|
.col-6[
|
||||||
|
.center[
|
||||||
|
### Pre-installed images
|
||||||
|
|
||||||
|
![](img/preinstalled.png)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
.col-6[
|
||||||
|
.center[
|
||||||
|
### On top of
|
||||||
|
|
||||||
|
![](img/debian.png)
|
||||||
|
|
||||||
|
`curl install.yunohost.org `
|
||||||
|
|
||||||
|
`| bash` ... ;-)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
.center[
|
||||||
|
# Web admin interface
|
||||||
|
|
||||||
|
![](img/admin.png)
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
.center[
|
||||||
|
# Install apps ... in a few clicks !
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<video width="auto" height="600" autoplay loop>
|
||||||
|
<source src="img/apps.mp4" type="video/mp4">
|
||||||
|
Your browser does not support the video tag.
|
||||||
|
</video>
|
||||||
|
-->
|
||||||
|
|
||||||
|
![](img/apps.png)
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
.center[
|
||||||
|
# Give access to your friends
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<video width="auto" height="600" autoplay loop>
|
||||||
|
<source src="img/sso.mp4" type="video/mp4">
|
||||||
|
</video>
|
||||||
|
-->
|
||||||
|
|
||||||
|
![](img/user_panel.png)
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
.center[
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
# Live demo
|
||||||
|
|
||||||
|
you can try it yourself on:<br>
|
||||||
|
demo.yunohost.org !
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### In just ~ 30 min / 1h !
|
||||||
|
|
||||||
|
- Buy a VPS (or power on your board)
|
||||||
|
- Install YunoHost
|
||||||
|
- Choose a domain and admin password
|
||||||
|
- Create a first user
|
||||||
|
- Install apps, Let's Encrypt certificate ...
|
||||||
|
- Send emails
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Project status
|
||||||
|
|
||||||
|
- **~3000 instances** with happy users ;)
|
||||||
|
- Vivid community !
|
||||||
|
- **~10 regular contributors** (100% volunteers)
|
||||||
|
- More than **100 working apps** !
|
||||||
|
|
||||||
|
**<emph>Current goals</emph>**
|
||||||
|
- smooth the UX, increase robustness
|
||||||
|
- expand the user base (especially outside the French bubble ;-))
|
||||||
|
- get funding / grants for sustainability
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
.center[
|
||||||
|
# Happy users !
|
||||||
|
|
||||||
|
![](img/testimonies.png)
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Help us !
|
||||||
|
|
||||||
|
- Deploy a YunoHost for yourself ;)
|
||||||
|
- Tell your friends, **organize install parties**
|
||||||
|
- **Give us feedback on the UX**
|
||||||
|
- Report issues, test apps and beta releases
|
||||||
|
- Improve doc and translations
|
||||||
|
|
||||||
|
... and if you know how to code:
|
||||||
|
|
||||||
|
- Front-end (HTML / CSS / JS)
|
||||||
|
- App packaging (bash)
|
||||||
|
- Core (python, general sysadmin knowledge, security, ...)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
.center[
|
||||||
|
# Conclusion / summary
|
||||||
|
|
||||||
|
If we have the ambition<br>
|
||||||
|
to **fight surveillance capitalism**<br>
|
||||||
|
we *must* <br>
|
||||||
|
reduce the technical and human cost<br>
|
||||||
|
of server administration.<br>
|
||||||
|
|
||||||
|
### **YunoHost shows that it can be done**
|
||||||
|
|
||||||
|
... yet there's still so much to do!<br>
|
||||||
|
For this, **we need your help** ;-)
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
class: impact
|
||||||
|
|
||||||
|
### Thank you <3 !
|
||||||
|
|
||||||
|
![](img/selfhostingfreedom.jpg)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
class: impact
|
||||||
|
|
||||||
|
## Moar stuff I have no time to talk about
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Contact info
|
||||||
|
|
||||||
|
- <small>(In person during FOSDEM!)</small>
|
||||||
|
- **Mastodon**: `cybre.space/@aleks`
|
||||||
|
- **GitHub**: `github.com/alexAubin`
|
||||||
|
- **Matrix**: `@Alekswag:matrix.org`
|
||||||
|
|
||||||
|
Find the YunoHost team on :
|
||||||
|
|
||||||
|
- **IRC**: `#yunohost` and `#yunohost-dev` on `irc.freenode.org`
|
||||||
|
- **Matrix**: `#freenode_#yunohost:matrix.org`
|
||||||
|
- **Forum**: `forum.yunohost.org`
|
||||||
|
- **Mastodon**: `mastodon.social/@yunohost`
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
.center[
|
||||||
|
# Naming
|
||||||
|
|
||||||
|
« Y U No Host »
|
||||||
|
|
||||||
|
![](img/dude_yunohost.jpg)
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
.center[
|
||||||
|
# Naming (2)
|
||||||
|
|
||||||
|
alternatively: « You (K)now Host »
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
![](img/iknowselfhosting.png)
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Features overview
|
||||||
|
|
||||||
|
- ![](img/icon-debian.png) **Debian**-based (stable, robust, well-known)
|
||||||
|
- ![](img/icon-tools.png) Simple & clean **web administration interface**
|
||||||
|
- ![](img/icon-package.png) Install **apps** in just a few clicks & questions
|
||||||
|
- ![](img/icon-users.png) ![](img/icon-door.png) **Multi-users** with single sign-on (SSO) portal
|
||||||
|
- ![](img/icon-mail.png) ![](img/icon-messaging.png) **Email** and instant messaging (XMPP) out of the box
|
||||||
|
- ![](img/icon-medic.png) **Backups** (and restore!)
|
||||||
|
- **Let's Encrypt** integration
|
||||||
|
- Firewall, fail2ban, ...
|
||||||
|
- Lots of other stuff for things to just work
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
.center[
|
||||||
|
**YunoHost ecosystem**
|
||||||
|
![](img/ecosystem.png)
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Remote backup
|
||||||
|
|
||||||
|
.center[
|
||||||
|
![](img/remotebackup.png)
|
||||||
|
]
|
||||||
|
|
||||||
|
- Still work in progress
|
||||||
|
- Based on Borg Backup
|
||||||
|
- Remote, deduplicated, encrypted
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Friend to friend
|
||||||
|
|
||||||
|
.center[
|
||||||
|
![](img/f2f.png)
|
||||||
|
]
|
||||||
|
|
||||||
|
- Still thinking about it
|
||||||
|
- Easily add "friend" server
|
||||||
|
- Enable service such as monitoring (server up ? DNS conf ? ports forwarding ?)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# App C.I. / quality control
|
||||||
|
|
||||||
|
.center[
|
||||||
|
![](img/appci.png)
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Internet cube
|
||||||
|
|
||||||
|
.center[
|
||||||
|
![](img/brique2.png)
|
||||||
|
![](img/neutribox.png)
|
||||||
|
]
|
||||||
|
|
||||||
|
- Plug-and-play
|
||||||
|
- Pre-installed with YunoHost
|
||||||
|
- VPN from the FFDN
|
||||||
|
- Wifi hostpot transparently going through the VPN
|
||||||
|
|
||||||
|
|
22
template/index.html
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>{{title}}</title>
|
||||||
|
{{{style}}}
|
||||||
|
<script src="remark.min.js"></script>
|
||||||
|
<script>
|
||||||
|
function create() {
|
||||||
|
return remark.create({
|
||||||
|
{{{source}}},
|
||||||
|
ratio: '16:9',
|
||||||
|
highlightLines: true,
|
||||||
|
countIncrementalSlides: false,
|
||||||
|
highlightStyle: 'github'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body onload="slideshow = create()">
|
||||||
|
</body>
|
||||||
|
</html>
|
18
template/remark.min.js
vendored
Normal file
274
template/style.scss
Normal file
|
@ -0,0 +1,274 @@
|
||||||
|
// Theme
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/*
|
||||||
|
$primary : #3FC1F5;
|
||||||
|
$primary-bg : #111;
|
||||||
|
$secondary : #40F040;
|
||||||
|
$tertiary : #D5D5D5;
|
||||||
|
$light : #FFF;
|
||||||
|
$dark : #222;
|
||||||
|
$text-dark : $dark;
|
||||||
|
$text-light : $light;
|
||||||
|
$code-background : #111;
|
||||||
|
*/
|
||||||
|
|
||||||
|
$primary : #0070d0;
|
||||||
|
$primary-bg : #ffffff;
|
||||||
|
$primary-dark : #10A0ff;
|
||||||
|
$secondary : #10D010;
|
||||||
|
$secondary-dark : #F0F000;
|
||||||
|
$tertiary : #454545;
|
||||||
|
$light : #222;
|
||||||
|
$dark : #FFF;
|
||||||
|
$text-dark : #DADADA;
|
||||||
|
$text-light : $light;
|
||||||
|
$code-background : #F8F8D8;
|
||||||
|
|
||||||
|
|
||||||
|
$overlay : transparentize(#000, .5);
|
||||||
|
$margin : 15px;
|
||||||
|
$iframe-scale : 1.5;
|
||||||
|
|
||||||
|
|
||||||
|
$font-size : 32px;
|
||||||
|
$font-size-impact : 120px;
|
||||||
|
$font : Open Sans, Helvetica, Arial, sans-serif;
|
||||||
|
$font-title : Open Sans, Helvetica, Arial, sans-serif;
|
||||||
|
$font-fixed : Hack, monospace;
|
||||||
|
|
||||||
|
// CSS Base
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
* { box-sizing: border-box; }
|
||||||
|
body { font-family: $font; }
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
margin: 0 0 $margin 0;
|
||||||
|
font-family: $font-title;
|
||||||
|
}
|
||||||
|
h1 { color: $primary; }
|
||||||
|
h2 { color: $secondary; }
|
||||||
|
h3 { color: $tertiary; }
|
||||||
|
li { margin-bottom: .25em; };
|
||||||
|
pre, code {
|
||||||
|
text-align: left;
|
||||||
|
font-family: $font-fixed;
|
||||||
|
color: $light;
|
||||||
|
background: $code-background;
|
||||||
|
padding: 0.1em;
|
||||||
|
}
|
||||||
|
a, a:visited, a:hover, a:active { color: $text-dark; }
|
||||||
|
img { vertical-align: inherit; }
|
||||||
|
blockquote {
|
||||||
|
border-left: 8px solid;
|
||||||
|
padding-left: .5em;
|
||||||
|
color: $tertiary;
|
||||||
|
text-align: left;
|
||||||
|
margin: 1em 0;
|
||||||
|
& > p { margin: 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Remark base
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.remark-code { font-size: .9em; padding: 0; background: $code-background
|
||||||
|
!important; }
|
||||||
|
.remark-container { background: $dark; }
|
||||||
|
.remark-slide-scaler { box-shadow: none; }
|
||||||
|
.remark-notes { font-size: 1.5em; }
|
||||||
|
|
||||||
|
.remark-slide-content {
|
||||||
|
background-color: $dark;
|
||||||
|
font-size: $font-size;
|
||||||
|
padding: 1em 2em;
|
||||||
|
color: $text-light;
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.remark-slide-number {
|
||||||
|
color: $text-light;
|
||||||
|
right: 1em;
|
||||||
|
opacity: .6;
|
||||||
|
font-size: 0.8em;
|
||||||
|
z-index: 2;
|
||||||
|
.no-counter & { display: none; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// Additions
|
||||||
|
.impact {
|
||||||
|
background-color: $primary-bg;
|
||||||
|
vertical-align: middle;
|
||||||
|
text-align: center;
|
||||||
|
&, h1, h2 { color: $text-light; }
|
||||||
|
h1 { font-size: $font-size-impact; }
|
||||||
|
}
|
||||||
|
|
||||||
|
emph { color: $secondary; }
|
||||||
|
red { color: #ff3030; }
|
||||||
|
|
||||||
|
.nopaddingtop {
|
||||||
|
padding: 0px;
|
||||||
|
p { margin-top: 0px; padding-top: 0px; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.bigblack {
|
||||||
|
font-size: 40px;
|
||||||
|
background-color: #111;
|
||||||
|
color: $dark;
|
||||||
|
h1 { color: $primary-dark; font-size: 100px; }
|
||||||
|
emph { color: $secondary-dark; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.img-560 {
|
||||||
|
img { height: 560px; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.full {
|
||||||
|
background-color: $primary-bg;
|
||||||
|
vertical-align: middle;
|
||||||
|
text-align: center;
|
||||||
|
padding: 0px;
|
||||||
|
p { padding-top: 0px; }
|
||||||
|
img { position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
width: 1400px;
|
||||||
|
height: 800px;
|
||||||
|
margin-top: -400px; /* Half the height */
|
||||||
|
margin-left: -700px; /* Half the width */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
.full {
|
||||||
|
&, h1, h2 { color: $text-light; }
|
||||||
|
&iframe {
|
||||||
|
height: calc(#{100%/$iframe-scale} - 1.2em);
|
||||||
|
width: 100%/$iframe-scale;
|
||||||
|
transform: scale($iframe-scale);
|
||||||
|
transform-origin: 0 0;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
.bottom-bar {
|
||||||
|
background-color: $primary;
|
||||||
|
color: $text-light;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
font-size: 20px;
|
||||||
|
padding: .8em;
|
||||||
|
text-align: left;
|
||||||
|
z-index: 1;
|
||||||
|
p { margin: 0;}
|
||||||
|
.impact &, .full & { display: none; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Utilities
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Positioning
|
||||||
|
.side-layer {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
padding: 0 2em;
|
||||||
|
}
|
||||||
|
.middle { &, & img, & span { vertical-align: middle; } };
|
||||||
|
.top { vertical-align: top; };
|
||||||
|
.bottom { vertical-align: bottom; };
|
||||||
|
.inline-block {
|
||||||
|
p, ul, ol, blockquote {
|
||||||
|
display: inline-block;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.no-margin { &, & > p, & > pre, & > ul, & > ol { margin: 0; } }
|
||||||
|
.no-padding { padding: 0; }
|
||||||
|
.space-left { padding-left: 1em; }
|
||||||
|
.space-right { padding-right: 1em; }
|
||||||
|
|
||||||
|
// Images
|
||||||
|
.responsive > img { width: 100%; height: auto; };
|
||||||
|
.contain { background-size: contain; };
|
||||||
|
.overlay { box-shadow: inset 0 0 0 9999px $overlay; }
|
||||||
|
|
||||||
|
// Text
|
||||||
|
.left { text-align: left; }
|
||||||
|
.right { text-align: right; }
|
||||||
|
.center { text-align: center; }
|
||||||
|
.justify { text-align: justify; }
|
||||||
|
.primary { color: $primary; }
|
||||||
|
.alt { color: $secondary; };
|
||||||
|
.em { color: $tertiary; };
|
||||||
|
.thin { font-weight: 200; }
|
||||||
|
.huge { font-size: 2em; }
|
||||||
|
.big { font-size: 1.5em; }
|
||||||
|
.small { font-size: .8em; }
|
||||||
|
.dark-bg { background-color: $dark; }
|
||||||
|
.alt-bg { background-color: $secondary; };
|
||||||
|
|
||||||
|
// Simple 12-columns grid system
|
||||||
|
.row {
|
||||||
|
width: 100%;
|
||||||
|
&::after {
|
||||||
|
content: '';
|
||||||
|
display: table;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
&.table { display: table; };
|
||||||
|
&.table [class^="col-"] {
|
||||||
|
float: none;
|
||||||
|
display: table-cell;
|
||||||
|
vertical-align: inherit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[class^="col-"] {
|
||||||
|
float: left;
|
||||||
|
&.inline-block {
|
||||||
|
float: none;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@for $i from 1 through 12 {
|
||||||
|
.col-#{$i} {width: 100% / 12 * $i; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// Animations
|
||||||
|
@keyframes fadeIn {
|
||||||
|
from { opacity: 0; }
|
||||||
|
to { opacity: 1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.animation-fade {
|
||||||
|
animation-duration: 300ms;
|
||||||
|
animation-fill-mode: both;
|
||||||
|
animation-timing-function: ease-out;
|
||||||
|
.remark-visible & { animation-name: fadeIn; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Fix PDF print with chrome
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@page {
|
||||||
|
// 908px 681px for 4/3 slides
|
||||||
|
size: 1210px 681px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media print {
|
||||||
|
.remark-slide-scaler {
|
||||||
|
width: 100% !important;
|
||||||
|
height: 100% !important;
|
||||||
|
transform: scale(1) !important;
|
||||||
|
top: 0 !important;
|
||||||
|
left: 0 !important;
|
||||||
|
}
|
||||||
|
}
|