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<EFBFBD>s 6 ans d'administration syst<73>me sur les environnements de production de plusieurs grands comptes, j'ai eu l'opportunit<69> d'int<6E>grer une <20>quipe d'ing<6E>nierie en infrastructure. Ce poste m'a permis de me sp<73>cialiser dans le domaine du stockage SAN et de concevoir des solutions pour des clients implant<6E>s <20> l'international.</p>
<p>Toujours curieux et passionn<6E> par les nouvelles technologies, mon exp<78>rience me permet de m'adapter rapidement afin de relever avec succ<63>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<62>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<6F>dures d'exploitation</li>
<li class="action">Etude et migration de l'authentification centralis<69>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 */