diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c85ed52 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/postfix +/data \ No newline at end of file diff --git a/conf.php b/conf.php index fca7bc5..091292d 100755 --- a/conf.php +++ b/conf.php @@ -3,50 +3,74 @@ //----------------------------------------------------------- // emailPoubelle config // Licence : GNU GPL v3 : http://www.gnu.org/licenses/gpl.html -// Créateur : David Mercereau - david [.] mercereau [aro] zici [.] fr +// Créateur : David Mercereau - david [aro] mercereau [.] info // Home : http://poubelle.zici.fr //----------------------------------------------------------- -error_reporting(0); +//error_reporting(0); +define('DEBUG', true); + + -define('VERSION', '0.3'); // Domaine email define('DOMAIN', 'zici.fr'); -// Serveur DNS pour la résolution/vérification du nom de domaine -define('NS1', 'ns1.fdn.org'); -define('NS2', '8.8.8.8'); +// Deux options : +// PLAIN : plaintext, pas de base, simple mais des fonctionnalités en moins +// DB : pdo usage +define('BACKEND', 'DB'); -define('DEBUG', false); +if (BACKEND == 'DB') { + // PDO stucture + // Exemple pour MYSQL : + // define('DB', 'mysql:host=127.0.0.1;dbname=baseMysql'); + // define('DBUSER', 'utilisateurMysql'); + // define('DBPASS', 'motdepassedefou'); + // Exemple pour Sqlite : + // define('DB', 'sqlite:./data/emailPoubelle.sqlite'); + define('DB', 'mysql:host=localhost;dbname=c1_demo'); + #define('DB', 'sqlite:./database.sdb'); + define('DBUSER', 'c1_demo'); + define('DBPASS', 'sqdf2csd4rvn45548'); +} // Fichier d'alias postfix -define('FICHIERALIAS', './emailPoubelle/postfix/virtual'); +define('FICHIERALIAS', './data/virtual'); define('BIN_POSTMAP', '/usr/sbin/postmap'); -define('URLPAGE', 'http://www.zici.fr/emailPoubelle.html'); +define('URLPAGE', 'http://'.$_SERVER["SERVER_NAME"].'/'.$_SERVER["REQUEST_URI"]); // A indiquer si vous utiliser les URL's rewriting // Exemple avec un htaccess -// RewriteRule ^EmailPoubell-([0-9]+)\.html$ index.php?page=emailPoubelle&Validemail=$1 [L] -define('URLREWRITE_DEBUT', 'http://www.zici.fr/EmailPoubell-'); -define('URLREWRITE_FIN', '.html'); -// Désactiver -# define('URLREWRITE_DEBUT', false); -# define('URLREWRITE_FIN', false); +// RewriteRule ^EmailPoubell-([0-9]+)\.html$ folder/emailPoubelle.php?&Validemail=$1 [L] +//define('URLREWRITE_DEBUT', 'http://www.zici.fr/EmailPoubell-'); +//define('URLREWRITE_FIN', '.html'); +// Désactiver +define('URLREWRITE_DEBUT', false); +define('URLREWRITE_FIN', false); // - Email // Sujet de l'email pour la confirmation -define('EMAIL_SUJET_CONFIRME', '[zici] [EmailPoubelle] Confirmation alias '); +define('EMAIL_SUJET_CONFIRME', '[EmailPoubelle] Confirmation alias '); // Sujet de l'email pour la liste des alias -define('EMAIL_SUJET_LISTE', '[zici] [EmailPoubelle] Liste des alias '); +define('EMAIL_SUJET_LISTE', '[EmailPoubelle] Liste des alias '); // From de l'email -define('EMAIL_FROM', '"NO REPLAY emailPoubelle" '); +define('EMAIL_FROM', '"NO REPLAY emailPoubelle" '); -// Alisas interdit : (regex ligne par ligne) - commenter pour désactiver -define('ALIASDENY', './emailPoubelle/aliasdeny.txt'); +// Alisas interdit : (regex ligne par ligne) - commenter pour désactiver +define('ALIASDENY', './aliasdeny.txt'); -// Blackliste d'email : (regex ligne par ligne) - commenter pour désactiver -define('BLACKLIST', './emailPoubelle/blacklist.txt'); +// Blackliste d'email : (regex ligne par ligne) - commenter pour désactiver +define('BLACKLIST', './blacklist.txt'); + +// Depend pear Net/DNS2 +define('CHECKMX', false); +if (CHECKMX) { + require_once('Net/DNS2.php'); + // Serveur DNS pour la résolution/vérification du nom de domaine + define('NS1', 'ns1.fdn.org'); + define('NS2', '8.8.8.8'); +} ?> diff --git a/emailPoubelle.php b/emailPoubelle.php index 5d4e9ee..b45ed6f 100644 --- a/emailPoubelle.php +++ b/emailPoubelle.php @@ -3,51 +3,100 @@ //----------------------------------------------------------- // Email Poubelle // Licence : GNU GPL v3 : http://www.gnu.org/licenses/gpl.html -// Créateur : David Mercereau - david [.] mercereau [aro] zici [.] fr +// Créateur : David Mercereau - david [aro] mercereau [.] info // Home : http://poubelle.zici.fr // Date : 08/2013 -// Version : 0.3 -// Dépendance : Postifx +// Version : 0.4 +// Dépendance : Postifx //----------------------------------------------------------- include_once('./conf.php'); +define('VERSION', '0.4'); -# Init & vérif +////////////////// +// Init & check +////////////////// + +if (DEBUG) { + error_reporting(E_ALL); + ini_set('display_errors', 'On'); + echo '
Debug activé
'; + print_r($_REQUEST); +} + +// check alias file is_writable if (!is_writable(FICHIERALIAS)) { - exit('
Erreur : le fichier d\'alias ne peut pas être écrit. Merci de contacter l\'administrateur
'); + exit('
Erreur : le fichier d\'alias ne peut pas être écrit. Merci de contacter l\'administrateur
'); } +// check blacklist file is_writable if (defined('BLACKLIST') && !is_readable(BLACKLIST)) { - exit('
Erreur : un fichier de blacklist est renseigné mais n\'est pas lisible. Merci de contacter l\'administrateur
'); + exit('
Erreur : un fichier de blacklist est renseigné mais n\'est pas lisible. Merci de contacter l\'administrateur
'); } +// check aliasdeny file is_writable if (defined('ALIASDENY') && !is_readable(ALIASDENY)) { - exit('
Erreur : un fichier d\'alias interdit est renseigné mais n\'est pas lisible. Merci de contacter l\'administrateur
'); + exit('
Erreur : un fichier d\'alias interdit est renseigné mais n\'est pas lisible. Merci de contacter l\'administrateur
'); } +// Connect DB +if (BACKEND == 'DB') { + try { + if (preg_match('/^sqlite/', DB)) { + $dbco = new PDO(DB); + } else { + $dbco = new PDO(DB, DBUSER, DBPASS); + } + $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + } catch ( PDOException $e ) { + die('Connexion à la base '.$e->getMessage()); + } +} + +////////////////// +// Function +////////////////// + +// Verification des emails function VerifMXemail($email) { - require_once 'Net/DNS2.php'; - $domaine=explode('@', $email); - $r = new Net_DNS2_Resolver(array('nameservers' => array(NS1, NS2))); - try { - $result = $r->query($domaine[1], 'MX'); - } catch(Net_DNS2_Exception $e) { - return false; - } - if ($result->answer) { - return true; - } else { - return false; - } + if (CHECKMX) { + $domaine=explode('@', $email); + $r = new Net_DNS2_Resolver(array('nameservers' => array(NS1, NS2))); + try { + $result = $r->query($domaine[1], 'MX'); + } catch(Net_DNS2_Exception $e) { + return false; + } + if ($result->answer) { + return true; + } else { + return false; + } + } else { + return true; + } } +// postmap command function UpdateVirtualDB() { echo exec(BIN_POSTMAP.' '.FICHIERALIAS,$output,$return); } + +//// A FAIRE (chian) : + +// add new alias function AjouterAlias($alias,$email) { - $fichier=fopen(FICHIERALIAS,'a+'); - fputs($fichier, $alias.'@'.DOMAIN.' '.$email."\n"); - fclose($fichier); + if (BACKEND == 'DB') { + // A faire mais $alais doît changer + } else { + $fichier=fopen(FICHIERALIAS,'a+'); + fputs($fichier, $alias.'@'.DOMAIN.' '.$email."\n"); + fclose($fichier); + } UpdateVirtualDB(); } + +//// A FAIRE : + +// delete new alias function SupprimerAlias($alias,$email) { file_put_contents(FICHIERALIAS, preg_replace('#\n\#[0-9]+ '.$alias.'@'.DOMAIN.' '.$email.'#U', '', file_get_contents(FICHIERALIAS)/*, 1*/)); file_put_contents(FICHIERALIAS, preg_replace('#\n'.$alias.'@'.DOMAIN.' '.$email.'#U', '', file_get_contents(FICHIERALIAS)/*, 1*/)); @@ -55,6 +104,7 @@ function SupprimerAlias($alias,$email) { UpdateVirtualDB(); } +// parse file for blacklist and aliasdeny function parseFileRegex($file, $chaine) { $return=false; $handle = fopen($file, 'r'); @@ -72,6 +122,7 @@ function parseFileRegex($file, $chaine) { return $return; } +// Check blacklistemail function BlacklistEmail($email) { if (defined('BLACKLIST')) { return parseFileRegex(BLACKLIST, $email); @@ -80,6 +131,7 @@ function BlacklistEmail($email) { } } +// check aliasdeny function AliasDeny($alias) { if (defined('ALIASDENY')) { return parseFileRegex(ALIASDENY, $alias); @@ -88,6 +140,9 @@ function AliasDeny($alias) { } } +//// A FAIRE : + +// list alias function ListeAlias($email) { $handle = fopen(FICHIERALIAS, 'r'); while (!feof($handle)) { @@ -103,14 +158,11 @@ function ListeAlias($email) { return ($alias); } -if (DEBUG) { - echo '
Debug activé
'; - print_r($_REQUEST); -} - -echo '

Emails poubelle libre

-

Générer des emails poubelle sans contrainte de durée de vie.

'; +////////////////// +// Start program +////////////////// +// Valid email process if (isset($_REQUEST['Validemail'])) { if (preg_match('/#'.$_REQUEST['Validemail'].' [a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+ [a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+/', file_get_contents(FICHIERALIAS),$res)) { $data=explode(' ', $res[0]); @@ -123,6 +175,7 @@ if (isset($_REQUEST['Validemail'])) { } else { echo '
Erreur : ID introuvable
'; } +// list email process } elseif (isset($_REQUEST['list'])) { $email=strtolower($_REQUEST['email']); if (! filter_var($email, FILTER_VALIDATE_EMAIL)) { @@ -132,7 +185,7 @@ if (isset($_REQUEST['Validemail'])) { } else if (!preg_match('#\n[a-z0-9]+@'.DOMAIN.' '.$email.'#', file_get_contents(FICHIERALIAS))) { echo '
Vous n\'avez encore aucun alias d\'actif
'; } else { - # Envoi de l'email récapitulatif : + # send email with alias list if (!preg_match('#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#', $email)) { $passage_ligne = "\r\n"; } else { @@ -147,8 +200,9 @@ if (isset($_REQUEST['Validemail'])) { $message.= 'Pour supprimer un email poubelle vous pouvez vous rendre sur le lien ci-dessou : '.$passage_ligne; $message.= "\t * ".URLPAGE.$passage_ligne; mail($email,EMAIL_SUJET_LISTE,$message,$header); - echo '
Un email vous a été adressé avec la liste de vos emails poubelles actifs.
'; + echo '
Un email vous a été adressé avec la liste de vos emails poubelles actifs.
'; } +// } elseif (isset($_REQUEST['email']) && isset($_REQUEST['alias'])) { $alias=strtolower($_REQUEST['alias']); $email=strtolower($_REQUEST['email']); @@ -161,10 +215,10 @@ if (isset($_REQUEST['Validemail'])) { } else if (AliasDeny($alias)) { echo '
Erreur : email poubelle interdit
'; } else if (BlacklistEmail($email)) { - echo '
Erreur : vous avez été blacklisté sur ce service
'; - } elseif (isset($_REQUEST['ajo'])) { + echo '
Erreur : vous avez été blacklisté sur ce service
'; + } elseif (isset($_REQUEST['add'])) { if (preg_match('#\n'.$alias.'@'.DOMAIN.'#', file_get_contents(FICHIERALIAS)) || preg_match('#\n\#[0-9]+ '.$alias.'@'.DOMAIN.'#', file_get_contents(FICHIERALIAS))) { - echo '
Erreur : cet email poubelle est déjà utilisé
'; + echo '
Erreur : cet email poubelle est déjà utilisé
'; } else { if (preg_match('#\n[a-z0-9]+@'.DOMAIN.' '.$email.'#', file_get_contents(FICHIERALIAS))) { AjouterAlias($alias,$email); @@ -172,7 +226,7 @@ if (isset($_REQUEST['Validemail'])) { } else { $id=rand().date('U'); $alias_desactive='#'.$id.' '.$alias; - AjouterAlias($alias_desactive,$email); + AjouterAlias($alias_desactive,$email,0); # Envoi de l'email : if (!preg_match('#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#', $email)) { $passage_ligne = "\r\n"; @@ -181,7 +235,7 @@ if (isset($_REQUEST['Validemail'])) { } $header = 'From: '.EMAIL_FROM.$passage_ligne; $header.= 'MIME-Version: 1.0'.$passage_ligne; - $message= 'Confirmation de la création de votre redirection email poubelle : '.$passage_ligne; + $message= 'Confirmation de la création de votre redirection email poubelle : '.$passage_ligne; $message= $alias.'@'.DOMAIN.' => '.$email.$passage_ligne; $message= 'Cliquer sur le lien ci-dessous pour confirmer : '.$passage_ligne; if (URLREWRITE_DEBUT && URLREWRITE_FIN) { @@ -196,28 +250,35 @@ if (isset($_REQUEST['Validemail'])) { $message.= "\t * ".URLPAGE.'?sup=true&email='.$email.'&alias='.$alias.$passage_ligne; } mail($email,EMAIL_SUJET_CONFIRME.$alias,$message,$header); - echo '
Votre email ('.$email.') nous étant inconnu, une confirmation vous a été envoyé par email.
'; + echo '
Votre email ('.$email.') nous étant inconnu, une confirmation vous a été envoyé par email.
'; } } - } else if (isset($_REQUEST['sup'])) { + } else if (isset($_REQUEST['del'])) { if (preg_match('#\n'.$alias.'@'.DOMAIN.' '.$email.'#', file_get_contents(FICHIERALIAS)) || preg_match('#\n\#[0-9]+ '.$alias.'@'.DOMAIN.' '.$email.'#', file_get_contents(FICHIERALIAS))) { SupprimerAlias($alias,$email); - echo '
Votre email poubelle '.$alias.'@'.DOMAIN.' est maintenant supprimé !
'; + echo '
Votre email poubelle '.$alias.'@'.DOMAIN.' est maintenant supprimé !
'; } else { echo '
Erreur : l\'email poubelle n\'existe pas
'; } } } +// Close connexion DB +if (BACKEND == DB) { + $dbco = null; +} +////////////////// +// Printing form +////////////////// ?>
@
- - + +
- ou - la redirection poubelle + ou + la redirection poubelle
-

Version - Créé par David Mercereau sous licence GNU GPL v3

-

Télécharger et utiliser ce script sur le site du projet emailPoubelle.php

+

Version - Créé par David Mercereau sous licence GNU GPL v3

+

Télécharger et utiliser ce script sur le site du projet emailPoubelle.php

diff --git a/index.php b/index.php new file mode 100755 index 0000000..680e604 --- /dev/null +++ b/index.php @@ -0,0 +1,192 @@ + + + +emailPoubelle - Template-exemple + + + + + + + + +
+
+ OWMX-2 HTML5 & CSS3 +
+
+
+

Emails poubelle libre

+

Générer des emails poubelle sans contrainte de durée de vie.

+ +

Let the Show Begin - Pre and Code

+

This is how it looks if you use pre and code together, for example to highlight and nicely markup a piece of code:

+
pre {
font-size : 12px;
background : #F0F0F0;
}
+

Example Blockquote

+

If you want to quote somebody, you can use this perfectly semantic example for a blockquote:

+ Jonas Jacek +
+ During my years in the Internet Marketing business I have seen and done many things I never thought would be of interest to me or anyone else. +
+

Examples Alerts, Notice & Confirmation

+

These sample styles for alerts and notices are useful if you want to use the template in content management systems.

+

Alert: This is how an alert looks like.

+

Notice: This is how a notice looks like.

+

Confirmation: This is how a confirmation looks like.

+

Example Table

+

The following is the design for a table. The style is simple and user-friendly. Some of the effects were made with CSS3.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Mini HTML5 Reference Guide
TagInfoAttributes
<abbr>abbreviationglobal attributes**
<area>in an image map alt, coords, href, hreflang, media, ping, rel, shape, target, type
<article>article/ contentglobal attributes**
<aside>sidebarglobal attributes**
<audio>sound contentautobuffer, autoplay, controls, loop, src
<b>bold textglobal attributes**
+

Example hCalendar

+

The following is a definition list in combination with the hCalendar microformat.

+
+
11-18-2010
+
Conference Name
+
http://www.conference-website.com/
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi nec eleifend diam. Fusce lobortis odio ac sem scelerisque sed iaculis purus ornare.
+
+

Example Video

+

You can put your Video-Files here...

+ +

Example Audio

+

You can put your Audio-Files here...

+ +

Example Lists

+

Two different kinds of lists were styled: Ordered lists (ol) and unordered (ul) lists.

+
    +
  1. This is
  2. +
  3. The Ordered
  4. +
  5. Listing
  6. +
+
    +
  • This is
  • +
  • The Unordered
  • +
  • Listing
  • +
+

Example Form

+

This is how a form will look like in this template.

+
+ + + + + + +
+ +
+
+

Author: Jonas Jacek | Date: 2010-01-21 | Comments: 7

+

Tags: , , ,

+
+
+ +
+ +
+ diff --git a/template-exemple/ai1.png b/template-exemple/ai1.png new file mode 100755 index 0000000..62ed67a Binary files /dev/null and b/template-exemple/ai1.png differ diff --git a/template-exemple/ai2.png b/template-exemple/ai2.png new file mode 100755 index 0000000..ee83ebe Binary files /dev/null and b/template-exemple/ai2.png differ diff --git a/template-exemple/ai3.png b/template-exemple/ai3.png new file mode 100755 index 0000000..d6ef43d Binary files /dev/null and b/template-exemple/ai3.png differ diff --git a/template-exemple/ai4.png b/template-exemple/ai4.png new file mode 100755 index 0000000..581eeec Binary files /dev/null and b/template-exemple/ai4.png differ diff --git a/template-exemple/ai5.png b/template-exemple/ai5.png new file mode 100755 index 0000000..a59b68c Binary files /dev/null and b/template-exemple/ai5.png differ diff --git a/template-exemple/ai6.png b/template-exemple/ai6.png new file mode 100755 index 0000000..4a6b487 Binary files /dev/null and b/template-exemple/ai6.png differ diff --git a/template-exemple/ai7.png b/template-exemple/ai7.png new file mode 100755 index 0000000..2605b61 Binary files /dev/null and b/template-exemple/ai7.png differ diff --git a/template-exemple/ai8.png b/template-exemple/ai8.png new file mode 100755 index 0000000..ad32853 Binary files /dev/null and b/template-exemple/ai8.png differ diff --git a/template-exemple/hd.jpg b/template-exemple/hd.jpg new file mode 100755 index 0000000..1c172b4 Binary files /dev/null and b/template-exemple/hd.jpg differ diff --git a/template-exemple/html5-ie.js b/template-exemple/html5-ie.js new file mode 100644 index 0000000..3fd3ade --- /dev/null +++ b/template-exemple/html5-ie.js @@ -0,0 +1,10 @@ +document.createElement("header"); +document.createElement("footer"); +document.createElement("section"); +document.createElement("aside"); +document.createElement("nav"); +document.createElement("article"); +document.createElement("figure"); +document.createElement("figcaption"); +document.createElement("hgroup"); +document.createElement("time"); diff --git a/template-exemple/image-1.png b/template-exemple/image-1.png new file mode 100755 index 0000000..3df828f Binary files /dev/null and b/template-exemple/image-1.png differ diff --git a/template-exemple/img1.png b/template-exemple/img1.png new file mode 100755 index 0000000..2f7da49 Binary files /dev/null and b/template-exemple/img1.png differ diff --git a/template-exemple/img2.png b/template-exemple/img2.png new file mode 100755 index 0000000..7f96f2a Binary files /dev/null and b/template-exemple/img2.png differ diff --git a/template-exemple/img3.png b/template-exemple/img3.png new file mode 100755 index 0000000..d6f95eb Binary files /dev/null and b/template-exemple/img3.png differ diff --git a/template-exemple/img4.png b/template-exemple/img4.png new file mode 100755 index 0000000..7e97bb4 Binary files /dev/null and b/template-exemple/img4.png differ diff --git a/template-exemple/img5.png b/template-exemple/img5.png new file mode 100755 index 0000000..2dc26ef Binary files /dev/null and b/template-exemple/img5.png differ diff --git a/template-exemple/img6.png b/template-exemple/img6.png new file mode 100755 index 0000000..dff318b Binary files /dev/null and b/template-exemple/img6.png differ diff --git a/template-exemple/jabz-logo.png b/template-exemple/jabz-logo.png new file mode 100755 index 0000000..d0b6852 Binary files /dev/null and b/template-exemple/jabz-logo.png differ diff --git a/template-exemple/jonas-jacek.png b/template-exemple/jonas-jacek.png new file mode 100755 index 0000000..151f01e Binary files /dev/null and b/template-exemple/jonas-jacek.png differ diff --git a/template-exemple/readme.txt b/template-exemple/readme.txt new file mode 100644 index 0000000..bc86176 --- /dev/null +++ b/template-exemple/readme.txt @@ -0,0 +1,34 @@ +#################################################### +# License # +#################################################### + +This W3C-compliant, CSS-based website template has a +Creative Commons Attribution-Share Alike 3.0 +Unported License. +>> http://creativecommons.org/licenses/by-sa/3.0/ + + +#################################################### +# What You Can Do # +#################################################### + +Feel free to remix, copy, distribute and transmit +this template. All I ask is that you keep the +footer links in the template intact. Also, if you +alter, transform, or build upon this work, you +may distribute the resulting work only under the +same, similar or a compatible license. + + +#################################################### +# Feedback & Action # +#################################################### + +I'd love to get your feedback on the template. +Please contact me with your critics, ideas, etc. +>> http://www.jabz.info/contact/jonas-jared-jacek/ + +If you like to contribute your remix, I will be +more than happy to put your version on owmx.com +and credit you in http://www.owmx.com/credits/. + diff --git a/template-exemple/style.css b/template-exemple/style.css new file mode 100644 index 0000000..d49d890 --- /dev/null +++ b/template-exemple/style.css @@ -0,0 +1,432 @@ +/*================================================== +Template: OWMX-2 +Resource: http://www.owmx.com/ +Version: 1.0 +Date: 2010-09-13 +Editor: Jonas Jacek +License: CC Attribution-Share Alike 3.0 Unported +==================================================*/ + +/* Reset */ +header, footer, article, nav, section, aside, time, hgroup { + display : block; +} +html, body, header, footer, article, nav, section, aside, time, h1, h2, h3, p, a, ul, li, dl, dd, dt, table, thead, tfoot, tbody, th, tr, td { + border : 0; + font : 12px/22px Verdana, sans-serif; + margin : 0; + outline : 0; + padding : 0; +} + +/* BASICS */ +BODY { + background : #FFF; + border-top : 5px solid #FFF; + color : #444; +} + +A { + color : #0A647C; + text-decoration : none; + } + A:HOVER { + color : #DB0202; + } + +H1, H3, H4, H5, H6 { + background : url(../i/ai4.png) no-repeat 0 7px; + border-bottom : 1px dotted #B5B3A9; + color : #333; + font-weight : bold; + margin : 0 0 10px; + padding : 0 0 0 25px; + } + H1 { + background : url(../i/ai4.png) no-repeat 0 6px; + font-size : 15px; + } + H2 { + font-size : 14px; + margin : 0 0 20px 0; + } + H3 { + background : url(../i/ai5.png) no-repeat 0 7px; + } + H3, H4, H5, H6 { + font-size : 13px; + } + +SUP { + top : -4px; +} + +/* Header */ +header { + -moz-border-radius : 4px; + -webkit-border-radius : 4px; + background : #006699 url(../i/hd.jpg) no-repeat top left; + margin : 0 0 10px 0; + padding : 10px 10px; + position : relative; + } + header a { + color : #FFF; + font-size : 16px; + } + header a:hover { + color : #FFF; + } + +/* Article */ +article { + border-left : 1px dotted #666; + float : right; + height : auto; + padding : 0 0 0 20px; + width : 560px; + } + article p { + margin : 0 0 20px 0; + } + article img { + float : left; + margin : 6px 10px 0 0; + } + +/* Highlighted Paragraphs */ +.highlight-1, .highlight-2, .highlight-3 { + -moz-border-radius : 4px; + -webkit-border-radius : 4px; + padding : 5px 10px; +} + .highlight-1 { + background : #FFCCCC; + border : 1px dotted #FF9966; + } + .highlight-2 { + background : #FFFF99; + border : 1px dotted #FFCC33; + } + .highlight-3 { + background : #CCFF99; + border : 1px dotted #CCCC33; + } + +/* Citations & Quotes */ +cite { + border-left: 2px solid #006699; + color : #666; + font-size : 10px; + font-style : normal; + font-weight : bold; + margin : 0; + padding : 5px 10px; +} + +blockquote { + border-left: 2px solid #006699; + color : #666; + margin : 0 0 20px 0; + padding : 5px 10px; +} + +/* Pre & Code */ +pre { + color : #333; + font-size : 10px; + line-height : 15px; /*--Height of each line of code--*/ + overflow : hidden; /*--If the Code exceeds the width, put "auto" and scrolling is available--*/ + overflow-Y : hidden; /*--Hides vertical scroll created by IE--*/ + } + pre code { + background : #EEE; + border-left : 2px solid #006699; + margin : 0 0 10px 0; + padding : 5px; + display : block; + } + +/* Table */ +table { + border-collapse : collapse; + text-align:left; + margin : 0 0 20px 0; + } + caption { + -moz-border-radius : 4px; + -webkit-border-radius : 4px; + background : #006699; + color : #FFF; + font-weight : bold; + } + tr:nth-child(odd) { + background : #FFF; + } + tr:nth-child(even) { + background : #DDD; + } + tr:hover td { + color : #006699; + } + td, th { + min-width : 120px; + padding : 0 5px; + vertical-align:top; + } + th { + background : #FFF; + border-bottom : 2px solid #006699; + color : #666; + font-size : 10px; + font-weight : bold; + } + td { + border-bottom : 1px solid #CCC; + font-size : 10px; + } + +/* Calendar */ +dl.vevent { + margin : -20px 0 20px 0; + padding : 0; + } + .vevent dt { + font-size : 10px; + position : relative; + left : 0; + top : 22px; + font-weight : bold; + } + .vevent dd + { + border-left : 2px solid #006699; + font-size : 11px; + margin : 0 0 0 80px; + padding : 0 0 0 10px; + } + dd.summary { + font-weight : bold; + } + .vevent a { + font-size : 11px; + } + +/* Forms */ +article form { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + background : #DDD; + margin : 0 0 20px; + padding : 10px; + } + article label { + color : #666; + display : block; + font-size : 10px; + font-weight : bold; + margin : 0 0 0 2px; + } + article input, article textarea { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border : 1px solid #CCC; + font-size : 11px; + padding : 4px 5px; + width : 458px; + } + article input { + margin : 0 0 10px; + } + article input.button, .btn { + background: #999; + border : 1px solid #888; + color: #FFF; + cursor : pointer; + font-weight : bold; + margin : 10px 0 0 0; + text-shadow : 0 -1px 1px rgba(0,0,0,0.25); + width : 25%; + } + article textarea { + height : 100px; + } + +/* Lists */ +article ul, aside ul { + list-style : none; + margin : 0 0 20px 0; + } + article ul { + margin : 0 0 20px 23px; + } + article ul li { + background : url(../i/ai2.png) no-repeat 0 8px; + padding : 0 0 0 17px; + } + +/* Sidebar */ +aside { + float : left; + margin : 0 0 20px 0; + width : 200px; +} + +/* Search Box */ +.s { + -moz-border-radius : 4px; + -webkit-border-radius : 4px; + margin : 0 0 20px 0; + padding : 10px; + width : 179px; + } + .s input { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border : 1px solid #CCC; + color : #999; + font-size : 11px; + padding : 4px 5px; + width : 168px; + } + +/* Navigation & Menu */ +nav ul { + list-style : none; + } + nav li { + background : url(../i/ai1.png) no-repeat 0 8px; + padding : 0 0 0 15px; + } + nav li ul, aside li ul li ul { + margin : 0; + } + nav li li a { + font-size : 11px; + } + nav li li li a { + font-size : 10px; + } + nav li li li, aside li.active li li { + background : url(../i/ai8.png) no-repeat 0 10px; + } + nav li.active, aside li.active li { + background : url(../i/ai2.png) no-repeat 0 8px; + } + +/* Gallery */ +.gallery { + list-style : none; + margin : 0 0 10px; + } + .gallery li { + display: inline; + margin : 0 15px 0 0; + } + .gallery a img { + border : 1px solid #999; + height : 50px; + opacity: 0.8; + padding : 1px; + width : 50px; + } + .gallery li:last-child { + margin : 0 0 10px 0; + } + .gallery a img:hover{ + opacity: 1; + } + +/* Ad Space */ +.adspace { + -moz-border-radius : 4px; + -webkit-border-radius : 4px; + -moz-box-shadow : 0 2px 2px rgba(0,0,0,0.3); + -webkit-box-shadow : 0 2px 2px rgba(0,0,0,0.3); + background : #EEE; + height : 100%; + margin : 0 0 20px 0; + padding : 5px 10px; + text-align : center; + width : 178px; + } + .adspace a img { + border : none; + } + +/* Tag Cloud */ +#tagcloud { + overflow : hidden; + width : 200px; + } + #tagcloud li { + display : inline; + margin : 0 10px 0 0; + } + .tagcloudsize-1 a { + font-size : 14px; + } + .tagcloudsize-2 a { + font-size : 16px; + } + .tagcloudsize-3 a { + font-size : 18px; + } + +/* Footer */ +footer { + border-top : 1px dotted #B5B3A9; + clear : both; + margin : 20px 0; + } + footer a, footer p { + color : #666; + display : inline; + font-size : 10px; + } + +/* Wrappers */ +#a, #b { + margin : 0 auto; + position : relative; + } + #a { + width : 800px; + } + #b { + overflow : hidden; + } + +/* Shadow-Boxes*/ +#c, .meta, .s { + -moz-border-radius : 4px; + -webkit-border-radius : 4px; + -moz-box-shadow : 0 2px 2px rgba(0,0,0,0.3); + -webkit-box-shadow : 0 2px 2px rgba(0,0,0,0.3); + background : #EEE; + } + #c { + background : #EEE; + margin : 0 0 20px 0; + padding : 5px 10px; + width : 178px; + } + #c p, #c a { + font-size : 11px; + line-height : 15px; + } + #c p { + margin : 0 0 10px 0; + } + #c img { + float : left; + margin : 4px 10px 2px 0; + } + .meta { + margin : 20px 0 3px; + padding : 2px 5px; + } + .meta p, .meta a { + font-size : 10px; + margin : 0; + }