Initial commit

This commit is contained in:
2014-05-31 16:22:09 +02:00
commit c25d541a7d
43 changed files with 1688 additions and 0 deletions

4
.htaccess Normal file
View File

@@ -0,0 +1,4 @@
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?lutran\.fr$
RewriteRule ^/francois(/.*)?$ http://francois.lutran.fr$1 [R=301,L]

BIN
cv_julien_lutran.pdf Normal file

Binary file not shown.

4
images/.htaccess Normal file
View File

@@ -0,0 +1,4 @@
<Files pic.jpg>
order allow,deny
deny from all
</Files>

BIN
images/bg.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 B

BIN
images/cfa.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
images/close.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 419 B

BIN
images/contactme.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
images/experience.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
images/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
images/globe.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
images/grey_bg.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
images/linkedin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
images/loading_white.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 723 B

BIN
images/logocfa.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
images/netapp.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
images/paperclip.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
images/pdf.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
images/pic.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 B

BIN
images/pic.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
images/pic.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
images/print.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
images/tipsy.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 B

BIN
images/university.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
images/up.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

7
includes/.htaccess Normal file
View File

@@ -0,0 +1,7 @@
<Files ~ "^log">
Order allow,deny
Deny from all
Satisfy all
</Files>

163
includes/config.php Normal file
View File

@@ -0,0 +1,163 @@
<?php
//Buffers PHP messages
ob_start();
$sType = isset($_REQUEST['t'])?$_REQUEST['t']:'';
$sSerial = isset($_GET['a'])?$_GET['a']:'';
$sName = isset($_POST['name'])?$_POST['name']:'';
$sEmail = isset($_POST['email'])?$_POST['email']:'';
$sSubject = isset($_POST['subject'])?$_POST['subject']:'';
$sMsg = isset($_POST['message'])?$_POST['message']:'';
$sResult = '';
$oCv = new cv();
switch($sType)
{
case 'javascript':
$sResult = $oCv->getJavascript();
break;
case 'pic':
$sResult = $oCv->getPic($sSerial);
break;
case 'mail':
$sResult = $oCv->sendEmail($sName, $sEmail, $sSubject, $sMsg);
break;
}
ob_end_clean();
echo $sResult;
class cv {
const LOG_FILE = 'log';
const PIC_PATH = '../images/pic.png';
const PUBLIC_KEY_LENGTH = 13;
const MAX_REQUEST_TIME = 10;
private $iLoadTime;
public function __construct()
{
$this->setLoadTime();
}
private function setLoadTime()
{
$this->iLoadTime = time();
}
private function getLoadTime()
{
return $this->iLoadTime;
}
public function getJavascript()
{
//Build picture key
$sPublicKey = uniqid();
$sSecretKey = $this->getLoadTime();
list($iWidth, $iHeight) = getimagesize(self::PIC_PATH);
file_put_contents(self::LOG_FILE, $sPublicKey.$sSecretKey."\n", FILE_APPEND);
//Display javascript functions
$asResult = array();
$asResult[] = "var cConfigPage = '".$this->getAppPath().basename(__FILE__)."'";
$asResult[] = "var a = '$sPublicKey';";
$asResult[] = "var iPicWidth = $iWidth;";
$asResult[] = "var iPicHeight = $iHeight;";
$asResult[] = file_get_contents('../jquery/jquery.functions'.(file_exists('../jquery/jquery.functions.js')?'':'.min').'.js');
return implode("\n", $asResult);
}
public function getPic($sSerial)
{
if($this->checkSerial($sSerial))
{
header('Content-Type: image/jpeg');
return file_get_contents(self::PIC_PATH);
}
else
{
header('HTTP/1.1 403 Forbidden');
}
}
public function sendEmail($sName, $sEmail, $sSubject, $sMsg)
{
$sResult = '';
if($sName!='' && $sEmail!='' && $sSubject!='' && $sMsg!='')
{
//Message
$sHtmlMessage = 'From: '.$sName."<br />".
'Email: '.$sEmail."<br /><br />".
'Subject: '.$sSubject."<br />".
'Message: <br /><br />'.str_replace("\n", '<br />', $sMsg);
$sPlainMessage = strip_tags(str_replace('<br />', "\n", $sHtmlMessage));
//Email
$iBoundary = uniqid("HTMLEMAIL");
$sHeaders = 'From: Contact CV <www-data@lutran.fr>'."\r\n".
'Reply-To: Contact CV <www-data@lutran.fr>'."\r\n".
'Cc: Julien Lutran <julien@lutran.fr>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: multipart/alternative;'.
'boundary = '.$iBoundary."\r\n\r\n".
'MIME encoded Message'.
'--'.$iBoundary."\r\n".
'Content-Type: text/plain; charset=UTF-8'."\r\n".
'Content-Transfer-Encoding: base64'."\r\n\r\n".
chunk_split(base64_encode($sPlainMessage)).
'--'.$iBoundary."\r\n".
'Content-Type: text/html; charset=UTF-8'."\r\n".
'Content-Transfer-Encoding: base64'."\r\n\r\n".
chunk_split(base64_encode($sHtmlMessage));
//Store in case email fails
@file_put_contents('log.html', '<br />----<br /><br />'.$sHtmlMessage, FILE_APPEND);
//Send
if(mail('julien.lutran@gmail.com', 'julien.lutran.fr - Contact Me Message', '', $sHeaders))
{
$sResult = 'ok';
}
else
{
$sResult = 'An unknown error occured.';
}
}
else
{
$sResult = 'An error occured: Some fields were empty.';
}
return $sResult;
}
private function checkSerial($sSerial)
{
$bResult = false;
if(strlen($sSerial)==self::PUBLIC_KEY_LENGTH && strpos($this->getAppPath(), $_SERVER['HTTP_REFERER'])===0)
{
$sFileContent = file_get_contents(self::LOG_FILE);
$asKeys = array_filter(explode("\n", $sFileContent));
foreach($asKeys as $sKey)
{
$iOffset = $this->getLoadTime() - substr($sKey, self::PUBLIC_KEY_LENGTH);
if($sSerial == substr($sKey, 0, self::PUBLIC_KEY_LENGTH) && $iOffset < self::MAX_REQUEST_TIME)
{
$bResult = true;
file_put_contents(self::LOG_FILE, str_replace($sKey."\n", '', $sFileContent));
break;
}
}
}
return $bResult;
}
private static function getAppPath()
{
$sAppPath = 'http://'.str_replace(array('http://', 'https://'), '', $_SERVER['SERVER_NAME'].dirname($_SERVER['SCRIPT_NAME']));
$sAppPath = $sAppPath.(substr($sAppPath, -1)!='/'?'/':'');
return $sAppPath;
}
}
?>

17
includes/log Executable file
View File

@@ -0,0 +1,17 @@
5112b54426d521360180548
5112b544a62b01360180548
5112b544c791e1360180548
5112b5453dbab1360180549
5112b545a81b61360180549
5112b54629ac21360180550
51bc5dce60f101371299278
51bc5de3e11031371299299
51bc5e2ecff261371299374
51bc5e42efa501371299394
51bc5e5e00b251371299421
51bc5e6cd2a3c1371299436
51bc5e99bdc601371299481
51bc5e9a0366e1371299482
51bc5e9b24aa21371299483
52508e576666a1381011031
52a72476548fd1386685558

298
index.html Normal file
View File

@@ -0,0 +1,298 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Julien Lutran </title>
<meta name="robots" content="noimageindex" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="description" content="cv Julien Lutran" />
<meta name="keywords" content="cv ingenieur stockage SAN" />
<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico" />
<link rel="shortcut icon" href="images/favicon.ico" />
<link href="style/style.normalize.css" rel="stylesheet" type="text/css" />
<link href="style/style.screen.css" rel="stylesheet" type="text/css" />
<link href="style/style.print.css" rel="stylesheet" type="text/css" media="print" />
<!--[if lt IE 7]>
<link href="style/style.ie.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery/fix.ie.js"></script>
<![endif]-->
<script src="jquery/cufon-yui.js" type="text/javascript"></script>
<script src="jquery/cufon.fonts.js" type="text/javascript"></script>
<script src="jquery/jquery.min.js" type="text/javascript"></script>
<script src="jquery/jquery.tipsy.min.js" type="text/javascript"></script>
<script src="includes/config.php?t=javascript" type="text/javascript"></script>
</head>
<body>
<div id="cv">
<div id="header" class="section header fixed">
<div class="paperclip"></div>
<div class="person">
<img oncontextmenu="return false;" id="pic" src="images/pic.gif" alt="Julien Lutran" />
<h1>Julien Lutran</h1>
<h2><span>Ingenieur Stockage SAN</span></h2>
</div>
<div id="card">
<ul class="card_buttons">
<li><a href="http://fr.linkedin.com/in/jlutran" target="_blank" title="Linked InProfile" class="tip_link"><img src="images/linkedin.png" alt="linkedin icon"/></a></li>
<!-- <li><a href="http://www.viadeo.com/profile/002dz1joe6vsejk/en" target="_blank" title="Viadeo Profile" class="tip_link"><img src="images/viadeo.png" alt="viadeo"/></a></li>-->
<li><a href="cv_julien_lutran.pdf" title="T&eacute;l&eacute;charger le CV (pdf)" class="tip_link"><img src="images/pdf.png" alt="pdf" /></a></li>
<li><a href="#" id="print" title="Print this page" class="tip_link"><img src="images/print.png" alt="Print"/></a></li>
</ul>
<ul class="card_items">
<li class="xp"><a href="#work">8 ann&eacute;es d'experience</a></li>
<li class="globe"><a href="#certif">Certification NetApp NCDA</a></li>
<li class="university"><a href="#licence">License Professionnelle</a></li>
</ul>
<a id="contact_me_btn" class="contact_me_btn clickable" href="#">Contactez-moi</a>
</div>
</div>
<div id="contact_me_box" class="section contact fixed hide">
<div id="contact_me">
<form id="contact_form" method="post">
<input type="button" id="contact_me_close" class="btn close clickable" value="" />
<div id="formstatus"></div>
<fieldset id="contact_fields">
<p><input type="text" name="name" value="Name*" /><input type="text" name="email" value="Email*" /></p>
<p><input type="text" name="subject" value="Subject*" class="large_box" /></p>
<p><textarea class="large_box" name="message" rows="3" cols="25">Message*</textarea></p>
<p><input class="btn" type="reset" value="Reset" />&nbsp;<input class="btn" type="submit" value="Send" /></p>
</fieldset>
</form>
</div>
</div>
<div id="profile" class="section profile fixed">
<h2 class="section_name">Presentation</h2>
<div class="section_items">
<div class="item last_item">
<p>Après 6 ans d'administration système sur les environnements de production de plusieurs grands comptes, j'ai eu l'opportunité d'intégrer une équipe d'ingénierie en infrastructure. Ce poste m'a permis de me spécialiser dans le domaine du stockage SAN et de concevoir des solutions pour des clients implantés à l'international.</p>
<p>Toujours curieux et passionné par les nouvelles technologies, mon expérience me permet de m'adapter rapidement afin de relever avec succès chaque nouveau challenge professionnel que l'on peut me confier.</p>
<p class="last"><a id="contact_me_link" class="no_print_link" href="#contact_me">Contactez-moi <span id="mail"></span>pour plus d'informations</a>.</p>
</div>
</div>
</div>
<div id="work" class="section work fixed">
<h2 class="section_name">Experience professionnelle</h2>
<div class="section_items">
<div class="item">
<h4>Depuis septembre 2011</h4>
<h2>Ing&eacute;nieur Stockage SAN</h2>
<h3><span class="company">SII</span>, Rennes</h3>
<ul>
<li>
<span class="title">Ing&eacute;nieur Stockage SAN</span>
<div class="cover"><div class="info">
<p><a href="http://www.orange-business.com" class="tip_card" target="_blank" title="Orange Business Services"><img src="images/experience.png" alt="Orange Business Services" />Orange</a></p>
<ul>
<li>Rennes</li>
<li>Architecture SAN</li>
<li>Actuellement</li>
</ul>
</div></div>
<ul>
<li class="subtitle">Ing&eacute;nerie Stockage SAN et support L3</li>
<li class="action">Analyse et conception de solutions de stockage EMC et NetApp</li>
<li class="action">Test et validation des nouveaux produits, r&eacute;daction de documentations techniques</li>
<li class="action">Support aux &eacute;quipes d'avant-vente et d'impl&eacute;mentation</li>
<li class="action">Support aux &eacute;quipes BackOffice pour la résolution d'incidents complexes</li>
<li class="action">Analyse et r&eacute;solution de problèmes performances sur les infrastructures de stockage client</li>
<li class="action">D&eacute;veloppement de scripts d'industrialisation</li>
<li class="action">Veille technologique</li>
</ul>
</li>
</ul>
<ul>
<li>
<span class="title">Administrateur Stockage SAN</span>
<div class="cover"><div class="info">
<p><a href="http://www.orange-business.com" class="tip_card" target="_blank" title="Orange Business Services"><img src="images/experience.png" alt="Orange Business Services" />Orange</a></p>
<ul>
<li>Rennes</li>
<li>EMC / NetApp</li>
<li>SAN Brocade</li>
<li>18 mois</li>
</ul>
</div></div>
<ul>
<li class="subtitle">Support L2 sur l'infrastructure SAN des clients OBS</li>
<li class="action">Expertise technique sur l'infrastructure existante, optimisation de l'occupation disque, tuning de performance SAN...</li>
<li class="action">D&eacute;veloppement de scripts de reporting et d'alerte capacitaire</li>
<li class="action">R&eacute;daction de proc&eacute;dures techniques</li>
<li class="action">Support aux &eacute;quipes BackOffice (Inde / Egypte)</li>
<li class="action">Astreintes et interventions planifi&eacute;es en HNO</li>
</ul>
</li>
</ul>
</div>
<div class="item">
<h4>Octobre 2010 - Septembre 2011</h4>
<h2>Ing&eacute;nieur syst&egrave;mes</h2>
<h3><span class="company">EFFITIC</span>, Rennes</h3>
<ul>
<li>
<span class="title">Ing&eacute;nieur Syst&egrave;mes UNIX</span>
<div class="cover"><div class="info">
<p><a href="https://www.labanquepostale.fr" target="_blank"><img src="images/experience.png" alt="Banque Postale" />La Poste</a></p>
<ul>
<li>Rennes</li>
<li>AIX, Solaris, ESX</li>
<li>12 mois</li>
</ul>
</div></div>
<ul>
<li class="subtitle">Expertise UNIX et réalisation de projets techniques</li>
<li class="action">Administration des environnements de production (SI des bureaux de Poste, automates d'affranchissement, etc...)</li>
<li class="action">Expertise technique sur l'infrastructure virtuelle existante : IBM pSeries (LPAR), Zones Solaris et hyperviseurs ESX</li>
<li class="action">Impl&eacute;mentation syst&egrave;me AIX, Solaris et Linux RedHat</li>
<li class="action">Migration de l'infrastructure virtualis&eacute;e ESX 3.5 vers 4.1</li>
<li class="action">Astreintes et interventions planif&eacute;es en HNO</li>
</ul>
</li>
</ul>
</div>
<div class="item last_item">
<h4>Mai 2005 - Octobre 2010</h4>
<h2>Administrateur Syst&egrave;mes &amp; Sauvegarde</h2>
<h3><span class="company">Steria</span>, Paris</h3>
<ul>
<li>
<span class="title">Administrateur Syst&egrave;mes &amp; Sauvegarde</span>
<div class="cover"><div class="info">
<p><a href="http://fr.sun.com" target="_blank"><img src="images/experience.png" alt="Sun Microsystems" />Sun</a></p>
<ul>
<li><a href="http://www.oracle.com" target="_blank" class="tip_card no_print_link" title="Official Website">Groupe Oracle</a></li>
<li>V&eacute;lizy</li>
<li>Solaris, Linux</li>
<li>40 mois</li>
</ul>
</div></div>
<ul>
<li class="subtitle">Administration UNIX / Linux pour EDF R&D</li>
<li class="action">Migration des bases métier vers Oracle 10g</li>
<li class="action">Installation d'une plateforme de stockage HP EVA 8100 et rédaction de procédures d'exploitation</li>
<li class="action">Etude et migration de l'authentification centralisée de NIS vers OpenLDAP
<li class="action">Exploitation de cluster HPC IBM Blue Gene/L et Blue Gene/P</li>
<li class="action">Gestion des sauvegardes serveurs: politique, rétention, externalisation</li>
</ul>
</li>
<li>
<span class="title">Technicien informatique</span>
<div class="cover"><div class="info">
<p><a href="http://innovation.edf.com" target="_blank"><img src="images/experience.png" alt="Bacardi" />EDF R&amp;D</a></p>
<ul>
<li>Clamart</li>
<li>Linux, Windows</li>
<li>25 mois</li>
</ul>
</div></div>
<ul>
<li class="subtitle">Installation et dépannage sur site EDF R&D</li>
<li class="action">Gestion des changements et incidents de niveau 2 sur stations de travail (Linux Debian et Windows 2000/XP)</li>
<li class="action">C&acirc;blage et configuration des &eacute;quipements r&eacute;seau</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
<div class="section language fixed">
<h2 class="section_name">Langues</h2>
<div class="section_items">
<div class="item">
<h4>lu, &eacute;crit et parl&eacute;</h4>
<h2>English</h2>
</div>
<div class="item last_item">
<h4>Langue maternelle</h4>
<h2>French</h2>
</div>
</div>
</div>
<div class="section technical fixed">
<h2 class="section_name">Competences techniques</h2>
<div class="section_items">
<div class="item">
<h4>Avanc&eacute;, 3 ans</h4>
<h2>Stockage &amp; Sauvegarde</h2>
<ul>
<li>Stockage SAN & NAS
<ul>
<li>EMC : Celerra, Clariion, DMX, VNX, VMAX</li>
<li>NetApp : Data ONTAP 7-Mode & Clustered ONTAP (Certification NCDA)</li>
<li>HDS : AMS</li>
<li>HP : EVA</li>
<li>IBM : SVC</li>
</ul>
</li>
<li class="no_child"><span class="inline_title">R&eacute;seau SAN :</span>Brocade (24k, 48k, DCX, 5300, 6510)</li>
<li class="no_child"><span class="inline_title">Protocoles :</span>FC, iSCSI, NFS, SMB</li>
<li class="no_child last"><span class="inline_title">Sauvegarde :</span>Networker, Time Navigator</li>
</ul>
</div>
<div class="item last_item">
<h4>Expert, 6 ans</h4>
<h2>Syst&egrave;mes &amp; Virtualisation</h2>
<ul>
<li>Syst&egrave;mes
<ul>
<li>Unix : AIX (pSeries), Solaris, HP-UX</li>
<li>Linux : RedHat, Debian</li>
<li>Windows Server : 2003, 2008, 2012</li>
</ul>
</li>
<li>Virtualisation
<ul>
<li>Hyperviseurs : VMware ESX, KVM, Xen</li>
<li>Containers : Zones Solaris, OpenVZ</li>
<li>Partitionnement dynamique IBM (VIO / LPAR)</li>
</ul>
</li>
<li class="no_child"><span class="inline_title">Outils :</span>Veritas Volume Manager, ZFS, LVM</li>
<li class="no_child"><span class="inline_title">HA Cluster :</span>Veritas Cluster Server, Heartbeat + Pacemaker</li>
<li class="no_child"><span class="inline_title">Authentification centralis&eacute;e :</span>NIS, LDAP, Active Directory</li>
<li class="no_child"><span class="inline_title">SGBD :</span>Oracle, MySQL</li>
<li class="no_child last"><span class="inline_title">Scripting :</span>Bash, Perl</li>
</ul>
</div>
</div>
</div>
<div class="section education fixed">
<h2 class="section_name">Formation</h2>
<div class="section_items">
<div class="item" id="certif">
<a class="logo netapp" target="_blank" href="http://www.netapp.com/us/services-support/university/index.aspx"></a>
<h4>2012</h4>
<h2>Formation professionnelle</h2>
<h3>NetApp, France</h3>
<ul>
<li>Certification : NetApp NCDA
<ul>
<li><a href="http://www.netapp.com/us/services-support/university/certifications/ncda.aspx">NetApp Certified DataONTAP Administrator</a></li>
</ul>
</li>
<li class="last">Formation
<ul>
<li>Accelerated NCDA Boot Camp Data ONTAP 7-Mode</li>
<li>DataONTAP 7-Mode Administration</li>
</ul>
</li>
</ul>
</div>
<div class="item last_item" id="licence">
<a class="logo cfa" target="_blank" href="http://www.cfadevinci.fr/"></a>
<h4>2005</h4>
<h2>Licence professionnelle</h2>
<h3>P&ocirc;le Universitaire L&eacute;onard de Vinci, Paris La D&eacute;fense</h3>
<ul>
<li>Dipl&ocirc;me
<ul><li>Certifi&eacute; RNCP niveau II (Mention Bien)</li></ul>
</li>
<li>Sp&eacute;cialisation
<ul><li>Gestion de Ressources Informatiques</li></ul>
</li>
</ul>
</div>
</div>
</div>
<a href="#top" id="to_top" class="arrow_up" title="To the top"><img src="images/up.png" alt="Up" /></a>
</div>
</body>
</html>

5
jquery/.htaccess Normal file
View File

@@ -0,0 +1,5 @@
<Files jquery.functions.js>
order allow,deny
deny from all
</Files>

7
jquery/cufon-yui.js vendored Normal file

File diff suppressed because one or more lines are too long

17
jquery/cufon.fonts.js Normal file

File diff suppressed because one or more lines are too long

14
jquery/fix.ie.js Normal file

File diff suppressed because one or more lines are too long

234
jquery/jquery.functions.js Normal file
View File

@@ -0,0 +1,234 @@
$(document).ready
(
function()
{
//Add picture
if(typeof a != 'undefined')
{
var $Pic = $('#pic');
$Pic.css('height', iPicHeight+'px');
$('.person').css('marginTop', Math.round(($('#header').height() - $Pic.outerHeight())/2));
$Pic.attr('src', cConfigPage+'?t=pic&a='+a);
}
//Fix IE
if(typeof bIsIE != 'undefined')
{
//IE6 PNG Support
DD_belatedPNG.fix('.paperclip');
}
//Font modification
Cufon.now();
//Title captions
$(function() {$('.tip_link').tipsy({gravity: 's'});});
$(function() {$('.tip_card').tipsy({gravity: 'e'});});
//Replace text with Cufons
Cufon.replace('h1', {fontFamily:'Candara'});
Cufon.replace('.item h2', {fontFamily:'Puritan 2.0'});
Cufon.replace('.item h3', {fontFamily:'Puritan 2.0'});
Cufon.replace('h2.section_name', {fontFamily:'Hattori Hanzo Light'});
//Contact panel events
$('#contact_me_btn, #contact_me_link').click
(
function(e)
{
e.preventDefault();
$('#contact_me_box').slideToggle('slow');
}
);
$('#contact_me_close').click(function(){$('#contact_me_btn').trigger('click');});
//Sending contact form
$("#contact_form").submit
(
function()
{
$This = $(this);
var bValid = true;
$This.find('input[type=text], textarea').each
(
function(iId, oItem)
{
var $Item = $(oItem);
sName = $Item.attr('name');
if(typeof sName != 'undefined' && sName != '')
{
var sVal = $Item.val();
if(sVal=='' || sVal==sName.getDefVal())
{
bValid = false;
}
}
}
);
if(!bValid)
{
addAutoDestroyMsg('#formstatus', 'Some fields are still empty.', 'warning');
}
else
{
addAutoDestroyMsg('#formstatus', 'Sending...', 'loading', -1);
ajax('POST', 'mail', $This, function(sMsg)
{
console.log('msg='+sMsg);
var result = '';
if(sMsg == 'ok')
{
addAutoDestroyMsg('#formstatus', 'Your message has been sent. Thank you!', 'success', -1);
$("#contact_fields, #contact_me_close").fadeOut('fast');
setTimeout("$('#contact_me_btn').trigger('click');", 3000);
}
else
{
addAutoDestroyMsg('#formstatus', sMsg, 'error');
}
});
/*var str = $This.serialize();
$.ajax
(
{
type: "POST",
url: "includes/send.php",
data: str,
success: function(sMsg)
{
var result = '';
if(sMsg == 'ok')
{
addAutoDestroyMsg('#formstatus', 'Your message has been sent. Thank you!', 'success', -1);
$("#contact_fields, #contact_me_close").fadeOut('fast');
setTimeout("$('#contact_me_btn').trigger('click');", 3000);
}
else
{
addAutoDestroyMsg('#formstatus', sMsg, 'error');
}
}
}
);*/
}
return false;
}
);
//Default Form Values
$('#contact_form input, #contact_form textarea').each
(
function()
{
var $This = $(this);
var sName = $This.attr('name');
if(sName!=undefined && sName!='')
{
$This.focus(function(){if($This.val()==sName.getDefVal())$This.val('');});
$This.blur(function(){if($This.val()=='')$This.val(sName.getDefVal());});
}
}
);
//Print
$('#print').click
(
function(e)
{
e.preventDefault();
$('#mail').text('at '+$(location).attr('href').substr(5).replace(/\//g, '').replace('.', '@')+' ');
window.print();
$('#mail').text('');
}
);
//Internal links
$('a[href^=#]').click(function(e){$(this).jump(e);});
//To-the-top Button
iProfileHeight = $('#profile').offset().top;
$(window).scroll
(
function()
{
$ToTop = $("#to_top");
if($(this).scrollTop() > iProfileHeight)
{
$ToTop.fadeIn('slow');
}
else
{
$ToTop.fadeOut('slow');
}
}
);
}
);
//HTTP request
function ajax(sRequestType, sActionType, sData, fSuccess)
{
console.log(sData);
if(!sData) sData = {};
sData['t'] = sActionType;
console.log(sData);
if(sRequestType == 'POST')
{
sData = sData.serialize();
sData += (sData.length==0?'':'&')+'t='+sActionType;
}
else sData['t'] = sActionType;
console.log(sData);
$.ajax
(
{
type: sRequestType,
url: cConfigPage,
data: sData,
success: fSuccess,
dataType: 'text'
}
);
}
//Get form default value
String.prototype.getDefVal = function()
{
return this.charAt(0).toUpperCase() + this.slice(1) + '*';
};
//Scroll to an element
$.prototype.jump = function(e)
{
var sElem = this.attr('href');
if(sElem != '#')
{
e.preventDefault();
this.blur();
var $Elem = $(sElem);
var iOffSet = ($Elem.length>0)?($Elem.offset().top - 15):0;
$('html, body').animate({scrollTop:iOffSet}, 'slow');
}
}
//Add a temporary message
function addAutoDestroyMsg(sContainerId, sMsg, sClass, iTime)
{
if(!iTime) iTime = 5000;
sClass = (!sClass)?'':' '+sClass;
//Clear container and add message
$Container = $(sContainerId);
$Container.stop(true, false).empty();
$('<div class="message'+sClass+'">'+sMsg+'</div>').hide().appendTo($Container).slideDown('fast');
//Reset schedduler
if(typeof oTimer != 'undefined')
{
clearTimeout(oTimer);
}
if(iTime > 0)
{
oTimer = setTimeout("$('"+sContainerId+"').find('.message').slideUp(function(){$(this).remove();});", iTime);
}
}

0
jquery/jquery.functions.min.js vendored Normal file
View File

4
jquery/jquery.min.js vendored Normal file

File diff suppressed because one or more lines are too long

198
jquery/jquery.tipsy.js Normal file
View File

@@ -0,0 +1,198 @@
// tipsy, facebook style tooltips for jquery
// version 1.0.0a
// (c) 2008-2010 jason frame [jason@onehackoranother.com]
// releated under the MIT license
(function($) {
function fixTitle($ele) {
if ($ele.attr('title') || typeof($ele.attr('original-title')) != 'string') {
$ele.attr('original-title', $ele.attr('title') || '').removeAttr('title');
}
}
function Tipsy(element, options) {
this.$element = $(element);
this.options = options;
this.enabled = true;
fixTitle(this.$element);
}
Tipsy.prototype = {
show: function() {
var title = this.getTitle();
if (title && this.enabled) {
var $tip = this.tip();
$tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title);
$tip[0].className = 'tipsy'; // reset classname in case of dynamic gravity
$tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).appendTo(document.body);
var pos = $.extend({}, this.$element.offset(), {
width: this.$element[0].offsetWidth,
height: this.$element[0].offsetHeight
});
var actualWidth = $tip[0].offsetWidth, actualHeight = $tip[0].offsetHeight;
var gravity = (typeof this.options.gravity == 'function')
? this.options.gravity.call(this.$element[0])
: this.options.gravity;
var tp;
switch (gravity.charAt(0)) {
case 'n':
tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2};
break;
case 's':
tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2};
break;
case 'e':
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset};
break;
case 'w':
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset};
break;
}
if (gravity.length == 2) {
if (gravity.charAt(1) == 'w') {
tp.left = pos.left + pos.width / 2 - 15;
} else {
tp.left = pos.left + pos.width / 2 - actualWidth + 15;
}
}
$tip.css(tp).addClass('tipsy-' + gravity);
if (this.options.fade) {
$tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity});
} else {
$tip.css({visibility: 'visible', opacity: this.options.opacity});
}
}
},
hide: function() {
if (this.options.fade) {
this.tip().stop().fadeOut(function() { $(this).remove(); });
} else {
this.tip().remove();
}
},
getTitle: function() {
var title, $e = this.$element, o = this.options;
fixTitle($e);
var title, o = this.options;
if (typeof o.title == 'string') {
title = $e.attr(o.title == 'title' ? 'original-title' : o.title);
} else if (typeof o.title == 'function') {
title = o.title.call($e[0]);
}
title = ('' + title).replace(/(^\s*|\s*$)/, "");
return title || o.fallback;
},
tip: function() {
if (!this.$tip) {
this.$tip = $('<div class="tipsy"></div>').html('<div class="tipsy-arrow"></div><div class="tipsy-inner"/></div>');
}
return this.$tip;
},
validate: function() {
if (!this.$element[0].parentNode) {
this.hide();
this.$element = null;
this.options = null;
}
},
enable: function() { this.enabled = true; },
disable: function() { this.enabled = false; },
toggleEnabled: function() { this.enabled = !this.enabled; }
};
$.fn.tipsy = function(options) {
if (options === true) {
return this.data('tipsy');
} else if (typeof options == 'string') {
return this.data('tipsy')[options]();
}
options = $.extend({}, $.fn.tipsy.defaults, options);
function get(ele) {
var tipsy = $.data(ele, 'tipsy');
if (!tipsy) {
tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options));
$.data(ele, 'tipsy', tipsy);
}
return tipsy;
}
function enter() {
var tipsy = get(this);
tipsy.hoverState = 'in';
if (options.delayIn == 0) {
tipsy.show();
} else {
setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn);
}
};
function leave() {
var tipsy = get(this);
tipsy.hoverState = 'out';
if (options.delayOut == 0) {
tipsy.hide();
} else {
setTimeout(function() { if (tipsy.hoverState == 'out') tipsy.hide(); }, options.delayOut);
}
};
if (!options.live) this.each(function() { get(this); });
if (options.trigger != 'manual') {
var binder = options.live ? 'live' : 'bind',
eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus',
eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';
this[binder](eventIn, enter)[binder](eventOut, leave);
}
return this;
};
$.fn.tipsy.defaults = {
delayIn: 0,
delayOut: 0,
fade: false,
fallback: '',
gravity: 'n',
html: false,
live: false,
offset: 0,
opacity: 0.8,
title: 'title',
trigger: 'hover'
};
// Overwrite this method to provide options on a per-element basis.
// For example, you could store the gravity in a 'tipsy-gravity' attribute:
// return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' });
// (remember - do not modify 'options' in place!)
$.fn.tipsy.elementOptions = function(ele, options) {
return $.metadata ? $.extend({}, options, $(ele).metadata()) : options;
};
$.fn.tipsy.autoNS = function() {
return $(this).offset().top > ($(document).scrollTop() + $(window).height() / 2) ? 's' : 'n';
};
$.fn.tipsy.autoWE = function() {
return $(this).offset().left > ($(document).scrollLeft() + $(window).width() / 2) ? 'e' : 'w';
};
})(jQuery);

1
jquery/jquery.tipsy.min.js vendored Normal file
View File

@@ -0,0 +1 @@
(function(a){function c(c,d){this.$element=a(c);this.options=d;this.enabled=true;b(this.$element)}function b(a){if(a.attr("title")||typeof a.attr("original-title")!="string"){a.attr("original-title",a.attr("title")||"").removeAttr("title")}}c.prototype={show:function(){var b=this.getTitle();if(b&&this.enabled){var c=this.tip();c.find(".tipsy-inner")[this.options.html?"html":"text"](b);c[0].className="tipsy";c.remove().css({top:0,left:0,visibility:"hidden",display:"block"}).appendTo(document.body);var d=a.extend({},this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight});var e=c[0].offsetWidth,f=c[0].offsetHeight;var g=typeof this.options.gravity=="function"?this.options.gravity.call(this.$element[0]):this.options.gravity;var h;switch(g.charAt(0)){case"n":h={top:d.top+d.height+this.options.offset,left:d.left+d.width/2-e/2};break;case"s":h={top:d.top-f-this.options.offset,left:d.left+d.width/2-e/2};break;case"e":h={top:d.top+d.height/2-f/2,left:d.left-e-this.options.offset};break;case"w":h={top:d.top+d.height/2-f/2,left:d.left+d.width+this.options.offset};break}if(g.length==2){if(g.charAt(1)=="w"){h.left=d.left+d.width/2-15}else{h.left=d.left+d.width/2-e+15}}c.css(h).addClass("tipsy-"+g);if(this.options.fade){c.stop().css({opacity:0,display:"block",visibility:"visible"}).animate({opacity:this.options.opacity})}else{c.css({visibility:"visible",opacity:this.options.opacity})}}},hide:function(){if(this.options.fade){this.tip().stop().fadeOut(function(){a(this).remove()})}else{this.tip().remove()}},getTitle:function(){var a,c=this.$element,d=this.options;b(c);var a,d=this.options;if(typeof d.title=="string"){a=c.attr(d.title=="title"?"original-title":d.title)}else if(typeof d.title=="function"){a=d.title.call(c[0])}a=(""+a).replace(/(^\s*|\s*$)/,"");return a||d.fallback},tip:function(){if(!this.$tip){this.$tip=a('<div class="tipsy"></div>').html('<div class="tipsy-arrow"></div><div class="tipsy-inner"/></div>')}return this.$tip},validate:function(){if(!this.$element[0].parentNode){this.hide();this.$element=null;this.options=null}},enable:function(){this.enabled=true},disable:function(){this.enabled=false},toggleEnabled:function(){this.enabled=!this.enabled}};a.fn.tipsy=function(b){function f(){var a=d(this);a.hoverState="out";if(b.delayOut==0){a.hide()}else{setTimeout(function(){if(a.hoverState=="out")a.hide()},b.delayOut)}}function e(){var a=d(this);a.hoverState="in";if(b.delayIn==0){a.show()}else{setTimeout(function(){if(a.hoverState=="in")a.show()},b.delayIn)}}function d(d){var e=a.data(d,"tipsy");if(!e){e=new c(d,a.fn.tipsy.elementOptions(d,b));a.data(d,"tipsy",e)}return e}if(b===true){return this.data("tipsy")}else if(typeof b=="string"){return this.data("tipsy")[b]()}b=a.extend({},a.fn.tipsy.defaults,b);if(!b.live)this.each(function(){d(this)});if(b.trigger!="manual"){var g=b.live?"live":"bind",h=b.trigger=="hover"?"mouseenter":"focus",i=b.trigger=="hover"?"mouseleave":"blur";this[g](h,e)[g](i,f)}return this};a.fn.tipsy.defaults={delayIn:0,delayOut:0,fade:false,fallback:"",gravity:"n",html:false,live:false,offset:0,opacity:.8,title:"title",trigger:"hover"};a.fn.tipsy.elementOptions=function(b,c){return a.metadata?a.extend({},c,a(b).metadata()):c};a.fn.tipsy.autoNS=function(){return a(this).offset().top>a(document).scrollTop()+a(window).height()/2?"s":"n"};a.fn.tipsy.autoWE=function(){return a(this).offset().left>a(document).scrollLeft()+a(window).width()/2?"e":"w"}})(jQuery)

16
robots.txt Normal file
View File

@@ -0,0 +1,16 @@
User-agent: *
User-agent: *
Disallow: /*.gif$
User-agent: *
Disallow: /*.jpg$
User-agent: *
Disallow: /*.jpeg$
User-agent: *
Disallow: /*.png$
User-agent: *
Disallow: /*.pdf$

15
style/style.ie.css Normal file
View File

@@ -0,0 +1,15 @@
#cv {
}
#card {
}
.section {width:100%;}
.work .item ul li span.title {
float:right;
/*margin-left:200px;*/
}
.work .item .info {
margin-left:8px;
}

File diff suppressed because one or more lines are too long

45
style/style.print.css Normal file
View File

@@ -0,0 +1,45 @@
a.no_print_link {
color:#333333;
text-decoration:none;
}
#cv {
border:none;
width:100%;
float:none;
margin:0;
}
.header {
padding:0 0 30px 0;
}
.person h1 {
margin-bottom:15px;
}
.person h2 {
letter-spacing:0;
}
.section {
margin:0;
}
.section_name {
float:none;
margin-bottom:30px;
width:auto;
}
h2.section_name {
font-style:normal;
}
.section_items {
float:none;
width:90%;
margin-left:10%;
}
#card {
margin-top:20px;
border:1px solid #DEDEDE;
}
#card ul.card_items li {
padding-left:0;
}
.paperclip, .clickable, #card .contact_me_btn, #contact_me_box, #contact_me, .card_buttons, .no_print, .logo {
display:none;
}

638
style/style.screen.css Normal file
View File

@@ -0,0 +1,638 @@
/* Style */
/* Normalize */
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, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {
border:0;
outline:0;
font-weight:inherit;
font-style:inherit;
font-size:100%;
font-family:inherit;
vertical-align:baseline;
margin:0;
padding:0;
}
:focus {
outline:0;
}
body {
background:#000033 url(../images/bg.gif) 0 0 repeat;
color:#333;
font:12px Arial, Helvetica, sans-serif;
line-height:22px;
}
ol, ul {
list-style:none;
}
table {
border-collapse:separate;
border-spacing:0;
}
caption, th, td {
text-align:left;
font-weight:400;
}
blockquote:before, blockquote:after, q:before, q:after {
content:"";
}
a, a:visited {
color:#06A;
text-decoration:none;
}
a:hover {
color:#637BFF;
}
strong {
font-weight:700;
}
em {
font-style:italic;
}
input[type=submit], input[type=reset], input[type=button], .clickable {
cursor:pointer;
}
.fixed:after {
content:".";
display:block;
height:0;
clear:both;
visibility:hidden;
}
.fixed {
display:block;
min-height:1%;
}
* html .fixed {
height:1%;
}
/* Commons */
.btn {
height:25px;
padding:2px;
width:80px;
}
.section {
border-bottom:1px solid #dfdfdf;
margin:0 39px;
padding:30px 0;
}
.hide {
display:none;
}
.inline_title {
font-weight:700;
margin-right:5px;
}
.arrow_up {
position:fixed;
display:none;
top:100%;
margin-top:-99px; /* - 66px cv margin bottom - 2 to_top borders - 25 to_top height - 6 center of the space left */
margin-left:747px; /* 780 cv width - 27 to_top width - (39-27)/2 center of the space left */
background-color:#eee;
border:1px solid #838383;
z-index:10;
width:25px;
height:25px;
}
.arrow_up a {
width:100%;
}
.arrow_up:hover {
background-color:#FFFFFF;
}
/* Commons - Section */
.section_name {
float:left;
width:200px;
}
.section_items {
float:right;
margin-right:10px;
width:490px;
}
h2.section_name {
color:#3C4756;
font-size:24px;
font-style:italic;
font-weight:400;
letter-spacing:0px;
}
/* Commons - Item */
.item {
margin-bottom:20px;
padding-bottom:20px;
border-bottom:1px solid #dfdfdf;
}
.item p {
text-align:justify;
padding:0 0 15px;
}
.item p.last {
padding:0;
}
.last_item {
margin-bottom:0;
padding-bottom:0;
border-bottom:none;
}
.item h2 {
color:#06A;
font-family:Georgia, serif;
font-size:24px;
font-weight:400;
letter-spacing:-1px;
}
.item h2 a {
}
.item h3 {
margin-top:3px;
color:#637BFF;
font-family:Georgia, serif;
font-size:16px;
font-style:italic;
font-weight:400;
}
.item h4 {
float:right;
border-top:1px solid #dfdfdf;
border-bottom:1px solid #dfdfdf;
color:#666;
font-style:italic;
padding:0 7px;
}
.item ul {
text-align:justify;
padding:15px 0;
}
.item ul li {
list-style-type:square;
font-size:12px;
}
.item ul li.last {
margin-bottom:0;
}
.item ul li ul {
padding:0;
}
.item ul li ul li{
list-style-type:disc;
margin-left:25px;
margin-bottom:0;
font-weight:normal;
}
/* Commons - Tipsy */
.tipsy {
padding:5px;
font-size:10px;
position:absolute;
z-index: 100000;
}
.tipsy-inner {
padding:5px 8px 4px 8px;
background-color:#000000;
color:#FFFFFF;
max-width:200px;
text-align:center;
}
.tipsy-inner {
border-radius:3px;
-moz-border-radius:3px;
-webkit-border-radius:3px;
}
.tipsy-arrow {
position:absolute;
background:url('../images/tipsy.gif') no-repeat top left;
width:9px;
height:5px;
}
.tipsy-n .tipsy-arrow {
top:0;
left:50%;
margin-left:-4px;
}
.tipsy-nw .tipsy-arrow {
top:0;
left:10px;
}
.tipsy-ne .tipsy-arrow {
top:0;
right:10px;
}
.tipsy-s .tipsy-arrow {
bottom:0;
left:50%;
margin-left:-4px;
background-position:bottom left;
}
.tipsy-sw .tipsy-arrow {
bottom:0;
left:10px;
background-position:bottom left;
}
.tipsy-se .tipsy-arrow {
bottom:0;
right:10px;
background-position:bottom left;
}
.tipsy-e .tipsy-arrow {
top:50%;
margin-top:-4px;
right:0;
width:5px;
height:9px;
background-position:top right;
}
.tipsy-w .tipsy-arrow {
top:50%;
margin-top:-4px;
left:0;
width:5px;
height:9px;
}
.tipsy-s {
margin-top:-15px;
}
.tipsy-e {
margin-left:-15px;
}
/* Container */
#cv {
width:780px;
background-color:#FFFFFF;
border:1px solid #637BFF;
margin:66px auto;
padding:0 0 40px;
}
/* Header */
.header {
background:url(../images/grey_bg.jpg) 0 0 repeat;
margin:0;
padding:30px 40px 29px;
position:relative;
}
/* Header - Person */
.person {
float:left;
margin-top:15px;
width:500px;
}
.person img {
float:left;
margin-right:25px;
background-color:#FFF;
border:1px solid #dedede;
padding:10px;
}
.person h1 {
margin-top:45px; /* (152 pic - 46 h1 - 16 h2)/2 */
color:#475261;
font-size:46px;
font-weight:700;
}
.person h2 {
color:#475261;
font-family:Arial, Helvetica, sans-serif;
font-size:18px;
line-height:16px;
font-weight:400;
text-transform:uppercase;
}
/* Header - Card */
.paperclip {
background: transparent url(../images/paperclip_clipped.png) 0 0 no-repeat;
width:64px;
height:64px;
position:absolute;
top:7px;
right:40px;
}
#card {
float:right;
border-style:solid;
border-width: 1px 2px 2px 1px;
border-color: #DEDEDE #808080 #808080 #DEDEDE;
padding:10px;
background:#FFFFFF;
}
#card ul {
list-style:none;
}
#card ul.card_buttons li {
display:inline;
margin-right:5px;
}
#card ul.card_items li {
background:url(../images/socials/default.png) 0 3px no-repeat;
padding-left:21px;
}
#card ul.card_items li.xp {
background-image:url(../images/experience.png);
}
#card ul.card_items li.university {
background-image:url(../images/university.png);
}
#card ul.card_items li.globe {
background-image:url(../images/globe.png);
}
#card ul.card_items li a, #card ul.card_items li a:visited {
color:#333333;
}
#card ul.card_items li a:hover {
color:#000000;
}
#card .contact_me_btn {
background-image:none;
background:#F8F8F8 url('../images/contactme.png') 90% 50% no-repeat;
border:1px solid #DEDEDE;
color:#4B5564;
display:block;
font-size:15px;
font-weight:700;
text-decoration:none;
margin-top:10px;
padding:10px 50px 10px 15px;
}
#card .contact_me_btn:hover {
border-color:#637BFF;
}
/* Main - Contact */
.contact {
}
#contact_me {
background:#f8f8f8 url(../images/grey_bg.jpg) 0 0 repeat;
border:1px solid #dfdfdf;
padding:40px 40px;
position:relative;
}
#contact_me p {
clear:both;
text-align:center;
}
#contact_me input, #contact_me textarea {
background-color:#fff;
border:1px solid #ccc;
color:#515151;
width:250px;
padding:5px;
margin:5px;
font-size:12px;
line-height:12px;
}
#contact_me .large_box {
width:522px; /* 250*2 + 5*2 padding + 5*2 margins + 1*2 borders */
}
#contact_me textarea {
height:150px;
overflow:auto;
font:12px Arial, Helvetica, sans-serif;
}
#contact_me .btn {
width:90px;
padding:0;
font-weight:600;
}
#contact_me .btn:hover {
border-color:#637BFF;
}
#contact_me #formstatus {
clear:both;
height:27px; /*15 5*2 padding 1*2 borders */
}
#contact_me #formstatus .message {
width:522px; /* 250*2 + 5*2 padding + 5*2 margins + 1*2 borders */
margin:auto;
padding:5px;
border:1px solid #D4D4D4;
background:white;
font-size:12px;
line-height:15px;
font-weight:700;
}
#contact_me #formstatus .error {
color:red;
}
#contact_me #formstatus .warning {
color:orange;
}
#contact_me #formstatus .success {
color:#0C3;
border:none;
background:none;
}
#contact_me #formstatus .loading {
color:#515151;
background:#FFFFFF url(../images/loading_white.gif) 509px 50% no-repeat;
}
#contact_me .close {
position:absolute;
top:10px;
right:10px;
margin:0;
padding:0;
width:26px;
height:26px;
background:#FFFFFF url(../images/close.png) 0 0 no-repeat;
}
/* Main - Profile */
.profile {
}
/* Main - Work */
.work {
}
.work h3 {
margin-bottom:15px;
}
.work span.company {
text-transform:uppercase;
}
.work .item ul li {
list-style-type:none;
margin-bottom:30px;
border:1px solid #DEDEDE;
padding-top:30px;
padding-right:15px;
}
.work .item ul li.last {
margin-bottom:0;
}
.work .item .cover {
float:left;
margin:-15px 15px 15px 15px;
border-left:15px solid #637BFF;
}
.work .item .info {
border:1px solid #DEDEDE;
border-left:none;
padding:10px;
width:115px;
background:#F8F8F8;
}
.work .item .info p {
text-align:center;
padding:0;
border-bottom:1px solid #dedede;
}
.work .item .info p a {
/* font-family:Georgia; */
font-size:16px;
font-weight:700;
}
.work .item .info p a img {
margin:0 3px 0 0;
}
.work .item .info ul {
margin-top:5px;
}
.work .item .info ul li {
list-style-position:inside;
list-style-type:square;
background:#F8F8F8;
margin-left:5px;
line-height:20px;
margin-bottom:0;
font-size:11px;
line-height:16px;
}
.work .item ul li span.title {
font-size:13px;
font-weight:700;
}
.work .item ul li ul li {
border:none;
padding:0;
list-style-type:disc;
}
.work .item ul li ul li.subtitle {
margin-left:0;
list-style:none;
font-style:italic;
margin-bottom:15px;
}
.work .item ul li ul li.action {
margin-bottom:5px;
color:#4B5564;
clear:both;
}
.work .item ul li ul li.action ul li {
list-style-type:square;
color:grey;
margin-bottom:0;
}
.work .item ul.standalone li{
border:none;
margin:0 0 0 15px;
padding:0;
}
/* Main - Language */
.language {
}
.language ul {
margin-left:25px;
}
/* Main - Technical */
.technical {
}
.technical h2 {
margin-bottom:15px;
}
.technical p {
padding-bottom:0;
}
.technical ul li {
margin-left:25px;
margin-bottom:15px;
font-weight:700;
}
.technical ul li.no_child {
font-weight:normal;
margin-bottom:5px;
}
.technical ul li.last {
margin-bottom:0;
}
.technical ul {
padding-bottom:0;
}
/* Main - Education */
.education {
border-bottom:none;
}
.education a.logo {
float:left;
width:70px;
height:35px; /* 24 h2 + 16 h3 + 3 margin - 2 border - 3*2 padding */
padding:3px;
border:1px solid #DFDFDF;
margin-top:0px;
margin-right:10px;
background-position:3px 3px;
background-repeat:no-repeat;
}
.education a.netapp {
background-image:url('../images/netapp.gif');
}
.education a.cfa {
background-image:url('../images/cfa.png');
}
.education p {
margin:0 0 0 15px;
padding:0;
}
.education a.details {
margin-left:15px;
font-style:italic;
}
.education ul li {
margin-left:25px;
font-weight:700;
}
.education ul li ul li {
margin-left:15px;
font-style:italic;
list-style-type:none;
font-weight:normal;
}
.education ul li ul li ul li {
font-style:normal;
}
/* Tests */