1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495144961449714498144991450014501145021450314504145051450614507145081450914510145111451214513145141451514516145171451814519145201452114522145231452414525145261452714528145291453014531145321453314534145351453614537145381453914540145411454214543145441454514546145471454814549145501455114552145531455414555145561455714558145591456014561145621456314564145651456614567145681456914570145711457214573145741457514576145771457814579145801458114582145831458414585145861458714588145891459014591145921459314594145951459614597145981459914600146011460214603146041460514606146071460814609146101461114612146131461414615146161461714618146191462014621146221462314624146251462614627146281462914630146311463214633146341463514636146371463814639146401464114642146431464414645146461464714648146491465014651146521465314654146551465614657146581465914660146611466214663146641466514666146671466814669146701467114672146731467414675146761467714678146791468014681146821468314684146851468614687146881468914690146911469214693146941469514696146971469814699147001470114702147031470414705147061470714708147091471014711147121471314714147151471614717147181471914720147211472214723147241472514726147271472814729147301473114732147331473414735147361473714738147391474014741147421474314744147451474614747147481474914750147511475214753147541475514756147571475814759147601476114762147631476414765147661476714768147691477014771147721477314774147751477614777147781477914780147811478214783147841478514786147871478814789147901479114792147931479414795147961479714798147991480014801148021480314804148051480614807148081480914810148111481214813148141481514816148171481814819148201482114822148231482414825148261482714828148291483014831148321483314834148351483614837148381483914840148411484214843148441484514846148471484814849148501485114852148531485414855148561485714858148591486014861148621486314864148651486614867148681486914870148711487214873148741487514876148771487814879148801488114882148831488414885148861488714888148891489014891148921489314894148951489614897148981489914900149011490214903149041490514906149071490814909149101491114912149131491414915149161491714918149191492014921149221492314924149251492614927149281492914930149311493214933149341493514936149371493814939149401494114942149431494414945149461494714948149491495014951149521495314954149551495614957149581495914960149611496214963149641496514966149671496814969149701497114972149731497414975149761497714978149791498014981149821498314984149851498614987149881498914990149911499214993149941499514996149971499814999150001500115002150031500415005150061500715008150091501015011150121501315014150151501615017150181501915020150211502215023150241502515026150271502815029150301503115032150331503415035150361503715038150391504015041150421504315044150451504615047150481504915050150511505215053150541505515056150571505815059150601506115062150631506415065150661506715068150691507015071150721507315074150751507615077150781507915080150811508215083150841508515086150871508815089150901509115092150931509415095150961509715098150991510015101151021510315104151051510615107151081510915110151111511215113151141511515116151171511815119151201512115122151231512415125151261512715128151291513015131151321513315134151351513615137151381513915140151411514215143151441514515146151471514815149151501515115152151531515415155151561515715158151591516015161151621516315164151651516615167151681516915170151711517215173151741517515176151771517815179151801518115182151831518415185151861518715188151891519015191151921519315194151951519615197151981519915200152011520215203152041520515206152071520815209152101521115212152131521415215152161521715218152191522015221152221522315224152251522615227152281522915230152311523215233152341523515236152371523815239152401524115242152431524415245152461524715248152491525015251152521525315254152551525615257152581525915260152611526215263152641526515266152671526815269152701527115272152731527415275152761527715278152791528015281152821528315284152851528615287152881528915290152911529215293152941529515296152971529815299153001530115302153031530415305153061530715308153091531015311153121531315314153151531615317153181531915320153211532215323153241532515326153271532815329153301533115332153331533415335153361533715338153391534015341153421534315344153451534615347153481534915350153511535215353153541535515356153571535815359153601536115362153631536415365153661536715368153691537015371153721537315374153751537615377153781537915380153811538215383153841538515386153871538815389153901539115392153931539415395153961539715398153991540015401154021540315404154051540615407154081540915410154111541215413154141541515416154171541815419154201542115422154231542415425154261542715428154291543015431154321543315434 |
- <!DOCTYPE html>
- <html>
- <head><meta charset="utf-8" />
- <title>asl_recognizer</title>
- <script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script>
- <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
- <style type="text/css">
- /*!
- *
- * Twitter Bootstrap
- *
- */
- /*!
- * Bootstrap v3.3.6 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
- /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
- html {
- font-family: sans-serif;
- -ms-text-size-adjust: 100%;
- -webkit-text-size-adjust: 100%;
- }
- body {
- margin: 0;
- }
- article,
- aside,
- details,
- figcaption,
- figure,
- footer,
- header,
- hgroup,
- main,
- menu,
- nav,
- section,
- summary {
- display: block;
- }
- audio,
- canvas,
- progress,
- video {
- display: inline-block;
- vertical-align: baseline;
- }
- audio:not([controls]) {
- display: none;
- height: 0;
- }
- [hidden],
- template {
- display: none;
- }
- a {
- background-color: transparent;
- }
- a:active,
- a:hover {
- outline: 0;
- }
- abbr[title] {
- border-bottom: 1px dotted;
- }
- b,
- strong {
- font-weight: bold;
- }
- dfn {
- font-style: italic;
- }
- h1 {
- font-size: 2em;
- margin: 0.67em 0;
- }
- mark {
- background: #ff0;
- color: #000;
- }
- small {
- font-size: 80%;
- }
- sub,
- sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
- }
- sup {
- top: -0.5em;
- }
- sub {
- bottom: -0.25em;
- }
- img {
- border: 0;
- }
- svg:not(:root) {
- overflow: hidden;
- }
- figure {
- margin: 1em 40px;
- }
- hr {
- box-sizing: content-box;
- height: 0;
- }
- pre {
- overflow: auto;
- }
- code,
- kbd,
- pre,
- samp {
- font-family: monospace, monospace;
- font-size: 1em;
- }
- button,
- input,
- optgroup,
- select,
- textarea {
- color: inherit;
- font: inherit;
- margin: 0;
- }
- button {
- overflow: visible;
- }
- button,
- select {
- text-transform: none;
- }
- button,
- html input[type="button"],
- input[type="reset"],
- input[type="submit"] {
- -webkit-appearance: button;
- cursor: pointer;
- }
- button[disabled],
- html input[disabled] {
- cursor: default;
- }
- button::-moz-focus-inner,
- input::-moz-focus-inner {
- border: 0;
- padding: 0;
- }
- input {
- line-height: normal;
- }
- input[type="checkbox"],
- input[type="radio"] {
- box-sizing: border-box;
- padding: 0;
- }
- input[type="number"]::-webkit-inner-spin-button,
- input[type="number"]::-webkit-outer-spin-button {
- height: auto;
- }
- input[type="search"] {
- -webkit-appearance: textfield;
- box-sizing: content-box;
- }
- input[type="search"]::-webkit-search-cancel-button,
- input[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
- }
- fieldset {
- border: 1px solid #c0c0c0;
- margin: 0 2px;
- padding: 0.35em 0.625em 0.75em;
- }
- legend {
- border: 0;
- padding: 0;
- }
- textarea {
- overflow: auto;
- }
- optgroup {
- font-weight: bold;
- }
- table {
- border-collapse: collapse;
- border-spacing: 0;
- }
- td,
- th {
- padding: 0;
- }
- /*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
- @media print {
- *,
- *:before,
- *:after {
- background: transparent !important;
- color: #000 !important;
- box-shadow: none !important;
- text-shadow: none !important;
- }
- a,
- a:visited {
- text-decoration: underline;
- }
- a[href]:after {
- content: " (" attr(href) ")";
- }
- abbr[title]:after {
- content: " (" attr(title) ")";
- }
- a[href^="#"]:after,
- a[href^="javascript:"]:after {
- content: "";
- }
- pre,
- blockquote {
- border: 1px solid #999;
- page-break-inside: avoid;
- }
- thead {
- display: table-header-group;
- }
- tr,
- img {
- page-break-inside: avoid;
- }
- img {
- max-width: 100% !important;
- }
- p,
- h2,
- h3 {
- orphans: 3;
- widows: 3;
- }
- h2,
- h3 {
- page-break-after: avoid;
- }
- .navbar {
- display: none;
- }
- .btn > .caret,
- .dropup > .btn > .caret {
- border-top-color: #000 !important;
- }
- .label {
- border: 1px solid #000;
- }
- .table {
- border-collapse: collapse !important;
- }
- .table td,
- .table th {
- background-color: #fff !important;
- }
- .table-bordered th,
- .table-bordered td {
- border: 1px solid #ddd !important;
- }
- }
- @font-face {
- font-family: 'Glyphicons Halflings';
- src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot');
- src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
- }
- .glyphicon {
- position: relative;
- top: 1px;
- display: inline-block;
- font-family: 'Glyphicons Halflings';
- font-style: normal;
- font-weight: normal;
- line-height: 1;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- }
- .glyphicon-asterisk:before {
- content: "\002a";
- }
- .glyphicon-plus:before {
- content: "\002b";
- }
- .glyphicon-euro:before,
- .glyphicon-eur:before {
- content: "\20ac";
- }
- .glyphicon-minus:before {
- content: "\2212";
- }
- .glyphicon-cloud:before {
- content: "\2601";
- }
- .glyphicon-envelope:before {
- content: "\2709";
- }
- .glyphicon-pencil:before {
- content: "\270f";
- }
- .glyphicon-glass:before {
- content: "\e001";
- }
- .glyphicon-music:before {
- content: "\e002";
- }
- .glyphicon-search:before {
- content: "\e003";
- }
- .glyphicon-heart:before {
- content: "\e005";
- }
- .glyphicon-star:before {
- content: "\e006";
- }
- .glyphicon-star-empty:before {
- content: "\e007";
- }
- .glyphicon-user:before {
- content: "\e008";
- }
- .glyphicon-film:before {
- content: "\e009";
- }
- .glyphicon-th-large:before {
- content: "\e010";
- }
- .glyphicon-th:before {
- content: "\e011";
- }
- .glyphicon-th-list:before {
- content: "\e012";
- }
- .glyphicon-ok:before {
- content: "\e013";
- }
- .glyphicon-remove:before {
- content: "\e014";
- }
- .glyphicon-zoom-in:before {
- content: "\e015";
- }
- .glyphicon-zoom-out:before {
- content: "\e016";
- }
- .glyphicon-off:before {
- content: "\e017";
- }
- .glyphicon-signal:before {
- content: "\e018";
- }
- .glyphicon-cog:before {
- content: "\e019";
- }
- .glyphicon-trash:before {
- content: "\e020";
- }
- .glyphicon-home:before {
- content: "\e021";
- }
- .glyphicon-file:before {
- content: "\e022";
- }
- .glyphicon-time:before {
- content: "\e023";
- }
- .glyphicon-road:before {
- content: "\e024";
- }
- .glyphicon-download-alt:before {
- content: "\e025";
- }
- .glyphicon-download:before {
- content: "\e026";
- }
- .glyphicon-upload:before {
- content: "\e027";
- }
- .glyphicon-inbox:before {
- content: "\e028";
- }
- .glyphicon-play-circle:before {
- content: "\e029";
- }
- .glyphicon-repeat:before {
- content: "\e030";
- }
- .glyphicon-refresh:before {
- content: "\e031";
- }
- .glyphicon-list-alt:before {
- content: "\e032";
- }
- .glyphicon-lock:before {
- content: "\e033";
- }
- .glyphicon-flag:before {
- content: "\e034";
- }
- .glyphicon-headphones:before {
- content: "\e035";
- }
- .glyphicon-volume-off:before {
- content: "\e036";
- }
- .glyphicon-volume-down:before {
- content: "\e037";
- }
- .glyphicon-volume-up:before {
- content: "\e038";
- }
- .glyphicon-qrcode:before {
- content: "\e039";
- }
- .glyphicon-barcode:before {
- content: "\e040";
- }
- .glyphicon-tag:before {
- content: "\e041";
- }
- .glyphicon-tags:before {
- content: "\e042";
- }
- .glyphicon-book:before {
- content: "\e043";
- }
- .glyphicon-bookmark:before {
- content: "\e044";
- }
- .glyphicon-print:before {
- content: "\e045";
- }
- .glyphicon-camera:before {
- content: "\e046";
- }
- .glyphicon-font:before {
- content: "\e047";
- }
- .glyphicon-bold:before {
- content: "\e048";
- }
- .glyphicon-italic:before {
- content: "\e049";
- }
- .glyphicon-text-height:before {
- content: "\e050";
- }
- .glyphicon-text-width:before {
- content: "\e051";
- }
- .glyphicon-align-left:before {
- content: "\e052";
- }
- .glyphicon-align-center:before {
- content: "\e053";
- }
- .glyphicon-align-right:before {
- content: "\e054";
- }
- .glyphicon-align-justify:before {
- content: "\e055";
- }
- .glyphicon-list:before {
- content: "\e056";
- }
- .glyphicon-indent-left:before {
- content: "\e057";
- }
- .glyphicon-indent-right:before {
- content: "\e058";
- }
- .glyphicon-facetime-video:before {
- content: "\e059";
- }
- .glyphicon-picture:before {
- content: "\e060";
- }
- .glyphicon-map-marker:before {
- content: "\e062";
- }
- .glyphicon-adjust:before {
- content: "\e063";
- }
- .glyphicon-tint:before {
- content: "\e064";
- }
- .glyphicon-edit:before {
- content: "\e065";
- }
- .glyphicon-share:before {
- content: "\e066";
- }
- .glyphicon-check:before {
- content: "\e067";
- }
- .glyphicon-move:before {
- content: "\e068";
- }
- .glyphicon-step-backward:before {
- content: "\e069";
- }
- .glyphicon-fast-backward:before {
- content: "\e070";
- }
- .glyphicon-backward:before {
- content: "\e071";
- }
- .glyphicon-play:before {
- content: "\e072";
- }
- .glyphicon-pause:before {
- content: "\e073";
- }
- .glyphicon-stop:before {
- content: "\e074";
- }
- .glyphicon-forward:before {
- content: "\e075";
- }
- .glyphicon-fast-forward:before {
- content: "\e076";
- }
- .glyphicon-step-forward:before {
- content: "\e077";
- }
- .glyphicon-eject:before {
- content: "\e078";
- }
- .glyphicon-chevron-left:before {
- content: "\e079";
- }
- .glyphicon-chevron-right:before {
- content: "\e080";
- }
- .glyphicon-plus-sign:before {
- content: "\e081";
- }
- .glyphicon-minus-sign:before {
- content: "\e082";
- }
- .glyphicon-remove-sign:before {
- content: "\e083";
- }
- .glyphicon-ok-sign:before {
- content: "\e084";
- }
- .glyphicon-question-sign:before {
- content: "\e085";
- }
- .glyphicon-info-sign:before {
- content: "\e086";
- }
- .glyphicon-screenshot:before {
- content: "\e087";
- }
- .glyphicon-remove-circle:before {
- content: "\e088";
- }
- .glyphicon-ok-circle:before {
- content: "\e089";
- }
- .glyphicon-ban-circle:before {
- content: "\e090";
- }
- .glyphicon-arrow-left:before {
- content: "\e091";
- }
- .glyphicon-arrow-right:before {
- content: "\e092";
- }
- .glyphicon-arrow-up:before {
- content: "\e093";
- }
- .glyphicon-arrow-down:before {
- content: "\e094";
- }
- .glyphicon-share-alt:before {
- content: "\e095";
- }
- .glyphicon-resize-full:before {
- content: "\e096";
- }
- .glyphicon-resize-small:before {
- content: "\e097";
- }
- .glyphicon-exclamation-sign:before {
- content: "\e101";
- }
- .glyphicon-gift:before {
- content: "\e102";
- }
- .glyphicon-leaf:before {
- content: "\e103";
- }
- .glyphicon-fire:before {
- content: "\e104";
- }
- .glyphicon-eye-open:before {
- content: "\e105";
- }
- .glyphicon-eye-close:before {
- content: "\e106";
- }
- .glyphicon-warning-sign:before {
- content: "\e107";
- }
- .glyphicon-plane:before {
- content: "\e108";
- }
- .glyphicon-calendar:before {
- content: "\e109";
- }
- .glyphicon-random:before {
- content: "\e110";
- }
- .glyphicon-comment:before {
- content: "\e111";
- }
- .glyphicon-magnet:before {
- content: "\e112";
- }
- .glyphicon-chevron-up:before {
- content: "\e113";
- }
- .glyphicon-chevron-down:before {
- content: "\e114";
- }
- .glyphicon-retweet:before {
- content: "\e115";
- }
- .glyphicon-shopping-cart:before {
- content: "\e116";
- }
- .glyphicon-folder-close:before {
- content: "\e117";
- }
- .glyphicon-folder-open:before {
- content: "\e118";
- }
- .glyphicon-resize-vertical:before {
- content: "\e119";
- }
- .glyphicon-resize-horizontal:before {
- content: "\e120";
- }
- .glyphicon-hdd:before {
- content: "\e121";
- }
- .glyphicon-bullhorn:before {
- content: "\e122";
- }
- .glyphicon-bell:before {
- content: "\e123";
- }
- .glyphicon-certificate:before {
- content: "\e124";
- }
- .glyphicon-thumbs-up:before {
- content: "\e125";
- }
- .glyphicon-thumbs-down:before {
- content: "\e126";
- }
- .glyphicon-hand-right:before {
- content: "\e127";
- }
- .glyphicon-hand-left:before {
- content: "\e128";
- }
- .glyphicon-hand-up:before {
- content: "\e129";
- }
- .glyphicon-hand-down:before {
- content: "\e130";
- }
- .glyphicon-circle-arrow-right:before {
- content: "\e131";
- }
- .glyphicon-circle-arrow-left:before {
- content: "\e132";
- }
- .glyphicon-circle-arrow-up:before {
- content: "\e133";
- }
- .glyphicon-circle-arrow-down:before {
- content: "\e134";
- }
- .glyphicon-globe:before {
- content: "\e135";
- }
- .glyphicon-wrench:before {
- content: "\e136";
- }
- .glyphicon-tasks:before {
- content: "\e137";
- }
- .glyphicon-filter:before {
- content: "\e138";
- }
- .glyphicon-briefcase:before {
- content: "\e139";
- }
- .glyphicon-fullscreen:before {
- content: "\e140";
- }
- .glyphicon-dashboard:before {
- content: "\e141";
- }
- .glyphicon-paperclip:before {
- content: "\e142";
- }
- .glyphicon-heart-empty:before {
- content: "\e143";
- }
- .glyphicon-link:before {
- content: "\e144";
- }
- .glyphicon-phone:before {
- content: "\e145";
- }
- .glyphicon-pushpin:before {
- content: "\e146";
- }
- .glyphicon-usd:before {
- content: "\e148";
- }
- .glyphicon-gbp:before {
- content: "\e149";
- }
- .glyphicon-sort:before {
- content: "\e150";
- }
- .glyphicon-sort-by-alphabet:before {
- content: "\e151";
- }
- .glyphicon-sort-by-alphabet-alt:before {
- content: "\e152";
- }
- .glyphicon-sort-by-order:before {
- content: "\e153";
- }
- .glyphicon-sort-by-order-alt:before {
- content: "\e154";
- }
- .glyphicon-sort-by-attributes:before {
- content: "\e155";
- }
- .glyphicon-sort-by-attributes-alt:before {
- content: "\e156";
- }
- .glyphicon-unchecked:before {
- content: "\e157";
- }
- .glyphicon-expand:before {
- content: "\e158";
- }
- .glyphicon-collapse-down:before {
- content: "\e159";
- }
- .glyphicon-collapse-up:before {
- content: "\e160";
- }
- .glyphicon-log-in:before {
- content: "\e161";
- }
- .glyphicon-flash:before {
- content: "\e162";
- }
- .glyphicon-log-out:before {
- content: "\e163";
- }
- .glyphicon-new-window:before {
- content: "\e164";
- }
- .glyphicon-record:before {
- content: "\e165";
- }
- .glyphicon-save:before {
- content: "\e166";
- }
- .glyphicon-open:before {
- content: "\e167";
- }
- .glyphicon-saved:before {
- content: "\e168";
- }
- .glyphicon-import:before {
- content: "\e169";
- }
- .glyphicon-export:before {
- content: "\e170";
- }
- .glyphicon-send:before {
- content: "\e171";
- }
- .glyphicon-floppy-disk:before {
- content: "\e172";
- }
- .glyphicon-floppy-saved:before {
- content: "\e173";
- }
- .glyphicon-floppy-remove:before {
- content: "\e174";
- }
- .glyphicon-floppy-save:before {
- content: "\e175";
- }
- .glyphicon-floppy-open:before {
- content: "\e176";
- }
- .glyphicon-credit-card:before {
- content: "\e177";
- }
- .glyphicon-transfer:before {
- content: "\e178";
- }
- .glyphicon-cutlery:before {
- content: "\e179";
- }
- .glyphicon-header:before {
- content: "\e180";
- }
- .glyphicon-compressed:before {
- content: "\e181";
- }
- .glyphicon-earphone:before {
- content: "\e182";
- }
- .glyphicon-phone-alt:before {
- content: "\e183";
- }
- .glyphicon-tower:before {
- content: "\e184";
- }
- .glyphicon-stats:before {
- content: "\e185";
- }
- .glyphicon-sd-video:before {
- content: "\e186";
- }
- .glyphicon-hd-video:before {
- content: "\e187";
- }
- .glyphicon-subtitles:before {
- content: "\e188";
- }
- .glyphicon-sound-stereo:before {
- content: "\e189";
- }
- .glyphicon-sound-dolby:before {
- content: "\e190";
- }
- .glyphicon-sound-5-1:before {
- content: "\e191";
- }
- .glyphicon-sound-6-1:before {
- content: "\e192";
- }
- .glyphicon-sound-7-1:before {
- content: "\e193";
- }
- .glyphicon-copyright-mark:before {
- content: "\e194";
- }
- .glyphicon-registration-mark:before {
- content: "\e195";
- }
- .glyphicon-cloud-download:before {
- content: "\e197";
- }
- .glyphicon-cloud-upload:before {
- content: "\e198";
- }
- .glyphicon-tree-conifer:before {
- content: "\e199";
- }
- .glyphicon-tree-deciduous:before {
- content: "\e200";
- }
- .glyphicon-cd:before {
- content: "\e201";
- }
- .glyphicon-save-file:before {
- content: "\e202";
- }
- .glyphicon-open-file:before {
- content: "\e203";
- }
- .glyphicon-level-up:before {
- content: "\e204";
- }
- .glyphicon-copy:before {
- content: "\e205";
- }
- .glyphicon-paste:before {
- content: "\e206";
- }
- .glyphicon-alert:before {
- content: "\e209";
- }
- .glyphicon-equalizer:before {
- content: "\e210";
- }
- .glyphicon-king:before {
- content: "\e211";
- }
- .glyphicon-queen:before {
- content: "\e212";
- }
- .glyphicon-pawn:before {
- content: "\e213";
- }
- .glyphicon-bishop:before {
- content: "\e214";
- }
- .glyphicon-knight:before {
- content: "\e215";
- }
- .glyphicon-baby-formula:before {
- content: "\e216";
- }
- .glyphicon-tent:before {
- content: "\26fa";
- }
- .glyphicon-blackboard:before {
- content: "\e218";
- }
- .glyphicon-bed:before {
- content: "\e219";
- }
- .glyphicon-apple:before {
- content: "\f8ff";
- }
- .glyphicon-erase:before {
- content: "\e221";
- }
- .glyphicon-hourglass:before {
- content: "\231b";
- }
- .glyphicon-lamp:before {
- content: "\e223";
- }
- .glyphicon-duplicate:before {
- content: "\e224";
- }
- .glyphicon-piggy-bank:before {
- content: "\e225";
- }
- .glyphicon-scissors:before {
- content: "\e226";
- }
- .glyphicon-bitcoin:before {
- content: "\e227";
- }
- .glyphicon-btc:before {
- content: "\e227";
- }
- .glyphicon-xbt:before {
- content: "\e227";
- }
- .glyphicon-yen:before {
- content: "\00a5";
- }
- .glyphicon-jpy:before {
- content: "\00a5";
- }
- .glyphicon-ruble:before {
- content: "\20bd";
- }
- .glyphicon-rub:before {
- content: "\20bd";
- }
- .glyphicon-scale:before {
- content: "\e230";
- }
- .glyphicon-ice-lolly:before {
- content: "\e231";
- }
- .glyphicon-ice-lolly-tasted:before {
- content: "\e232";
- }
- .glyphicon-education:before {
- content: "\e233";
- }
- .glyphicon-option-horizontal:before {
- content: "\e234";
- }
- .glyphicon-option-vertical:before {
- content: "\e235";
- }
- .glyphicon-menu-hamburger:before {
- content: "\e236";
- }
- .glyphicon-modal-window:before {
- content: "\e237";
- }
- .glyphicon-oil:before {
- content: "\e238";
- }
- .glyphicon-grain:before {
- content: "\e239";
- }
- .glyphicon-sunglasses:before {
- content: "\e240";
- }
- .glyphicon-text-size:before {
- content: "\e241";
- }
- .glyphicon-text-color:before {
- content: "\e242";
- }
- .glyphicon-text-background:before {
- content: "\e243";
- }
- .glyphicon-object-align-top:before {
- content: "\e244";
- }
- .glyphicon-object-align-bottom:before {
- content: "\e245";
- }
- .glyphicon-object-align-horizontal:before {
- content: "\e246";
- }
- .glyphicon-object-align-left:before {
- content: "\e247";
- }
- .glyphicon-object-align-vertical:before {
- content: "\e248";
- }
- .glyphicon-object-align-right:before {
- content: "\e249";
- }
- .glyphicon-triangle-right:before {
- content: "\e250";
- }
- .glyphicon-triangle-left:before {
- content: "\e251";
- }
- .glyphicon-triangle-bottom:before {
- content: "\e252";
- }
- .glyphicon-triangle-top:before {
- content: "\e253";
- }
- .glyphicon-console:before {
- content: "\e254";
- }
- .glyphicon-superscript:before {
- content: "\e255";
- }
- .glyphicon-subscript:before {
- content: "\e256";
- }
- .glyphicon-menu-left:before {
- content: "\e257";
- }
- .glyphicon-menu-right:before {
- content: "\e258";
- }
- .glyphicon-menu-down:before {
- content: "\e259";
- }
- .glyphicon-menu-up:before {
- content: "\e260";
- }
- * {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- *:before,
- *:after {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- html {
- font-size: 10px;
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
- }
- body {
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 13px;
- line-height: 1.42857143;
- color: #000;
- background-color: #fff;
- }
- input,
- button,
- select,
- textarea {
- font-family: inherit;
- font-size: inherit;
- line-height: inherit;
- }
- a {
- color: #337ab7;
- text-decoration: none;
- }
- a:hover,
- a:focus {
- color: #23527c;
- text-decoration: underline;
- }
- a:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
- }
- figure {
- margin: 0;
- }
- img {
- vertical-align: middle;
- }
- .img-responsive,
- .thumbnail > img,
- .thumbnail a > img,
- .carousel-inner > .item > img,
- .carousel-inner > .item > a > img {
- display: block;
- max-width: 100%;
- height: auto;
- }
- .img-rounded {
- border-radius: 3px;
- }
- .img-thumbnail {
- padding: 4px;
- line-height: 1.42857143;
- background-color: #fff;
- border: 1px solid #ddd;
- border-radius: 2px;
- -webkit-transition: all 0.2s ease-in-out;
- -o-transition: all 0.2s ease-in-out;
- transition: all 0.2s ease-in-out;
- display: inline-block;
- max-width: 100%;
- height: auto;
- }
- .img-circle {
- border-radius: 50%;
- }
- hr {
- margin-top: 18px;
- margin-bottom: 18px;
- border: 0;
- border-top: 1px solid #eeeeee;
- }
- .sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- margin: -1px;
- padding: 0;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- border: 0;
- }
- .sr-only-focusable:active,
- .sr-only-focusable:focus {
- position: static;
- width: auto;
- height: auto;
- margin: 0;
- overflow: visible;
- clip: auto;
- }
- [role="button"] {
- cursor: pointer;
- }
- h1,
- h2,
- h3,
- h4,
- h5,
- h6,
- .h1,
- .h2,
- .h3,
- .h4,
- .h5,
- .h6 {
- font-family: inherit;
- font-weight: 500;
- line-height: 1.1;
- color: inherit;
- }
- h1 small,
- h2 small,
- h3 small,
- h4 small,
- h5 small,
- h6 small,
- .h1 small,
- .h2 small,
- .h3 small,
- .h4 small,
- .h5 small,
- .h6 small,
- h1 .small,
- h2 .small,
- h3 .small,
- h4 .small,
- h5 .small,
- h6 .small,
- .h1 .small,
- .h2 .small,
- .h3 .small,
- .h4 .small,
- .h5 .small,
- .h6 .small {
- font-weight: normal;
- line-height: 1;
- color: #777777;
- }
- h1,
- .h1,
- h2,
- .h2,
- h3,
- .h3 {
- margin-top: 18px;
- margin-bottom: 9px;
- }
- h1 small,
- .h1 small,
- h2 small,
- .h2 small,
- h3 small,
- .h3 small,
- h1 .small,
- .h1 .small,
- h2 .small,
- .h2 .small,
- h3 .small,
- .h3 .small {
- font-size: 65%;
- }
- h4,
- .h4,
- h5,
- .h5,
- h6,
- .h6 {
- margin-top: 9px;
- margin-bottom: 9px;
- }
- h4 small,
- .h4 small,
- h5 small,
- .h5 small,
- h6 small,
- .h6 small,
- h4 .small,
- .h4 .small,
- h5 .small,
- .h5 .small,
- h6 .small,
- .h6 .small {
- font-size: 75%;
- }
- h1,
- .h1 {
- font-size: 33px;
- }
- h2,
- .h2 {
- font-size: 27px;
- }
- h3,
- .h3 {
- font-size: 23px;
- }
- h4,
- .h4 {
- font-size: 17px;
- }
- h5,
- .h5 {
- font-size: 13px;
- }
- h6,
- .h6 {
- font-size: 12px;
- }
- p {
- margin: 0 0 9px;
- }
- .lead {
- margin-bottom: 18px;
- font-size: 14px;
- font-weight: 300;
- line-height: 1.4;
- }
- @media (min-width: 768px) {
- .lead {
- font-size: 19.5px;
- }
- }
- small,
- .small {
- font-size: 92%;
- }
- mark,
- .mark {
- background-color: #fcf8e3;
- padding: .2em;
- }
- .text-left {
- text-align: left;
- }
- .text-right {
- text-align: right;
- }
- .text-center {
- text-align: center;
- }
- .text-justify {
- text-align: justify;
- }
- .text-nowrap {
- white-space: nowrap;
- }
- .text-lowercase {
- text-transform: lowercase;
- }
- .text-uppercase {
- text-transform: uppercase;
- }
- .text-capitalize {
- text-transform: capitalize;
- }
- .text-muted {
- color: #777777;
- }
- .text-primary {
- color: #337ab7;
- }
- a.text-primary:hover,
- a.text-primary:focus {
- color: #286090;
- }
- .text-success {
- color: #3c763d;
- }
- a.text-success:hover,
- a.text-success:focus {
- color: #2b542c;
- }
- .text-info {
- color: #31708f;
- }
- a.text-info:hover,
- a.text-info:focus {
- color: #245269;
- }
- .text-warning {
- color: #8a6d3b;
- }
- a.text-warning:hover,
- a.text-warning:focus {
- color: #66512c;
- }
- .text-danger {
- color: #a94442;
- }
- a.text-danger:hover,
- a.text-danger:focus {
- color: #843534;
- }
- .bg-primary {
- color: #fff;
- background-color: #337ab7;
- }
- a.bg-primary:hover,
- a.bg-primary:focus {
- background-color: #286090;
- }
- .bg-success {
- background-color: #dff0d8;
- }
- a.bg-success:hover,
- a.bg-success:focus {
- background-color: #c1e2b3;
- }
- .bg-info {
- background-color: #d9edf7;
- }
- a.bg-info:hover,
- a.bg-info:focus {
- background-color: #afd9ee;
- }
- .bg-warning {
- background-color: #fcf8e3;
- }
- a.bg-warning:hover,
- a.bg-warning:focus {
- background-color: #f7ecb5;
- }
- .bg-danger {
- background-color: #f2dede;
- }
- a.bg-danger:hover,
- a.bg-danger:focus {
- background-color: #e4b9b9;
- }
- .page-header {
- padding-bottom: 8px;
- margin: 36px 0 18px;
- border-bottom: 1px solid #eeeeee;
- }
- ul,
- ol {
- margin-top: 0;
- margin-bottom: 9px;
- }
- ul ul,
- ol ul,
- ul ol,
- ol ol {
- margin-bottom: 0;
- }
- .list-unstyled {
- padding-left: 0;
- list-style: none;
- }
- .list-inline {
- padding-left: 0;
- list-style: none;
- margin-left: -5px;
- }
- .list-inline > li {
- display: inline-block;
- padding-left: 5px;
- padding-right: 5px;
- }
- dl {
- margin-top: 0;
- margin-bottom: 18px;
- }
- dt,
- dd {
- line-height: 1.42857143;
- }
- dt {
- font-weight: bold;
- }
- dd {
- margin-left: 0;
- }
- @media (min-width: 541px) {
- .dl-horizontal dt {
- float: left;
- width: 160px;
- clear: left;
- text-align: right;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- .dl-horizontal dd {
- margin-left: 180px;
- }
- }
- abbr[title],
- abbr[data-original-title] {
- cursor: help;
- border-bottom: 1px dotted #777777;
- }
- .initialism {
- font-size: 90%;
- text-transform: uppercase;
- }
- blockquote {
- padding: 9px 18px;
- margin: 0 0 18px;
- font-size: inherit;
- border-left: 5px solid #eeeeee;
- }
- blockquote p:last-child,
- blockquote ul:last-child,
- blockquote ol:last-child {
- margin-bottom: 0;
- }
- blockquote footer,
- blockquote small,
- blockquote .small {
- display: block;
- font-size: 80%;
- line-height: 1.42857143;
- color: #777777;
- }
- blockquote footer:before,
- blockquote small:before,
- blockquote .small:before {
- content: '\2014 \00A0';
- }
- .blockquote-reverse,
- blockquote.pull-right {
- padding-right: 15px;
- padding-left: 0;
- border-right: 5px solid #eeeeee;
- border-left: 0;
- text-align: right;
- }
- .blockquote-reverse footer:before,
- blockquote.pull-right footer:before,
- .blockquote-reverse small:before,
- blockquote.pull-right small:before,
- .blockquote-reverse .small:before,
- blockquote.pull-right .small:before {
- content: '';
- }
- .blockquote-reverse footer:after,
- blockquote.pull-right footer:after,
- .blockquote-reverse small:after,
- blockquote.pull-right small:after,
- .blockquote-reverse .small:after,
- blockquote.pull-right .small:after {
- content: '\00A0 \2014';
- }
- address {
- margin-bottom: 18px;
- font-style: normal;
- line-height: 1.42857143;
- }
- code,
- kbd,
- pre,
- samp {
- font-family: monospace;
- }
- code {
- padding: 2px 4px;
- font-size: 90%;
- color: #c7254e;
- background-color: #f9f2f4;
- border-radius: 2px;
- }
- kbd {
- padding: 2px 4px;
- font-size: 90%;
- color: #888;
- background-color: transparent;
- border-radius: 1px;
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
- }
- kbd kbd {
- padding: 0;
- font-size: 100%;
- font-weight: bold;
- box-shadow: none;
- }
- pre {
- display: block;
- padding: 8.5px;
- margin: 0 0 9px;
- font-size: 12px;
- line-height: 1.42857143;
- word-break: break-all;
- word-wrap: break-word;
- color: #333333;
- background-color: #f5f5f5;
- border: 1px solid #ccc;
- border-radius: 2px;
- }
- pre code {
- padding: 0;
- font-size: inherit;
- color: inherit;
- white-space: pre-wrap;
- background-color: transparent;
- border-radius: 0;
- }
- .pre-scrollable {
- max-height: 340px;
- overflow-y: scroll;
- }
- .container {
- margin-right: auto;
- margin-left: auto;
- padding-left: 0px;
- padding-right: 0px;
- }
- @media (min-width: 768px) {
- .container {
- width: 768px;
- }
- }
- @media (min-width: 992px) {
- .container {
- width: 940px;
- }
- }
- @media (min-width: 1200px) {
- .container {
- width: 1140px;
- }
- }
- .container-fluid {
- margin-right: auto;
- margin-left: auto;
- padding-left: 0px;
- padding-right: 0px;
- }
- .row {
- margin-left: 0px;
- margin-right: 0px;
- }
- .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
- position: relative;
- min-height: 1px;
- padding-left: 0px;
- padding-right: 0px;
- }
- .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
- float: left;
- }
- .col-xs-12 {
- width: 100%;
- }
- .col-xs-11 {
- width: 91.66666667%;
- }
- .col-xs-10 {
- width: 83.33333333%;
- }
- .col-xs-9 {
- width: 75%;
- }
- .col-xs-8 {
- width: 66.66666667%;
- }
- .col-xs-7 {
- width: 58.33333333%;
- }
- .col-xs-6 {
- width: 50%;
- }
- .col-xs-5 {
- width: 41.66666667%;
- }
- .col-xs-4 {
- width: 33.33333333%;
- }
- .col-xs-3 {
- width: 25%;
- }
- .col-xs-2 {
- width: 16.66666667%;
- }
- .col-xs-1 {
- width: 8.33333333%;
- }
- .col-xs-pull-12 {
- right: 100%;
- }
- .col-xs-pull-11 {
- right: 91.66666667%;
- }
- .col-xs-pull-10 {
- right: 83.33333333%;
- }
- .col-xs-pull-9 {
- right: 75%;
- }
- .col-xs-pull-8 {
- right: 66.66666667%;
- }
- .col-xs-pull-7 {
- right: 58.33333333%;
- }
- .col-xs-pull-6 {
- right: 50%;
- }
- .col-xs-pull-5 {
- right: 41.66666667%;
- }
- .col-xs-pull-4 {
- right: 33.33333333%;
- }
- .col-xs-pull-3 {
- right: 25%;
- }
- .col-xs-pull-2 {
- right: 16.66666667%;
- }
- .col-xs-pull-1 {
- right: 8.33333333%;
- }
- .col-xs-pull-0 {
- right: auto;
- }
- .col-xs-push-12 {
- left: 100%;
- }
- .col-xs-push-11 {
- left: 91.66666667%;
- }
- .col-xs-push-10 {
- left: 83.33333333%;
- }
- .col-xs-push-9 {
- left: 75%;
- }
- .col-xs-push-8 {
- left: 66.66666667%;
- }
- .col-xs-push-7 {
- left: 58.33333333%;
- }
- .col-xs-push-6 {
- left: 50%;
- }
- .col-xs-push-5 {
- left: 41.66666667%;
- }
- .col-xs-push-4 {
- left: 33.33333333%;
- }
- .col-xs-push-3 {
- left: 25%;
- }
- .col-xs-push-2 {
- left: 16.66666667%;
- }
- .col-xs-push-1 {
- left: 8.33333333%;
- }
- .col-xs-push-0 {
- left: auto;
- }
- .col-xs-offset-12 {
- margin-left: 100%;
- }
- .col-xs-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-xs-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-xs-offset-9 {
- margin-left: 75%;
- }
- .col-xs-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-xs-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-xs-offset-6 {
- margin-left: 50%;
- }
- .col-xs-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-xs-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-xs-offset-3 {
- margin-left: 25%;
- }
- .col-xs-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-xs-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-xs-offset-0 {
- margin-left: 0%;
- }
- @media (min-width: 768px) {
- .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
- float: left;
- }
- .col-sm-12 {
- width: 100%;
- }
- .col-sm-11 {
- width: 91.66666667%;
- }
- .col-sm-10 {
- width: 83.33333333%;
- }
- .col-sm-9 {
- width: 75%;
- }
- .col-sm-8 {
- width: 66.66666667%;
- }
- .col-sm-7 {
- width: 58.33333333%;
- }
- .col-sm-6 {
- width: 50%;
- }
- .col-sm-5 {
- width: 41.66666667%;
- }
- .col-sm-4 {
- width: 33.33333333%;
- }
- .col-sm-3 {
- width: 25%;
- }
- .col-sm-2 {
- width: 16.66666667%;
- }
- .col-sm-1 {
- width: 8.33333333%;
- }
- .col-sm-pull-12 {
- right: 100%;
- }
- .col-sm-pull-11 {
- right: 91.66666667%;
- }
- .col-sm-pull-10 {
- right: 83.33333333%;
- }
- .col-sm-pull-9 {
- right: 75%;
- }
- .col-sm-pull-8 {
- right: 66.66666667%;
- }
- .col-sm-pull-7 {
- right: 58.33333333%;
- }
- .col-sm-pull-6 {
- right: 50%;
- }
- .col-sm-pull-5 {
- right: 41.66666667%;
- }
- .col-sm-pull-4 {
- right: 33.33333333%;
- }
- .col-sm-pull-3 {
- right: 25%;
- }
- .col-sm-pull-2 {
- right: 16.66666667%;
- }
- .col-sm-pull-1 {
- right: 8.33333333%;
- }
- .col-sm-pull-0 {
- right: auto;
- }
- .col-sm-push-12 {
- left: 100%;
- }
- .col-sm-push-11 {
- left: 91.66666667%;
- }
- .col-sm-push-10 {
- left: 83.33333333%;
- }
- .col-sm-push-9 {
- left: 75%;
- }
- .col-sm-push-8 {
- left: 66.66666667%;
- }
- .col-sm-push-7 {
- left: 58.33333333%;
- }
- .col-sm-push-6 {
- left: 50%;
- }
- .col-sm-push-5 {
- left: 41.66666667%;
- }
- .col-sm-push-4 {
- left: 33.33333333%;
- }
- .col-sm-push-3 {
- left: 25%;
- }
- .col-sm-push-2 {
- left: 16.66666667%;
- }
- .col-sm-push-1 {
- left: 8.33333333%;
- }
- .col-sm-push-0 {
- left: auto;
- }
- .col-sm-offset-12 {
- margin-left: 100%;
- }
- .col-sm-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-sm-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-sm-offset-9 {
- margin-left: 75%;
- }
- .col-sm-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-sm-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-sm-offset-6 {
- margin-left: 50%;
- }
- .col-sm-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-sm-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-sm-offset-3 {
- margin-left: 25%;
- }
- .col-sm-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-sm-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-sm-offset-0 {
- margin-left: 0%;
- }
- }
- @media (min-width: 992px) {
- .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
- float: left;
- }
- .col-md-12 {
- width: 100%;
- }
- .col-md-11 {
- width: 91.66666667%;
- }
- .col-md-10 {
- width: 83.33333333%;
- }
- .col-md-9 {
- width: 75%;
- }
- .col-md-8 {
- width: 66.66666667%;
- }
- .col-md-7 {
- width: 58.33333333%;
- }
- .col-md-6 {
- width: 50%;
- }
- .col-md-5 {
- width: 41.66666667%;
- }
- .col-md-4 {
- width: 33.33333333%;
- }
- .col-md-3 {
- width: 25%;
- }
- .col-md-2 {
- width: 16.66666667%;
- }
- .col-md-1 {
- width: 8.33333333%;
- }
- .col-md-pull-12 {
- right: 100%;
- }
- .col-md-pull-11 {
- right: 91.66666667%;
- }
- .col-md-pull-10 {
- right: 83.33333333%;
- }
- .col-md-pull-9 {
- right: 75%;
- }
- .col-md-pull-8 {
- right: 66.66666667%;
- }
- .col-md-pull-7 {
- right: 58.33333333%;
- }
- .col-md-pull-6 {
- right: 50%;
- }
- .col-md-pull-5 {
- right: 41.66666667%;
- }
- .col-md-pull-4 {
- right: 33.33333333%;
- }
- .col-md-pull-3 {
- right: 25%;
- }
- .col-md-pull-2 {
- right: 16.66666667%;
- }
- .col-md-pull-1 {
- right: 8.33333333%;
- }
- .col-md-pull-0 {
- right: auto;
- }
- .col-md-push-12 {
- left: 100%;
- }
- .col-md-push-11 {
- left: 91.66666667%;
- }
- .col-md-push-10 {
- left: 83.33333333%;
- }
- .col-md-push-9 {
- left: 75%;
- }
- .col-md-push-8 {
- left: 66.66666667%;
- }
- .col-md-push-7 {
- left: 58.33333333%;
- }
- .col-md-push-6 {
- left: 50%;
- }
- .col-md-push-5 {
- left: 41.66666667%;
- }
- .col-md-push-4 {
- left: 33.33333333%;
- }
- .col-md-push-3 {
- left: 25%;
- }
- .col-md-push-2 {
- left: 16.66666667%;
- }
- .col-md-push-1 {
- left: 8.33333333%;
- }
- .col-md-push-0 {
- left: auto;
- }
- .col-md-offset-12 {
- margin-left: 100%;
- }
- .col-md-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-md-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-md-offset-9 {
- margin-left: 75%;
- }
- .col-md-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-md-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-md-offset-6 {
- margin-left: 50%;
- }
- .col-md-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-md-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-md-offset-3 {
- margin-left: 25%;
- }
- .col-md-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-md-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-md-offset-0 {
- margin-left: 0%;
- }
- }
- @media (min-width: 1200px) {
- .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
- float: left;
- }
- .col-lg-12 {
- width: 100%;
- }
- .col-lg-11 {
- width: 91.66666667%;
- }
- .col-lg-10 {
- width: 83.33333333%;
- }
- .col-lg-9 {
- width: 75%;
- }
- .col-lg-8 {
- width: 66.66666667%;
- }
- .col-lg-7 {
- width: 58.33333333%;
- }
- .col-lg-6 {
- width: 50%;
- }
- .col-lg-5 {
- width: 41.66666667%;
- }
- .col-lg-4 {
- width: 33.33333333%;
- }
- .col-lg-3 {
- width: 25%;
- }
- .col-lg-2 {
- width: 16.66666667%;
- }
- .col-lg-1 {
- width: 8.33333333%;
- }
- .col-lg-pull-12 {
- right: 100%;
- }
- .col-lg-pull-11 {
- right: 91.66666667%;
- }
- .col-lg-pull-10 {
- right: 83.33333333%;
- }
- .col-lg-pull-9 {
- right: 75%;
- }
- .col-lg-pull-8 {
- right: 66.66666667%;
- }
- .col-lg-pull-7 {
- right: 58.33333333%;
- }
- .col-lg-pull-6 {
- right: 50%;
- }
- .col-lg-pull-5 {
- right: 41.66666667%;
- }
- .col-lg-pull-4 {
- right: 33.33333333%;
- }
- .col-lg-pull-3 {
- right: 25%;
- }
- .col-lg-pull-2 {
- right: 16.66666667%;
- }
- .col-lg-pull-1 {
- right: 8.33333333%;
- }
- .col-lg-pull-0 {
- right: auto;
- }
- .col-lg-push-12 {
- left: 100%;
- }
- .col-lg-push-11 {
- left: 91.66666667%;
- }
- .col-lg-push-10 {
- left: 83.33333333%;
- }
- .col-lg-push-9 {
- left: 75%;
- }
- .col-lg-push-8 {
- left: 66.66666667%;
- }
- .col-lg-push-7 {
- left: 58.33333333%;
- }
- .col-lg-push-6 {
- left: 50%;
- }
- .col-lg-push-5 {
- left: 41.66666667%;
- }
- .col-lg-push-4 {
- left: 33.33333333%;
- }
- .col-lg-push-3 {
- left: 25%;
- }
- .col-lg-push-2 {
- left: 16.66666667%;
- }
- .col-lg-push-1 {
- left: 8.33333333%;
- }
- .col-lg-push-0 {
- left: auto;
- }
- .col-lg-offset-12 {
- margin-left: 100%;
- }
- .col-lg-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-lg-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-lg-offset-9 {
- margin-left: 75%;
- }
- .col-lg-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-lg-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-lg-offset-6 {
- margin-left: 50%;
- }
- .col-lg-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-lg-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-lg-offset-3 {
- margin-left: 25%;
- }
- .col-lg-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-lg-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-lg-offset-0 {
- margin-left: 0%;
- }
- }
- table {
- background-color: transparent;
- }
- caption {
- padding-top: 8px;
- padding-bottom: 8px;
- color: #777777;
- text-align: left;
- }
- th {
- text-align: left;
- }
- .table {
- width: 100%;
- max-width: 100%;
- margin-bottom: 18px;
- }
- .table > thead > tr > th,
- .table > tbody > tr > th,
- .table > tfoot > tr > th,
- .table > thead > tr > td,
- .table > tbody > tr > td,
- .table > tfoot > tr > td {
- padding: 8px;
- line-height: 1.42857143;
- vertical-align: top;
- border-top: 1px solid #ddd;
- }
- .table > thead > tr > th {
- vertical-align: bottom;
- border-bottom: 2px solid #ddd;
- }
- .table > caption + thead > tr:first-child > th,
- .table > colgroup + thead > tr:first-child > th,
- .table > thead:first-child > tr:first-child > th,
- .table > caption + thead > tr:first-child > td,
- .table > colgroup + thead > tr:first-child > td,
- .table > thead:first-child > tr:first-child > td {
- border-top: 0;
- }
- .table > tbody + tbody {
- border-top: 2px solid #ddd;
- }
- .table .table {
- background-color: #fff;
- }
- .table-condensed > thead > tr > th,
- .table-condensed > tbody > tr > th,
- .table-condensed > tfoot > tr > th,
- .table-condensed > thead > tr > td,
- .table-condensed > tbody > tr > td,
- .table-condensed > tfoot > tr > td {
- padding: 5px;
- }
- .table-bordered {
- border: 1px solid #ddd;
- }
- .table-bordered > thead > tr > th,
- .table-bordered > tbody > tr > th,
- .table-bordered > tfoot > tr > th,
- .table-bordered > thead > tr > td,
- .table-bordered > tbody > tr > td,
- .table-bordered > tfoot > tr > td {
- border: 1px solid #ddd;
- }
- .table-bordered > thead > tr > th,
- .table-bordered > thead > tr > td {
- border-bottom-width: 2px;
- }
- .table-striped > tbody > tr:nth-of-type(odd) {
- background-color: #f9f9f9;
- }
- .table-hover > tbody > tr:hover {
- background-color: #f5f5f5;
- }
- table col[class*="col-"] {
- position: static;
- float: none;
- display: table-column;
- }
- table td[class*="col-"],
- table th[class*="col-"] {
- position: static;
- float: none;
- display: table-cell;
- }
- .table > thead > tr > td.active,
- .table > tbody > tr > td.active,
- .table > tfoot > tr > td.active,
- .table > thead > tr > th.active,
- .table > tbody > tr > th.active,
- .table > tfoot > tr > th.active,
- .table > thead > tr.active > td,
- .table > tbody > tr.active > td,
- .table > tfoot > tr.active > td,
- .table > thead > tr.active > th,
- .table > tbody > tr.active > th,
- .table > tfoot > tr.active > th {
- background-color: #f5f5f5;
- }
- .table-hover > tbody > tr > td.active:hover,
- .table-hover > tbody > tr > th.active:hover,
- .table-hover > tbody > tr.active:hover > td,
- .table-hover > tbody > tr:hover > .active,
- .table-hover > tbody > tr.active:hover > th {
- background-color: #e8e8e8;
- }
- .table > thead > tr > td.success,
- .table > tbody > tr > td.success,
- .table > tfoot > tr > td.success,
- .table > thead > tr > th.success,
- .table > tbody > tr > th.success,
- .table > tfoot > tr > th.success,
- .table > thead > tr.success > td,
- .table > tbody > tr.success > td,
- .table > tfoot > tr.success > td,
- .table > thead > tr.success > th,
- .table > tbody > tr.success > th,
- .table > tfoot > tr.success > th {
- background-color: #dff0d8;
- }
- .table-hover > tbody > tr > td.success:hover,
- .table-hover > tbody > tr > th.success:hover,
- .table-hover > tbody > tr.success:hover > td,
- .table-hover > tbody > tr:hover > .success,
- .table-hover > tbody > tr.success:hover > th {
- background-color: #d0e9c6;
- }
- .table > thead > tr > td.info,
- .table > tbody > tr > td.info,
- .table > tfoot > tr > td.info,
- .table > thead > tr > th.info,
- .table > tbody > tr > th.info,
- .table > tfoot > tr > th.info,
- .table > thead > tr.info > td,
- .table > tbody > tr.info > td,
- .table > tfoot > tr.info > td,
- .table > thead > tr.info > th,
- .table > tbody > tr.info > th,
- .table > tfoot > tr.info > th {
- background-color: #d9edf7;
- }
- .table-hover > tbody > tr > td.info:hover,
- .table-hover > tbody > tr > th.info:hover,
- .table-hover > tbody > tr.info:hover > td,
- .table-hover > tbody > tr:hover > .info,
- .table-hover > tbody > tr.info:hover > th {
- background-color: #c4e3f3;
- }
- .table > thead > tr > td.warning,
- .table > tbody > tr > td.warning,
- .table > tfoot > tr > td.warning,
- .table > thead > tr > th.warning,
- .table > tbody > tr > th.warning,
- .table > tfoot > tr > th.warning,
- .table > thead > tr.warning > td,
- .table > tbody > tr.warning > td,
- .table > tfoot > tr.warning > td,
- .table > thead > tr.warning > th,
- .table > tbody > tr.warning > th,
- .table > tfoot > tr.warning > th {
- background-color: #fcf8e3;
- }
- .table-hover > tbody > tr > td.warning:hover,
- .table-hover > tbody > tr > th.warning:hover,
- .table-hover > tbody > tr.warning:hover > td,
- .table-hover > tbody > tr:hover > .warning,
- .table-hover > tbody > tr.warning:hover > th {
- background-color: #faf2cc;
- }
- .table > thead > tr > td.danger,
- .table > tbody > tr > td.danger,
- .table > tfoot > tr > td.danger,
- .table > thead > tr > th.danger,
- .table > tbody > tr > th.danger,
- .table > tfoot > tr > th.danger,
- .table > thead > tr.danger > td,
- .table > tbody > tr.danger > td,
- .table > tfoot > tr.danger > td,
- .table > thead > tr.danger > th,
- .table > tbody > tr.danger > th,
- .table > tfoot > tr.danger > th {
- background-color: #f2dede;
- }
- .table-hover > tbody > tr > td.danger:hover,
- .table-hover > tbody > tr > th.danger:hover,
- .table-hover > tbody > tr.danger:hover > td,
- .table-hover > tbody > tr:hover > .danger,
- .table-hover > tbody > tr.danger:hover > th {
- background-color: #ebcccc;
- }
- .table-responsive {
- overflow-x: auto;
- min-height: 0.01%;
- }
- @media screen and (max-width: 767px) {
- .table-responsive {
- width: 100%;
- margin-bottom: 13.5px;
- overflow-y: hidden;
- -ms-overflow-style: -ms-autohiding-scrollbar;
- border: 1px solid #ddd;
- }
- .table-responsive > .table {
- margin-bottom: 0;
- }
- .table-responsive > .table > thead > tr > th,
- .table-responsive > .table > tbody > tr > th,
- .table-responsive > .table > tfoot > tr > th,
- .table-responsive > .table > thead > tr > td,
- .table-responsive > .table > tbody > tr > td,
- .table-responsive > .table > tfoot > tr > td {
- white-space: nowrap;
- }
- .table-responsive > .table-bordered {
- border: 0;
- }
- .table-responsive > .table-bordered > thead > tr > th:first-child,
- .table-responsive > .table-bordered > tbody > tr > th:first-child,
- .table-responsive > .table-bordered > tfoot > tr > th:first-child,
- .table-responsive > .table-bordered > thead > tr > td:first-child,
- .table-responsive > .table-bordered > tbody > tr > td:first-child,
- .table-responsive > .table-bordered > tfoot > tr > td:first-child {
- border-left: 0;
- }
- .table-responsive > .table-bordered > thead > tr > th:last-child,
- .table-responsive > .table-bordered > tbody > tr > th:last-child,
- .table-responsive > .table-bordered > tfoot > tr > th:last-child,
- .table-responsive > .table-bordered > thead > tr > td:last-child,
- .table-responsive > .table-bordered > tbody > tr > td:last-child,
- .table-responsive > .table-bordered > tfoot > tr > td:last-child {
- border-right: 0;
- }
- .table-responsive > .table-bordered > tbody > tr:last-child > th,
- .table-responsive > .table-bordered > tfoot > tr:last-child > th,
- .table-responsive > .table-bordered > tbody > tr:last-child > td,
- .table-responsive > .table-bordered > tfoot > tr:last-child > td {
- border-bottom: 0;
- }
- }
- fieldset {
- padding: 0;
- margin: 0;
- border: 0;
- min-width: 0;
- }
- legend {
- display: block;
- width: 100%;
- padding: 0;
- margin-bottom: 18px;
- font-size: 19.5px;
- line-height: inherit;
- color: #333333;
- border: 0;
- border-bottom: 1px solid #e5e5e5;
- }
- label {
- display: inline-block;
- max-width: 100%;
- margin-bottom: 5px;
- font-weight: bold;
- }
- input[type="search"] {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- input[type="radio"],
- input[type="checkbox"] {
- margin: 4px 0 0;
- margin-top: 1px \9;
- line-height: normal;
- }
- input[type="file"] {
- display: block;
- }
- input[type="range"] {
- display: block;
- width: 100%;
- }
- select[multiple],
- select[size] {
- height: auto;
- }
- input[type="file"]:focus,
- input[type="radio"]:focus,
- input[type="checkbox"]:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
- }
- output {
- display: block;
- padding-top: 7px;
- font-size: 13px;
- line-height: 1.42857143;
- color: #555555;
- }
- .form-control {
- display: block;
- width: 100%;
- height: 32px;
- padding: 6px 12px;
- font-size: 13px;
- line-height: 1.42857143;
- color: #555555;
- background-color: #fff;
- background-image: none;
- border: 1px solid #ccc;
- border-radius: 2px;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
- -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
- transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
- }
- .form-control:focus {
- border-color: #66afe9;
- outline: 0;
- -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
- box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
- }
- .form-control::-moz-placeholder {
- color: #999;
- opacity: 1;
- }
- .form-control:-ms-input-placeholder {
- color: #999;
- }
- .form-control::-webkit-input-placeholder {
- color: #999;
- }
- .form-control::-ms-expand {
- border: 0;
- background-color: transparent;
- }
- .form-control[disabled],
- .form-control[readonly],
- fieldset[disabled] .form-control {
- background-color: #eeeeee;
- opacity: 1;
- }
- .form-control[disabled],
- fieldset[disabled] .form-control {
- cursor: not-allowed;
- }
- textarea.form-control {
- height: auto;
- }
- input[type="search"] {
- -webkit-appearance: none;
- }
- @media screen and (-webkit-min-device-pixel-ratio: 0) {
- input[type="date"].form-control,
- input[type="time"].form-control,
- input[type="datetime-local"].form-control,
- input[type="month"].form-control {
- line-height: 32px;
- }
- input[type="date"].input-sm,
- input[type="time"].input-sm,
- input[type="datetime-local"].input-sm,
- input[type="month"].input-sm,
- .input-group-sm input[type="date"],
- .input-group-sm input[type="time"],
- .input-group-sm input[type="datetime-local"],
- .input-group-sm input[type="month"] {
- line-height: 30px;
- }
- input[type="date"].input-lg,
- input[type="time"].input-lg,
- input[type="datetime-local"].input-lg,
- input[type="month"].input-lg,
- .input-group-lg input[type="date"],
- .input-group-lg input[type="time"],
- .input-group-lg input[type="datetime-local"],
- .input-group-lg input[type="month"] {
- line-height: 45px;
- }
- }
- .form-group {
- margin-bottom: 15px;
- }
- .radio,
- .checkbox {
- position: relative;
- display: block;
- margin-top: 10px;
- margin-bottom: 10px;
- }
- .radio label,
- .checkbox label {
- min-height: 18px;
- padding-left: 20px;
- margin-bottom: 0;
- font-weight: normal;
- cursor: pointer;
- }
- .radio input[type="radio"],
- .radio-inline input[type="radio"],
- .checkbox input[type="checkbox"],
- .checkbox-inline input[type="checkbox"] {
- position: absolute;
- margin-left: -20px;
- margin-top: 4px \9;
- }
- .radio + .radio,
- .checkbox + .checkbox {
- margin-top: -5px;
- }
- .radio-inline,
- .checkbox-inline {
- position: relative;
- display: inline-block;
- padding-left: 20px;
- margin-bottom: 0;
- vertical-align: middle;
- font-weight: normal;
- cursor: pointer;
- }
- .radio-inline + .radio-inline,
- .checkbox-inline + .checkbox-inline {
- margin-top: 0;
- margin-left: 10px;
- }
- input[type="radio"][disabled],
- input[type="checkbox"][disabled],
- input[type="radio"].disabled,
- input[type="checkbox"].disabled,
- fieldset[disabled] input[type="radio"],
- fieldset[disabled] input[type="checkbox"] {
- cursor: not-allowed;
- }
- .radio-inline.disabled,
- .checkbox-inline.disabled,
- fieldset[disabled] .radio-inline,
- fieldset[disabled] .checkbox-inline {
- cursor: not-allowed;
- }
- .radio.disabled label,
- .checkbox.disabled label,
- fieldset[disabled] .radio label,
- fieldset[disabled] .checkbox label {
- cursor: not-allowed;
- }
- .form-control-static {
- padding-top: 7px;
- padding-bottom: 7px;
- margin-bottom: 0;
- min-height: 31px;
- }
- .form-control-static.input-lg,
- .form-control-static.input-sm {
- padding-left: 0;
- padding-right: 0;
- }
- .input-sm {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 1px;
- }
- select.input-sm {
- height: 30px;
- line-height: 30px;
- }
- textarea.input-sm,
- select[multiple].input-sm {
- height: auto;
- }
- .form-group-sm .form-control {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 1px;
- }
- .form-group-sm select.form-control {
- height: 30px;
- line-height: 30px;
- }
- .form-group-sm textarea.form-control,
- .form-group-sm select[multiple].form-control {
- height: auto;
- }
- .form-group-sm .form-control-static {
- height: 30px;
- min-height: 30px;
- padding: 6px 10px;
- font-size: 12px;
- line-height: 1.5;
- }
- .input-lg {
- height: 45px;
- padding: 10px 16px;
- font-size: 17px;
- line-height: 1.3333333;
- border-radius: 3px;
- }
- select.input-lg {
- height: 45px;
- line-height: 45px;
- }
- textarea.input-lg,
- select[multiple].input-lg {
- height: auto;
- }
- .form-group-lg .form-control {
- height: 45px;
- padding: 10px 16px;
- font-size: 17px;
- line-height: 1.3333333;
- border-radius: 3px;
- }
- .form-group-lg select.form-control {
- height: 45px;
- line-height: 45px;
- }
- .form-group-lg textarea.form-control,
- .form-group-lg select[multiple].form-control {
- height: auto;
- }
- .form-group-lg .form-control-static {
- height: 45px;
- min-height: 35px;
- padding: 11px 16px;
- font-size: 17px;
- line-height: 1.3333333;
- }
- .has-feedback {
- position: relative;
- }
- .has-feedback .form-control {
- padding-right: 40px;
- }
- .form-control-feedback {
- position: absolute;
- top: 0;
- right: 0;
- z-index: 2;
- display: block;
- width: 32px;
- height: 32px;
- line-height: 32px;
- text-align: center;
- pointer-events: none;
- }
- .input-lg + .form-control-feedback,
- .input-group-lg + .form-control-feedback,
- .form-group-lg .form-control + .form-control-feedback {
- width: 45px;
- height: 45px;
- line-height: 45px;
- }
- .input-sm + .form-control-feedback,
- .input-group-sm + .form-control-feedback,
- .form-group-sm .form-control + .form-control-feedback {
- width: 30px;
- height: 30px;
- line-height: 30px;
- }
- .has-success .help-block,
- .has-success .control-label,
- .has-success .radio,
- .has-success .checkbox,
- .has-success .radio-inline,
- .has-success .checkbox-inline,
- .has-success.radio label,
- .has-success.checkbox label,
- .has-success.radio-inline label,
- .has-success.checkbox-inline label {
- color: #3c763d;
- }
- .has-success .form-control {
- border-color: #3c763d;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- }
- .has-success .form-control:focus {
- border-color: #2b542c;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
- }
- .has-success .input-group-addon {
- color: #3c763d;
- border-color: #3c763d;
- background-color: #dff0d8;
- }
- .has-success .form-control-feedback {
- color: #3c763d;
- }
- .has-warning .help-block,
- .has-warning .control-label,
- .has-warning .radio,
- .has-warning .checkbox,
- .has-warning .radio-inline,
- .has-warning .checkbox-inline,
- .has-warning.radio label,
- .has-warning.checkbox label,
- .has-warning.radio-inline label,
- .has-warning.checkbox-inline label {
- color: #8a6d3b;
- }
- .has-warning .form-control {
- border-color: #8a6d3b;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- }
- .has-warning .form-control:focus {
- border-color: #66512c;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
- }
- .has-warning .input-group-addon {
- color: #8a6d3b;
- border-color: #8a6d3b;
- background-color: #fcf8e3;
- }
- .has-warning .form-control-feedback {
- color: #8a6d3b;
- }
- .has-error .help-block,
- .has-error .control-label,
- .has-error .radio,
- .has-error .checkbox,
- .has-error .radio-inline,
- .has-error .checkbox-inline,
- .has-error.radio label,
- .has-error.checkbox label,
- .has-error.radio-inline label,
- .has-error.checkbox-inline label {
- color: #a94442;
- }
- .has-error .form-control {
- border-color: #a94442;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- }
- .has-error .form-control:focus {
- border-color: #843534;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
- }
- .has-error .input-group-addon {
- color: #a94442;
- border-color: #a94442;
- background-color: #f2dede;
- }
- .has-error .form-control-feedback {
- color: #a94442;
- }
- .has-feedback label ~ .form-control-feedback {
- top: 23px;
- }
- .has-feedback label.sr-only ~ .form-control-feedback {
- top: 0;
- }
- .help-block {
- display: block;
- margin-top: 5px;
- margin-bottom: 10px;
- color: #404040;
- }
- @media (min-width: 768px) {
- .form-inline .form-group {
- display: inline-block;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle;
- }
- .form-inline .form-control-static {
- display: inline-block;
- }
- .form-inline .input-group {
- display: inline-table;
- vertical-align: middle;
- }
- .form-inline .input-group .input-group-addon,
- .form-inline .input-group .input-group-btn,
- .form-inline .input-group .form-control {
- width: auto;
- }
- .form-inline .input-group > .form-control {
- width: 100%;
- }
- .form-inline .control-label {
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .radio,
- .form-inline .checkbox {
- display: inline-block;
- margin-top: 0;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .radio label,
- .form-inline .checkbox label {
- padding-left: 0;
- }
- .form-inline .radio input[type="radio"],
- .form-inline .checkbox input[type="checkbox"] {
- position: relative;
- margin-left: 0;
- }
- .form-inline .has-feedback .form-control-feedback {
- top: 0;
- }
- }
- .form-horizontal .radio,
- .form-horizontal .checkbox,
- .form-horizontal .radio-inline,
- .form-horizontal .checkbox-inline {
- margin-top: 0;
- margin-bottom: 0;
- padding-top: 7px;
- }
- .form-horizontal .radio,
- .form-horizontal .checkbox {
- min-height: 25px;
- }
- .form-horizontal .form-group {
- margin-left: 0px;
- margin-right: 0px;
- }
- @media (min-width: 768px) {
- .form-horizontal .control-label {
- text-align: right;
- margin-bottom: 0;
- padding-top: 7px;
- }
- }
- .form-horizontal .has-feedback .form-control-feedback {
- right: 0px;
- }
- @media (min-width: 768px) {
- .form-horizontal .form-group-lg .control-label {
- padding-top: 11px;
- font-size: 17px;
- }
- }
- @media (min-width: 768px) {
- .form-horizontal .form-group-sm .control-label {
- padding-top: 6px;
- font-size: 12px;
- }
- }
- .btn {
- display: inline-block;
- margin-bottom: 0;
- font-weight: normal;
- text-align: center;
- vertical-align: middle;
- touch-action: manipulation;
- cursor: pointer;
- background-image: none;
- border: 1px solid transparent;
- white-space: nowrap;
- padding: 6px 12px;
- font-size: 13px;
- line-height: 1.42857143;
- border-radius: 2px;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- }
- .btn:focus,
- .btn:active:focus,
- .btn.active:focus,
- .btn.focus,
- .btn:active.focus,
- .btn.active.focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
- }
- .btn:hover,
- .btn:focus,
- .btn.focus {
- color: #333;
- text-decoration: none;
- }
- .btn:active,
- .btn.active {
- outline: 0;
- background-image: none;
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- }
- .btn.disabled,
- .btn[disabled],
- fieldset[disabled] .btn {
- cursor: not-allowed;
- opacity: 0.65;
- filter: alpha(opacity=65);
- -webkit-box-shadow: none;
- box-shadow: none;
- }
- a.btn.disabled,
- fieldset[disabled] a.btn {
- pointer-events: none;
- }
- .btn-default {
- color: #333;
- background-color: #fff;
- border-color: #ccc;
- }
- .btn-default:focus,
- .btn-default.focus {
- color: #333;
- background-color: #e6e6e6;
- border-color: #8c8c8c;
- }
- .btn-default:hover {
- color: #333;
- background-color: #e6e6e6;
- border-color: #adadad;
- }
- .btn-default:active,
- .btn-default.active,
- .open > .dropdown-toggle.btn-default {
- color: #333;
- background-color: #e6e6e6;
- border-color: #adadad;
- }
- .btn-default:active:hover,
- .btn-default.active:hover,
- .open > .dropdown-toggle.btn-default:hover,
- .btn-default:active:focus,
- .btn-default.active:focus,
- .open > .dropdown-toggle.btn-default:focus,
- .btn-default:active.focus,
- .btn-default.active.focus,
- .open > .dropdown-toggle.btn-default.focus {
- color: #333;
- background-color: #d4d4d4;
- border-color: #8c8c8c;
- }
- .btn-default:active,
- .btn-default.active,
- .open > .dropdown-toggle.btn-default {
- background-image: none;
- }
- .btn-default.disabled:hover,
- .btn-default[disabled]:hover,
- fieldset[disabled] .btn-default:hover,
- .btn-default.disabled:focus,
- .btn-default[disabled]:focus,
- fieldset[disabled] .btn-default:focus,
- .btn-default.disabled.focus,
- .btn-default[disabled].focus,
- fieldset[disabled] .btn-default.focus {
- background-color: #fff;
- border-color: #ccc;
- }
- .btn-default .badge {
- color: #fff;
- background-color: #333;
- }
- .btn-primary {
- color: #fff;
- background-color: #337ab7;
- border-color: #2e6da4;
- }
- .btn-primary:focus,
- .btn-primary.focus {
- color: #fff;
- background-color: #286090;
- border-color: #122b40;
- }
- .btn-primary:hover {
- color: #fff;
- background-color: #286090;
- border-color: #204d74;
- }
- .btn-primary:active,
- .btn-primary.active,
- .open > .dropdown-toggle.btn-primary {
- color: #fff;
- background-color: #286090;
- border-color: #204d74;
- }
- .btn-primary:active:hover,
- .btn-primary.active:hover,
- .open > .dropdown-toggle.btn-primary:hover,
- .btn-primary:active:focus,
- .btn-primary.active:focus,
- .open > .dropdown-toggle.btn-primary:focus,
- .btn-primary:active.focus,
- .btn-primary.active.focus,
- .open > .dropdown-toggle.btn-primary.focus {
- color: #fff;
- background-color: #204d74;
- border-color: #122b40;
- }
- .btn-primary:active,
- .btn-primary.active,
- .open > .dropdown-toggle.btn-primary {
- background-image: none;
- }
- .btn-primary.disabled:hover,
- .btn-primary[disabled]:hover,
- fieldset[disabled] .btn-primary:hover,
- .btn-primary.disabled:focus,
- .btn-primary[disabled]:focus,
- fieldset[disabled] .btn-primary:focus,
- .btn-primary.disabled.focus,
- .btn-primary[disabled].focus,
- fieldset[disabled] .btn-primary.focus {
- background-color: #337ab7;
- border-color: #2e6da4;
- }
- .btn-primary .badge {
- color: #337ab7;
- background-color: #fff;
- }
- .btn-success {
- color: #fff;
- background-color: #5cb85c;
- border-color: #4cae4c;
- }
- .btn-success:focus,
- .btn-success.focus {
- color: #fff;
- background-color: #449d44;
- border-color: #255625;
- }
- .btn-success:hover {
- color: #fff;
- background-color: #449d44;
- border-color: #398439;
- }
- .btn-success:active,
- .btn-success.active,
- .open > .dropdown-toggle.btn-success {
- color: #fff;
- background-color: #449d44;
- border-color: #398439;
- }
- .btn-success:active:hover,
- .btn-success.active:hover,
- .open > .dropdown-toggle.btn-success:hover,
- .btn-success:active:focus,
- .btn-success.active:focus,
- .open > .dropdown-toggle.btn-success:focus,
- .btn-success:active.focus,
- .btn-success.active.focus,
- .open > .dropdown-toggle.btn-success.focus {
- color: #fff;
- background-color: #398439;
- border-color: #255625;
- }
- .btn-success:active,
- .btn-success.active,
- .open > .dropdown-toggle.btn-success {
- background-image: none;
- }
- .btn-success.disabled:hover,
- .btn-success[disabled]:hover,
- fieldset[disabled] .btn-success:hover,
- .btn-success.disabled:focus,
- .btn-success[disabled]:focus,
- fieldset[disabled] .btn-success:focus,
- .btn-success.disabled.focus,
- .btn-success[disabled].focus,
- fieldset[disabled] .btn-success.focus {
- background-color: #5cb85c;
- border-color: #4cae4c;
- }
- .btn-success .badge {
- color: #5cb85c;
- background-color: #fff;
- }
- .btn-info {
- color: #fff;
- background-color: #5bc0de;
- border-color: #46b8da;
- }
- .btn-info:focus,
- .btn-info.focus {
- color: #fff;
- background-color: #31b0d5;
- border-color: #1b6d85;
- }
- .btn-info:hover {
- color: #fff;
- background-color: #31b0d5;
- border-color: #269abc;
- }
- .btn-info:active,
- .btn-info.active,
- .open > .dropdown-toggle.btn-info {
- color: #fff;
- background-color: #31b0d5;
- border-color: #269abc;
- }
- .btn-info:active:hover,
- .btn-info.active:hover,
- .open > .dropdown-toggle.btn-info:hover,
- .btn-info:active:focus,
- .btn-info.active:focus,
- .open > .dropdown-toggle.btn-info:focus,
- .btn-info:active.focus,
- .btn-info.active.focus,
- .open > .dropdown-toggle.btn-info.focus {
- color: #fff;
- background-color: #269abc;
- border-color: #1b6d85;
- }
- .btn-info:active,
- .btn-info.active,
- .open > .dropdown-toggle.btn-info {
- background-image: none;
- }
- .btn-info.disabled:hover,
- .btn-info[disabled]:hover,
- fieldset[disabled] .btn-info:hover,
- .btn-info.disabled:focus,
- .btn-info[disabled]:focus,
- fieldset[disabled] .btn-info:focus,
- .btn-info.disabled.focus,
- .btn-info[disabled].focus,
- fieldset[disabled] .btn-info.focus {
- background-color: #5bc0de;
- border-color: #46b8da;
- }
- .btn-info .badge {
- color: #5bc0de;
- background-color: #fff;
- }
- .btn-warning {
- color: #fff;
- background-color: #f0ad4e;
- border-color: #eea236;
- }
- .btn-warning:focus,
- .btn-warning.focus {
- color: #fff;
- background-color: #ec971f;
- border-color: #985f0d;
- }
- .btn-warning:hover {
- color: #fff;
- background-color: #ec971f;
- border-color: #d58512;
- }
- .btn-warning:active,
- .btn-warning.active,
- .open > .dropdown-toggle.btn-warning {
- color: #fff;
- background-color: #ec971f;
- border-color: #d58512;
- }
- .btn-warning:active:hover,
- .btn-warning.active:hover,
- .open > .dropdown-toggle.btn-warning:hover,
- .btn-warning:active:focus,
- .btn-warning.active:focus,
- .open > .dropdown-toggle.btn-warning:focus,
- .btn-warning:active.focus,
- .btn-warning.active.focus,
- .open > .dropdown-toggle.btn-warning.focus {
- color: #fff;
- background-color: #d58512;
- border-color: #985f0d;
- }
- .btn-warning:active,
- .btn-warning.active,
- .open > .dropdown-toggle.btn-warning {
- background-image: none;
- }
- .btn-warning.disabled:hover,
- .btn-warning[disabled]:hover,
- fieldset[disabled] .btn-warning:hover,
- .btn-warning.disabled:focus,
- .btn-warning[disabled]:focus,
- fieldset[disabled] .btn-warning:focus,
- .btn-warning.disabled.focus,
- .btn-warning[disabled].focus,
- fieldset[disabled] .btn-warning.focus {
- background-color: #f0ad4e;
- border-color: #eea236;
- }
- .btn-warning .badge {
- color: #f0ad4e;
- background-color: #fff;
- }
- .btn-danger {
- color: #fff;
- background-color: #d9534f;
- border-color: #d43f3a;
- }
- .btn-danger:focus,
- .btn-danger.focus {
- color: #fff;
- background-color: #c9302c;
- border-color: #761c19;
- }
- .btn-danger:hover {
- color: #fff;
- background-color: #c9302c;
- border-color: #ac2925;
- }
- .btn-danger:active,
- .btn-danger.active,
- .open > .dropdown-toggle.btn-danger {
- color: #fff;
- background-color: #c9302c;
- border-color: #ac2925;
- }
- .btn-danger:active:hover,
- .btn-danger.active:hover,
- .open > .dropdown-toggle.btn-danger:hover,
- .btn-danger:active:focus,
- .btn-danger.active:focus,
- .open > .dropdown-toggle.btn-danger:focus,
- .btn-danger:active.focus,
- .btn-danger.active.focus,
- .open > .dropdown-toggle.btn-danger.focus {
- color: #fff;
- background-color: #ac2925;
- border-color: #761c19;
- }
- .btn-danger:active,
- .btn-danger.active,
- .open > .dropdown-toggle.btn-danger {
- background-image: none;
- }
- .btn-danger.disabled:hover,
- .btn-danger[disabled]:hover,
- fieldset[disabled] .btn-danger:hover,
- .btn-danger.disabled:focus,
- .btn-danger[disabled]:focus,
- fieldset[disabled] .btn-danger:focus,
- .btn-danger.disabled.focus,
- .btn-danger[disabled].focus,
- fieldset[disabled] .btn-danger.focus {
- background-color: #d9534f;
- border-color: #d43f3a;
- }
- .btn-danger .badge {
- color: #d9534f;
- background-color: #fff;
- }
- .btn-link {
- color: #337ab7;
- font-weight: normal;
- border-radius: 0;
- }
- .btn-link,
- .btn-link:active,
- .btn-link.active,
- .btn-link[disabled],
- fieldset[disabled] .btn-link {
- background-color: transparent;
- -webkit-box-shadow: none;
- box-shadow: none;
- }
- .btn-link,
- .btn-link:hover,
- .btn-link:focus,
- .btn-link:active {
- border-color: transparent;
- }
- .btn-link:hover,
- .btn-link:focus {
- color: #23527c;
- text-decoration: underline;
- background-color: transparent;
- }
- .btn-link[disabled]:hover,
- fieldset[disabled] .btn-link:hover,
- .btn-link[disabled]:focus,
- fieldset[disabled] .btn-link:focus {
- color: #777777;
- text-decoration: none;
- }
- .btn-lg,
- .btn-group-lg > .btn {
- padding: 10px 16px;
- font-size: 17px;
- line-height: 1.3333333;
- border-radius: 3px;
- }
- .btn-sm,
- .btn-group-sm > .btn {
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 1px;
- }
- .btn-xs,
- .btn-group-xs > .btn {
- padding: 1px 5px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 1px;
- }
- .btn-block {
- display: block;
- width: 100%;
- }
- .btn-block + .btn-block {
- margin-top: 5px;
- }
- input[type="submit"].btn-block,
- input[type="reset"].btn-block,
- input[type="button"].btn-block {
- width: 100%;
- }
- .fade {
- opacity: 0;
- -webkit-transition: opacity 0.15s linear;
- -o-transition: opacity 0.15s linear;
- transition: opacity 0.15s linear;
- }
- .fade.in {
- opacity: 1;
- }
- .collapse {
- display: none;
- }
- .collapse.in {
- display: block;
- }
- tr.collapse.in {
- display: table-row;
- }
- tbody.collapse.in {
- display: table-row-group;
- }
- .collapsing {
- position: relative;
- height: 0;
- overflow: hidden;
- -webkit-transition-property: height, visibility;
- transition-property: height, visibility;
- -webkit-transition-duration: 0.35s;
- transition-duration: 0.35s;
- -webkit-transition-timing-function: ease;
- transition-timing-function: ease;
- }
- .caret {
- display: inline-block;
- width: 0;
- height: 0;
- margin-left: 2px;
- vertical-align: middle;
- border-top: 4px dashed;
- border-top: 4px solid \9;
- border-right: 4px solid transparent;
- border-left: 4px solid transparent;
- }
- .dropup,
- .dropdown {
- position: relative;
- }
- .dropdown-toggle:focus {
- outline: 0;
- }
- .dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: 1000;
- display: none;
- float: left;
- min-width: 160px;
- padding: 5px 0;
- margin: 2px 0 0;
- list-style: none;
- font-size: 13px;
- text-align: left;
- background-color: #fff;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, 0.15);
- border-radius: 2px;
- -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
- box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
- background-clip: padding-box;
- }
- .dropdown-menu.pull-right {
- right: 0;
- left: auto;
- }
- .dropdown-menu .divider {
- height: 1px;
- margin: 8px 0;
- overflow: hidden;
- background-color: #e5e5e5;
- }
- .dropdown-menu > li > a {
- display: block;
- padding: 3px 20px;
- clear: both;
- font-weight: normal;
- line-height: 1.42857143;
- color: #333333;
- white-space: nowrap;
- }
- .dropdown-menu > li > a:hover,
- .dropdown-menu > li > a:focus {
- text-decoration: none;
- color: #262626;
- background-color: #f5f5f5;
- }
- .dropdown-menu > .active > a,
- .dropdown-menu > .active > a:hover,
- .dropdown-menu > .active > a:focus {
- color: #fff;
- text-decoration: none;
- outline: 0;
- background-color: #337ab7;
- }
- .dropdown-menu > .disabled > a,
- .dropdown-menu > .disabled > a:hover,
- .dropdown-menu > .disabled > a:focus {
- color: #777777;
- }
- .dropdown-menu > .disabled > a:hover,
- .dropdown-menu > .disabled > a:focus {
- text-decoration: none;
- background-color: transparent;
- background-image: none;
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- cursor: not-allowed;
- }
- .open > .dropdown-menu {
- display: block;
- }
- .open > a {
- outline: 0;
- }
- .dropdown-menu-right {
- left: auto;
- right: 0;
- }
- .dropdown-menu-left {
- left: 0;
- right: auto;
- }
- .dropdown-header {
- display: block;
- padding: 3px 20px;
- font-size: 12px;
- line-height: 1.42857143;
- color: #777777;
- white-space: nowrap;
- }
- .dropdown-backdrop {
- position: fixed;
- left: 0;
- right: 0;
- bottom: 0;
- top: 0;
- z-index: 990;
- }
- .pull-right > .dropdown-menu {
- right: 0;
- left: auto;
- }
- .dropup .caret,
- .navbar-fixed-bottom .dropdown .caret {
- border-top: 0;
- border-bottom: 4px dashed;
- border-bottom: 4px solid \9;
- content: "";
- }
- .dropup .dropdown-menu,
- .navbar-fixed-bottom .dropdown .dropdown-menu {
- top: auto;
- bottom: 100%;
- margin-bottom: 2px;
- }
- @media (min-width: 541px) {
- .navbar-right .dropdown-menu {
- left: auto;
- right: 0;
- }
- .navbar-right .dropdown-menu-left {
- left: 0;
- right: auto;
- }
- }
- .btn-group,
- .btn-group-vertical {
- position: relative;
- display: inline-block;
- vertical-align: middle;
- }
- .btn-group > .btn,
- .btn-group-vertical > .btn {
- position: relative;
- float: left;
- }
- .btn-group > .btn:hover,
- .btn-group-vertical > .btn:hover,
- .btn-group > .btn:focus,
- .btn-group-vertical > .btn:focus,
- .btn-group > .btn:active,
- .btn-group-vertical > .btn:active,
- .btn-group > .btn.active,
- .btn-group-vertical > .btn.active {
- z-index: 2;
- }
- .btn-group .btn + .btn,
- .btn-group .btn + .btn-group,
- .btn-group .btn-group + .btn,
- .btn-group .btn-group + .btn-group {
- margin-left: -1px;
- }
- .btn-toolbar {
- margin-left: -5px;
- }
- .btn-toolbar .btn,
- .btn-toolbar .btn-group,
- .btn-toolbar .input-group {
- float: left;
- }
- .btn-toolbar > .btn,
- .btn-toolbar > .btn-group,
- .btn-toolbar > .input-group {
- margin-left: 5px;
- }
- .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
- border-radius: 0;
- }
- .btn-group > .btn:first-child {
- margin-left: 0;
- }
- .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
- border-bottom-right-radius: 0;
- border-top-right-radius: 0;
- }
- .btn-group > .btn:last-child:not(:first-child),
- .btn-group > .dropdown-toggle:not(:first-child) {
- border-bottom-left-radius: 0;
- border-top-left-radius: 0;
- }
- .btn-group > .btn-group {
- float: left;
- }
- .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
- border-radius: 0;
- }
- .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
- .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
- border-bottom-right-radius: 0;
- border-top-right-radius: 0;
- }
- .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
- border-bottom-left-radius: 0;
- border-top-left-radius: 0;
- }
- .btn-group .dropdown-toggle:active,
- .btn-group.open .dropdown-toggle {
- outline: 0;
- }
- .btn-group > .btn + .dropdown-toggle {
- padding-left: 8px;
- padding-right: 8px;
- }
- .btn-group > .btn-lg + .dropdown-toggle {
- padding-left: 12px;
- padding-right: 12px;
- }
- .btn-group.open .dropdown-toggle {
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- }
- .btn-group.open .dropdown-toggle.btn-link {
- -webkit-box-shadow: none;
- box-shadow: none;
- }
- .btn .caret {
- margin-left: 0;
- }
- .btn-lg .caret {
- border-width: 5px 5px 0;
- border-bottom-width: 0;
- }
- .dropup .btn-lg .caret {
- border-width: 0 5px 5px;
- }
- .btn-group-vertical > .btn,
- .btn-group-vertical > .btn-group,
- .btn-group-vertical > .btn-group > .btn {
- display: block;
- float: none;
- width: 100%;
- max-width: 100%;
- }
- .btn-group-vertical > .btn-group > .btn {
- float: none;
- }
- .btn-group-vertical > .btn + .btn,
- .btn-group-vertical > .btn + .btn-group,
- .btn-group-vertical > .btn-group + .btn,
- .btn-group-vertical > .btn-group + .btn-group {
- margin-top: -1px;
- margin-left: 0;
- }
- .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
- border-radius: 0;
- }
- .btn-group-vertical > .btn:first-child:not(:last-child) {
- border-top-right-radius: 2px;
- border-top-left-radius: 2px;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
- }
- .btn-group-vertical > .btn:last-child:not(:first-child) {
- border-top-right-radius: 0;
- border-top-left-radius: 0;
- border-bottom-right-radius: 2px;
- border-bottom-left-radius: 2px;
- }
- .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
- border-radius: 0;
- }
- .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
- .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
- }
- .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
- border-top-right-radius: 0;
- border-top-left-radius: 0;
- }
- .btn-group-justified {
- display: table;
- width: 100%;
- table-layout: fixed;
- border-collapse: separate;
- }
- .btn-group-justified > .btn,
- .btn-group-justified > .btn-group {
- float: none;
- display: table-cell;
- width: 1%;
- }
- .btn-group-justified > .btn-group .btn {
- width: 100%;
- }
- .btn-group-justified > .btn-group .dropdown-menu {
- left: auto;
- }
- [data-toggle="buttons"] > .btn input[type="radio"],
- [data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
- [data-toggle="buttons"] > .btn input[type="checkbox"],
- [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
- position: absolute;
- clip: rect(0, 0, 0, 0);
- pointer-events: none;
- }
- .input-group {
- position: relative;
- display: table;
- border-collapse: separate;
- }
- .input-group[class*="col-"] {
- float: none;
- padding-left: 0;
- padding-right: 0;
- }
- .input-group .form-control {
- position: relative;
- z-index: 2;
- float: left;
- width: 100%;
- margin-bottom: 0;
- }
- .input-group .form-control:focus {
- z-index: 3;
- }
- .input-group-lg > .form-control,
- .input-group-lg > .input-group-addon,
- .input-group-lg > .input-group-btn > .btn {
- height: 45px;
- padding: 10px 16px;
- font-size: 17px;
- line-height: 1.3333333;
- border-radius: 3px;
- }
- select.input-group-lg > .form-control,
- select.input-group-lg > .input-group-addon,
- select.input-group-lg > .input-group-btn > .btn {
- height: 45px;
- line-height: 45px;
- }
- textarea.input-group-lg > .form-control,
- textarea.input-group-lg > .input-group-addon,
- textarea.input-group-lg > .input-group-btn > .btn,
- select[multiple].input-group-lg > .form-control,
- select[multiple].input-group-lg > .input-group-addon,
- select[multiple].input-group-lg > .input-group-btn > .btn {
- height: auto;
- }
- .input-group-sm > .form-control,
- .input-group-sm > .input-group-addon,
- .input-group-sm > .input-group-btn > .btn {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 1px;
- }
- select.input-group-sm > .form-control,
- select.input-group-sm > .input-group-addon,
- select.input-group-sm > .input-group-btn > .btn {
- height: 30px;
- line-height: 30px;
- }
- textarea.input-group-sm > .form-control,
- textarea.input-group-sm > .input-group-addon,
- textarea.input-group-sm > .input-group-btn > .btn,
- select[multiple].input-group-sm > .form-control,
- select[multiple].input-group-sm > .input-group-addon,
- select[multiple].input-group-sm > .input-group-btn > .btn {
- height: auto;
- }
- .input-group-addon,
- .input-group-btn,
- .input-group .form-control {
- display: table-cell;
- }
- .input-group-addon:not(:first-child):not(:last-child),
- .input-group-btn:not(:first-child):not(:last-child),
- .input-group .form-control:not(:first-child):not(:last-child) {
- border-radius: 0;
- }
- .input-group-addon,
- .input-group-btn {
- width: 1%;
- white-space: nowrap;
- vertical-align: middle;
- }
- .input-group-addon {
- padding: 6px 12px;
- font-size: 13px;
- font-weight: normal;
- line-height: 1;
- color: #555555;
- text-align: center;
- background-color: #eeeeee;
- border: 1px solid #ccc;
- border-radius: 2px;
- }
- .input-group-addon.input-sm {
- padding: 5px 10px;
- font-size: 12px;
- border-radius: 1px;
- }
- .input-group-addon.input-lg {
- padding: 10px 16px;
- font-size: 17px;
- border-radius: 3px;
- }
- .input-group-addon input[type="radio"],
- .input-group-addon input[type="checkbox"] {
- margin-top: 0;
- }
- .input-group .form-control:first-child,
- .input-group-addon:first-child,
- .input-group-btn:first-child > .btn,
- .input-group-btn:first-child > .btn-group > .btn,
- .input-group-btn:first-child > .dropdown-toggle,
- .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
- .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
- border-bottom-right-radius: 0;
- border-top-right-radius: 0;
- }
- .input-group-addon:first-child {
- border-right: 0;
- }
- .input-group .form-control:last-child,
- .input-group-addon:last-child,
- .input-group-btn:last-child > .btn,
- .input-group-btn:last-child > .btn-group > .btn,
- .input-group-btn:last-child > .dropdown-toggle,
- .input-group-btn:first-child > .btn:not(:first-child),
- .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
- border-bottom-left-radius: 0;
- border-top-left-radius: 0;
- }
- .input-group-addon:last-child {
- border-left: 0;
- }
- .input-group-btn {
- position: relative;
- font-size: 0;
- white-space: nowrap;
- }
- .input-group-btn > .btn {
- position: relative;
- }
- .input-group-btn > .btn + .btn {
- margin-left: -1px;
- }
- .input-group-btn > .btn:hover,
- .input-group-btn > .btn:focus,
- .input-group-btn > .btn:active {
- z-index: 2;
- }
- .input-group-btn:first-child > .btn,
- .input-group-btn:first-child > .btn-group {
- margin-right: -1px;
- }
- .input-group-btn:last-child > .btn,
- .input-group-btn:last-child > .btn-group {
- z-index: 2;
- margin-left: -1px;
- }
- .nav {
- margin-bottom: 0;
- padding-left: 0;
- list-style: none;
- }
- .nav > li {
- position: relative;
- display: block;
- }
- .nav > li > a {
- position: relative;
- display: block;
- padding: 10px 15px;
- }
- .nav > li > a:hover,
- .nav > li > a:focus {
- text-decoration: none;
- background-color: #eeeeee;
- }
- .nav > li.disabled > a {
- color: #777777;
- }
- .nav > li.disabled > a:hover,
- .nav > li.disabled > a:focus {
- color: #777777;
- text-decoration: none;
- background-color: transparent;
- cursor: not-allowed;
- }
- .nav .open > a,
- .nav .open > a:hover,
- .nav .open > a:focus {
- background-color: #eeeeee;
- border-color: #337ab7;
- }
- .nav .nav-divider {
- height: 1px;
- margin: 8px 0;
- overflow: hidden;
- background-color: #e5e5e5;
- }
- .nav > li > a > img {
- max-width: none;
- }
- .nav-tabs {
- border-bottom: 1px solid #ddd;
- }
- .nav-tabs > li {
- float: left;
- margin-bottom: -1px;
- }
- .nav-tabs > li > a {
- margin-right: 2px;
- line-height: 1.42857143;
- border: 1px solid transparent;
- border-radius: 2px 2px 0 0;
- }
- .nav-tabs > li > a:hover {
- border-color: #eeeeee #eeeeee #ddd;
- }
- .nav-tabs > li.active > a,
- .nav-tabs > li.active > a:hover,
- .nav-tabs > li.active > a:focus {
- color: #555555;
- background-color: #fff;
- border: 1px solid #ddd;
- border-bottom-color: transparent;
- cursor: default;
- }
- .nav-tabs.nav-justified {
- width: 100%;
- border-bottom: 0;
- }
- .nav-tabs.nav-justified > li {
- float: none;
- }
- .nav-tabs.nav-justified > li > a {
- text-align: center;
- margin-bottom: 5px;
- }
- .nav-tabs.nav-justified > .dropdown .dropdown-menu {
- top: auto;
- left: auto;
- }
- @media (min-width: 768px) {
- .nav-tabs.nav-justified > li {
- display: table-cell;
- width: 1%;
- }
- .nav-tabs.nav-justified > li > a {
- margin-bottom: 0;
- }
- }
- .nav-tabs.nav-justified > li > a {
- margin-right: 0;
- border-radius: 2px;
- }
- .nav-tabs.nav-justified > .active > a,
- .nav-tabs.nav-justified > .active > a:hover,
- .nav-tabs.nav-justified > .active > a:focus {
- border: 1px solid #ddd;
- }
- @media (min-width: 768px) {
- .nav-tabs.nav-justified > li > a {
- border-bottom: 1px solid #ddd;
- border-radius: 2px 2px 0 0;
- }
- .nav-tabs.nav-justified > .active > a,
- .nav-tabs.nav-justified > .active > a:hover,
- .nav-tabs.nav-justified > .active > a:focus {
- border-bottom-color: #fff;
- }
- }
- .nav-pills > li {
- float: left;
- }
- .nav-pills > li > a {
- border-radius: 2px;
- }
- .nav-pills > li + li {
- margin-left: 2px;
- }
- .nav-pills > li.active > a,
- .nav-pills > li.active > a:hover,
- .nav-pills > li.active > a:focus {
- color: #fff;
- background-color: #337ab7;
- }
- .nav-stacked > li {
- float: none;
- }
- .nav-stacked > li + li {
- margin-top: 2px;
- margin-left: 0;
- }
- .nav-justified {
- width: 100%;
- }
- .nav-justified > li {
- float: none;
- }
- .nav-justified > li > a {
- text-align: center;
- margin-bottom: 5px;
- }
- .nav-justified > .dropdown .dropdown-menu {
- top: auto;
- left: auto;
- }
- @media (min-width: 768px) {
- .nav-justified > li {
- display: table-cell;
- width: 1%;
- }
- .nav-justified > li > a {
- margin-bottom: 0;
- }
- }
- .nav-tabs-justified {
- border-bottom: 0;
- }
- .nav-tabs-justified > li > a {
- margin-right: 0;
- border-radius: 2px;
- }
- .nav-tabs-justified > .active > a,
- .nav-tabs-justified > .active > a:hover,
- .nav-tabs-justified > .active > a:focus {
- border: 1px solid #ddd;
- }
- @media (min-width: 768px) {
- .nav-tabs-justified > li > a {
- border-bottom: 1px solid #ddd;
- border-radius: 2px 2px 0 0;
- }
- .nav-tabs-justified > .active > a,
- .nav-tabs-justified > .active > a:hover,
- .nav-tabs-justified > .active > a:focus {
- border-bottom-color: #fff;
- }
- }
- .tab-content > .tab-pane {
- display: none;
- }
- .tab-content > .active {
- display: block;
- }
- .nav-tabs .dropdown-menu {
- margin-top: -1px;
- border-top-right-radius: 0;
- border-top-left-radius: 0;
- }
- .navbar {
- position: relative;
- min-height: 30px;
- margin-bottom: 18px;
- border: 1px solid transparent;
- }
- @media (min-width: 541px) {
- .navbar {
- border-radius: 2px;
- }
- }
- @media (min-width: 541px) {
- .navbar-header {
- float: left;
- }
- }
- .navbar-collapse {
- overflow-x: visible;
- padding-right: 0px;
- padding-left: 0px;
- border-top: 1px solid transparent;
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
- -webkit-overflow-scrolling: touch;
- }
- .navbar-collapse.in {
- overflow-y: auto;
- }
- @media (min-width: 541px) {
- .navbar-collapse {
- width: auto;
- border-top: 0;
- box-shadow: none;
- }
- .navbar-collapse.collapse {
- display: block !important;
- height: auto !important;
- padding-bottom: 0;
- overflow: visible !important;
- }
- .navbar-collapse.in {
- overflow-y: visible;
- }
- .navbar-fixed-top .navbar-collapse,
- .navbar-static-top .navbar-collapse,
- .navbar-fixed-bottom .navbar-collapse {
- padding-left: 0;
- padding-right: 0;
- }
- }
- .navbar-fixed-top .navbar-collapse,
- .navbar-fixed-bottom .navbar-collapse {
- max-height: 340px;
- }
- @media (max-device-width: 540px) and (orientation: landscape) {
- .navbar-fixed-top .navbar-collapse,
- .navbar-fixed-bottom .navbar-collapse {
- max-height: 200px;
- }
- }
- .container > .navbar-header,
- .container-fluid > .navbar-header,
- .container > .navbar-collapse,
- .container-fluid > .navbar-collapse {
- margin-right: 0px;
- margin-left: 0px;
- }
- @media (min-width: 541px) {
- .container > .navbar-header,
- .container-fluid > .navbar-header,
- .container > .navbar-collapse,
- .container-fluid > .navbar-collapse {
- margin-right: 0;
- margin-left: 0;
- }
- }
- .navbar-static-top {
- z-index: 1000;
- border-width: 0 0 1px;
- }
- @media (min-width: 541px) {
- .navbar-static-top {
- border-radius: 0;
- }
- }
- .navbar-fixed-top,
- .navbar-fixed-bottom {
- position: fixed;
- right: 0;
- left: 0;
- z-index: 1030;
- }
- @media (min-width: 541px) {
- .navbar-fixed-top,
- .navbar-fixed-bottom {
- border-radius: 0;
- }
- }
- .navbar-fixed-top {
- top: 0;
- border-width: 0 0 1px;
- }
- .navbar-fixed-bottom {
- bottom: 0;
- margin-bottom: 0;
- border-width: 1px 0 0;
- }
- .navbar-brand {
- float: left;
- padding: 6px 0px;
- font-size: 17px;
- line-height: 18px;
- height: 30px;
- }
- .navbar-brand:hover,
- .navbar-brand:focus {
- text-decoration: none;
- }
- .navbar-brand > img {
- display: block;
- }
- @media (min-width: 541px) {
- .navbar > .container .navbar-brand,
- .navbar > .container-fluid .navbar-brand {
- margin-left: 0px;
- }
- }
- .navbar-toggle {
- position: relative;
- float: right;
- margin-right: 0px;
- padding: 9px 10px;
- margin-top: -2px;
- margin-bottom: -2px;
- background-color: transparent;
- background-image: none;
- border: 1px solid transparent;
- border-radius: 2px;
- }
- .navbar-toggle:focus {
- outline: 0;
- }
- .navbar-toggle .icon-bar {
- display: block;
- width: 22px;
- height: 2px;
- border-radius: 1px;
- }
- .navbar-toggle .icon-bar + .icon-bar {
- margin-top: 4px;
- }
- @media (min-width: 541px) {
- .navbar-toggle {
- display: none;
- }
- }
- .navbar-nav {
- margin: 3px 0px;
- }
- .navbar-nav > li > a {
- padding-top: 10px;
- padding-bottom: 10px;
- line-height: 18px;
- }
- @media (max-width: 540px) {
- .navbar-nav .open .dropdown-menu {
- position: static;
- float: none;
- width: auto;
- margin-top: 0;
- background-color: transparent;
- border: 0;
- box-shadow: none;
- }
- .navbar-nav .open .dropdown-menu > li > a,
- .navbar-nav .open .dropdown-menu .dropdown-header {
- padding: 5px 15px 5px 25px;
- }
- .navbar-nav .open .dropdown-menu > li > a {
- line-height: 18px;
- }
- .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-nav .open .dropdown-menu > li > a:focus {
- background-image: none;
- }
- }
- @media (min-width: 541px) {
- .navbar-nav {
- float: left;
- margin: 0;
- }
- .navbar-nav > li {
- float: left;
- }
- .navbar-nav > li > a {
- padding-top: 6px;
- padding-bottom: 6px;
- }
- }
- .navbar-form {
- margin-left: 0px;
- margin-right: 0px;
- padding: 10px 0px;
- border-top: 1px solid transparent;
- border-bottom: 1px solid transparent;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
- margin-top: -1px;
- margin-bottom: -1px;
- }
- @media (min-width: 768px) {
- .navbar-form .form-group {
- display: inline-block;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle;
- }
- .navbar-form .form-control-static {
- display: inline-block;
- }
- .navbar-form .input-group {
- display: inline-table;
- vertical-align: middle;
- }
- .navbar-form .input-group .input-group-addon,
- .navbar-form .input-group .input-group-btn,
- .navbar-form .input-group .form-control {
- width: auto;
- }
- .navbar-form .input-group > .form-control {
- width: 100%;
- }
- .navbar-form .control-label {
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .radio,
- .navbar-form .checkbox {
- display: inline-block;
- margin-top: 0;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .radio label,
- .navbar-form .checkbox label {
- padding-left: 0;
- }
- .navbar-form .radio input[type="radio"],
- .navbar-form .checkbox input[type="checkbox"] {
- position: relative;
- margin-left: 0;
- }
- .navbar-form .has-feedback .form-control-feedback {
- top: 0;
- }
- }
- @media (max-width: 540px) {
- .navbar-form .form-group {
- margin-bottom: 5px;
- }
- .navbar-form .form-group:last-child {
- margin-bottom: 0;
- }
- }
- @media (min-width: 541px) {
- .navbar-form {
- width: auto;
- border: 0;
- margin-left: 0;
- margin-right: 0;
- padding-top: 0;
- padding-bottom: 0;
- -webkit-box-shadow: none;
- box-shadow: none;
- }
- }
- .navbar-nav > li > .dropdown-menu {
- margin-top: 0;
- border-top-right-radius: 0;
- border-top-left-radius: 0;
- }
- .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
- margin-bottom: 0;
- border-top-right-radius: 2px;
- border-top-left-radius: 2px;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
- }
- .navbar-btn {
- margin-top: -1px;
- margin-bottom: -1px;
- }
- .navbar-btn.btn-sm {
- margin-top: 0px;
- margin-bottom: 0px;
- }
- .navbar-btn.btn-xs {
- margin-top: 4px;
- margin-bottom: 4px;
- }
- .navbar-text {
- margin-top: 6px;
- margin-bottom: 6px;
- }
- @media (min-width: 541px) {
- .navbar-text {
- float: left;
- margin-left: 0px;
- margin-right: 0px;
- }
- }
- @media (min-width: 541px) {
- .navbar-left {
- float: left !important;
- float: left;
- }
- .navbar-right {
- float: right !important;
- float: right;
- margin-right: 0px;
- }
- .navbar-right ~ .navbar-right {
- margin-right: 0;
- }
- }
- .navbar-default {
- background-color: #f8f8f8;
- border-color: #e7e7e7;
- }
- .navbar-default .navbar-brand {
- color: #777;
- }
- .navbar-default .navbar-brand:hover,
- .navbar-default .navbar-brand:focus {
- color: #5e5e5e;
- background-color: transparent;
- }
- .navbar-default .navbar-text {
- color: #777;
- }
- .navbar-default .navbar-nav > li > a {
- color: #777;
- }
- .navbar-default .navbar-nav > li > a:hover,
- .navbar-default .navbar-nav > li > a:focus {
- color: #333;
- background-color: transparent;
- }
- .navbar-default .navbar-nav > .active > a,
- .navbar-default .navbar-nav > .active > a:hover,
- .navbar-default .navbar-nav > .active > a:focus {
- color: #555;
- background-color: #e7e7e7;
- }
- .navbar-default .navbar-nav > .disabled > a,
- .navbar-default .navbar-nav > .disabled > a:hover,
- .navbar-default .navbar-nav > .disabled > a:focus {
- color: #ccc;
- background-color: transparent;
- }
- .navbar-default .navbar-toggle {
- border-color: #ddd;
- }
- .navbar-default .navbar-toggle:hover,
- .navbar-default .navbar-toggle:focus {
- background-color: #ddd;
- }
- .navbar-default .navbar-toggle .icon-bar {
- background-color: #888;
- }
- .navbar-default .navbar-collapse,
- .navbar-default .navbar-form {
- border-color: #e7e7e7;
- }
- .navbar-default .navbar-nav > .open > a,
- .navbar-default .navbar-nav > .open > a:hover,
- .navbar-default .navbar-nav > .open > a:focus {
- background-color: #e7e7e7;
- color: #555;
- }
- @media (max-width: 540px) {
- .navbar-default .navbar-nav .open .dropdown-menu > li > a {
- color: #777;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
- color: #333;
- background-color: transparent;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
- color: #555;
- background-color: #e7e7e7;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
- color: #ccc;
- background-color: transparent;
- }
- }
- .navbar-default .navbar-link {
- color: #777;
- }
- .navbar-default .navbar-link:hover {
- color: #333;
- }
- .navbar-default .btn-link {
- color: #777;
- }
- .navbar-default .btn-link:hover,
- .navbar-default .btn-link:focus {
- color: #333;
- }
- .navbar-default .btn-link[disabled]:hover,
- fieldset[disabled] .navbar-default .btn-link:hover,
- .navbar-default .btn-link[disabled]:focus,
- fieldset[disabled] .navbar-default .btn-link:focus {
- color: #ccc;
- }
- .navbar-inverse {
- background-color: #222;
- border-color: #080808;
- }
- .navbar-inverse .navbar-brand {
- color: #9d9d9d;
- }
- .navbar-inverse .navbar-brand:hover,
- .navbar-inverse .navbar-brand:focus {
- color: #fff;
- background-color: transparent;
- }
- .navbar-inverse .navbar-text {
- color: #9d9d9d;
- }
- .navbar-inverse .navbar-nav > li > a {
- color: #9d9d9d;
- }
- .navbar-inverse .navbar-nav > li > a:hover,
- .navbar-inverse .navbar-nav > li > a:focus {
- color: #fff;
- background-color: transparent;
- }
- .navbar-inverse .navbar-nav > .active > a,
- .navbar-inverse .navbar-nav > .active > a:hover,
- .navbar-inverse .navbar-nav > .active > a:focus {
- color: #fff;
- background-color: #080808;
- }
- .navbar-inverse .navbar-nav > .disabled > a,
- .navbar-inverse .navbar-nav > .disabled > a:hover,
- .navbar-inverse .navbar-nav > .disabled > a:focus {
- color: #444;
- background-color: transparent;
- }
- .navbar-inverse .navbar-toggle {
- border-color: #333;
- }
- .navbar-inverse .navbar-toggle:hover,
- .navbar-inverse .navbar-toggle:focus {
- background-color: #333;
- }
- .navbar-inverse .navbar-toggle .icon-bar {
- background-color: #fff;
- }
- .navbar-inverse .navbar-collapse,
- .navbar-inverse .navbar-form {
- border-color: #101010;
- }
- .navbar-inverse .navbar-nav > .open > a,
- .navbar-inverse .navbar-nav > .open > a:hover,
- .navbar-inverse .navbar-nav > .open > a:focus {
- background-color: #080808;
- color: #fff;
- }
- @media (max-width: 540px) {
- .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
- border-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
- background-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
- color: #9d9d9d;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
- color: #fff;
- background-color: transparent;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
- color: #fff;
- background-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
- color: #444;
- background-color: transparent;
- }
- }
- .navbar-inverse .navbar-link {
- color: #9d9d9d;
- }
- .navbar-inverse .navbar-link:hover {
- color: #fff;
- }
- .navbar-inverse .btn-link {
- color: #9d9d9d;
- }
- .navbar-inverse .btn-link:hover,
- .navbar-inverse .btn-link:focus {
- color: #fff;
- }
- .navbar-inverse .btn-link[disabled]:hover,
- fieldset[disabled] .navbar-inverse .btn-link:hover,
- .navbar-inverse .btn-link[disabled]:focus,
- fieldset[disabled] .navbar-inverse .btn-link:focus {
- color: #444;
- }
- .breadcrumb {
- padding: 8px 15px;
- margin-bottom: 18px;
- list-style: none;
- background-color: #f5f5f5;
- border-radius: 2px;
- }
- .breadcrumb > li {
- display: inline-block;
- }
- .breadcrumb > li + li:before {
- content: "/\00a0";
- padding: 0 5px;
- color: #5e5e5e;
- }
- .breadcrumb > .active {
- color: #777777;
- }
- .pagination {
- display: inline-block;
- padding-left: 0;
- margin: 18px 0;
- border-radius: 2px;
- }
- .pagination > li {
- display: inline;
- }
- .pagination > li > a,
- .pagination > li > span {
- position: relative;
- float: left;
- padding: 6px 12px;
- line-height: 1.42857143;
- text-decoration: none;
- color: #337ab7;
- background-color: #fff;
- border: 1px solid #ddd;
- margin-left: -1px;
- }
- .pagination > li:first-child > a,
- .pagination > li:first-child > span {
- margin-left: 0;
- border-bottom-left-radius: 2px;
- border-top-left-radius: 2px;
- }
- .pagination > li:last-child > a,
- .pagination > li:last-child > span {
- border-bottom-right-radius: 2px;
- border-top-right-radius: 2px;
- }
- .pagination > li > a:hover,
- .pagination > li > span:hover,
- .pagination > li > a:focus,
- .pagination > li > span:focus {
- z-index: 2;
- color: #23527c;
- background-color: #eeeeee;
- border-color: #ddd;
- }
- .pagination > .active > a,
- .pagination > .active > span,
- .pagination > .active > a:hover,
- .pagination > .active > span:hover,
- .pagination > .active > a:focus,
- .pagination > .active > span:focus {
- z-index: 3;
- color: #fff;
- background-color: #337ab7;
- border-color: #337ab7;
- cursor: default;
- }
- .pagination > .disabled > span,
- .pagination > .disabled > span:hover,
- .pagination > .disabled > span:focus,
- .pagination > .disabled > a,
- .pagination > .disabled > a:hover,
- .pagination > .disabled > a:focus {
- color: #777777;
- background-color: #fff;
- border-color: #ddd;
- cursor: not-allowed;
- }
- .pagination-lg > li > a,
- .pagination-lg > li > span {
- padding: 10px 16px;
- font-size: 17px;
- line-height: 1.3333333;
- }
- .pagination-lg > li:first-child > a,
- .pagination-lg > li:first-child > span {
- border-bottom-left-radius: 3px;
- border-top-left-radius: 3px;
- }
- .pagination-lg > li:last-child > a,
- .pagination-lg > li:last-child > span {
- border-bottom-right-radius: 3px;
- border-top-right-radius: 3px;
- }
- .pagination-sm > li > a,
- .pagination-sm > li > span {
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- }
- .pagination-sm > li:first-child > a,
- .pagination-sm > li:first-child > span {
- border-bottom-left-radius: 1px;
- border-top-left-radius: 1px;
- }
- .pagination-sm > li:last-child > a,
- .pagination-sm > li:last-child > span {
- border-bottom-right-radius: 1px;
- border-top-right-radius: 1px;
- }
- .pager {
- padding-left: 0;
- margin: 18px 0;
- list-style: none;
- text-align: center;
- }
- .pager li {
- display: inline;
- }
- .pager li > a,
- .pager li > span {
- display: inline-block;
- padding: 5px 14px;
- background-color: #fff;
- border: 1px solid #ddd;
- border-radius: 15px;
- }
- .pager li > a:hover,
- .pager li > a:focus {
- text-decoration: none;
- background-color: #eeeeee;
- }
- .pager .next > a,
- .pager .next > span {
- float: right;
- }
- .pager .previous > a,
- .pager .previous > span {
- float: left;
- }
- .pager .disabled > a,
- .pager .disabled > a:hover,
- .pager .disabled > a:focus,
- .pager .disabled > span {
- color: #777777;
- background-color: #fff;
- cursor: not-allowed;
- }
- .label {
- display: inline;
- padding: .2em .6em .3em;
- font-size: 75%;
- font-weight: bold;
- line-height: 1;
- color: #fff;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- border-radius: .25em;
- }
- a.label:hover,
- a.label:focus {
- color: #fff;
- text-decoration: none;
- cursor: pointer;
- }
- .label:empty {
- display: none;
- }
- .btn .label {
- position: relative;
- top: -1px;
- }
- .label-default {
- background-color: #777777;
- }
- .label-default[href]:hover,
- .label-default[href]:focus {
- background-color: #5e5e5e;
- }
- .label-primary {
- background-color: #337ab7;
- }
- .label-primary[href]:hover,
- .label-primary[href]:focus {
- background-color: #286090;
- }
- .label-success {
- background-color: #5cb85c;
- }
- .label-success[href]:hover,
- .label-success[href]:focus {
- background-color: #449d44;
- }
- .label-info {
- background-color: #5bc0de;
- }
- .label-info[href]:hover,
- .label-info[href]:focus {
- background-color: #31b0d5;
- }
- .label-warning {
- background-color: #f0ad4e;
- }
- .label-warning[href]:hover,
- .label-warning[href]:focus {
- background-color: #ec971f;
- }
- .label-danger {
- background-color: #d9534f;
- }
- .label-danger[href]:hover,
- .label-danger[href]:focus {
- background-color: #c9302c;
- }
- .badge {
- display: inline-block;
- min-width: 10px;
- padding: 3px 7px;
- font-size: 12px;
- font-weight: bold;
- color: #fff;
- line-height: 1;
- vertical-align: middle;
- white-space: nowrap;
- text-align: center;
- background-color: #777777;
- border-radius: 10px;
- }
- .badge:empty {
- display: none;
- }
- .btn .badge {
- position: relative;
- top: -1px;
- }
- .btn-xs .badge,
- .btn-group-xs > .btn .badge {
- top: 0;
- padding: 1px 5px;
- }
- a.badge:hover,
- a.badge:focus {
- color: #fff;
- text-decoration: none;
- cursor: pointer;
- }
- .list-group-item.active > .badge,
- .nav-pills > .active > a > .badge {
- color: #337ab7;
- background-color: #fff;
- }
- .list-group-item > .badge {
- float: right;
- }
- .list-group-item > .badge + .badge {
- margin-right: 5px;
- }
- .nav-pills > li > a > .badge {
- margin-left: 3px;
- }
- .jumbotron {
- padding-top: 30px;
- padding-bottom: 30px;
- margin-bottom: 30px;
- color: inherit;
- background-color: #eeeeee;
- }
- .jumbotron h1,
- .jumbotron .h1 {
- color: inherit;
- }
- .jumbotron p {
- margin-bottom: 15px;
- font-size: 20px;
- font-weight: 200;
- }
- .jumbotron > hr {
- border-top-color: #d5d5d5;
- }
- .container .jumbotron,
- .container-fluid .jumbotron {
- border-radius: 3px;
- padding-left: 0px;
- padding-right: 0px;
- }
- .jumbotron .container {
- max-width: 100%;
- }
- @media screen and (min-width: 768px) {
- .jumbotron {
- padding-top: 48px;
- padding-bottom: 48px;
- }
- .container .jumbotron,
- .container-fluid .jumbotron {
- padding-left: 60px;
- padding-right: 60px;
- }
- .jumbotron h1,
- .jumbotron .h1 {
- font-size: 59px;
- }
- }
- .thumbnail {
- display: block;
- padding: 4px;
- margin-bottom: 18px;
- line-height: 1.42857143;
- background-color: #fff;
- border: 1px solid #ddd;
- border-radius: 2px;
- -webkit-transition: border 0.2s ease-in-out;
- -o-transition: border 0.2s ease-in-out;
- transition: border 0.2s ease-in-out;
- }
- .thumbnail > img,
- .thumbnail a > img {
- margin-left: auto;
- margin-right: auto;
- }
- a.thumbnail:hover,
- a.thumbnail:focus,
- a.thumbnail.active {
- border-color: #337ab7;
- }
- .thumbnail .caption {
- padding: 9px;
- color: #000;
- }
- .alert {
- padding: 15px;
- margin-bottom: 18px;
- border: 1px solid transparent;
- border-radius: 2px;
- }
- .alert h4 {
- margin-top: 0;
- color: inherit;
- }
- .alert .alert-link {
- font-weight: bold;
- }
- .alert > p,
- .alert > ul {
- margin-bottom: 0;
- }
- .alert > p + p {
- margin-top: 5px;
- }
- .alert-dismissable,
- .alert-dismissible {
- padding-right: 35px;
- }
- .alert-dismissable .close,
- .alert-dismissible .close {
- position: relative;
- top: -2px;
- right: -21px;
- color: inherit;
- }
- .alert-success {
- background-color: #dff0d8;
- border-color: #d6e9c6;
- color: #3c763d;
- }
- .alert-success hr {
- border-top-color: #c9e2b3;
- }
- .alert-success .alert-link {
- color: #2b542c;
- }
- .alert-info {
- background-color: #d9edf7;
- border-color: #bce8f1;
- color: #31708f;
- }
- .alert-info hr {
- border-top-color: #a6e1ec;
- }
- .alert-info .alert-link {
- color: #245269;
- }
- .alert-warning {
- background-color: #fcf8e3;
- border-color: #faebcc;
- color: #8a6d3b;
- }
- .alert-warning hr {
- border-top-color: #f7e1b5;
- }
- .alert-warning .alert-link {
- color: #66512c;
- }
- .alert-danger {
- background-color: #f2dede;
- border-color: #ebccd1;
- color: #a94442;
- }
- .alert-danger hr {
- border-top-color: #e4b9c0;
- }
- .alert-danger .alert-link {
- color: #843534;
- }
- @-webkit-keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
- }
- @keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
- }
- .progress {
- overflow: hidden;
- height: 18px;
- margin-bottom: 18px;
- background-color: #f5f5f5;
- border-radius: 2px;
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
- }
- .progress-bar {
- float: left;
- width: 0%;
- height: 100%;
- font-size: 12px;
- line-height: 18px;
- color: #fff;
- text-align: center;
- background-color: #337ab7;
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
- -webkit-transition: width 0.6s ease;
- -o-transition: width 0.6s ease;
- transition: width 0.6s ease;
- }
- .progress-striped .progress-bar,
- .progress-bar-striped {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-size: 40px 40px;
- }
- .progress.active .progress-bar,
- .progress-bar.active {
- -webkit-animation: progress-bar-stripes 2s linear infinite;
- -o-animation: progress-bar-stripes 2s linear infinite;
- animation: progress-bar-stripes 2s linear infinite;
- }
- .progress-bar-success {
- background-color: #5cb85c;
- }
- .progress-striped .progress-bar-success {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- }
- .progress-bar-info {
- background-color: #5bc0de;
- }
- .progress-striped .progress-bar-info {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- }
- .progress-bar-warning {
- background-color: #f0ad4e;
- }
- .progress-striped .progress-bar-warning {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- }
- .progress-bar-danger {
- background-color: #d9534f;
- }
- .progress-striped .progress-bar-danger {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- }
- .media {
- margin-top: 15px;
- }
- .media:first-child {
- margin-top: 0;
- }
- .media,
- .media-body {
- zoom: 1;
- overflow: hidden;
- }
- .media-body {
- width: 10000px;
- }
- .media-object {
- display: block;
- }
- .media-object.img-thumbnail {
- max-width: none;
- }
- .media-right,
- .media > .pull-right {
- padding-left: 10px;
- }
- .media-left,
- .media > .pull-left {
- padding-right: 10px;
- }
- .media-left,
- .media-right,
- .media-body {
- display: table-cell;
- vertical-align: top;
- }
- .media-middle {
- vertical-align: middle;
- }
- .media-bottom {
- vertical-align: bottom;
- }
- .media-heading {
- margin-top: 0;
- margin-bottom: 5px;
- }
- .media-list {
- padding-left: 0;
- list-style: none;
- }
- .list-group {
- margin-bottom: 20px;
- padding-left: 0;
- }
- .list-group-item {
- position: relative;
- display: block;
- padding: 10px 15px;
- margin-bottom: -1px;
- background-color: #fff;
- border: 1px solid #ddd;
- }
- .list-group-item:first-child {
- border-top-right-radius: 2px;
- border-top-left-radius: 2px;
- }
- .list-group-item:last-child {
- margin-bottom: 0;
- border-bottom-right-radius: 2px;
- border-bottom-left-radius: 2px;
- }
- a.list-group-item,
- button.list-group-item {
- color: #555;
- }
- a.list-group-item .list-group-item-heading,
- button.list-group-item .list-group-item-heading {
- color: #333;
- }
- a.list-group-item:hover,
- button.list-group-item:hover,
- a.list-group-item:focus,
- button.list-group-item:focus {
- text-decoration: none;
- color: #555;
- background-color: #f5f5f5;
- }
- button.list-group-item {
- width: 100%;
- text-align: left;
- }
- .list-group-item.disabled,
- .list-group-item.disabled:hover,
- .list-group-item.disabled:focus {
- background-color: #eeeeee;
- color: #777777;
- cursor: not-allowed;
- }
- .list-group-item.disabled .list-group-item-heading,
- .list-group-item.disabled:hover .list-group-item-heading,
- .list-group-item.disabled:focus .list-group-item-heading {
- color: inherit;
- }
- .list-group-item.disabled .list-group-item-text,
- .list-group-item.disabled:hover .list-group-item-text,
- .list-group-item.disabled:focus .list-group-item-text {
- color: #777777;
- }
- .list-group-item.active,
- .list-group-item.active:hover,
- .list-group-item.active:focus {
- z-index: 2;
- color: #fff;
- background-color: #337ab7;
- border-color: #337ab7;
- }
- .list-group-item.active .list-group-item-heading,
- .list-group-item.active:hover .list-group-item-heading,
- .list-group-item.active:focus .list-group-item-heading,
- .list-group-item.active .list-group-item-heading > small,
- .list-group-item.active:hover .list-group-item-heading > small,
- .list-group-item.active:focus .list-group-item-heading > small,
- .list-group-item.active .list-group-item-heading > .small,
- .list-group-item.active:hover .list-group-item-heading > .small,
- .list-group-item.active:focus .list-group-item-heading > .small {
- color: inherit;
- }
- .list-group-item.active .list-group-item-text,
- .list-group-item.active:hover .list-group-item-text,
- .list-group-item.active:focus .list-group-item-text {
- color: #c7ddef;
- }
- .list-group-item-success {
- color: #3c763d;
- background-color: #dff0d8;
- }
- a.list-group-item-success,
- button.list-group-item-success {
- color: #3c763d;
- }
- a.list-group-item-success .list-group-item-heading,
- button.list-group-item-success .list-group-item-heading {
- color: inherit;
- }
- a.list-group-item-success:hover,
- button.list-group-item-success:hover,
- a.list-group-item-success:focus,
- button.list-group-item-success:focus {
- color: #3c763d;
- background-color: #d0e9c6;
- }
- a.list-group-item-success.active,
- button.list-group-item-success.active,
- a.list-group-item-success.active:hover,
- button.list-group-item-success.active:hover,
- a.list-group-item-success.active:focus,
- button.list-group-item-success.active:focus {
- color: #fff;
- background-color: #3c763d;
- border-color: #3c763d;
- }
- .list-group-item-info {
- color: #31708f;
- background-color: #d9edf7;
- }
- a.list-group-item-info,
- button.list-group-item-info {
- color: #31708f;
- }
- a.list-group-item-info .list-group-item-heading,
- button.list-group-item-info .list-group-item-heading {
- color: inherit;
- }
- a.list-group-item-info:hover,
- button.list-group-item-info:hover,
- a.list-group-item-info:focus,
- button.list-group-item-info:focus {
- color: #31708f;
- background-color: #c4e3f3;
- }
- a.list-group-item-info.active,
- button.list-group-item-info.active,
- a.list-group-item-info.active:hover,
- button.list-group-item-info.active:hover,
- a.list-group-item-info.active:focus,
- button.list-group-item-info.active:focus {
- color: #fff;
- background-color: #31708f;
- border-color: #31708f;
- }
- .list-group-item-warning {
- color: #8a6d3b;
- background-color: #fcf8e3;
- }
- a.list-group-item-warning,
- button.list-group-item-warning {
- color: #8a6d3b;
- }
- a.list-group-item-warning .list-group-item-heading,
- button.list-group-item-warning .list-group-item-heading {
- color: inherit;
- }
- a.list-group-item-warning:hover,
- button.list-group-item-warning:hover,
- a.list-group-item-warning:focus,
- button.list-group-item-warning:focus {
- color: #8a6d3b;
- background-color: #faf2cc;
- }
- a.list-group-item-warning.active,
- button.list-group-item-warning.active,
- a.list-group-item-warning.active:hover,
- button.list-group-item-warning.active:hover,
- a.list-group-item-warning.active:focus,
- button.list-group-item-warning.active:focus {
- color: #fff;
- background-color: #8a6d3b;
- border-color: #8a6d3b;
- }
- .list-group-item-danger {
- color: #a94442;
- background-color: #f2dede;
- }
- a.list-group-item-danger,
- button.list-group-item-danger {
- color: #a94442;
- }
- a.list-group-item-danger .list-group-item-heading,
- button.list-group-item-danger .list-group-item-heading {
- color: inherit;
- }
- a.list-group-item-danger:hover,
- button.list-group-item-danger:hover,
- a.list-group-item-danger:focus,
- button.list-group-item-danger:focus {
- color: #a94442;
- background-color: #ebcccc;
- }
- a.list-group-item-danger.active,
- button.list-group-item-danger.active,
- a.list-group-item-danger.active:hover,
- button.list-group-item-danger.active:hover,
- a.list-group-item-danger.active:focus,
- button.list-group-item-danger.active:focus {
- color: #fff;
- background-color: #a94442;
- border-color: #a94442;
- }
- .list-group-item-heading {
- margin-top: 0;
- margin-bottom: 5px;
- }
- .list-group-item-text {
- margin-bottom: 0;
- line-height: 1.3;
- }
- .panel {
- margin-bottom: 18px;
- background-color: #fff;
- border: 1px solid transparent;
- border-radius: 2px;
- -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
- box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
- }
- .panel-body {
- padding: 15px;
- }
- .panel-heading {
- padding: 10px 15px;
- border-bottom: 1px solid transparent;
- border-top-right-radius: 1px;
- border-top-left-radius: 1px;
- }
- .panel-heading > .dropdown .dropdown-toggle {
- color: inherit;
- }
- .panel-title {
- margin-top: 0;
- margin-bottom: 0;
- font-size: 15px;
- color: inherit;
- }
- .panel-title > a,
- .panel-title > small,
- .panel-title > .small,
- .panel-title > small > a,
- .panel-title > .small > a {
- color: inherit;
- }
- .panel-footer {
- padding: 10px 15px;
- background-color: #f5f5f5;
- border-top: 1px solid #ddd;
- border-bottom-right-radius: 1px;
- border-bottom-left-radius: 1px;
- }
- .panel > .list-group,
- .panel > .panel-collapse > .list-group {
- margin-bottom: 0;
- }
- .panel > .list-group .list-group-item,
- .panel > .panel-collapse > .list-group .list-group-item {
- border-width: 1px 0;
- border-radius: 0;
- }
- .panel > .list-group:first-child .list-group-item:first-child,
- .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
- border-top: 0;
- border-top-right-radius: 1px;
- border-top-left-radius: 1px;
- }
- .panel > .list-group:last-child .list-group-item:last-child,
- .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
- border-bottom: 0;
- border-bottom-right-radius: 1px;
- border-bottom-left-radius: 1px;
- }
- .panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
- border-top-right-radius: 0;
- border-top-left-radius: 0;
- }
- .panel-heading + .list-group .list-group-item:first-child {
- border-top-width: 0;
- }
- .list-group + .panel-footer {
- border-top-width: 0;
- }
- .panel > .table,
- .panel > .table-responsive > .table,
- .panel > .panel-collapse > .table {
- margin-bottom: 0;
- }
- .panel > .table caption,
- .panel > .table-responsive > .table caption,
- .panel > .panel-collapse > .table caption {
- padding-left: 15px;
- padding-right: 15px;
- }
- .panel > .table:first-child,
- .panel > .table-responsive:first-child > .table:first-child {
- border-top-right-radius: 1px;
- border-top-left-radius: 1px;
- }
- .panel > .table:first-child > thead:first-child > tr:first-child,
- .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
- .panel > .table:first-child > tbody:first-child > tr:first-child,
- .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
- border-top-left-radius: 1px;
- border-top-right-radius: 1px;
- }
- .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
- .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
- .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
- .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
- .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
- .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
- .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
- .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
- border-top-left-radius: 1px;
- }
- .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
- .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
- .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
- .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
- .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
- .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
- .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
- .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
- border-top-right-radius: 1px;
- }
- .panel > .table:last-child,
- .panel > .table-responsive:last-child > .table:last-child {
- border-bottom-right-radius: 1px;
- border-bottom-left-radius: 1px;
- }
- .panel > .table:last-child > tbody:last-child > tr:last-child,
- .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
- .panel > .table:last-child > tfoot:last-child > tr:last-child,
- .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
- border-bottom-left-radius: 1px;
- border-bottom-right-radius: 1px;
- }
- .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
- .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
- .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
- .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
- .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
- .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
- .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
- .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
- border-bottom-left-radius: 1px;
- }
- .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
- .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
- .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
- .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
- .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
- .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
- .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
- .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
- border-bottom-right-radius: 1px;
- }
- .panel > .panel-body + .table,
- .panel > .panel-body + .table-responsive,
- .panel > .table + .panel-body,
- .panel > .table-responsive + .panel-body {
- border-top: 1px solid #ddd;
- }
- .panel > .table > tbody:first-child > tr:first-child th,
- .panel > .table > tbody:first-child > tr:first-child td {
- border-top: 0;
- }
- .panel > .table-bordered,
- .panel > .table-responsive > .table-bordered {
- border: 0;
- }
- .panel > .table-bordered > thead > tr > th:first-child,
- .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
- .panel > .table-bordered > tbody > tr > th:first-child,
- .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
- .panel > .table-bordered > tfoot > tr > th:first-child,
- .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
- .panel > .table-bordered > thead > tr > td:first-child,
- .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
- .panel > .table-bordered > tbody > tr > td:first-child,
- .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
- .panel > .table-bordered > tfoot > tr > td:first-child,
- .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
- border-left: 0;
- }
- .panel > .table-bordered > thead > tr > th:last-child,
- .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
- .panel > .table-bordered > tbody > tr > th:last-child,
- .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
- .panel > .table-bordered > tfoot > tr > th:last-child,
- .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
- .panel > .table-bordered > thead > tr > td:last-child,
- .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
- .panel > .table-bordered > tbody > tr > td:last-child,
- .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
- .panel > .table-bordered > tfoot > tr > td:last-child,
- .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
- border-right: 0;
- }
- .panel > .table-bordered > thead > tr:first-child > td,
- .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
- .panel > .table-bordered > tbody > tr:first-child > td,
- .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
- .panel > .table-bordered > thead > tr:first-child > th,
- .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
- .panel > .table-bordered > tbody > tr:first-child > th,
- .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
- border-bottom: 0;
- }
- .panel > .table-bordered > tbody > tr:last-child > td,
- .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
- .panel > .table-bordered > tfoot > tr:last-child > td,
- .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
- .panel > .table-bordered > tbody > tr:last-child > th,
- .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
- .panel > .table-bordered > tfoot > tr:last-child > th,
- .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
- border-bottom: 0;
- }
- .panel > .table-responsive {
- border: 0;
- margin-bottom: 0;
- }
- .panel-group {
- margin-bottom: 18px;
- }
- .panel-group .panel {
- margin-bottom: 0;
- border-radius: 2px;
- }
- .panel-group .panel + .panel {
- margin-top: 5px;
- }
- .panel-group .panel-heading {
- border-bottom: 0;
- }
- .panel-group .panel-heading + .panel-collapse > .panel-body,
- .panel-group .panel-heading + .panel-collapse > .list-group {
- border-top: 1px solid #ddd;
- }
- .panel-group .panel-footer {
- border-top: 0;
- }
- .panel-group .panel-footer + .panel-collapse .panel-body {
- border-bottom: 1px solid #ddd;
- }
- .panel-default {
- border-color: #ddd;
- }
- .panel-default > .panel-heading {
- color: #333333;
- background-color: #f5f5f5;
- border-color: #ddd;
- }
- .panel-default > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #ddd;
- }
- .panel-default > .panel-heading .badge {
- color: #f5f5f5;
- background-color: #333333;
- }
- .panel-default > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #ddd;
- }
- .panel-primary {
- border-color: #337ab7;
- }
- .panel-primary > .panel-heading {
- color: #fff;
- background-color: #337ab7;
- border-color: #337ab7;
- }
- .panel-primary > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #337ab7;
- }
- .panel-primary > .panel-heading .badge {
- color: #337ab7;
- background-color: #fff;
- }
- .panel-primary > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #337ab7;
- }
- .panel-success {
- border-color: #d6e9c6;
- }
- .panel-success > .panel-heading {
- color: #3c763d;
- background-color: #dff0d8;
- border-color: #d6e9c6;
- }
- .panel-success > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #d6e9c6;
- }
- .panel-success > .panel-heading .badge {
- color: #dff0d8;
- background-color: #3c763d;
- }
- .panel-success > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #d6e9c6;
- }
- .panel-info {
- border-color: #bce8f1;
- }
- .panel-info > .panel-heading {
- color: #31708f;
- background-color: #d9edf7;
- border-color: #bce8f1;
- }
- .panel-info > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #bce8f1;
- }
- .panel-info > .panel-heading .badge {
- color: #d9edf7;
- background-color: #31708f;
- }
- .panel-info > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #bce8f1;
- }
- .panel-warning {
- border-color: #faebcc;
- }
- .panel-warning > .panel-heading {
- color: #8a6d3b;
- background-color: #fcf8e3;
- border-color: #faebcc;
- }
- .panel-warning > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #faebcc;
- }
- .panel-warning > .panel-heading .badge {
- color: #fcf8e3;
- background-color: #8a6d3b;
- }
- .panel-warning > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #faebcc;
- }
- .panel-danger {
- border-color: #ebccd1;
- }
- .panel-danger > .panel-heading {
- color: #a94442;
- background-color: #f2dede;
- border-color: #ebccd1;
- }
- .panel-danger > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #ebccd1;
- }
- .panel-danger > .panel-heading .badge {
- color: #f2dede;
- background-color: #a94442;
- }
- .panel-danger > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #ebccd1;
- }
- .embed-responsive {
- position: relative;
- display: block;
- height: 0;
- padding: 0;
- overflow: hidden;
- }
- .embed-responsive .embed-responsive-item,
- .embed-responsive iframe,
- .embed-responsive embed,
- .embed-responsive object,
- .embed-responsive video {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- height: 100%;
- width: 100%;
- border: 0;
- }
- .embed-responsive-16by9 {
- padding-bottom: 56.25%;
- }
- .embed-responsive-4by3 {
- padding-bottom: 75%;
- }
- .well {
- min-height: 20px;
- padding: 19px;
- margin-bottom: 20px;
- background-color: #f5f5f5;
- border: 1px solid #e3e3e3;
- border-radius: 2px;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
- }
- .well blockquote {
- border-color: #ddd;
- border-color: rgba(0, 0, 0, 0.15);
- }
- .well-lg {
- padding: 24px;
- border-radius: 3px;
- }
- .well-sm {
- padding: 9px;
- border-radius: 1px;
- }
- .close {
- float: right;
- font-size: 19.5px;
- font-weight: bold;
- line-height: 1;
- color: #000;
- text-shadow: 0 1px 0 #fff;
- opacity: 0.2;
- filter: alpha(opacity=20);
- }
- .close:hover,
- .close:focus {
- color: #000;
- text-decoration: none;
- cursor: pointer;
- opacity: 0.5;
- filter: alpha(opacity=50);
- }
- button.close {
- padding: 0;
- cursor: pointer;
- background: transparent;
- border: 0;
- -webkit-appearance: none;
- }
- .modal-open {
- overflow: hidden;
- }
- .modal {
- display: none;
- overflow: hidden;
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1050;
- -webkit-overflow-scrolling: touch;
- outline: 0;
- }
- .modal.fade .modal-dialog {
- -webkit-transform: translate(0, -25%);
- -ms-transform: translate(0, -25%);
- -o-transform: translate(0, -25%);
- transform: translate(0, -25%);
- -webkit-transition: -webkit-transform 0.3s ease-out;
- -moz-transition: -moz-transform 0.3s ease-out;
- -o-transition: -o-transform 0.3s ease-out;
- transition: transform 0.3s ease-out;
- }
- .modal.in .modal-dialog {
- -webkit-transform: translate(0, 0);
- -ms-transform: translate(0, 0);
- -o-transform: translate(0, 0);
- transform: translate(0, 0);
- }
- .modal-open .modal {
- overflow-x: hidden;
- overflow-y: auto;
- }
- .modal-dialog {
- position: relative;
- width: auto;
- margin: 10px;
- }
- .modal-content {
- position: relative;
- background-color: #fff;
- border: 1px solid #999;
- border: 1px solid rgba(0, 0, 0, 0.2);
- border-radius: 3px;
- -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
- box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
- background-clip: padding-box;
- outline: 0;
- }
- .modal-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1040;
- background-color: #000;
- }
- .modal-backdrop.fade {
- opacity: 0;
- filter: alpha(opacity=0);
- }
- .modal-backdrop.in {
- opacity: 0.5;
- filter: alpha(opacity=50);
- }
- .modal-header {
- padding: 15px;
- border-bottom: 1px solid #e5e5e5;
- }
- .modal-header .close {
- margin-top: -2px;
- }
- .modal-title {
- margin: 0;
- line-height: 1.42857143;
- }
- .modal-body {
- position: relative;
- padding: 15px;
- }
- .modal-footer {
- padding: 15px;
- text-align: right;
- border-top: 1px solid #e5e5e5;
- }
- .modal-footer .btn + .btn {
- margin-left: 5px;
- margin-bottom: 0;
- }
- .modal-footer .btn-group .btn + .btn {
- margin-left: -1px;
- }
- .modal-footer .btn-block + .btn-block {
- margin-left: 0;
- }
- .modal-scrollbar-measure {
- position: absolute;
- top: -9999px;
- width: 50px;
- height: 50px;
- overflow: scroll;
- }
- @media (min-width: 768px) {
- .modal-dialog {
- width: 600px;
- margin: 30px auto;
- }
- .modal-content {
- -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
- box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
- }
- .modal-sm {
- width: 300px;
- }
- }
- @media (min-width: 992px) {
- .modal-lg {
- width: 900px;
- }
- }
- .tooltip {
- position: absolute;
- z-index: 1070;
- display: block;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-style: normal;
- font-weight: normal;
- letter-spacing: normal;
- line-break: auto;
- line-height: 1.42857143;
- text-align: left;
- text-align: start;
- text-decoration: none;
- text-shadow: none;
- text-transform: none;
- white-space: normal;
- word-break: normal;
- word-spacing: normal;
- word-wrap: normal;
- font-size: 12px;
- opacity: 0;
- filter: alpha(opacity=0);
- }
- .tooltip.in {
- opacity: 0.9;
- filter: alpha(opacity=90);
- }
- .tooltip.top {
- margin-top: -3px;
- padding: 5px 0;
- }
- .tooltip.right {
- margin-left: 3px;
- padding: 0 5px;
- }
- .tooltip.bottom {
- margin-top: 3px;
- padding: 5px 0;
- }
- .tooltip.left {
- margin-left: -3px;
- padding: 0 5px;
- }
- .tooltip-inner {
- max-width: 200px;
- padding: 3px 8px;
- color: #fff;
- text-align: center;
- background-color: #000;
- border-radius: 2px;
- }
- .tooltip-arrow {
- position: absolute;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
- }
- .tooltip.top .tooltip-arrow {
- bottom: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000;
- }
- .tooltip.top-left .tooltip-arrow {
- bottom: 0;
- right: 5px;
- margin-bottom: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000;
- }
- .tooltip.top-right .tooltip-arrow {
- bottom: 0;
- left: 5px;
- margin-bottom: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000;
- }
- .tooltip.right .tooltip-arrow {
- top: 50%;
- left: 0;
- margin-top: -5px;
- border-width: 5px 5px 5px 0;
- border-right-color: #000;
- }
- .tooltip.left .tooltip-arrow {
- top: 50%;
- right: 0;
- margin-top: -5px;
- border-width: 5px 0 5px 5px;
- border-left-color: #000;
- }
- .tooltip.bottom .tooltip-arrow {
- top: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000;
- }
- .tooltip.bottom-left .tooltip-arrow {
- top: 0;
- right: 5px;
- margin-top: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000;
- }
- .tooltip.bottom-right .tooltip-arrow {
- top: 0;
- left: 5px;
- margin-top: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000;
- }
- .popover {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1060;
- display: none;
- max-width: 276px;
- padding: 1px;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-style: normal;
- font-weight: normal;
- letter-spacing: normal;
- line-break: auto;
- line-height: 1.42857143;
- text-align: left;
- text-align: start;
- text-decoration: none;
- text-shadow: none;
- text-transform: none;
- white-space: normal;
- word-break: normal;
- word-spacing: normal;
- word-wrap: normal;
- font-size: 13px;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, 0.2);
- border-radius: 3px;
- -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- }
- .popover.top {
- margin-top: -10px;
- }
- .popover.right {
- margin-left: 10px;
- }
- .popover.bottom {
- margin-top: 10px;
- }
- .popover.left {
- margin-left: -10px;
- }
- .popover-title {
- margin: 0;
- padding: 8px 14px;
- font-size: 13px;
- background-color: #f7f7f7;
- border-bottom: 1px solid #ebebeb;
- border-radius: 2px 2px 0 0;
- }
- .popover-content {
- padding: 9px 14px;
- }
- .popover > .arrow,
- .popover > .arrow:after {
- position: absolute;
- display: block;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
- }
- .popover > .arrow {
- border-width: 11px;
- }
- .popover > .arrow:after {
- border-width: 10px;
- content: "";
- }
- .popover.top > .arrow {
- left: 50%;
- margin-left: -11px;
- border-bottom-width: 0;
- border-top-color: #999999;
- border-top-color: rgba(0, 0, 0, 0.25);
- bottom: -11px;
- }
- .popover.top > .arrow:after {
- content: " ";
- bottom: 1px;
- margin-left: -10px;
- border-bottom-width: 0;
- border-top-color: #fff;
- }
- .popover.right > .arrow {
- top: 50%;
- left: -11px;
- margin-top: -11px;
- border-left-width: 0;
- border-right-color: #999999;
- border-right-color: rgba(0, 0, 0, 0.25);
- }
- .popover.right > .arrow:after {
- content: " ";
- left: 1px;
- bottom: -10px;
- border-left-width: 0;
- border-right-color: #fff;
- }
- .popover.bottom > .arrow {
- left: 50%;
- margin-left: -11px;
- border-top-width: 0;
- border-bottom-color: #999999;
- border-bottom-color: rgba(0, 0, 0, 0.25);
- top: -11px;
- }
- .popover.bottom > .arrow:after {
- content: " ";
- top: 1px;
- margin-left: -10px;
- border-top-width: 0;
- border-bottom-color: #fff;
- }
- .popover.left > .arrow {
- top: 50%;
- right: -11px;
- margin-top: -11px;
- border-right-width: 0;
- border-left-color: #999999;
- border-left-color: rgba(0, 0, 0, 0.25);
- }
- .popover.left > .arrow:after {
- content: " ";
- right: 1px;
- border-right-width: 0;
- border-left-color: #fff;
- bottom: -10px;
- }
- .carousel {
- position: relative;
- }
- .carousel-inner {
- position: relative;
- overflow: hidden;
- width: 100%;
- }
- .carousel-inner > .item {
- display: none;
- position: relative;
- -webkit-transition: 0.6s ease-in-out left;
- -o-transition: 0.6s ease-in-out left;
- transition: 0.6s ease-in-out left;
- }
- .carousel-inner > .item > img,
- .carousel-inner > .item > a > img {
- line-height: 1;
- }
- @media all and (transform-3d), (-webkit-transform-3d) {
- .carousel-inner > .item {
- -webkit-transition: -webkit-transform 0.6s ease-in-out;
- -moz-transition: -moz-transform 0.6s ease-in-out;
- -o-transition: -o-transform 0.6s ease-in-out;
- transition: transform 0.6s ease-in-out;
- -webkit-backface-visibility: hidden;
- -moz-backface-visibility: hidden;
- backface-visibility: hidden;
- -webkit-perspective: 1000px;
- -moz-perspective: 1000px;
- perspective: 1000px;
- }
- .carousel-inner > .item.next,
- .carousel-inner > .item.active.right {
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- left: 0;
- }
- .carousel-inner > .item.prev,
- .carousel-inner > .item.active.left {
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- left: 0;
- }
- .carousel-inner > .item.next.left,
- .carousel-inner > .item.prev.right,
- .carousel-inner > .item.active {
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- left: 0;
- }
- }
- .carousel-inner > .active,
- .carousel-inner > .next,
- .carousel-inner > .prev {
- display: block;
- }
- .carousel-inner > .active {
- left: 0;
- }
- .carousel-inner > .next,
- .carousel-inner > .prev {
- position: absolute;
- top: 0;
- width: 100%;
- }
- .carousel-inner > .next {
- left: 100%;
- }
- .carousel-inner > .prev {
- left: -100%;
- }
- .carousel-inner > .next.left,
- .carousel-inner > .prev.right {
- left: 0;
- }
- .carousel-inner > .active.left {
- left: -100%;
- }
- .carousel-inner > .active.right {
- left: 100%;
- }
- .carousel-control {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- width: 15%;
- opacity: 0.5;
- filter: alpha(opacity=50);
- font-size: 20px;
- color: #fff;
- text-align: center;
- text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
- background-color: rgba(0, 0, 0, 0);
- }
- .carousel-control.left {
- background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
- background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
- background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
- }
- .carousel-control.right {
- left: auto;
- right: 0;
- background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
- background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
- background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
- }
- .carousel-control:hover,
- .carousel-control:focus {
- outline: 0;
- color: #fff;
- text-decoration: none;
- opacity: 0.9;
- filter: alpha(opacity=90);
- }
- .carousel-control .icon-prev,
- .carousel-control .icon-next,
- .carousel-control .glyphicon-chevron-left,
- .carousel-control .glyphicon-chevron-right {
- position: absolute;
- top: 50%;
- margin-top: -10px;
- z-index: 5;
- display: inline-block;
- }
- .carousel-control .icon-prev,
- .carousel-control .glyphicon-chevron-left {
- left: 50%;
- margin-left: -10px;
- }
- .carousel-control .icon-next,
- .carousel-control .glyphicon-chevron-right {
- right: 50%;
- margin-right: -10px;
- }
- .carousel-control .icon-prev,
- .carousel-control .icon-next {
- width: 20px;
- height: 20px;
- line-height: 1;
- font-family: serif;
- }
- .carousel-control .icon-prev:before {
- content: '\2039';
- }
- .carousel-control .icon-next:before {
- content: '\203a';
- }
- .carousel-indicators {
- position: absolute;
- bottom: 10px;
- left: 50%;
- z-index: 15;
- width: 60%;
- margin-left: -30%;
- padding-left: 0;
- list-style: none;
- text-align: center;
- }
- .carousel-indicators li {
- display: inline-block;
- width: 10px;
- height: 10px;
- margin: 1px;
- text-indent: -999px;
- border: 1px solid #fff;
- border-radius: 10px;
- cursor: pointer;
- background-color: #000 \9;
- background-color: rgba(0, 0, 0, 0);
- }
- .carousel-indicators .active {
- margin: 0;
- width: 12px;
- height: 12px;
- background-color: #fff;
- }
- .carousel-caption {
- position: absolute;
- left: 15%;
- right: 15%;
- bottom: 20px;
- z-index: 10;
- padding-top: 20px;
- padding-bottom: 20px;
- color: #fff;
- text-align: center;
- text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
- }
- .carousel-caption .btn {
- text-shadow: none;
- }
- @media screen and (min-width: 768px) {
- .carousel-control .glyphicon-chevron-left,
- .carousel-control .glyphicon-chevron-right,
- .carousel-control .icon-prev,
- .carousel-control .icon-next {
- width: 30px;
- height: 30px;
- margin-top: -10px;
- font-size: 30px;
- }
- .carousel-control .glyphicon-chevron-left,
- .carousel-control .icon-prev {
- margin-left: -10px;
- }
- .carousel-control .glyphicon-chevron-right,
- .carousel-control .icon-next {
- margin-right: -10px;
- }
- .carousel-caption {
- left: 20%;
- right: 20%;
- padding-bottom: 30px;
- }
- .carousel-indicators {
- bottom: 20px;
- }
- }
- .clearfix:before,
- .clearfix:after,
- .dl-horizontal dd:before,
- .dl-horizontal dd:after,
- .container:before,
- .container:after,
- .container-fluid:before,
- .container-fluid:after,
- .row:before,
- .row:after,
- .form-horizontal .form-group:before,
- .form-horizontal .form-group:after,
- .btn-toolbar:before,
- .btn-toolbar:after,
- .btn-group-vertical > .btn-group:before,
- .btn-group-vertical > .btn-group:after,
- .nav:before,
- .nav:after,
- .navbar:before,
- .navbar:after,
- .navbar-header:before,
- .navbar-header:after,
- .navbar-collapse:before,
- .navbar-collapse:after,
- .pager:before,
- .pager:after,
- .panel-body:before,
- .panel-body:after,
- .modal-header:before,
- .modal-header:after,
- .modal-footer:before,
- .modal-footer:after,
- .item_buttons:before,
- .item_buttons:after {
- content: " ";
- display: table;
- }
- .clearfix:after,
- .dl-horizontal dd:after,
- .container:after,
- .container-fluid:after,
- .row:after,
- .form-horizontal .form-group:after,
- .btn-toolbar:after,
- .btn-group-vertical > .btn-group:after,
- .nav:after,
- .navbar:after,
- .navbar-header:after,
- .navbar-collapse:after,
- .pager:after,
- .panel-body:after,
- .modal-header:after,
- .modal-footer:after,
- .item_buttons:after {
- clear: both;
- }
- .center-block {
- display: block;
- margin-left: auto;
- margin-right: auto;
- }
- .pull-right {
- float: right !important;
- }
- .pull-left {
- float: left !important;
- }
- .hide {
- display: none !important;
- }
- .show {
- display: block !important;
- }
- .invisible {
- visibility: hidden;
- }
- .text-hide {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0;
- }
- .hidden {
- display: none !important;
- }
- .affix {
- position: fixed;
- }
- @-ms-viewport {
- width: device-width;
- }
- .visible-xs,
- .visible-sm,
- .visible-md,
- .visible-lg {
- display: none !important;
- }
- .visible-xs-block,
- .visible-xs-inline,
- .visible-xs-inline-block,
- .visible-sm-block,
- .visible-sm-inline,
- .visible-sm-inline-block,
- .visible-md-block,
- .visible-md-inline,
- .visible-md-inline-block,
- .visible-lg-block,
- .visible-lg-inline,
- .visible-lg-inline-block {
- display: none !important;
- }
- @media (max-width: 767px) {
- .visible-xs {
- display: block !important;
- }
- table.visible-xs {
- display: table !important;
- }
- tr.visible-xs {
- display: table-row !important;
- }
- th.visible-xs,
- td.visible-xs {
- display: table-cell !important;
- }
- }
- @media (max-width: 767px) {
- .visible-xs-block {
- display: block !important;
- }
- }
- @media (max-width: 767px) {
- .visible-xs-inline {
- display: inline !important;
- }
- }
- @media (max-width: 767px) {
- .visible-xs-inline-block {
- display: inline-block !important;
- }
- }
- @media (min-width: 768px) and (max-width: 991px) {
- .visible-sm {
- display: block !important;
- }
- table.visible-sm {
- display: table !important;
- }
- tr.visible-sm {
- display: table-row !important;
- }
- th.visible-sm,
- td.visible-sm {
- display: table-cell !important;
- }
- }
- @media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-block {
- display: block !important;
- }
- }
- @media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-inline {
- display: inline !important;
- }
- }
- @media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-inline-block {
- display: inline-block !important;
- }
- }
- @media (min-width: 992px) and (max-width: 1199px) {
- .visible-md {
- display: block !important;
- }
- table.visible-md {
- display: table !important;
- }
- tr.visible-md {
- display: table-row !important;
- }
- th.visible-md,
- td.visible-md {
- display: table-cell !important;
- }
- }
- @media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-block {
- display: block !important;
- }
- }
- @media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-inline {
- display: inline !important;
- }
- }
- @media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-inline-block {
- display: inline-block !important;
- }
- }
- @media (min-width: 1200px) {
- .visible-lg {
- display: block !important;
- }
- table.visible-lg {
- display: table !important;
- }
- tr.visible-lg {
- display: table-row !important;
- }
- th.visible-lg,
- td.visible-lg {
- display: table-cell !important;
- }
- }
- @media (min-width: 1200px) {
- .visible-lg-block {
- display: block !important;
- }
- }
- @media (min-width: 1200px) {
- .visible-lg-inline {
- display: inline !important;
- }
- }
- @media (min-width: 1200px) {
- .visible-lg-inline-block {
- display: inline-block !important;
- }
- }
- @media (max-width: 767px) {
- .hidden-xs {
- display: none !important;
- }
- }
- @media (min-width: 768px) and (max-width: 991px) {
- .hidden-sm {
- display: none !important;
- }
- }
- @media (min-width: 992px) and (max-width: 1199px) {
- .hidden-md {
- display: none !important;
- }
- }
- @media (min-width: 1200px) {
- .hidden-lg {
- display: none !important;
- }
- }
- .visible-print {
- display: none !important;
- }
- @media print {
- .visible-print {
- display: block !important;
- }
- table.visible-print {
- display: table !important;
- }
- tr.visible-print {
- display: table-row !important;
- }
- th.visible-print,
- td.visible-print {
- display: table-cell !important;
- }
- }
- .visible-print-block {
- display: none !important;
- }
- @media print {
- .visible-print-block {
- display: block !important;
- }
- }
- .visible-print-inline {
- display: none !important;
- }
- @media print {
- .visible-print-inline {
- display: inline !important;
- }
- }
- .visible-print-inline-block {
- display: none !important;
- }
- @media print {
- .visible-print-inline-block {
- display: inline-block !important;
- }
- }
- @media print {
- .hidden-print {
- display: none !important;
- }
- }
- /*!
- *
- * Font Awesome
- *
- */
- /*!
- * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
- * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */
- /* FONT PATH
- * -------------------------- */
- @font-face {
- font-family: 'FontAwesome';
- src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?v=4.2.0');
- src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'), url('../components/font-awesome/fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'), url('../components/font-awesome/fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'), url('../components/font-awesome/fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');
- font-weight: normal;
- font-style: normal;
- }
- .fa {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- }
- /* makes the font 33% larger relative to the icon container */
- .fa-lg {
- font-size: 1.33333333em;
- line-height: 0.75em;
- vertical-align: -15%;
- }
- .fa-2x {
- font-size: 2em;
- }
- .fa-3x {
- font-size: 3em;
- }
- .fa-4x {
- font-size: 4em;
- }
- .fa-5x {
- font-size: 5em;
- }
- .fa-fw {
- width: 1.28571429em;
- text-align: center;
- }
- .fa-ul {
- padding-left: 0;
- margin-left: 2.14285714em;
- list-style-type: none;
- }
- .fa-ul > li {
- position: relative;
- }
- .fa-li {
- position: absolute;
- left: -2.14285714em;
- width: 2.14285714em;
- top: 0.14285714em;
- text-align: center;
- }
- .fa-li.fa-lg {
- left: -1.85714286em;
- }
- .fa-border {
- padding: .2em .25em .15em;
- border: solid 0.08em #eee;
- border-radius: .1em;
- }
- .pull-right {
- float: right;
- }
- .pull-left {
- float: left;
- }
- .fa.pull-left {
- margin-right: .3em;
- }
- .fa.pull-right {
- margin-left: .3em;
- }
- .fa-spin {
- -webkit-animation: fa-spin 2s infinite linear;
- animation: fa-spin 2s infinite linear;
- }
- @-webkit-keyframes fa-spin {
- 0% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- 100% {
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
- }
- @keyframes fa-spin {
- 0% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- 100% {
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
- }
- .fa-rotate-90 {
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
- -webkit-transform: rotate(90deg);
- -ms-transform: rotate(90deg);
- transform: rotate(90deg);
- }
- .fa-rotate-180 {
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
- -webkit-transform: rotate(180deg);
- -ms-transform: rotate(180deg);
- transform: rotate(180deg);
- }
- .fa-rotate-270 {
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
- -webkit-transform: rotate(270deg);
- -ms-transform: rotate(270deg);
- transform: rotate(270deg);
- }
- .fa-flip-horizontal {
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
- -webkit-transform: scale(-1, 1);
- -ms-transform: scale(-1, 1);
- transform: scale(-1, 1);
- }
- .fa-flip-vertical {
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
- -webkit-transform: scale(1, -1);
- -ms-transform: scale(1, -1);
- transform: scale(1, -1);
- }
- :root .fa-rotate-90,
- :root .fa-rotate-180,
- :root .fa-rotate-270,
- :root .fa-flip-horizontal,
- :root .fa-flip-vertical {
- filter: none;
- }
- .fa-stack {
- position: relative;
- display: inline-block;
- width: 2em;
- height: 2em;
- line-height: 2em;
- vertical-align: middle;
- }
- .fa-stack-1x,
- .fa-stack-2x {
- position: absolute;
- left: 0;
- width: 100%;
- text-align: center;
- }
- .fa-stack-1x {
- line-height: inherit;
- }
- .fa-stack-2x {
- font-size: 2em;
- }
- .fa-inverse {
- color: #fff;
- }
- /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
- readers do not read off random characters that represent icons */
- .fa-glass:before {
- content: "\f000";
- }
- .fa-music:before {
- content: "\f001";
- }
- .fa-search:before {
- content: "\f002";
- }
- .fa-envelope-o:before {
- content: "\f003";
- }
- .fa-heart:before {
- content: "\f004";
- }
- .fa-star:before {
- content: "\f005";
- }
- .fa-star-o:before {
- content: "\f006";
- }
- .fa-user:before {
- content: "\f007";
- }
- .fa-film:before {
- content: "\f008";
- }
- .fa-th-large:before {
- content: "\f009";
- }
- .fa-th:before {
- content: "\f00a";
- }
- .fa-th-list:before {
- content: "\f00b";
- }
- .fa-check:before {
- content: "\f00c";
- }
- .fa-remove:before,
- .fa-close:before,
- .fa-times:before {
- content: "\f00d";
- }
- .fa-search-plus:before {
- content: "\f00e";
- }
- .fa-search-minus:before {
- content: "\f010";
- }
- .fa-power-off:before {
- content: "\f011";
- }
- .fa-signal:before {
- content: "\f012";
- }
- .fa-gear:before,
- .fa-cog:before {
- content: "\f013";
- }
- .fa-trash-o:before {
- content: "\f014";
- }
- .fa-home:before {
- content: "\f015";
- }
- .fa-file-o:before {
- content: "\f016";
- }
- .fa-clock-o:before {
- content: "\f017";
- }
- .fa-road:before {
- content: "\f018";
- }
- .fa-download:before {
- content: "\f019";
- }
- .fa-arrow-circle-o-down:before {
- content: "\f01a";
- }
- .fa-arrow-circle-o-up:before {
- content: "\f01b";
- }
- .fa-inbox:before {
- content: "\f01c";
- }
- .fa-play-circle-o:before {
- content: "\f01d";
- }
- .fa-rotate-right:before,
- .fa-repeat:before {
- content: "\f01e";
- }
- .fa-refresh:before {
- content: "\f021";
- }
- .fa-list-alt:before {
- content: "\f022";
- }
- .fa-lock:before {
- content: "\f023";
- }
- .fa-flag:before {
- content: "\f024";
- }
- .fa-headphones:before {
- content: "\f025";
- }
- .fa-volume-off:before {
- content: "\f026";
- }
- .fa-volume-down:before {
- content: "\f027";
- }
- .fa-volume-up:before {
- content: "\f028";
- }
- .fa-qrcode:before {
- content: "\f029";
- }
- .fa-barcode:before {
- content: "\f02a";
- }
- .fa-tag:before {
- content: "\f02b";
- }
- .fa-tags:before {
- content: "\f02c";
- }
- .fa-book:before {
- content: "\f02d";
- }
- .fa-bookmark:before {
- content: "\f02e";
- }
- .fa-print:before {
- content: "\f02f";
- }
- .fa-camera:before {
- content: "\f030";
- }
- .fa-font:before {
- content: "\f031";
- }
- .fa-bold:before {
- content: "\f032";
- }
- .fa-italic:before {
- content: "\f033";
- }
- .fa-text-height:before {
- content: "\f034";
- }
- .fa-text-width:before {
- content: "\f035";
- }
- .fa-align-left:before {
- content: "\f036";
- }
- .fa-align-center:before {
- content: "\f037";
- }
- .fa-align-right:before {
- content: "\f038";
- }
- .fa-align-justify:before {
- content: "\f039";
- }
- .fa-list:before {
- content: "\f03a";
- }
- .fa-dedent:before,
- .fa-outdent:before {
- content: "\f03b";
- }
- .fa-indent:before {
- content: "\f03c";
- }
- .fa-video-camera:before {
- content: "\f03d";
- }
- .fa-photo:before,
- .fa-image:before,
- .fa-picture-o:before {
- content: "\f03e";
- }
- .fa-pencil:before {
- content: "\f040";
- }
- .fa-map-marker:before {
- content: "\f041";
- }
- .fa-adjust:before {
- content: "\f042";
- }
- .fa-tint:before {
- content: "\f043";
- }
- .fa-edit:before,
- .fa-pencil-square-o:before {
- content: "\f044";
- }
- .fa-share-square-o:before {
- content: "\f045";
- }
- .fa-check-square-o:before {
- content: "\f046";
- }
- .fa-arrows:before {
- content: "\f047";
- }
- .fa-step-backward:before {
- content: "\f048";
- }
- .fa-fast-backward:before {
- content: "\f049";
- }
- .fa-backward:before {
- content: "\f04a";
- }
- .fa-play:before {
- content: "\f04b";
- }
- .fa-pause:before {
- content: "\f04c";
- }
- .fa-stop:before {
- content: "\f04d";
- }
- .fa-forward:before {
- content: "\f04e";
- }
- .fa-fast-forward:before {
- content: "\f050";
- }
- .fa-step-forward:before {
- content: "\f051";
- }
- .fa-eject:before {
- content: "\f052";
- }
- .fa-chevron-left:before {
- content: "\f053";
- }
- .fa-chevron-right:before {
- content: "\f054";
- }
- .fa-plus-circle:before {
- content: "\f055";
- }
- .fa-minus-circle:before {
- content: "\f056";
- }
- .fa-times-circle:before {
- content: "\f057";
- }
- .fa-check-circle:before {
- content: "\f058";
- }
- .fa-question-circle:before {
- content: "\f059";
- }
- .fa-info-circle:before {
- content: "\f05a";
- }
- .fa-crosshairs:before {
- content: "\f05b";
- }
- .fa-times-circle-o:before {
- content: "\f05c";
- }
- .fa-check-circle-o:before {
- content: "\f05d";
- }
- .fa-ban:before {
- content: "\f05e";
- }
- .fa-arrow-left:before {
- content: "\f060";
- }
- .fa-arrow-right:before {
- content: "\f061";
- }
- .fa-arrow-up:before {
- content: "\f062";
- }
- .fa-arrow-down:before {
- content: "\f063";
- }
- .fa-mail-forward:before,
- .fa-share:before {
- content: "\f064";
- }
- .fa-expand:before {
- content: "\f065";
- }
- .fa-compress:before {
- content: "\f066";
- }
- .fa-plus:before {
- content: "\f067";
- }
- .fa-minus:before {
- content: "\f068";
- }
- .fa-asterisk:before {
- content: "\f069";
- }
- .fa-exclamation-circle:before {
- content: "\f06a";
- }
- .fa-gift:before {
- content: "\f06b";
- }
- .fa-leaf:before {
- content: "\f06c";
- }
- .fa-fire:before {
- content: "\f06d";
- }
- .fa-eye:before {
- content: "\f06e";
- }
- .fa-eye-slash:before {
- content: "\f070";
- }
- .fa-warning:before,
- .fa-exclamation-triangle:before {
- content: "\f071";
- }
- .fa-plane:before {
- content: "\f072";
- }
- .fa-calendar:before {
- content: "\f073";
- }
- .fa-random:before {
- content: "\f074";
- }
- .fa-comment:before {
- content: "\f075";
- }
- .fa-magnet:before {
- content: "\f076";
- }
- .fa-chevron-up:before {
- content: "\f077";
- }
- .fa-chevron-down:before {
- content: "\f078";
- }
- .fa-retweet:before {
- content: "\f079";
- }
- .fa-shopping-cart:before {
- content: "\f07a";
- }
- .fa-folder:before {
- content: "\f07b";
- }
- .fa-folder-open:before {
- content: "\f07c";
- }
- .fa-arrows-v:before {
- content: "\f07d";
- }
- .fa-arrows-h:before {
- content: "\f07e";
- }
- .fa-bar-chart-o:before,
- .fa-bar-chart:before {
- content: "\f080";
- }
- .fa-twitter-square:before {
- content: "\f081";
- }
- .fa-facebook-square:before {
- content: "\f082";
- }
- .fa-camera-retro:before {
- content: "\f083";
- }
- .fa-key:before {
- content: "\f084";
- }
- .fa-gears:before,
- .fa-cogs:before {
- content: "\f085";
- }
- .fa-comments:before {
- content: "\f086";
- }
- .fa-thumbs-o-up:before {
- content: "\f087";
- }
- .fa-thumbs-o-down:before {
- content: "\f088";
- }
- .fa-star-half:before {
- content: "\f089";
- }
- .fa-heart-o:before {
- content: "\f08a";
- }
- .fa-sign-out:before {
- content: "\f08b";
- }
- .fa-linkedin-square:before {
- content: "\f08c";
- }
- .fa-thumb-tack:before {
- content: "\f08d";
- }
- .fa-external-link:before {
- content: "\f08e";
- }
- .fa-sign-in:before {
- content: "\f090";
- }
- .fa-trophy:before {
- content: "\f091";
- }
- .fa-github-square:before {
- content: "\f092";
- }
- .fa-upload:before {
- content: "\f093";
- }
- .fa-lemon-o:before {
- content: "\f094";
- }
- .fa-phone:before {
- content: "\f095";
- }
- .fa-square-o:before {
- content: "\f096";
- }
- .fa-bookmark-o:before {
- content: "\f097";
- }
- .fa-phone-square:before {
- content: "\f098";
- }
- .fa-twitter:before {
- content: "\f099";
- }
- .fa-facebook:before {
- content: "\f09a";
- }
- .fa-github:before {
- content: "\f09b";
- }
- .fa-unlock:before {
- content: "\f09c";
- }
- .fa-credit-card:before {
- content: "\f09d";
- }
- .fa-rss:before {
- content: "\f09e";
- }
- .fa-hdd-o:before {
- content: "\f0a0";
- }
- .fa-bullhorn:before {
- content: "\f0a1";
- }
- .fa-bell:before {
- content: "\f0f3";
- }
- .fa-certificate:before {
- content: "\f0a3";
- }
- .fa-hand-o-right:before {
- content: "\f0a4";
- }
- .fa-hand-o-left:before {
- content: "\f0a5";
- }
- .fa-hand-o-up:before {
- content: "\f0a6";
- }
- .fa-hand-o-down:before {
- content: "\f0a7";
- }
- .fa-arrow-circle-left:before {
- content: "\f0a8";
- }
- .fa-arrow-circle-right:before {
- content: "\f0a9";
- }
- .fa-arrow-circle-up:before {
- content: "\f0aa";
- }
- .fa-arrow-circle-down:before {
- content: "\f0ab";
- }
- .fa-globe:before {
- content: "\f0ac";
- }
- .fa-wrench:before {
- content: "\f0ad";
- }
- .fa-tasks:before {
- content: "\f0ae";
- }
- .fa-filter:before {
- content: "\f0b0";
- }
- .fa-briefcase:before {
- content: "\f0b1";
- }
- .fa-arrows-alt:before {
- content: "\f0b2";
- }
- .fa-group:before,
- .fa-users:before {
- content: "\f0c0";
- }
- .fa-chain:before,
- .fa-link:before {
- content: "\f0c1";
- }
- .fa-cloud:before {
- content: "\f0c2";
- }
- .fa-flask:before {
- content: "\f0c3";
- }
- .fa-cut:before,
- .fa-scissors:before {
- content: "\f0c4";
- }
- .fa-copy:before,
- .fa-files-o:before {
- content: "\f0c5";
- }
- .fa-paperclip:before {
- content: "\f0c6";
- }
- .fa-save:before,
- .fa-floppy-o:before {
- content: "\f0c7";
- }
- .fa-square:before {
- content: "\f0c8";
- }
- .fa-navicon:before,
- .fa-reorder:before,
- .fa-bars:before {
- content: "\f0c9";
- }
- .fa-list-ul:before {
- content: "\f0ca";
- }
- .fa-list-ol:before {
- content: "\f0cb";
- }
- .fa-strikethrough:before {
- content: "\f0cc";
- }
- .fa-underline:before {
- content: "\f0cd";
- }
- .fa-table:before {
- content: "\f0ce";
- }
- .fa-magic:before {
- content: "\f0d0";
- }
- .fa-truck:before {
- content: "\f0d1";
- }
- .fa-pinterest:before {
- content: "\f0d2";
- }
- .fa-pinterest-square:before {
- content: "\f0d3";
- }
- .fa-google-plus-square:before {
- content: "\f0d4";
- }
- .fa-google-plus:before {
- content: "\f0d5";
- }
- .fa-money:before {
- content: "\f0d6";
- }
- .fa-caret-down:before {
- content: "\f0d7";
- }
- .fa-caret-up:before {
- content: "\f0d8";
- }
- .fa-caret-left:before {
- content: "\f0d9";
- }
- .fa-caret-right:before {
- content: "\f0da";
- }
- .fa-columns:before {
- content: "\f0db";
- }
- .fa-unsorted:before,
- .fa-sort:before {
- content: "\f0dc";
- }
- .fa-sort-down:before,
- .fa-sort-desc:before {
- content: "\f0dd";
- }
- .fa-sort-up:before,
- .fa-sort-asc:before {
- content: "\f0de";
- }
- .fa-envelope:before {
- content: "\f0e0";
- }
- .fa-linkedin:before {
- content: "\f0e1";
- }
- .fa-rotate-left:before,
- .fa-undo:before {
- content: "\f0e2";
- }
- .fa-legal:before,
- .fa-gavel:before {
- content: "\f0e3";
- }
- .fa-dashboard:before,
- .fa-tachometer:before {
- content: "\f0e4";
- }
- .fa-comment-o:before {
- content: "\f0e5";
- }
- .fa-comments-o:before {
- content: "\f0e6";
- }
- .fa-flash:before,
- .fa-bolt:before {
- content: "\f0e7";
- }
- .fa-sitemap:before {
- content: "\f0e8";
- }
- .fa-umbrella:before {
- content: "\f0e9";
- }
- .fa-paste:before,
- .fa-clipboard:before {
- content: "\f0ea";
- }
- .fa-lightbulb-o:before {
- content: "\f0eb";
- }
- .fa-exchange:before {
- content: "\f0ec";
- }
- .fa-cloud-download:before {
- content: "\f0ed";
- }
- .fa-cloud-upload:before {
- content: "\f0ee";
- }
- .fa-user-md:before {
- content: "\f0f0";
- }
- .fa-stethoscope:before {
- content: "\f0f1";
- }
- .fa-suitcase:before {
- content: "\f0f2";
- }
- .fa-bell-o:before {
- content: "\f0a2";
- }
- .fa-coffee:before {
- content: "\f0f4";
- }
- .fa-cutlery:before {
- content: "\f0f5";
- }
- .fa-file-text-o:before {
- content: "\f0f6";
- }
- .fa-building-o:before {
- content: "\f0f7";
- }
- .fa-hospital-o:before {
- content: "\f0f8";
- }
- .fa-ambulance:before {
- content: "\f0f9";
- }
- .fa-medkit:before {
- content: "\f0fa";
- }
- .fa-fighter-jet:before {
- content: "\f0fb";
- }
- .fa-beer:before {
- content: "\f0fc";
- }
- .fa-h-square:before {
- content: "\f0fd";
- }
- .fa-plus-square:before {
- content: "\f0fe";
- }
- .fa-angle-double-left:before {
- content: "\f100";
- }
- .fa-angle-double-right:before {
- content: "\f101";
- }
- .fa-angle-double-up:before {
- content: "\f102";
- }
- .fa-angle-double-down:before {
- content: "\f103";
- }
- .fa-angle-left:before {
- content: "\f104";
- }
- .fa-angle-right:before {
- content: "\f105";
- }
- .fa-angle-up:before {
- content: "\f106";
- }
- .fa-angle-down:before {
- content: "\f107";
- }
- .fa-desktop:before {
- content: "\f108";
- }
- .fa-laptop:before {
- content: "\f109";
- }
- .fa-tablet:before {
- content: "\f10a";
- }
- .fa-mobile-phone:before,
- .fa-mobile:before {
- content: "\f10b";
- }
- .fa-circle-o:before {
- content: "\f10c";
- }
- .fa-quote-left:before {
- content: "\f10d";
- }
- .fa-quote-right:before {
- content: "\f10e";
- }
- .fa-spinner:before {
- content: "\f110";
- }
- .fa-circle:before {
- content: "\f111";
- }
- .fa-mail-reply:before,
- .fa-reply:before {
- content: "\f112";
- }
- .fa-github-alt:before {
- content: "\f113";
- }
- .fa-folder-o:before {
- content: "\f114";
- }
- .fa-folder-open-o:before {
- content: "\f115";
- }
- .fa-smile-o:before {
- content: "\f118";
- }
- .fa-frown-o:before {
- content: "\f119";
- }
- .fa-meh-o:before {
- content: "\f11a";
- }
- .fa-gamepad:before {
- content: "\f11b";
- }
- .fa-keyboard-o:before {
- content: "\f11c";
- }
- .fa-flag-o:before {
- content: "\f11d";
- }
- .fa-flag-checkered:before {
- content: "\f11e";
- }
- .fa-terminal:before {
- content: "\f120";
- }
- .fa-code:before {
- content: "\f121";
- }
- .fa-mail-reply-all:before,
- .fa-reply-all:before {
- content: "\f122";
- }
- .fa-star-half-empty:before,
- .fa-star-half-full:before,
- .fa-star-half-o:before {
- content: "\f123";
- }
- .fa-location-arrow:before {
- content: "\f124";
- }
- .fa-crop:before {
- content: "\f125";
- }
- .fa-code-fork:before {
- content: "\f126";
- }
- .fa-unlink:before,
- .fa-chain-broken:before {
- content: "\f127";
- }
- .fa-question:before {
- content: "\f128";
- }
- .fa-info:before {
- content: "\f129";
- }
- .fa-exclamation:before {
- content: "\f12a";
- }
- .fa-superscript:before {
- content: "\f12b";
- }
- .fa-subscript:before {
- content: "\f12c";
- }
- .fa-eraser:before {
- content: "\f12d";
- }
- .fa-puzzle-piece:before {
- content: "\f12e";
- }
- .fa-microphone:before {
- content: "\f130";
- }
- .fa-microphone-slash:before {
- content: "\f131";
- }
- .fa-shield:before {
- content: "\f132";
- }
- .fa-calendar-o:before {
- content: "\f133";
- }
- .fa-fire-extinguisher:before {
- content: "\f134";
- }
- .fa-rocket:before {
- content: "\f135";
- }
- .fa-maxcdn:before {
- content: "\f136";
- }
- .fa-chevron-circle-left:before {
- content: "\f137";
- }
- .fa-chevron-circle-right:before {
- content: "\f138";
- }
- .fa-chevron-circle-up:before {
- content: "\f139";
- }
- .fa-chevron-circle-down:before {
- content: "\f13a";
- }
- .fa-html5:before {
- content: "\f13b";
- }
- .fa-css3:before {
- content: "\f13c";
- }
- .fa-anchor:before {
- content: "\f13d";
- }
- .fa-unlock-alt:before {
- content: "\f13e";
- }
- .fa-bullseye:before {
- content: "\f140";
- }
- .fa-ellipsis-h:before {
- content: "\f141";
- }
- .fa-ellipsis-v:before {
- content: "\f142";
- }
- .fa-rss-square:before {
- content: "\f143";
- }
- .fa-play-circle:before {
- content: "\f144";
- }
- .fa-ticket:before {
- content: "\f145";
- }
- .fa-minus-square:before {
- content: "\f146";
- }
- .fa-minus-square-o:before {
- content: "\f147";
- }
- .fa-level-up:before {
- content: "\f148";
- }
- .fa-level-down:before {
- content: "\f149";
- }
- .fa-check-square:before {
- content: "\f14a";
- }
- .fa-pencil-square:before {
- content: "\f14b";
- }
- .fa-external-link-square:before {
- content: "\f14c";
- }
- .fa-share-square:before {
- content: "\f14d";
- }
- .fa-compass:before {
- content: "\f14e";
- }
- .fa-toggle-down:before,
- .fa-caret-square-o-down:before {
- content: "\f150";
- }
- .fa-toggle-up:before,
- .fa-caret-square-o-up:before {
- content: "\f151";
- }
- .fa-toggle-right:before,
- .fa-caret-square-o-right:before {
- content: "\f152";
- }
- .fa-euro:before,
- .fa-eur:before {
- content: "\f153";
- }
- .fa-gbp:before {
- content: "\f154";
- }
- .fa-dollar:before,
- .fa-usd:before {
- content: "\f155";
- }
- .fa-rupee:before,
- .fa-inr:before {
- content: "\f156";
- }
- .fa-cny:before,
- .fa-rmb:before,
- .fa-yen:before,
- .fa-jpy:before {
- content: "\f157";
- }
- .fa-ruble:before,
- .fa-rouble:before,
- .fa-rub:before {
- content: "\f158";
- }
- .fa-won:before,
- .fa-krw:before {
- content: "\f159";
- }
- .fa-bitcoin:before,
- .fa-btc:before {
- content: "\f15a";
- }
- .fa-file:before {
- content: "\f15b";
- }
- .fa-file-text:before {
- content: "\f15c";
- }
- .fa-sort-alpha-asc:before {
- content: "\f15d";
- }
- .fa-sort-alpha-desc:before {
- content: "\f15e";
- }
- .fa-sort-amount-asc:before {
- content: "\f160";
- }
- .fa-sort-amount-desc:before {
- content: "\f161";
- }
- .fa-sort-numeric-asc:before {
- content: "\f162";
- }
- .fa-sort-numeric-desc:before {
- content: "\f163";
- }
- .fa-thumbs-up:before {
- content: "\f164";
- }
- .fa-thumbs-down:before {
- content: "\f165";
- }
- .fa-youtube-square:before {
- content: "\f166";
- }
- .fa-youtube:before {
- content: "\f167";
- }
- .fa-xing:before {
- content: "\f168";
- }
- .fa-xing-square:before {
- content: "\f169";
- }
- .fa-youtube-play:before {
- content: "\f16a";
- }
- .fa-dropbox:before {
- content: "\f16b";
- }
- .fa-stack-overflow:before {
- content: "\f16c";
- }
- .fa-instagram:before {
- content: "\f16d";
- }
- .fa-flickr:before {
- content: "\f16e";
- }
- .fa-adn:before {
- content: "\f170";
- }
- .fa-bitbucket:before {
- content: "\f171";
- }
- .fa-bitbucket-square:before {
- content: "\f172";
- }
- .fa-tumblr:before {
- content: "\f173";
- }
- .fa-tumblr-square:before {
- content: "\f174";
- }
- .fa-long-arrow-down:before {
- content: "\f175";
- }
- .fa-long-arrow-up:before {
- content: "\f176";
- }
- .fa-long-arrow-left:before {
- content: "\f177";
- }
- .fa-long-arrow-right:before {
- content: "\f178";
- }
- .fa-apple:before {
- content: "\f179";
- }
- .fa-windows:before {
- content: "\f17a";
- }
- .fa-android:before {
- content: "\f17b";
- }
- .fa-linux:before {
- content: "\f17c";
- }
- .fa-dribbble:before {
- content: "\f17d";
- }
- .fa-skype:before {
- content: "\f17e";
- }
- .fa-foursquare:before {
- content: "\f180";
- }
- .fa-trello:before {
- content: "\f181";
- }
- .fa-female:before {
- content: "\f182";
- }
- .fa-male:before {
- content: "\f183";
- }
- .fa-gittip:before {
- content: "\f184";
- }
- .fa-sun-o:before {
- content: "\f185";
- }
- .fa-moon-o:before {
- content: "\f186";
- }
- .fa-archive:before {
- content: "\f187";
- }
- .fa-bug:before {
- content: "\f188";
- }
- .fa-vk:before {
- content: "\f189";
- }
- .fa-weibo:before {
- content: "\f18a";
- }
- .fa-renren:before {
- content: "\f18b";
- }
- .fa-pagelines:before {
- content: "\f18c";
- }
- .fa-stack-exchange:before {
- content: "\f18d";
- }
- .fa-arrow-circle-o-right:before {
- content: "\f18e";
- }
- .fa-arrow-circle-o-left:before {
- content: "\f190";
- }
- .fa-toggle-left:before,
- .fa-caret-square-o-left:before {
- content: "\f191";
- }
- .fa-dot-circle-o:before {
- content: "\f192";
- }
- .fa-wheelchair:before {
- content: "\f193";
- }
- .fa-vimeo-square:before {
- content: "\f194";
- }
- .fa-turkish-lira:before,
- .fa-try:before {
- content: "\f195";
- }
- .fa-plus-square-o:before {
- content: "\f196";
- }
- .fa-space-shuttle:before {
- content: "\f197";
- }
- .fa-slack:before {
- content: "\f198";
- }
- .fa-envelope-square:before {
- content: "\f199";
- }
- .fa-wordpress:before {
- content: "\f19a";
- }
- .fa-openid:before {
- content: "\f19b";
- }
- .fa-institution:before,
- .fa-bank:before,
- .fa-university:before {
- content: "\f19c";
- }
- .fa-mortar-board:before,
- .fa-graduation-cap:before {
- content: "\f19d";
- }
- .fa-yahoo:before {
- content: "\f19e";
- }
- .fa-google:before {
- content: "\f1a0";
- }
- .fa-reddit:before {
- content: "\f1a1";
- }
- .fa-reddit-square:before {
- content: "\f1a2";
- }
- .fa-stumbleupon-circle:before {
- content: "\f1a3";
- }
- .fa-stumbleupon:before {
- content: "\f1a4";
- }
- .fa-delicious:before {
- content: "\f1a5";
- }
- .fa-digg:before {
- content: "\f1a6";
- }
- .fa-pied-piper:before {
- content: "\f1a7";
- }
- .fa-pied-piper-alt:before {
- content: "\f1a8";
- }
- .fa-drupal:before {
- content: "\f1a9";
- }
- .fa-joomla:before {
- content: "\f1aa";
- }
- .fa-language:before {
- content: "\f1ab";
- }
- .fa-fax:before {
- content: "\f1ac";
- }
- .fa-building:before {
- content: "\f1ad";
- }
- .fa-child:before {
- content: "\f1ae";
- }
- .fa-paw:before {
- content: "\f1b0";
- }
- .fa-spoon:before {
- content: "\f1b1";
- }
- .fa-cube:before {
- content: "\f1b2";
- }
- .fa-cubes:before {
- content: "\f1b3";
- }
- .fa-behance:before {
- content: "\f1b4";
- }
- .fa-behance-square:before {
- content: "\f1b5";
- }
- .fa-steam:before {
- content: "\f1b6";
- }
- .fa-steam-square:before {
- content: "\f1b7";
- }
- .fa-recycle:before {
- content: "\f1b8";
- }
- .fa-automobile:before,
- .fa-car:before {
- content: "\f1b9";
- }
- .fa-cab:before,
- .fa-taxi:before {
- content: "\f1ba";
- }
- .fa-tree:before {
- content: "\f1bb";
- }
- .fa-spotify:before {
- content: "\f1bc";
- }
- .fa-deviantart:before {
- content: "\f1bd";
- }
- .fa-soundcloud:before {
- content: "\f1be";
- }
- .fa-database:before {
- content: "\f1c0";
- }
- .fa-file-pdf-o:before {
- content: "\f1c1";
- }
- .fa-file-word-o:before {
- content: "\f1c2";
- }
- .fa-file-excel-o:before {
- content: "\f1c3";
- }
- .fa-file-powerpoint-o:before {
- content: "\f1c4";
- }
- .fa-file-photo-o:before,
- .fa-file-picture-o:before,
- .fa-file-image-o:before {
- content: "\f1c5";
- }
- .fa-file-zip-o:before,
- .fa-file-archive-o:before {
- content: "\f1c6";
- }
- .fa-file-sound-o:before,
- .fa-file-audio-o:before {
- content: "\f1c7";
- }
- .fa-file-movie-o:before,
- .fa-file-video-o:before {
- content: "\f1c8";
- }
- .fa-file-code-o:before {
- content: "\f1c9";
- }
- .fa-vine:before {
- content: "\f1ca";
- }
- .fa-codepen:before {
- content: "\f1cb";
- }
- .fa-jsfiddle:before {
- content: "\f1cc";
- }
- .fa-life-bouy:before,
- .fa-life-buoy:before,
- .fa-life-saver:before,
- .fa-support:before,
- .fa-life-ring:before {
- content: "\f1cd";
- }
- .fa-circle-o-notch:before {
- content: "\f1ce";
- }
- .fa-ra:before,
- .fa-rebel:before {
- content: "\f1d0";
- }
- .fa-ge:before,
- .fa-empire:before {
- content: "\f1d1";
- }
- .fa-git-square:before {
- content: "\f1d2";
- }
- .fa-git:before {
- content: "\f1d3";
- }
- .fa-hacker-news:before {
- content: "\f1d4";
- }
- .fa-tencent-weibo:before {
- content: "\f1d5";
- }
- .fa-qq:before {
- content: "\f1d6";
- }
- .fa-wechat:before,
- .fa-weixin:before {
- content: "\f1d7";
- }
- .fa-send:before,
- .fa-paper-plane:before {
- content: "\f1d8";
- }
- .fa-send-o:before,
- .fa-paper-plane-o:before {
- content: "\f1d9";
- }
- .fa-history:before {
- content: "\f1da";
- }
- .fa-circle-thin:before {
- content: "\f1db";
- }
- .fa-header:before {
- content: "\f1dc";
- }
- .fa-paragraph:before {
- content: "\f1dd";
- }
- .fa-sliders:before {
- content: "\f1de";
- }
- .fa-share-alt:before {
- content: "\f1e0";
- }
- .fa-share-alt-square:before {
- content: "\f1e1";
- }
- .fa-bomb:before {
- content: "\f1e2";
- }
- .fa-soccer-ball-o:before,
- .fa-futbol-o:before {
- content: "\f1e3";
- }
- .fa-tty:before {
- content: "\f1e4";
- }
- .fa-binoculars:before {
- content: "\f1e5";
- }
- .fa-plug:before {
- content: "\f1e6";
- }
- .fa-slideshare:before {
- content: "\f1e7";
- }
- .fa-twitch:before {
- content: "\f1e8";
- }
- .fa-yelp:before {
- content: "\f1e9";
- }
- .fa-newspaper-o:before {
- content: "\f1ea";
- }
- .fa-wifi:before {
- content: "\f1eb";
- }
- .fa-calculator:before {
- content: "\f1ec";
- }
- .fa-paypal:before {
- content: "\f1ed";
- }
- .fa-google-wallet:before {
- content: "\f1ee";
- }
- .fa-cc-visa:before {
- content: "\f1f0";
- }
- .fa-cc-mastercard:before {
- content: "\f1f1";
- }
- .fa-cc-discover:before {
- content: "\f1f2";
- }
- .fa-cc-amex:before {
- content: "\f1f3";
- }
- .fa-cc-paypal:before {
- content: "\f1f4";
- }
- .fa-cc-stripe:before {
- content: "\f1f5";
- }
- .fa-bell-slash:before {
- content: "\f1f6";
- }
- .fa-bell-slash-o:before {
- content: "\f1f7";
- }
- .fa-trash:before {
- content: "\f1f8";
- }
- .fa-copyright:before {
- content: "\f1f9";
- }
- .fa-at:before {
- content: "\f1fa";
- }
- .fa-eyedropper:before {
- content: "\f1fb";
- }
- .fa-paint-brush:before {
- content: "\f1fc";
- }
- .fa-birthday-cake:before {
- content: "\f1fd";
- }
- .fa-area-chart:before {
- content: "\f1fe";
- }
- .fa-pie-chart:before {
- content: "\f200";
- }
- .fa-line-chart:before {
- content: "\f201";
- }
- .fa-lastfm:before {
- content: "\f202";
- }
- .fa-lastfm-square:before {
- content: "\f203";
- }
- .fa-toggle-off:before {
- content: "\f204";
- }
- .fa-toggle-on:before {
- content: "\f205";
- }
- .fa-bicycle:before {
- content: "\f206";
- }
- .fa-bus:before {
- content: "\f207";
- }
- .fa-ioxhost:before {
- content: "\f208";
- }
- .fa-angellist:before {
- content: "\f209";
- }
- .fa-cc:before {
- content: "\f20a";
- }
- .fa-shekel:before,
- .fa-sheqel:before,
- .fa-ils:before {
- content: "\f20b";
- }
- .fa-meanpath:before {
- content: "\f20c";
- }
- /*!
- *
- * IPython base
- *
- */
- .modal.fade .modal-dialog {
- -webkit-transform: translate(0, 0);
- -ms-transform: translate(0, 0);
- -o-transform: translate(0, 0);
- transform: translate(0, 0);
- }
- code {
- color: #000;
- }
- pre {
- font-size: inherit;
- line-height: inherit;
- }
- label {
- font-weight: normal;
- }
- /* Make the page background atleast 100% the height of the view port */
- /* Make the page itself atleast 70% the height of the view port */
- .border-box-sizing {
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- }
- .corner-all {
- border-radius: 2px;
- }
- .no-padding {
- padding: 0px;
- }
- /* Flexible box model classes */
- /* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */
- /* This file is a compatability layer. It allows the usage of flexible box
- model layouts accross multiple browsers, including older browsers. The newest,
- universal implementation of the flexible box model is used when available (see
- `Modern browsers` comments below). Browsers that are known to implement this
- new spec completely include:
- Firefox 28.0+
- Chrome 29.0+
- Internet Explorer 11+
- Opera 17.0+
- Browsers not listed, including Safari, are supported via the styling under the
- `Old browsers` comments below.
- */
- .hbox {
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: horizontal;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: horizontal;
- -moz-box-align: stretch;
- display: box;
- box-orient: horizontal;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: row;
- align-items: stretch;
- }
- .hbox > * {
- /* Old browsers */
- -webkit-box-flex: 0;
- -moz-box-flex: 0;
- box-flex: 0;
- /* Modern browsers */
- flex: none;
- }
- .vbox {
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: vertical;
- -moz-box-align: stretch;
- display: box;
- box-orient: vertical;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: column;
- align-items: stretch;
- }
- .vbox > * {
- /* Old browsers */
- -webkit-box-flex: 0;
- -moz-box-flex: 0;
- box-flex: 0;
- /* Modern browsers */
- flex: none;
- }
- .hbox.reverse,
- .vbox.reverse,
- .reverse {
- /* Old browsers */
- -webkit-box-direction: reverse;
- -moz-box-direction: reverse;
- box-direction: reverse;
- /* Modern browsers */
- flex-direction: row-reverse;
- }
- .hbox.box-flex0,
- .vbox.box-flex0,
- .box-flex0 {
- /* Old browsers */
- -webkit-box-flex: 0;
- -moz-box-flex: 0;
- box-flex: 0;
- /* Modern browsers */
- flex: none;
- width: auto;
- }
- .hbox.box-flex1,
- .vbox.box-flex1,
- .box-flex1 {
- /* Old browsers */
- -webkit-box-flex: 1;
- -moz-box-flex: 1;
- box-flex: 1;
- /* Modern browsers */
- flex: 1;
- }
- .hbox.box-flex,
- .vbox.box-flex,
- .box-flex {
- /* Old browsers */
- /* Old browsers */
- -webkit-box-flex: 1;
- -moz-box-flex: 1;
- box-flex: 1;
- /* Modern browsers */
- flex: 1;
- }
- .hbox.box-flex2,
- .vbox.box-flex2,
- .box-flex2 {
- /* Old browsers */
- -webkit-box-flex: 2;
- -moz-box-flex: 2;
- box-flex: 2;
- /* Modern browsers */
- flex: 2;
- }
- .box-group1 {
- /* Deprecated */
- -webkit-box-flex-group: 1;
- -moz-box-flex-group: 1;
- box-flex-group: 1;
- }
- .box-group2 {
- /* Deprecated */
- -webkit-box-flex-group: 2;
- -moz-box-flex-group: 2;
- box-flex-group: 2;
- }
- .hbox.start,
- .vbox.start,
- .start {
- /* Old browsers */
- -webkit-box-pack: start;
- -moz-box-pack: start;
- box-pack: start;
- /* Modern browsers */
- justify-content: flex-start;
- }
- .hbox.end,
- .vbox.end,
- .end {
- /* Old browsers */
- -webkit-box-pack: end;
- -moz-box-pack: end;
- box-pack: end;
- /* Modern browsers */
- justify-content: flex-end;
- }
- .hbox.center,
- .vbox.center,
- .center {
- /* Old browsers */
- -webkit-box-pack: center;
- -moz-box-pack: center;
- box-pack: center;
- /* Modern browsers */
- justify-content: center;
- }
- .hbox.baseline,
- .vbox.baseline,
- .baseline {
- /* Old browsers */
- -webkit-box-pack: baseline;
- -moz-box-pack: baseline;
- box-pack: baseline;
- /* Modern browsers */
- justify-content: baseline;
- }
- .hbox.stretch,
- .vbox.stretch,
- .stretch {
- /* Old browsers */
- -webkit-box-pack: stretch;
- -moz-box-pack: stretch;
- box-pack: stretch;
- /* Modern browsers */
- justify-content: stretch;
- }
- .hbox.align-start,
- .vbox.align-start,
- .align-start {
- /* Old browsers */
- -webkit-box-align: start;
- -moz-box-align: start;
- box-align: start;
- /* Modern browsers */
- align-items: flex-start;
- }
- .hbox.align-end,
- .vbox.align-end,
- .align-end {
- /* Old browsers */
- -webkit-box-align: end;
- -moz-box-align: end;
- box-align: end;
- /* Modern browsers */
- align-items: flex-end;
- }
- .hbox.align-center,
- .vbox.align-center,
- .align-center {
- /* Old browsers */
- -webkit-box-align: center;
- -moz-box-align: center;
- box-align: center;
- /* Modern browsers */
- align-items: center;
- }
- .hbox.align-baseline,
- .vbox.align-baseline,
- .align-baseline {
- /* Old browsers */
- -webkit-box-align: baseline;
- -moz-box-align: baseline;
- box-align: baseline;
- /* Modern browsers */
- align-items: baseline;
- }
- .hbox.align-stretch,
- .vbox.align-stretch,
- .align-stretch {
- /* Old browsers */
- -webkit-box-align: stretch;
- -moz-box-align: stretch;
- box-align: stretch;
- /* Modern browsers */
- align-items: stretch;
- }
- div.error {
- margin: 2em;
- text-align: center;
- }
- div.error > h1 {
- font-size: 500%;
- line-height: normal;
- }
- div.error > p {
- font-size: 200%;
- line-height: normal;
- }
- div.traceback-wrapper {
- text-align: left;
- max-width: 800px;
- margin: auto;
- }
- /**
- * Primary styles
- *
- * Author: Jupyter Development Team
- */
- body {
- background-color: #fff;
- /* This makes sure that the body covers the entire window and needs to
- be in a different element than the display: box in wrapper below */
- position: absolute;
- left: 0px;
- right: 0px;
- top: 0px;
- bottom: 0px;
- overflow: visible;
- }
- body > #header {
- /* Initially hidden to prevent FLOUC */
- display: none;
- background-color: #fff;
- /* Display over codemirror */
- position: relative;
- z-index: 100;
- }
- body > #header #header-container {
- padding-bottom: 5px;
- padding-top: 5px;
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- }
- body > #header .header-bar {
- width: 100%;
- height: 1px;
- background: #e7e7e7;
- margin-bottom: -1px;
- }
- @media print {
- body > #header {
- display: none !important;
- }
- }
- #header-spacer {
- width: 100%;
- visibility: hidden;
- }
- @media print {
- #header-spacer {
- display: none;
- }
- }
- #ipython_notebook {
- padding-left: 0px;
- padding-top: 1px;
- padding-bottom: 1px;
- }
- @media (max-width: 991px) {
- #ipython_notebook {
- margin-left: 10px;
- }
- }
- #noscript {
- width: auto;
- padding-top: 16px;
- padding-bottom: 16px;
- text-align: center;
- font-size: 22px;
- color: red;
- font-weight: bold;
- }
- #ipython_notebook img {
- height: 28px;
- }
- #site {
- width: 100%;
- display: none;
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- overflow: auto;
- }
- @media print {
- #site {
- height: auto !important;
- }
- }
- /* Smaller buttons */
- .ui-button .ui-button-text {
- padding: 0.2em 0.8em;
- font-size: 77%;
- }
- input.ui-button {
- padding: 0.3em 0.9em;
- }
- span#login_widget {
- float: right;
- }
- span#login_widget > .button,
- #logout {
- color: #333;
- background-color: #fff;
- border-color: #ccc;
- }
- span#login_widget > .button:focus,
- #logout:focus,
- span#login_widget > .button.focus,
- #logout.focus {
- color: #333;
- background-color: #e6e6e6;
- border-color: #8c8c8c;
- }
- span#login_widget > .button:hover,
- #logout:hover {
- color: #333;
- background-color: #e6e6e6;
- border-color: #adadad;
- }
- span#login_widget > .button:active,
- #logout:active,
- span#login_widget > .button.active,
- #logout.active,
- .open > .dropdown-togglespan#login_widget > .button,
- .open > .dropdown-toggle#logout {
- color: #333;
- background-color: #e6e6e6;
- border-color: #adadad;
- }
- span#login_widget > .button:active:hover,
- #logout:active:hover,
- span#login_widget > .button.active:hover,
- #logout.active:hover,
- .open > .dropdown-togglespan#login_widget > .button:hover,
- .open > .dropdown-toggle#logout:hover,
- span#login_widget > .button:active:focus,
- #logout:active:focus,
- span#login_widget > .button.active:focus,
- #logout.active:focus,
- .open > .dropdown-togglespan#login_widget > .button:focus,
- .open > .dropdown-toggle#logout:focus,
- span#login_widget > .button:active.focus,
- #logout:active.focus,
- span#login_widget > .button.active.focus,
- #logout.active.focus,
- .open > .dropdown-togglespan#login_widget > .button.focus,
- .open > .dropdown-toggle#logout.focus {
- color: #333;
- background-color: #d4d4d4;
- border-color: #8c8c8c;
- }
- span#login_widget > .button:active,
- #logout:active,
- span#login_widget > .button.active,
- #logout.active,
- .open > .dropdown-togglespan#login_widget > .button,
- .open > .dropdown-toggle#logout {
- background-image: none;
- }
- span#login_widget > .button.disabled:hover,
- #logout.disabled:hover,
- span#login_widget > .button[disabled]:hover,
- #logout[disabled]:hover,
- fieldset[disabled] span#login_widget > .button:hover,
- fieldset[disabled] #logout:hover,
- span#login_widget > .button.disabled:focus,
- #logout.disabled:focus,
- span#login_widget > .button[disabled]:focus,
- #logout[disabled]:focus,
- fieldset[disabled] span#login_widget > .button:focus,
- fieldset[disabled] #logout:focus,
- span#login_widget > .button.disabled.focus,
- #logout.disabled.focus,
- span#login_widget > .button[disabled].focus,
- #logout[disabled].focus,
- fieldset[disabled] span#login_widget > .button.focus,
- fieldset[disabled] #logout.focus {
- background-color: #fff;
- border-color: #ccc;
- }
- span#login_widget > .button .badge,
- #logout .badge {
- color: #fff;
- background-color: #333;
- }
- .nav-header {
- text-transform: none;
- }
- #header > span {
- margin-top: 10px;
- }
- .modal_stretch .modal-dialog {
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: vertical;
- -moz-box-align: stretch;
- display: box;
- box-orient: vertical;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: column;
- align-items: stretch;
- min-height: 80vh;
- }
- .modal_stretch .modal-dialog .modal-body {
- max-height: calc(100vh - 200px);
- overflow: auto;
- flex: 1;
- }
- @media (min-width: 768px) {
- .modal .modal-dialog {
- width: 700px;
- }
- }
- @media (min-width: 768px) {
- select.form-control {
- margin-left: 12px;
- margin-right: 12px;
- }
- }
- /*!
- *
- * IPython auth
- *
- */
- .center-nav {
- display: inline-block;
- margin-bottom: -4px;
- }
- /*!
- *
- * IPython tree view
- *
- */
- /* We need an invisible input field on top of the sentense*/
- /* "Drag file onto the list ..." */
- .alternate_upload {
- background-color: none;
- display: inline;
- }
- .alternate_upload.form {
- padding: 0;
- margin: 0;
- }
- .alternate_upload input.fileinput {
- text-align: center;
- vertical-align: middle;
- display: inline;
- opacity: 0;
- z-index: 2;
- width: 12ex;
- margin-right: -12ex;
- }
- .alternate_upload .btn-upload {
- height: 22px;
- }
- /**
- * Primary styles
- *
- * Author: Jupyter Development Team
- */
- ul#tabs {
- margin-bottom: 4px;
- }
- ul#tabs a {
- padding-top: 6px;
- padding-bottom: 4px;
- }
- ul.breadcrumb a:focus,
- ul.breadcrumb a:hover {
- text-decoration: none;
- }
- ul.breadcrumb i.icon-home {
- font-size: 16px;
- margin-right: 4px;
- }
- ul.breadcrumb span {
- color: #5e5e5e;
- }
- .list_toolbar {
- padding: 4px 0 4px 0;
- vertical-align: middle;
- }
- .list_toolbar .tree-buttons {
- padding-top: 1px;
- }
- .dynamic-buttons {
- padding-top: 3px;
- display: inline-block;
- }
- .list_toolbar [class*="span"] {
- min-height: 24px;
- }
- .list_header {
- font-weight: bold;
- background-color: #EEE;
- }
- .list_placeholder {
- font-weight: bold;
- padding-top: 4px;
- padding-bottom: 4px;
- padding-left: 7px;
- padding-right: 7px;
- }
- .list_container {
- margin-top: 4px;
- margin-bottom: 20px;
- border: 1px solid #ddd;
- border-radius: 2px;
- }
- .list_container > div {
- border-bottom: 1px solid #ddd;
- }
- .list_container > div:hover .list-item {
- background-color: red;
- }
- .list_container > div:last-child {
- border: none;
- }
- .list_item:hover .list_item {
- background-color: #ddd;
- }
- .list_item a {
- text-decoration: none;
- }
- .list_item:hover {
- background-color: #fafafa;
- }
- .list_header > div,
- .list_item > div {
- padding-top: 4px;
- padding-bottom: 4px;
- padding-left: 7px;
- padding-right: 7px;
- line-height: 22px;
- }
- .list_header > div input,
- .list_item > div input {
- margin-right: 7px;
- margin-left: 14px;
- vertical-align: baseline;
- line-height: 22px;
- position: relative;
- top: -1px;
- }
- .list_header > div .item_link,
- .list_item > div .item_link {
- margin-left: -1px;
- vertical-align: baseline;
- line-height: 22px;
- }
- .new-file input[type=checkbox] {
- visibility: hidden;
- }
- .item_name {
- line-height: 22px;
- height: 24px;
- }
- .item_icon {
- font-size: 14px;
- color: #5e5e5e;
- margin-right: 7px;
- margin-left: 7px;
- line-height: 22px;
- vertical-align: baseline;
- }
- .item_buttons {
- line-height: 1em;
- margin-left: -5px;
- }
- .item_buttons .btn,
- .item_buttons .btn-group,
- .item_buttons .input-group {
- float: left;
- }
- .item_buttons > .btn,
- .item_buttons > .btn-group,
- .item_buttons > .input-group {
- margin-left: 5px;
- }
- .item_buttons .btn {
- min-width: 13ex;
- }
- .item_buttons .running-indicator {
- padding-top: 4px;
- color: #5cb85c;
- }
- .item_buttons .kernel-name {
- padding-top: 4px;
- color: #5bc0de;
- margin-right: 7px;
- float: left;
- }
- .toolbar_info {
- height: 24px;
- line-height: 24px;
- }
- .list_item input:not([type=checkbox]) {
- padding-top: 3px;
- padding-bottom: 3px;
- height: 22px;
- line-height: 14px;
- margin: 0px;
- }
- .highlight_text {
- color: blue;
- }
- #project_name {
- display: inline-block;
- padding-left: 7px;
- margin-left: -2px;
- }
- #project_name > .breadcrumb {
- padding: 0px;
- margin-bottom: 0px;
- background-color: transparent;
- font-weight: bold;
- }
- #tree-selector {
- padding-right: 0px;
- }
- #button-select-all {
- min-width: 50px;
- }
- #select-all {
- margin-left: 7px;
- margin-right: 2px;
- }
- .menu_icon {
- margin-right: 2px;
- }
- .tab-content .row {
- margin-left: 0px;
- margin-right: 0px;
- }
- .folder_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f114";
- }
- .folder_icon:before.pull-left {
- margin-right: .3em;
- }
- .folder_icon:before.pull-right {
- margin-left: .3em;
- }
- .notebook_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f02d";
- position: relative;
- top: -1px;
- }
- .notebook_icon:before.pull-left {
- margin-right: .3em;
- }
- .notebook_icon:before.pull-right {
- margin-left: .3em;
- }
- .running_notebook_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f02d";
- position: relative;
- top: -1px;
- color: #5cb85c;
- }
- .running_notebook_icon:before.pull-left {
- margin-right: .3em;
- }
- .running_notebook_icon:before.pull-right {
- margin-left: .3em;
- }
- .file_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f016";
- position: relative;
- top: -2px;
- }
- .file_icon:before.pull-left {
- margin-right: .3em;
- }
- .file_icon:before.pull-right {
- margin-left: .3em;
- }
- #notebook_toolbar .pull-right {
- padding-top: 0px;
- margin-right: -1px;
- }
- ul#new-menu {
- left: auto;
- right: 0;
- }
- .kernel-menu-icon {
- padding-right: 12px;
- width: 24px;
- content: "\f096";
- }
- .kernel-menu-icon:before {
- content: "\f096";
- }
- .kernel-menu-icon-current:before {
- content: "\f00c";
- }
- #tab_content {
- padding-top: 20px;
- }
- #running .panel-group .panel {
- margin-top: 3px;
- margin-bottom: 1em;
- }
- #running .panel-group .panel .panel-heading {
- background-color: #EEE;
- padding-top: 4px;
- padding-bottom: 4px;
- padding-left: 7px;
- padding-right: 7px;
- line-height: 22px;
- }
- #running .panel-group .panel .panel-heading a:focus,
- #running .panel-group .panel .panel-heading a:hover {
- text-decoration: none;
- }
- #running .panel-group .panel .panel-body {
- padding: 0px;
- }
- #running .panel-group .panel .panel-body .list_container {
- margin-top: 0px;
- margin-bottom: 0px;
- border: 0px;
- border-radius: 0px;
- }
- #running .panel-group .panel .panel-body .list_container .list_item {
- border-bottom: 1px solid #ddd;
- }
- #running .panel-group .panel .panel-body .list_container .list_item:last-child {
- border-bottom: 0px;
- }
- .delete-button {
- display: none;
- }
- .duplicate-button {
- display: none;
- }
- .rename-button {
- display: none;
- }
- .shutdown-button {
- display: none;
- }
- .dynamic-instructions {
- display: inline-block;
- padding-top: 4px;
- }
- /*!
- *
- * IPython text editor webapp
- *
- */
- .selected-keymap i.fa {
- padding: 0px 5px;
- }
- .selected-keymap i.fa:before {
- content: "\f00c";
- }
- #mode-menu {
- overflow: auto;
- max-height: 20em;
- }
- .edit_app #header {
- -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- }
- .edit_app #menubar .navbar {
- /* Use a negative 1 bottom margin, so the border overlaps the border of the
- header */
- margin-bottom: -1px;
- }
- .dirty-indicator {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- width: 20px;
- }
- .dirty-indicator.pull-left {
- margin-right: .3em;
- }
- .dirty-indicator.pull-right {
- margin-left: .3em;
- }
- .dirty-indicator-dirty {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- width: 20px;
- }
- .dirty-indicator-dirty.pull-left {
- margin-right: .3em;
- }
- .dirty-indicator-dirty.pull-right {
- margin-left: .3em;
- }
- .dirty-indicator-clean {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- width: 20px;
- }
- .dirty-indicator-clean.pull-left {
- margin-right: .3em;
- }
- .dirty-indicator-clean.pull-right {
- margin-left: .3em;
- }
- .dirty-indicator-clean:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f00c";
- }
- .dirty-indicator-clean:before.pull-left {
- margin-right: .3em;
- }
- .dirty-indicator-clean:before.pull-right {
- margin-left: .3em;
- }
- #filename {
- font-size: 16pt;
- display: table;
- padding: 0px 5px;
- }
- #current-mode {
- padding-left: 5px;
- padding-right: 5px;
- }
- #texteditor-backdrop {
- padding-top: 20px;
- padding-bottom: 20px;
- }
- @media not print {
- #texteditor-backdrop {
- background-color: #EEE;
- }
- }
- @media print {
- #texteditor-backdrop #texteditor-container .CodeMirror-gutter,
- #texteditor-backdrop #texteditor-container .CodeMirror-gutters {
- background-color: #fff;
- }
- }
- @media not print {
- #texteditor-backdrop #texteditor-container .CodeMirror-gutter,
- #texteditor-backdrop #texteditor-container .CodeMirror-gutters {
- background-color: #fff;
- }
- }
- @media not print {
- #texteditor-backdrop #texteditor-container {
- padding: 0px;
- background-color: #fff;
- -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- }
- }
- /*!
- *
- * IPython notebook
- *
- */
- /* CSS font colors for translated ANSI colors. */
- .ansibold {
- font-weight: bold;
- }
- /* use dark versions for foreground, to improve visibility */
- .ansiblack {
- color: black;
- }
- .ansired {
- color: darkred;
- }
- .ansigreen {
- color: darkgreen;
- }
- .ansiyellow {
- color: #c4a000;
- }
- .ansiblue {
- color: darkblue;
- }
- .ansipurple {
- color: darkviolet;
- }
- .ansicyan {
- color: steelblue;
- }
- .ansigray {
- color: gray;
- }
- /* and light for background, for the same reason */
- .ansibgblack {
- background-color: black;
- }
- .ansibgred {
- background-color: red;
- }
- .ansibggreen {
- background-color: green;
- }
- .ansibgyellow {
- background-color: yellow;
- }
- .ansibgblue {
- background-color: blue;
- }
- .ansibgpurple {
- background-color: magenta;
- }
- .ansibgcyan {
- background-color: cyan;
- }
- .ansibggray {
- background-color: gray;
- }
- div.cell {
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: vertical;
- -moz-box-align: stretch;
- display: box;
- box-orient: vertical;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: column;
- align-items: stretch;
- border-radius: 2px;
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- border-width: 1px;
- border-style: solid;
- border-color: transparent;
- width: 100%;
- padding: 5px;
- /* This acts as a spacer between cells, that is outside the border */
- margin: 0px;
- outline: none;
- border-left-width: 1px;
- padding-left: 5px;
- background: linear-gradient(to right, transparent -40px, transparent 1px, transparent 1px, transparent 100%);
- }
- div.cell.jupyter-soft-selected {
- border-left-color: #90CAF9;
- border-left-color: #E3F2FD;
- border-left-width: 1px;
- padding-left: 5px;
- border-right-color: #E3F2FD;
- border-right-width: 1px;
- background: #E3F2FD;
- }
- @media print {
- div.cell.jupyter-soft-selected {
- border-color: transparent;
- }
- }
- div.cell.selected {
- border-color: #ababab;
- border-left-width: 0px;
- padding-left: 6px;
- background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 5px, transparent 5px, transparent 100%);
- }
- @media print {
- div.cell.selected {
- border-color: transparent;
- }
- }
- div.cell.selected.jupyter-soft-selected {
- border-left-width: 0;
- padding-left: 6px;
- background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 7px, #E3F2FD 7px, #E3F2FD 100%);
- }
- .edit_mode div.cell.selected {
- border-color: #66BB6A;
- border-left-width: 0px;
- padding-left: 6px;
- background: linear-gradient(to right, #66BB6A -40px, #66BB6A 5px, transparent 5px, transparent 100%);
- }
- @media print {
- .edit_mode div.cell.selected {
- border-color: transparent;
- }
- }
- .prompt {
- /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
- min-width: 14ex;
- /* This padding is tuned to match the padding on the CodeMirror editor. */
- padding: 0.4em;
- margin: 0px;
- font-family: monospace;
- text-align: right;
- /* This has to match that of the the CodeMirror class line-height below */
- line-height: 1.21429em;
- /* Don't highlight prompt number selection */
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- /* Use default cursor */
- cursor: default;
- }
- @media (max-width: 540px) {
- .prompt {
- text-align: left;
- }
- }
- div.inner_cell {
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: vertical;
- -moz-box-align: stretch;
- display: box;
- box-orient: vertical;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: column;
- align-items: stretch;
- /* Old browsers */
- -webkit-box-flex: 1;
- -moz-box-flex: 1;
- box-flex: 1;
- /* Modern browsers */
- flex: 1;
- }
- @-moz-document url-prefix() {
- div.inner_cell {
- overflow-x: hidden;
- }
- }
- /* input_area and input_prompt must match in top border and margin for alignment */
- div.input_area {
- border: 1px solid #cfcfcf;
- border-radius: 2px;
- background: #f7f7f7;
- line-height: 1.21429em;
- }
- /* This is needed so that empty prompt areas can collapse to zero height when there
- is no content in the output_subarea and the prompt. The main purpose of this is
- to make sure that empty JavaScript output_subareas have no height. */
- div.prompt:empty {
- padding-top: 0;
- padding-bottom: 0;
- }
- div.unrecognized_cell {
- padding: 5px 5px 5px 0px;
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: horizontal;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: horizontal;
- -moz-box-align: stretch;
- display: box;
- box-orient: horizontal;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: row;
- align-items: stretch;
- }
- div.unrecognized_cell .inner_cell {
- border-radius: 2px;
- padding: 5px;
- font-weight: bold;
- color: red;
- border: 1px solid #cfcfcf;
- background: #eaeaea;
- }
- div.unrecognized_cell .inner_cell a {
- color: inherit;
- text-decoration: none;
- }
- div.unrecognized_cell .inner_cell a:hover {
- color: inherit;
- text-decoration: none;
- }
- @media (max-width: 540px) {
- div.unrecognized_cell > div.prompt {
- display: none;
- }
- }
- div.code_cell {
- /* avoid page breaking on code cells when printing */
- }
- @media print {
- div.code_cell {
- page-break-inside: avoid;
- }
- }
- /* any special styling for code cells that are currently running goes here */
- div.input {
- page-break-inside: avoid;
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: horizontal;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: horizontal;
- -moz-box-align: stretch;
- display: box;
- box-orient: horizontal;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: row;
- align-items: stretch;
- }
- @media (max-width: 540px) {
- div.input {
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: vertical;
- -moz-box-align: stretch;
- display: box;
- box-orient: vertical;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: column;
- align-items: stretch;
- }
- }
- /* input_area and input_prompt must match in top border and margin for alignment */
- div.input_prompt {
- color: #303F9F;
- border-top: 1px solid transparent;
- }
- div.input_area > div.highlight {
- margin: 0.4em;
- border: none;
- padding: 0px;
- background-color: transparent;
- }
- div.input_area > div.highlight > pre {
- margin: 0px;
- border: none;
- padding: 0px;
- background-color: transparent;
- }
- /* The following gets added to the <head> if it is detected that the user has a
- * monospace font with inconsistent normal/bold/italic height. See
- * notebookmain.js. Such fonts will have keywords vertically offset with
- * respect to the rest of the text. The user should select a better font.
- * See: https://github.com/ipython/ipython/issues/1503
- *
- * .CodeMirror span {
- * vertical-align: bottom;
- * }
- */
- .CodeMirror {
- line-height: 1.21429em;
- /* Changed from 1em to our global default */
- font-size: 14px;
- height: auto;
- /* Changed to auto to autogrow */
- background: none;
- /* Changed from white to allow our bg to show through */
- }
- .CodeMirror-scroll {
- /* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
- /* We have found that if it is visible, vertical scrollbars appear with font size changes.*/
- overflow-y: hidden;
- overflow-x: auto;
- }
- .CodeMirror-lines {
- /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
- /* we have set a different line-height and want this to scale with that. */
- padding: 0.4em;
- }
- .CodeMirror-linenumber {
- padding: 0 8px 0 4px;
- }
- .CodeMirror-gutters {
- border-bottom-left-radius: 2px;
- border-top-left-radius: 2px;
- }
- .CodeMirror pre {
- /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
- /* .CodeMirror-lines */
- padding: 0;
- border: 0;
- border-radius: 0;
- }
- /*
- Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
- Adapted from GitHub theme
- */
- .highlight-base {
- color: #000;
- }
- .highlight-variable {
- color: #000;
- }
- .highlight-variable-2 {
- color: #1a1a1a;
- }
- .highlight-variable-3 {
- color: #333333;
- }
- .highlight-string {
- color: #BA2121;
- }
- .highlight-comment {
- color: #408080;
- font-style: italic;
- }
- .highlight-number {
- color: #080;
- }
- .highlight-atom {
- color: #88F;
- }
- .highlight-keyword {
- color: #008000;
- font-weight: bold;
- }
- .highlight-builtin {
- color: #008000;
- }
- .highlight-error {
- color: #f00;
- }
- .highlight-operator {
- color: #AA22FF;
- font-weight: bold;
- }
- .highlight-meta {
- color: #AA22FF;
- }
- /* previously not defined, copying from default codemirror */
- .highlight-def {
- color: #00f;
- }
- .highlight-string-2 {
- color: #f50;
- }
- .highlight-qualifier {
- color: #555;
- }
- .highlight-bracket {
- color: #997;
- }
- .highlight-tag {
- color: #170;
- }
- .highlight-attribute {
- color: #00c;
- }
- .highlight-header {
- color: blue;
- }
- .highlight-quote {
- color: #090;
- }
- .highlight-link {
- color: #00c;
- }
- /* apply the same style to codemirror */
- .cm-s-ipython span.cm-keyword {
- color: #008000;
- font-weight: bold;
- }
- .cm-s-ipython span.cm-atom {
- color: #88F;
- }
- .cm-s-ipython span.cm-number {
- color: #080;
- }
- .cm-s-ipython span.cm-def {
- color: #00f;
- }
- .cm-s-ipython span.cm-variable {
- color: #000;
- }
- .cm-s-ipython span.cm-operator {
- color: #AA22FF;
- font-weight: bold;
- }
- .cm-s-ipython span.cm-variable-2 {
- color: #1a1a1a;
- }
- .cm-s-ipython span.cm-variable-3 {
- color: #333333;
- }
- .cm-s-ipython span.cm-comment {
- color: #408080;
- font-style: italic;
- }
- .cm-s-ipython span.cm-string {
- color: #BA2121;
- }
- .cm-s-ipython span.cm-string-2 {
- color: #f50;
- }
- .cm-s-ipython span.cm-meta {
- color: #AA22FF;
- }
- .cm-s-ipython span.cm-qualifier {
- color: #555;
- }
- .cm-s-ipython span.cm-builtin {
- color: #008000;
- }
- .cm-s-ipython span.cm-bracket {
- color: #997;
- }
- .cm-s-ipython span.cm-tag {
- color: #170;
- }
- .cm-s-ipython span.cm-attribute {
- color: #00c;
- }
- .cm-s-ipython span.cm-header {
- color: blue;
- }
- .cm-s-ipython span.cm-quote {
- color: #090;
- }
- .cm-s-ipython span.cm-link {
- color: #00c;
- }
- .cm-s-ipython span.cm-error {
- color: #f00;
- }
- .cm-s-ipython span.cm-tab {
- background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
- background-position: right;
- background-repeat: no-repeat;
- }
- div.output_wrapper {
- /* this position must be relative to enable descendents to be absolute within it */
- position: relative;
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: vertical;
- -moz-box-align: stretch;
- display: box;
- box-orient: vertical;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: column;
- align-items: stretch;
- z-index: 1;
- }
- /* class for the output area when it should be height-limited */
- div.output_scroll {
- /* ideally, this would be max-height, but FF barfs all over that */
- height: 24em;
- /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
- width: 100%;
- overflow: auto;
- border-radius: 2px;
- -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
- box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
- display: block;
- }
- /* output div while it is collapsed */
- div.output_collapsed {
- margin: 0px;
- padding: 0px;
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: vertical;
- -moz-box-align: stretch;
- display: box;
- box-orient: vertical;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: column;
- align-items: stretch;
- }
- div.out_prompt_overlay {
- height: 100%;
- padding: 0px 0.4em;
- position: absolute;
- border-radius: 2px;
- }
- div.out_prompt_overlay:hover {
- /* use inner shadow to get border that is computed the same on WebKit/FF */
- -webkit-box-shadow: inset 0 0 1px #000;
- box-shadow: inset 0 0 1px #000;
- background: rgba(240, 240, 240, 0.5);
- }
- div.output_prompt {
- color: #D84315;
- }
- /* This class is the outer container of all output sections. */
- div.output_area {
- padding: 0px;
- page-break-inside: avoid;
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: horizontal;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: horizontal;
- -moz-box-align: stretch;
- display: box;
- box-orient: horizontal;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: row;
- align-items: stretch;
- }
- div.output_area .MathJax_Display {
- text-align: left !important;
- }
- div.output_area .rendered_html table {
- margin-left: 0;
- margin-right: 0;
- }
- div.output_area .rendered_html img {
- margin-left: 0;
- margin-right: 0;
- }
- div.output_area img,
- div.output_area svg {
- max-width: 100%;
- height: auto;
- }
- div.output_area img.unconfined,
- div.output_area svg.unconfined {
- max-width: none;
- }
- /* This is needed to protect the pre formating from global settings such
- as that of bootstrap */
- .output {
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: vertical;
- -moz-box-align: stretch;
- display: box;
- box-orient: vertical;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: column;
- align-items: stretch;
- }
- @media (max-width: 540px) {
- div.output_area {
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: vertical;
- -moz-box-align: stretch;
- display: box;
- box-orient: vertical;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: column;
- align-items: stretch;
- }
- }
- div.output_area pre {
- margin: 0;
- padding: 0;
- border: 0;
- vertical-align: baseline;
- color: black;
- background-color: transparent;
- border-radius: 0;
- }
- /* This class is for the output subarea inside the output_area and after
- the prompt div. */
- div.output_subarea {
- overflow-x: auto;
- padding: 0.4em;
- /* Old browsers */
- -webkit-box-flex: 1;
- -moz-box-flex: 1;
- box-flex: 1;
- /* Modern browsers */
- flex: 1;
- max-width: calc(100% - 14ex);
- }
- div.output_scroll div.output_subarea {
- overflow-x: visible;
- }
- /* The rest of the output_* classes are for special styling of the different
- output types */
- /* all text output has this class: */
- div.output_text {
- text-align: left;
- color: #000;
- /* This has to match that of the the CodeMirror class line-height below */
- line-height: 1.21429em;
- }
- /* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
- div.output_stderr {
- background: #fdd;
- /* very light red background for stderr */
- }
- div.output_latex {
- text-align: left;
- }
- /* Empty output_javascript divs should have no height */
- div.output_javascript:empty {
- padding: 0;
- }
- .js-error {
- color: darkred;
- }
- /* raw_input styles */
- div.raw_input_container {
- line-height: 1.21429em;
- padding-top: 5px;
- }
- pre.raw_input_prompt {
- /* nothing needed here. */
- }
- input.raw_input {
- font-family: monospace;
- font-size: inherit;
- color: inherit;
- width: auto;
- /* make sure input baseline aligns with prompt */
- vertical-align: baseline;
- /* padding + margin = 0.5em between prompt and cursor */
- padding: 0em 0.25em;
- margin: 0em 0.25em;
- }
- input.raw_input:focus {
- box-shadow: none;
- }
- p.p-space {
- margin-bottom: 10px;
- }
- div.output_unrecognized {
- padding: 5px;
- font-weight: bold;
- color: red;
- }
- div.output_unrecognized a {
- color: inherit;
- text-decoration: none;
- }
- div.output_unrecognized a:hover {
- color: inherit;
- text-decoration: none;
- }
- .rendered_html {
- color: #000;
- /* any extras will just be numbers: */
- }
- .rendered_html em {
- font-style: italic;
- }
- .rendered_html strong {
- font-weight: bold;
- }
- .rendered_html u {
- text-decoration: underline;
- }
- .rendered_html :link {
- text-decoration: underline;
- }
- .rendered_html :visited {
- text-decoration: underline;
- }
- .rendered_html h1 {
- font-size: 185.7%;
- margin: 1.08em 0 0 0;
- font-weight: bold;
- line-height: 1.0;
- }
- .rendered_html h2 {
- font-size: 157.1%;
- margin: 1.27em 0 0 0;
- font-weight: bold;
- line-height: 1.0;
- }
- .rendered_html h3 {
- font-size: 128.6%;
- margin: 1.55em 0 0 0;
- font-weight: bold;
- line-height: 1.0;
- }
- .rendered_html h4 {
- font-size: 100%;
- margin: 2em 0 0 0;
- font-weight: bold;
- line-height: 1.0;
- }
- .rendered_html h5 {
- font-size: 100%;
- margin: 2em 0 0 0;
- font-weight: bold;
- line-height: 1.0;
- font-style: italic;
- }
- .rendered_html h6 {
- font-size: 100%;
- margin: 2em 0 0 0;
- font-weight: bold;
- line-height: 1.0;
- font-style: italic;
- }
- .rendered_html h1:first-child {
- margin-top: 0.538em;
- }
- .rendered_html h2:first-child {
- margin-top: 0.636em;
- }
- .rendered_html h3:first-child {
- margin-top: 0.777em;
- }
- .rendered_html h4:first-child {
- margin-top: 1em;
- }
- .rendered_html h5:first-child {
- margin-top: 1em;
- }
- .rendered_html h6:first-child {
- margin-top: 1em;
- }
- .rendered_html ul {
- list-style: disc;
- margin: 0em 2em;
- padding-left: 0px;
- }
- .rendered_html ul ul {
- list-style: square;
- margin: 0em 2em;
- }
- .rendered_html ul ul ul {
- list-style: circle;
- margin: 0em 2em;
- }
- .rendered_html ol {
- list-style: decimal;
- margin: 0em 2em;
- padding-left: 0px;
- }
- .rendered_html ol ol {
- list-style: upper-alpha;
- margin: 0em 2em;
- }
- .rendered_html ol ol ol {
- list-style: lower-alpha;
- margin: 0em 2em;
- }
- .rendered_html ol ol ol ol {
- list-style: lower-roman;
- margin: 0em 2em;
- }
- .rendered_html ol ol ol ol ol {
- list-style: decimal;
- margin: 0em 2em;
- }
- .rendered_html * + ul {
- margin-top: 1em;
- }
- .rendered_html * + ol {
- margin-top: 1em;
- }
- .rendered_html hr {
- color: black;
- background-color: black;
- }
- .rendered_html pre {
- margin: 1em 2em;
- }
- .rendered_html pre,
- .rendered_html code {
- border: 0;
- background-color: #fff;
- color: #000;
- font-size: 100%;
- padding: 0px;
- }
- .rendered_html blockquote {
- margin: 1em 2em;
- }
- .rendered_html table {
- margin-left: auto;
- margin-right: auto;
- border: 1px solid black;
- border-collapse: collapse;
- }
- .rendered_html tr,
- .rendered_html th,
- .rendered_html td {
- border: 1px solid black;
- border-collapse: collapse;
- margin: 1em 2em;
- }
- .rendered_html td,
- .rendered_html th {
- text-align: left;
- vertical-align: middle;
- padding: 4px;
- }
- .rendered_html th {
- font-weight: bold;
- }
- .rendered_html * + table {
- margin-top: 1em;
- }
- .rendered_html p {
- text-align: left;
- }
- .rendered_html * + p {
- margin-top: 1em;
- }
- .rendered_html img {
- display: block;
- margin-left: auto;
- margin-right: auto;
- }
- .rendered_html * + img {
- margin-top: 1em;
- }
- .rendered_html img,
- .rendered_html svg {
- max-width: 100%;
- height: auto;
- }
- .rendered_html img.unconfined,
- .rendered_html svg.unconfined {
- max-width: none;
- }
- div.text_cell {
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: horizontal;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: horizontal;
- -moz-box-align: stretch;
- display: box;
- box-orient: horizontal;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: row;
- align-items: stretch;
- }
- @media (max-width: 540px) {
- div.text_cell > div.prompt {
- display: none;
- }
- }
- div.text_cell_render {
- /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
- outline: none;
- resize: none;
- width: inherit;
- border-style: none;
- padding: 0.5em 0.5em 0.5em 0.4em;
- color: #000;
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- }
- a.anchor-link:link {
- text-decoration: none;
- padding: 0px 20px;
- visibility: hidden;
- }
- h1:hover .anchor-link,
- h2:hover .anchor-link,
- h3:hover .anchor-link,
- h4:hover .anchor-link,
- h5:hover .anchor-link,
- h6:hover .anchor-link {
- visibility: visible;
- }
- .text_cell.rendered .input_area {
- display: none;
- }
- .text_cell.rendered .rendered_html {
- overflow-x: auto;
- overflow-y: hidden;
- }
- .text_cell.unrendered .text_cell_render {
- display: none;
- }
- .cm-header-1,
- .cm-header-2,
- .cm-header-3,
- .cm-header-4,
- .cm-header-5,
- .cm-header-6 {
- font-weight: bold;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- }
- .cm-header-1 {
- font-size: 185.7%;
- }
- .cm-header-2 {
- font-size: 157.1%;
- }
- .cm-header-3 {
- font-size: 128.6%;
- }
- .cm-header-4 {
- font-size: 110%;
- }
- .cm-header-5 {
- font-size: 100%;
- font-style: italic;
- }
- .cm-header-6 {
- font-size: 100%;
- font-style: italic;
- }
- /*!
- *
- * IPython notebook webapp
- *
- */
- @media (max-width: 767px) {
- .notebook_app {
- padding-left: 0px;
- padding-right: 0px;
- }
- }
- #ipython-main-app {
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- height: 100%;
- }
- div#notebook_panel {
- margin: 0px;
- padding: 0px;
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- height: 100%;
- }
- div#notebook {
- font-size: 14px;
- line-height: 20px;
- overflow-y: hidden;
- overflow-x: auto;
- width: 100%;
- /* This spaces the page away from the edge of the notebook area */
- padding-top: 20px;
- margin: 0px;
- outline: none;
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- min-height: 100%;
- }
- @media not print {
- #notebook-container {
- padding: 15px;
- background-color: #fff;
- min-height: 0;
- -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- }
- }
- @media print {
- #notebook-container {
- width: 100%;
- }
- }
- div.ui-widget-content {
- border: 1px solid #ababab;
- outline: none;
- }
- pre.dialog {
- background-color: #f7f7f7;
- border: 1px solid #ddd;
- border-radius: 2px;
- padding: 0.4em;
- padding-left: 2em;
- }
- p.dialog {
- padding: 0.2em;
- }
- /* Word-wrap output correctly. This is the CSS3 spelling, though Firefox seems
- to not honor it correctly. Webkit browsers (Chrome, rekonq, Safari) do.
- */
- pre,
- code,
- kbd,
- samp {
- white-space: pre-wrap;
- }
- #fonttest {
- font-family: monospace;
- }
- p {
- margin-bottom: 0;
- }
- .end_space {
- min-height: 100px;
- transition: height .2s ease;
- }
- .notebook_app > #header {
- -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- }
- @media not print {
- .notebook_app {
- background-color: #EEE;
- }
- }
- kbd {
- border-style: solid;
- border-width: 1px;
- box-shadow: none;
- margin: 2px;
- padding-left: 2px;
- padding-right: 2px;
- padding-top: 1px;
- padding-bottom: 1px;
- }
- /* CSS for the cell toolbar */
- .celltoolbar {
- border: thin solid #CFCFCF;
- border-bottom: none;
- background: #EEE;
- border-radius: 2px 2px 0px 0px;
- width: 100%;
- height: 29px;
- padding-right: 4px;
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: horizontal;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: horizontal;
- -moz-box-align: stretch;
- display: box;
- box-orient: horizontal;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: row;
- align-items: stretch;
- /* Old browsers */
- -webkit-box-pack: end;
- -moz-box-pack: end;
- box-pack: end;
- /* Modern browsers */
- justify-content: flex-end;
- display: -webkit-flex;
- }
- @media print {
- .celltoolbar {
- display: none;
- }
- }
- .ctb_hideshow {
- display: none;
- vertical-align: bottom;
- }
- /* ctb_show is added to the ctb_hideshow div to show the cell toolbar.
- Cell toolbars are only shown when the ctb_global_show class is also set.
- */
- .ctb_global_show .ctb_show.ctb_hideshow {
- display: block;
- }
- .ctb_global_show .ctb_show + .input_area,
- .ctb_global_show .ctb_show + div.text_cell_input,
- .ctb_global_show .ctb_show ~ div.text_cell_render {
- border-top-right-radius: 0px;
- border-top-left-radius: 0px;
- }
- .ctb_global_show .ctb_show ~ div.text_cell_render {
- border: 1px solid #cfcfcf;
- }
- .celltoolbar {
- font-size: 87%;
- padding-top: 3px;
- }
- .celltoolbar select {
- display: block;
- width: 100%;
- height: 32px;
- padding: 6px 12px;
- font-size: 13px;
- line-height: 1.42857143;
- color: #555555;
- background-color: #fff;
- background-image: none;
- border: 1px solid #ccc;
- border-radius: 2px;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
- -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
- transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 1px;
- width: inherit;
- font-size: inherit;
- height: 22px;
- padding: 0px;
- display: inline-block;
- }
- .celltoolbar select:focus {
- border-color: #66afe9;
- outline: 0;
- -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
- box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
- }
- .celltoolbar select::-moz-placeholder {
- color: #999;
- opacity: 1;
- }
- .celltoolbar select:-ms-input-placeholder {
- color: #999;
- }
- .celltoolbar select::-webkit-input-placeholder {
- color: #999;
- }
- .celltoolbar select::-ms-expand {
- border: 0;
- background-color: transparent;
- }
- .celltoolbar select[disabled],
- .celltoolbar select[readonly],
- fieldset[disabled] .celltoolbar select {
- background-color: #eeeeee;
- opacity: 1;
- }
- .celltoolbar select[disabled],
- fieldset[disabled] .celltoolbar select {
- cursor: not-allowed;
- }
- textarea.celltoolbar select {
- height: auto;
- }
- select.celltoolbar select {
- height: 30px;
- line-height: 30px;
- }
- textarea.celltoolbar select,
- select[multiple].celltoolbar select {
- height: auto;
- }
- .celltoolbar label {
- margin-left: 5px;
- margin-right: 5px;
- }
- .completions {
- position: absolute;
- z-index: 110;
- overflow: hidden;
- border: 1px solid #ababab;
- border-radius: 2px;
- -webkit-box-shadow: 0px 6px 10px -1px #adadad;
- box-shadow: 0px 6px 10px -1px #adadad;
- line-height: 1;
- }
- .completions select {
- background: white;
- outline: none;
- border: none;
- padding: 0px;
- margin: 0px;
- overflow: auto;
- font-family: monospace;
- font-size: 110%;
- color: #000;
- width: auto;
- }
- .completions select option.context {
- color: #286090;
- }
- #kernel_logo_widget {
- float: right !important;
- float: right;
- }
- #kernel_logo_widget .current_kernel_logo {
- display: none;
- margin-top: -1px;
- margin-bottom: -1px;
- width: 32px;
- height: 32px;
- }
- #menubar {
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- margin-top: 1px;
- }
- #menubar .navbar {
- border-top: 1px;
- border-radius: 0px 0px 2px 2px;
- margin-bottom: 0px;
- }
- #menubar .navbar-toggle {
- float: left;
- padding-top: 7px;
- padding-bottom: 7px;
- border: none;
- }
- #menubar .navbar-collapse {
- clear: left;
- }
- .nav-wrapper {
- border-bottom: 1px solid #e7e7e7;
- }
- i.menu-icon {
- padding-top: 4px;
- }
- ul#help_menu li a {
- overflow: hidden;
- padding-right: 2.2em;
- }
- ul#help_menu li a i {
- margin-right: -1.2em;
- }
- .dropdown-submenu {
- position: relative;
- }
- .dropdown-submenu > .dropdown-menu {
- top: 0;
- left: 100%;
- margin-top: -6px;
- margin-left: -1px;
- }
- .dropdown-submenu:hover > .dropdown-menu {
- display: block;
- }
- .dropdown-submenu > a:after {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- display: block;
- content: "\f0da";
- float: right;
- color: #333333;
- margin-top: 2px;
- margin-right: -10px;
- }
- .dropdown-submenu > a:after.pull-left {
- margin-right: .3em;
- }
- .dropdown-submenu > a:after.pull-right {
- margin-left: .3em;
- }
- .dropdown-submenu:hover > a:after {
- color: #262626;
- }
- .dropdown-submenu.pull-left {
- float: none;
- }
- .dropdown-submenu.pull-left > .dropdown-menu {
- left: -100%;
- margin-left: 10px;
- }
- #notification_area {
- float: right !important;
- float: right;
- z-index: 10;
- }
- .indicator_area {
- float: right !important;
- float: right;
- color: #777;
- margin-left: 5px;
- margin-right: 5px;
- width: 11px;
- z-index: 10;
- text-align: center;
- width: auto;
- }
- #kernel_indicator {
- float: right !important;
- float: right;
- color: #777;
- margin-left: 5px;
- margin-right: 5px;
- width: 11px;
- z-index: 10;
- text-align: center;
- width: auto;
- border-left: 1px solid;
- }
- #kernel_indicator .kernel_indicator_name {
- padding-left: 5px;
- padding-right: 5px;
- }
- #modal_indicator {
- float: right !important;
- float: right;
- color: #777;
- margin-left: 5px;
- margin-right: 5px;
- width: 11px;
- z-index: 10;
- text-align: center;
- width: auto;
- }
- #readonly-indicator {
- float: right !important;
- float: right;
- color: #777;
- margin-left: 5px;
- margin-right: 5px;
- width: 11px;
- z-index: 10;
- text-align: center;
- width: auto;
- margin-top: 2px;
- margin-bottom: 0px;
- margin-left: 0px;
- margin-right: 0px;
- display: none;
- }
- .modal_indicator:before {
- width: 1.28571429em;
- text-align: center;
- }
- .edit_mode .modal_indicator:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f040";
- }
- .edit_mode .modal_indicator:before.pull-left {
- margin-right: .3em;
- }
- .edit_mode .modal_indicator:before.pull-right {
- margin-left: .3em;
- }
- .command_mode .modal_indicator:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: ' ';
- }
- .command_mode .modal_indicator:before.pull-left {
- margin-right: .3em;
- }
- .command_mode .modal_indicator:before.pull-right {
- margin-left: .3em;
- }
- .kernel_idle_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f10c";
- }
- .kernel_idle_icon:before.pull-left {
- margin-right: .3em;
- }
- .kernel_idle_icon:before.pull-right {
- margin-left: .3em;
- }
- .kernel_busy_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f111";
- }
- .kernel_busy_icon:before.pull-left {
- margin-right: .3em;
- }
- .kernel_busy_icon:before.pull-right {
- margin-left: .3em;
- }
- .kernel_dead_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f1e2";
- }
- .kernel_dead_icon:before.pull-left {
- margin-right: .3em;
- }
- .kernel_dead_icon:before.pull-right {
- margin-left: .3em;
- }
- .kernel_disconnected_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f127";
- }
- .kernel_disconnected_icon:before.pull-left {
- margin-right: .3em;
- }
- .kernel_disconnected_icon:before.pull-right {
- margin-left: .3em;
- }
- .notification_widget {
- color: #777;
- z-index: 10;
- background: rgba(240, 240, 240, 0.5);
- margin-right: 4px;
- color: #333;
- background-color: #fff;
- border-color: #ccc;
- }
- .notification_widget:focus,
- .notification_widget.focus {
- color: #333;
- background-color: #e6e6e6;
- border-color: #8c8c8c;
- }
- .notification_widget:hover {
- color: #333;
- background-color: #e6e6e6;
- border-color: #adadad;
- }
- .notification_widget:active,
- .notification_widget.active,
- .open > .dropdown-toggle.notification_widget {
- color: #333;
- background-color: #e6e6e6;
- border-color: #adadad;
- }
- .notification_widget:active:hover,
- .notification_widget.active:hover,
- .open > .dropdown-toggle.notification_widget:hover,
- .notification_widget:active:focus,
- .notification_widget.active:focus,
- .open > .dropdown-toggle.notification_widget:focus,
- .notification_widget:active.focus,
- .notification_widget.active.focus,
- .open > .dropdown-toggle.notification_widget.focus {
- color: #333;
- background-color: #d4d4d4;
- border-color: #8c8c8c;
- }
- .notification_widget:active,
- .notification_widget.active,
- .open > .dropdown-toggle.notification_widget {
- background-image: none;
- }
- .notification_widget.disabled:hover,
- .notification_widget[disabled]:hover,
- fieldset[disabled] .notification_widget:hover,
- .notification_widget.disabled:focus,
- .notification_widget[disabled]:focus,
- fieldset[disabled] .notification_widget:focus,
- .notification_widget.disabled.focus,
- .notification_widget[disabled].focus,
- fieldset[disabled] .notification_widget.focus {
- background-color: #fff;
- border-color: #ccc;
- }
- .notification_widget .badge {
- color: #fff;
- background-color: #333;
- }
- .notification_widget.warning {
- color: #fff;
- background-color: #f0ad4e;
- border-color: #eea236;
- }
- .notification_widget.warning:focus,
- .notification_widget.warning.focus {
- color: #fff;
- background-color: #ec971f;
- border-color: #985f0d;
- }
- .notification_widget.warning:hover {
- color: #fff;
- background-color: #ec971f;
- border-color: #d58512;
- }
- .notification_widget.warning:active,
- .notification_widget.warning.active,
- .open > .dropdown-toggle.notification_widget.warning {
- color: #fff;
- background-color: #ec971f;
- border-color: #d58512;
- }
- .notification_widget.warning:active:hover,
- .notification_widget.warning.active:hover,
- .open > .dropdown-toggle.notification_widget.warning:hover,
- .notification_widget.warning:active:focus,
- .notification_widget.warning.active:focus,
- .open > .dropdown-toggle.notification_widget.warning:focus,
- .notification_widget.warning:active.focus,
- .notification_widget.warning.active.focus,
- .open > .dropdown-toggle.notification_widget.warning.focus {
- color: #fff;
- background-color: #d58512;
- border-color: #985f0d;
- }
- .notification_widget.warning:active,
- .notification_widget.warning.active,
- .open > .dropdown-toggle.notification_widget.warning {
- background-image: none;
- }
- .notification_widget.warning.disabled:hover,
- .notification_widget.warning[disabled]:hover,
- fieldset[disabled] .notification_widget.warning:hover,
- .notification_widget.warning.disabled:focus,
- .notification_widget.warning[disabled]:focus,
- fieldset[disabled] .notification_widget.warning:focus,
- .notification_widget.warning.disabled.focus,
- .notification_widget.warning[disabled].focus,
- fieldset[disabled] .notification_widget.warning.focus {
- background-color: #f0ad4e;
- border-color: #eea236;
- }
- .notification_widget.warning .badge {
- color: #f0ad4e;
- background-color: #fff;
- }
- .notification_widget.success {
- color: #fff;
- background-color: #5cb85c;
- border-color: #4cae4c;
- }
- .notification_widget.success:focus,
- .notification_widget.success.focus {
- color: #fff;
- background-color: #449d44;
- border-color: #255625;
- }
- .notification_widget.success:hover {
- color: #fff;
- background-color: #449d44;
- border-color: #398439;
- }
- .notification_widget.success:active,
- .notification_widget.success.active,
- .open > .dropdown-toggle.notification_widget.success {
- color: #fff;
- background-color: #449d44;
- border-color: #398439;
- }
- .notification_widget.success:active:hover,
- .notification_widget.success.active:hover,
- .open > .dropdown-toggle.notification_widget.success:hover,
- .notification_widget.success:active:focus,
- .notification_widget.success.active:focus,
- .open > .dropdown-toggle.notification_widget.success:focus,
- .notification_widget.success:active.focus,
- .notification_widget.success.active.focus,
- .open > .dropdown-toggle.notification_widget.success.focus {
- color: #fff;
- background-color: #398439;
- border-color: #255625;
- }
- .notification_widget.success:active,
- .notification_widget.success.active,
- .open > .dropdown-toggle.notification_widget.success {
- background-image: none;
- }
- .notification_widget.success.disabled:hover,
- .notification_widget.success[disabled]:hover,
- fieldset[disabled] .notification_widget.success:hover,
- .notification_widget.success.disabled:focus,
- .notification_widget.success[disabled]:focus,
- fieldset[disabled] .notification_widget.success:focus,
- .notification_widget.success.disabled.focus,
- .notification_widget.success[disabled].focus,
- fieldset[disabled] .notification_widget.success.focus {
- background-color: #5cb85c;
- border-color: #4cae4c;
- }
- .notification_widget.success .badge {
- color: #5cb85c;
- background-color: #fff;
- }
- .notification_widget.info {
- color: #fff;
- background-color: #5bc0de;
- border-color: #46b8da;
- }
- .notification_widget.info:focus,
- .notification_widget.info.focus {
- color: #fff;
- background-color: #31b0d5;
- border-color: #1b6d85;
- }
- .notification_widget.info:hover {
- color: #fff;
- background-color: #31b0d5;
- border-color: #269abc;
- }
- .notification_widget.info:active,
- .notification_widget.info.active,
- .open > .dropdown-toggle.notification_widget.info {
- color: #fff;
- background-color: #31b0d5;
- border-color: #269abc;
- }
- .notification_widget.info:active:hover,
- .notification_widget.info.active:hover,
- .open > .dropdown-toggle.notification_widget.info:hover,
- .notification_widget.info:active:focus,
- .notification_widget.info.active:focus,
- .open > .dropdown-toggle.notification_widget.info:focus,
- .notification_widget.info:active.focus,
- .notification_widget.info.active.focus,
- .open > .dropdown-toggle.notification_widget.info.focus {
- color: #fff;
- background-color: #269abc;
- border-color: #1b6d85;
- }
- .notification_widget.info:active,
- .notification_widget.info.active,
- .open > .dropdown-toggle.notification_widget.info {
- background-image: none;
- }
- .notification_widget.info.disabled:hover,
- .notification_widget.info[disabled]:hover,
- fieldset[disabled] .notification_widget.info:hover,
- .notification_widget.info.disabled:focus,
- .notification_widget.info[disabled]:focus,
- fieldset[disabled] .notification_widget.info:focus,
- .notification_widget.info.disabled.focus,
- .notification_widget.info[disabled].focus,
- fieldset[disabled] .notification_widget.info.focus {
- background-color: #5bc0de;
- border-color: #46b8da;
- }
- .notification_widget.info .badge {
- color: #5bc0de;
- background-color: #fff;
- }
- .notification_widget.danger {
- color: #fff;
- background-color: #d9534f;
- border-color: #d43f3a;
- }
- .notification_widget.danger:focus,
- .notification_widget.danger.focus {
- color: #fff;
- background-color: #c9302c;
- border-color: #761c19;
- }
- .notification_widget.danger:hover {
- color: #fff;
- background-color: #c9302c;
- border-color: #ac2925;
- }
- .notification_widget.danger:active,
- .notification_widget.danger.active,
- .open > .dropdown-toggle.notification_widget.danger {
- color: #fff;
- background-color: #c9302c;
- border-color: #ac2925;
- }
- .notification_widget.danger:active:hover,
- .notification_widget.danger.active:hover,
- .open > .dropdown-toggle.notification_widget.danger:hover,
- .notification_widget.danger:active:focus,
- .notification_widget.danger.active:focus,
- .open > .dropdown-toggle.notification_widget.danger:focus,
- .notification_widget.danger:active.focus,
- .notification_widget.danger.active.focus,
- .open > .dropdown-toggle.notification_widget.danger.focus {
- color: #fff;
- background-color: #ac2925;
- border-color: #761c19;
- }
- .notification_widget.danger:active,
- .notification_widget.danger.active,
- .open > .dropdown-toggle.notification_widget.danger {
- background-image: none;
- }
- .notification_widget.danger.disabled:hover,
- .notification_widget.danger[disabled]:hover,
- fieldset[disabled] .notification_widget.danger:hover,
- .notification_widget.danger.disabled:focus,
- .notification_widget.danger[disabled]:focus,
- fieldset[disabled] .notification_widget.danger:focus,
- .notification_widget.danger.disabled.focus,
- .notification_widget.danger[disabled].focus,
- fieldset[disabled] .notification_widget.danger.focus {
- background-color: #d9534f;
- border-color: #d43f3a;
- }
- .notification_widget.danger .badge {
- color: #d9534f;
- background-color: #fff;
- }
- div#pager {
- background-color: #fff;
- font-size: 14px;
- line-height: 20px;
- overflow: hidden;
- display: none;
- position: fixed;
- bottom: 0px;
- width: 100%;
- max-height: 50%;
- padding-top: 8px;
- -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- /* Display over codemirror */
- z-index: 100;
- /* Hack which prevents jquery ui resizable from changing top. */
- top: auto !important;
- }
- div#pager pre {
- line-height: 1.21429em;
- color: #000;
- background-color: #f7f7f7;
- padding: 0.4em;
- }
- div#pager #pager-button-area {
- position: absolute;
- top: 8px;
- right: 20px;
- }
- div#pager #pager-contents {
- position: relative;
- overflow: auto;
- width: 100%;
- height: 100%;
- }
- div#pager #pager-contents #pager-container {
- position: relative;
- padding: 15px 0px;
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- }
- div#pager .ui-resizable-handle {
- top: 0px;
- height: 8px;
- background: #f7f7f7;
- border-top: 1px solid #cfcfcf;
- border-bottom: 1px solid #cfcfcf;
- /* This injects handle bars (a short, wide = symbol) for
- the resize handle. */
- }
- div#pager .ui-resizable-handle::after {
- content: '';
- top: 2px;
- left: 50%;
- height: 3px;
- width: 30px;
- margin-left: -15px;
- position: absolute;
- border-top: 1px solid #cfcfcf;
- }
- .quickhelp {
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: horizontal;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: horizontal;
- -moz-box-align: stretch;
- display: box;
- box-orient: horizontal;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: row;
- align-items: stretch;
- line-height: 1.8em;
- }
- .shortcut_key {
- display: inline-block;
- width: 20ex;
- text-align: right;
- font-family: monospace;
- }
- .shortcut_descr {
- display: inline-block;
- /* Old browsers */
- -webkit-box-flex: 1;
- -moz-box-flex: 1;
- box-flex: 1;
- /* Modern browsers */
- flex: 1;
- }
- span.save_widget {
- margin-top: 6px;
- }
- span.save_widget span.filename {
- height: 1em;
- line-height: 1em;
- padding: 3px;
- margin-left: 16px;
- border: none;
- font-size: 146.5%;
- border-radius: 2px;
- }
- span.save_widget span.filename:hover {
- background-color: #e6e6e6;
- }
- span.checkpoint_status,
- span.autosave_status {
- font-size: small;
- }
- @media (max-width: 767px) {
- span.save_widget {
- font-size: small;
- }
- span.checkpoint_status,
- span.autosave_status {
- display: none;
- }
- }
- @media (min-width: 768px) and (max-width: 991px) {
- span.checkpoint_status {
- display: none;
- }
- span.autosave_status {
- font-size: x-small;
- }
- }
- .toolbar {
- padding: 0px;
- margin-left: -5px;
- margin-top: 2px;
- margin-bottom: 5px;
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- }
- .toolbar select,
- .toolbar label {
- width: auto;
- vertical-align: middle;
- margin-right: 2px;
- margin-bottom: 0px;
- display: inline;
- font-size: 92%;
- margin-left: 0.3em;
- margin-right: 0.3em;
- padding: 0px;
- padding-top: 3px;
- }
- .toolbar .btn {
- padding: 2px 8px;
- }
- .toolbar .btn-group {
- margin-top: 0px;
- margin-left: 5px;
- }
- #maintoolbar {
- margin-bottom: -3px;
- margin-top: -8px;
- border: 0px;
- min-height: 27px;
- margin-left: 0px;
- padding-top: 11px;
- padding-bottom: 3px;
- }
- #maintoolbar .navbar-text {
- float: none;
- vertical-align: middle;
- text-align: right;
- margin-left: 5px;
- margin-right: 0px;
- margin-top: 0px;
- }
- .select-xs {
- height: 24px;
- }
- .pulse,
- .dropdown-menu > li > a.pulse,
- li.pulse > a.dropdown-toggle,
- li.pulse.open > a.dropdown-toggle {
- background-color: #F37626;
- color: white;
- }
- /**
- * Primary styles
- *
- * Author: Jupyter Development Team
- */
- /** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
- * of chance of beeing generated from the ../less/[samename].less file, you can
- * try to get back the less file by reverting somme commit in history
- **/
- /*
- * We'll try to get something pretty, so we
- * have some strange css to have the scroll bar on
- * the left with fix button on the top right of the tooltip
- */
- @-moz-keyframes fadeOut {
- from {
- opacity: 1;
- }
- to {
- opacity: 0;
- }
- }
- @-webkit-keyframes fadeOut {
- from {
- opacity: 1;
- }
- to {
- opacity: 0;
- }
- }
- @-moz-keyframes fadeIn {
- from {
- opacity: 0;
- }
- to {
- opacity: 1;
- }
- }
- @-webkit-keyframes fadeIn {
- from {
- opacity: 0;
- }
- to {
- opacity: 1;
- }
- }
- /*properties of tooltip after "expand"*/
- .bigtooltip {
- overflow: auto;
- height: 200px;
- -webkit-transition-property: height;
- -webkit-transition-duration: 500ms;
- -moz-transition-property: height;
- -moz-transition-duration: 500ms;
- transition-property: height;
- transition-duration: 500ms;
- }
- /*properties of tooltip before "expand"*/
- .smalltooltip {
- -webkit-transition-property: height;
- -webkit-transition-duration: 500ms;
- -moz-transition-property: height;
- -moz-transition-duration: 500ms;
- transition-property: height;
- transition-duration: 500ms;
- text-overflow: ellipsis;
- overflow: hidden;
- height: 80px;
- }
- .tooltipbuttons {
- position: absolute;
- padding-right: 15px;
- top: 0px;
- right: 0px;
- }
- .tooltiptext {
- /*avoid the button to overlap on some docstring*/
- padding-right: 30px;
- }
- .ipython_tooltip {
- max-width: 700px;
- /*fade-in animation when inserted*/
- -webkit-animation: fadeOut 400ms;
- -moz-animation: fadeOut 400ms;
- animation: fadeOut 400ms;
- -webkit-animation: fadeIn 400ms;
- -moz-animation: fadeIn 400ms;
- animation: fadeIn 400ms;
- vertical-align: middle;
- background-color: #f7f7f7;
- overflow: visible;
- border: #ababab 1px solid;
- outline: none;
- padding: 3px;
- margin: 0px;
- padding-left: 7px;
- font-family: monospace;
- min-height: 50px;
- -moz-box-shadow: 0px 6px 10px -1px #adadad;
- -webkit-box-shadow: 0px 6px 10px -1px #adadad;
- box-shadow: 0px 6px 10px -1px #adadad;
- border-radius: 2px;
- position: absolute;
- z-index: 1000;
- }
- .ipython_tooltip a {
- float: right;
- }
- .ipython_tooltip .tooltiptext pre {
- border: 0;
- border-radius: 0;
- font-size: 100%;
- background-color: #f7f7f7;
- }
- .pretooltiparrow {
- left: 0px;
- margin: 0px;
- top: -16px;
- width: 40px;
- height: 16px;
- overflow: hidden;
- position: absolute;
- }
- .pretooltiparrow:before {
- background-color: #f7f7f7;
- border: 1px #ababab solid;
- z-index: 11;
- content: "";
- position: absolute;
- left: 15px;
- top: 10px;
- width: 25px;
- height: 25px;
- -webkit-transform: rotate(45deg);
- -moz-transform: rotate(45deg);
- -ms-transform: rotate(45deg);
- -o-transform: rotate(45deg);
- }
- ul.typeahead-list i {
- margin-left: -10px;
- width: 18px;
- }
- ul.typeahead-list {
- max-height: 80vh;
- overflow: auto;
- }
- ul.typeahead-list > li > a {
- /** Firefox bug **/
- /* see https://github.com/jupyter/notebook/issues/559 */
- white-space: normal;
- }
- .cmd-palette .modal-body {
- padding: 7px;
- }
- .cmd-palette form {
- background: white;
- }
- .cmd-palette input {
- outline: none;
- }
- .no-shortcut {
- display: none;
- }
- .command-shortcut:before {
- content: "(command)";
- padding-right: 3px;
- color: #777777;
- }
- .edit-shortcut:before {
- content: "(edit)";
- padding-right: 3px;
- color: #777777;
- }
- #find-and-replace #replace-preview .match,
- #find-and-replace #replace-preview .insert {
- background-color: #BBDEFB;
- border-color: #90CAF9;
- border-style: solid;
- border-width: 1px;
- border-radius: 0px;
- }
- #find-and-replace #replace-preview .replace .match {
- background-color: #FFCDD2;
- border-color: #EF9A9A;
- border-radius: 0px;
- }
- #find-and-replace #replace-preview .replace .insert {
- background-color: #C8E6C9;
- border-color: #A5D6A7;
- border-radius: 0px;
- }
- #find-and-replace #replace-preview {
- max-height: 60vh;
- overflow: auto;
- }
- #find-and-replace #replace-preview pre {
- padding: 5px 10px;
- }
- .terminal-app {
- background: #EEE;
- }
- .terminal-app #header {
- background: #fff;
- -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- }
- .terminal-app .terminal {
- float: left;
- font-family: monospace;
- color: white;
- background: black;
- padding: 0.4em;
- border-radius: 2px;
- -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
- box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
- }
- .terminal-app .terminal,
- .terminal-app .terminal dummy-screen {
- line-height: 1em;
- font-size: 14px;
- }
- .terminal-app .terminal-cursor {
- color: black;
- background: white;
- }
- .terminal-app #terminado-container {
- margin-top: 20px;
- }
- /*# sourceMappingURL=style.min.css.map */
- </style>
- <style type="text/css">
- .highlight .hll { background-color: #ffffcc }
- .highlight { background: #f8f8f8; }
- .highlight .c { color: #408080; font-style: italic } /* Comment */
- .highlight .err { border: 1px solid #FF0000 } /* Error */
- .highlight .k { color: #008000; font-weight: bold } /* Keyword */
- .highlight .o { color: #666666 } /* Operator */
- .highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
- .highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
- .highlight .cp { color: #BC7A00 } /* Comment.Preproc */
- .highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
- .highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
- .highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
- .highlight .gd { color: #A00000 } /* Generic.Deleted */
- .highlight .ge { font-style: italic } /* Generic.Emph */
- .highlight .gr { color: #FF0000 } /* Generic.Error */
- .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
- .highlight .gi { color: #00A000 } /* Generic.Inserted */
- .highlight .go { color: #888888 } /* Generic.Output */
- .highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
- .highlight .gs { font-weight: bold } /* Generic.Strong */
- .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
- .highlight .gt { color: #0044DD } /* Generic.Traceback */
- .highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
- .highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
- .highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
- .highlight .kp { color: #008000 } /* Keyword.Pseudo */
- .highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
- .highlight .kt { color: #B00040 } /* Keyword.Type */
- .highlight .m { color: #666666 } /* Literal.Number */
- .highlight .s { color: #BA2121 } /* Literal.String */
- .highlight .na { color: #7D9029 } /* Name.Attribute */
- .highlight .nb { color: #008000 } /* Name.Builtin */
- .highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
- .highlight .no { color: #880000 } /* Name.Constant */
- .highlight .nd { color: #AA22FF } /* Name.Decorator */
- .highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
- .highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
- .highlight .nf { color: #0000FF } /* Name.Function */
- .highlight .nl { color: #A0A000 } /* Name.Label */
- .highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
- .highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
- .highlight .nv { color: #19177C } /* Name.Variable */
- .highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
- .highlight .w { color: #bbbbbb } /* Text.Whitespace */
- .highlight .mb { color: #666666 } /* Literal.Number.Bin */
- .highlight .mf { color: #666666 } /* Literal.Number.Float */
- .highlight .mh { color: #666666 } /* Literal.Number.Hex */
- .highlight .mi { color: #666666 } /* Literal.Number.Integer */
- .highlight .mo { color: #666666 } /* Literal.Number.Oct */
- .highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
- .highlight .sc { color: #BA2121 } /* Literal.String.Char */
- .highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
- .highlight .s2 { color: #BA2121 } /* Literal.String.Double */
- .highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
- .highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
- .highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
- .highlight .sx { color: #008000 } /* Literal.String.Other */
- .highlight .sr { color: #BB6688 } /* Literal.String.Regex */
- .highlight .s1 { color: #BA2121 } /* Literal.String.Single */
- .highlight .ss { color: #19177C } /* Literal.String.Symbol */
- .highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
- .highlight .vc { color: #19177C } /* Name.Variable.Class */
- .highlight .vg { color: #19177C } /* Name.Variable.Global */
- .highlight .vi { color: #19177C } /* Name.Variable.Instance */
- .highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
- </style>
- <style type="text/css">
-
- /* Temporary definitions which will become obsolete with Notebook release 5.0 */
- .ansi-black-fg { color: #3E424D; }
- .ansi-black-bg { background-color: #3E424D; }
- .ansi-black-intense-fg { color: #282C36; }
- .ansi-black-intense-bg { background-color: #282C36; }
- .ansi-red-fg { color: #E75C58; }
- .ansi-red-bg { background-color: #E75C58; }
- .ansi-red-intense-fg { color: #B22B31; }
- .ansi-red-intense-bg { background-color: #B22B31; }
- .ansi-green-fg { color: #00A250; }
- .ansi-green-bg { background-color: #00A250; }
- .ansi-green-intense-fg { color: #007427; }
- .ansi-green-intense-bg { background-color: #007427; }
- .ansi-yellow-fg { color: #DDB62B; }
- .ansi-yellow-bg { background-color: #DDB62B; }
- .ansi-yellow-intense-fg { color: #B27D12; }
- .ansi-yellow-intense-bg { background-color: #B27D12; }
- .ansi-blue-fg { color: #208FFB; }
- .ansi-blue-bg { background-color: #208FFB; }
- .ansi-blue-intense-fg { color: #0065CA; }
- .ansi-blue-intense-bg { background-color: #0065CA; }
- .ansi-magenta-fg { color: #D160C4; }
- .ansi-magenta-bg { background-color: #D160C4; }
- .ansi-magenta-intense-fg { color: #A03196; }
- .ansi-magenta-intense-bg { background-color: #A03196; }
- .ansi-cyan-fg { color: #60C6C8; }
- .ansi-cyan-bg { background-color: #60C6C8; }
- .ansi-cyan-intense-fg { color: #258F8F; }
- .ansi-cyan-intense-bg { background-color: #258F8F; }
- .ansi-white-fg { color: #C5C1B4; }
- .ansi-white-bg { background-color: #C5C1B4; }
- .ansi-white-intense-fg { color: #A1A6B2; }
- .ansi-white-intense-bg { background-color: #A1A6B2; }
- .ansi-bold { font-weight: bold; }
- </style>
- <style type="text/css">
- /* Overrides of notebook CSS for static HTML export */
- body {
- overflow: visible;
- padding: 8px;
- }
- div#notebook {
- overflow: visible;
- border-top: none;
- }
- @media print {
- div.cell {
- display: block;
- page-break-inside: avoid;
- }
- div.output_wrapper {
- display: block;
- page-break-inside: avoid;
- }
- div.output {
- display: block;
- page-break-inside: avoid;
- }
- }
- </style>
- <!-- Custom stylesheet, it must be in the same directory as the html file -->
- <link rel="stylesheet" href="custom.css">
- <!-- Loading mathjax macro -->
- <!-- Load mathjax -->
- <script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"></script>
- <!-- MathJax configuration -->
- <script type="text/x-mathjax-config">
- MathJax.Hub.Config({
- tex2jax: {
- inlineMath: [ ['$','$'], ["\\(","\\)"] ],
- displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
- processEscapes: true,
- processEnvironments: true
- },
- // Center justify equations in code and markdown cells. Elsewhere
- // we use CSS to left justify single line equations in code cells.
- displayAlign: 'center',
- "HTML-CSS": {
- styles: {'.MathJax_Display': {"margin": 0}},
- linebreaks: { automatic: true }
- }
- });
- </script>
- <!-- End of mathjax configuration --></head>
- <body>
- <div tabindex="-1" id="notebook" class="border-box-sizing">
- <div class="container" id="notebook-container">
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h1 id="Artificial-Intelligence-Engineer-Nanodegree---Probabilistic-Models">Artificial Intelligence Engineer Nanodegree - Probabilistic Models<a class="anchor-link" href="#Artificial-Intelligence-Engineer-Nanodegree---Probabilistic-Models">¶</a></h1><h2 id="Project:-Sign-Language-Recognition-System">Project: Sign Language Recognition System<a class="anchor-link" href="#Project:-Sign-Language-Recognition-System">¶</a></h2><ul>
- <li><a href="#intro">Introduction</a></li>
- <li><a href="#part1_tutorial">Part 1 Feature Selection</a><ul>
- <li><a href="#part1_tutorial">Tutorial</a></li>
- <li><a href="#part1_submission">Features Submission</a></li>
- <li><a href="#part1_test">Features Unittest</a></li>
- </ul>
- </li>
- <li><a href="#part2_tutorial">Part 2 Train the models</a><ul>
- <li><a href="#part2_tutorial">Tutorial</a></li>
- <li><a href="#part2_submission">Model Selection Score Submission</a></li>
- <li><a href="#part2_test">Model Score Unittest</a></li>
- </ul>
- </li>
- <li><a href="#part3_tutorial">Part 3 Build a Recognizer</a><ul>
- <li><a href="#part3_tutorial">Tutorial</a></li>
- <li><a href="#part3_submission">Recognizer Submission</a></li>
- <li><a href="#part3_test">Recognizer Unittest</a></li>
- </ul>
- </li>
- <li><a href="#part4_info">Part 4 (OPTIONAL) Improve the WER with Language Models</a></li>
- </ul>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <p><a id='intro'></a></p>
- <h2 id="Introduction">Introduction<a class="anchor-link" href="#Introduction">¶</a></h2><p>The overall goal of this project is to build a word recognizer for American Sign Language video sequences, demonstrating the power of probabalistic models. In particular, this project employs <a href="https://en.wikipedia.org/wiki/Hidden_Markov_model">hidden Markov models (HMM's)</a> to analyze a series of measurements taken from videos of American Sign Language (ASL) collected for research (see the <a href="http://www-i6.informatik.rwth-aachen.de/~dreuw/database-rwth-boston-104.php">RWTH-BOSTON-104 Database</a>). In this video, the right-hand x and y locations are plotted as the speaker signs the sentence.
- <a href="https://drive.google.com/open?id=0B_5qGuFe-wbhUXRuVnNZVnMtam8"><img src="http://www-i6.informatik.rwth-aachen.de/~dreuw/images/demosample.png" alt="ASLR demo"></a></p>
- <p>The raw data, train, and test sets are pre-defined. You will derive a variety of feature sets (explored in Part 1), as well as implement three different model selection criterion to determine the optimal number of hidden states for each word model (explored in Part 2). Finally, in Part 3 you will implement the recognizer and compare the effects the different combinations of feature sets and model selection criteria.</p>
- <p>At the end of each Part, complete the submission cells with implementations, answer all questions, and pass the unit tests. Then submit the completed notebook for review!</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <p><a id='part1_tutorial'></a></p>
- <h2 id="PART-1:-Data">PART 1: Data<a class="anchor-link" href="#PART-1:-Data">¶</a></h2><h3 id="Features-Tutorial">Features Tutorial<a class="anchor-link" href="#Features-Tutorial">¶</a></h3><h5 id="Load-the-initial-database">Load the initial database<a class="anchor-link" href="#Load-the-initial-database">¶</a></h5><p>A data handler designed for this database is provided in the student codebase as the <code>AslDb</code> class in the <code>asl_data</code> module. This handler creates the initial <a href="http://pandas.pydata.org/pandas-docs/stable/">pandas</a> dataframe from the corpus of data included in the <code>data</code> directory as well as dictionaries suitable for extracting data in a format friendly to the <a href="https://hmmlearn.readthedocs.io/en/latest/">hmmlearn</a> library. We'll use those to create models in Part 2.</p>
- <p>To start, let's set up the initial database and select an example set of features for the training set. At the end of Part 1, you will create additional feature sets for experimentation.</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [1]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
- <span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
- <span class="kn">from</span> <span class="nn">asl_data</span> <span class="k">import</span> <span class="n">AslDb</span>
- <span class="n">asl</span> <span class="o">=</span> <span class="n">AslDb</span><span class="p">()</span> <span class="c1"># initializes the database</span>
- <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">head</span><span class="p">()</span> <span class="c1"># displays the first five rows of the asl database, indexed by video and frame</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt output_prompt">Out[1]:</div>
- <div class="output_html rendered_html output_subarea output_execute_result">
- <div>
- <table border="1" class="dataframe">
- <thead>
- <tr style="text-align: right;">
- <th></th>
- <th></th>
- <th>left-x</th>
- <th>left-y</th>
- <th>right-x</th>
- <th>right-y</th>
- <th>nose-x</th>
- <th>nose-y</th>
- <th>speaker</th>
- </tr>
- <tr>
- <th>video</th>
- <th>frame</th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th rowspan="5" valign="top">98</th>
- <th>0</th>
- <td>149</td>
- <td>181</td>
- <td>170</td>
- <td>175</td>
- <td>161</td>
- <td>62</td>
- <td>woman-1</td>
- </tr>
- <tr>
- <th>1</th>
- <td>149</td>
- <td>181</td>
- <td>170</td>
- <td>175</td>
- <td>161</td>
- <td>62</td>
- <td>woman-1</td>
- </tr>
- <tr>
- <th>2</th>
- <td>149</td>
- <td>181</td>
- <td>170</td>
- <td>175</td>
- <td>161</td>
- <td>62</td>
- <td>woman-1</td>
- </tr>
- <tr>
- <th>3</th>
- <td>149</td>
- <td>181</td>
- <td>170</td>
- <td>175</td>
- <td>161</td>
- <td>62</td>
- <td>woman-1</td>
- </tr>
- <tr>
- <th>4</th>
- <td>149</td>
- <td>181</td>
- <td>170</td>
- <td>175</td>
- <td>161</td>
- <td>62</td>
- <td>woman-1</td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [2]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span><span class="mi">98</span><span class="p">,</span><span class="mi">1</span><span class="p">]</span> <span class="c1"># look at the data available for an individual frame</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt output_prompt">Out[2]:</div>
- <div class="output_text output_subarea output_execute_result">
- <pre>left-x 149
- left-y 181
- right-x 170
- right-y 175
- nose-x 161
- nose-y 62
- speaker woman-1
- Name: (98, 1), dtype: object</pre>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <p>The frame represented by video 98, frame 1 is shown here:</p>
- <p><img src="http://www-i6.informatik.rwth-aachen.de/~dreuw/database/rwth-boston-104/overview/images/orig/098-start.jpg" alt="Video 98"></p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h5 id="Feature-selection-for-training-the-model">Feature selection for training the model<a class="anchor-link" href="#Feature-selection-for-training-the-model">¶</a></h5><p>The objective of feature selection when training a model is to choose the most relevant variables while keeping the model as simple as possible, thus reducing training time. We can use the raw features already provided or derive our own and add columns to the pandas dataframe <code>asl.df</code> for selection. As an example, in the next cell a feature named <code>'grnd-ry'</code> is added. This feature is the difference between the right-hand y value and the nose y value, which serves as the "ground" right y value.</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [3]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'grnd-ry'</span><span class="p">]</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'right-y'</span><span class="p">]</span> <span class="o">-</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'nose-y'</span><span class="p">]</span>
- <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">head</span><span class="p">()</span> <span class="c1"># the new feature 'grnd-ry' is now in the frames dictionary</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt output_prompt">Out[3]:</div>
- <div class="output_html rendered_html output_subarea output_execute_result">
- <div>
- <table border="1" class="dataframe">
- <thead>
- <tr style="text-align: right;">
- <th></th>
- <th></th>
- <th>left-x</th>
- <th>left-y</th>
- <th>right-x</th>
- <th>right-y</th>
- <th>nose-x</th>
- <th>nose-y</th>
- <th>speaker</th>
- <th>grnd-ry</th>
- </tr>
- <tr>
- <th>video</th>
- <th>frame</th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th rowspan="5" valign="top">98</th>
- <th>0</th>
- <td>149</td>
- <td>181</td>
- <td>170</td>
- <td>175</td>
- <td>161</td>
- <td>62</td>
- <td>woman-1</td>
- <td>113</td>
- </tr>
- <tr>
- <th>1</th>
- <td>149</td>
- <td>181</td>
- <td>170</td>
- <td>175</td>
- <td>161</td>
- <td>62</td>
- <td>woman-1</td>
- <td>113</td>
- </tr>
- <tr>
- <th>2</th>
- <td>149</td>
- <td>181</td>
- <td>170</td>
- <td>175</td>
- <td>161</td>
- <td>62</td>
- <td>woman-1</td>
- <td>113</td>
- </tr>
- <tr>
- <th>3</th>
- <td>149</td>
- <td>181</td>
- <td>170</td>
- <td>175</td>
- <td>161</td>
- <td>62</td>
- <td>woman-1</td>
- <td>113</td>
- </tr>
- <tr>
- <th>4</th>
- <td>149</td>
- <td>181</td>
- <td>170</td>
- <td>175</td>
- <td>161</td>
- <td>62</td>
- <td>woman-1</td>
- <td>113</td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h5 id="Try-it!">Try it!<a class="anchor-link" href="#Try-it!">¶</a></h5>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [4]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">asl_utils</span> <span class="k">import</span> <span class="n">test_features_tryit</span>
- <span class="c1"># TODO add df columns for 'grnd-rx', 'grnd-ly', 'grnd-lx' representing differences between hand and nose locations</span>
- <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'grnd-rx'</span><span class="p">]</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'right-x'</span><span class="p">]</span> <span class="o">-</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'nose-x'</span><span class="p">]</span>
- <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'grnd-ly'</span><span class="p">]</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'left-y'</span><span class="p">]</span> <span class="o">-</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'nose-y'</span><span class="p">]</span>
- <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'grnd-lx'</span><span class="p">]</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'left-x'</span><span class="p">]</span> <span class="o">-</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'nose-x'</span><span class="p">]</span>
- <span class="c1"># test the code</span>
- <span class="n">test_features_tryit</span><span class="p">(</span><span class="n">asl</span><span class="p">)</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>asl.df sample
- </pre>
- </div>
- </div>
- <div class="output_area"><div class="prompt"></div>
- <div class="output_html rendered_html output_subarea ">
- <div>
- <table border="1" class="dataframe">
- <thead>
- <tr style="text-align: right;">
- <th></th>
- <th></th>
- <th>left-x</th>
- <th>left-y</th>
- <th>right-x</th>
- <th>right-y</th>
- <th>nose-x</th>
- <th>nose-y</th>
- <th>speaker</th>
- <th>grnd-ry</th>
- <th>grnd-rx</th>
- <th>grnd-ly</th>
- <th>grnd-lx</th>
- </tr>
- <tr>
- <th>video</th>
- <th>frame</th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th rowspan="5" valign="top">98</th>
- <th>0</th>
- <td>149</td>
- <td>181</td>
- <td>170</td>
- <td>175</td>
- <td>161</td>
- <td>62</td>
- <td>woman-1</td>
- <td>113</td>
- <td>9</td>
- <td>119</td>
- <td>-12</td>
- </tr>
- <tr>
- <th>1</th>
- <td>149</td>
- <td>181</td>
- <td>170</td>
- <td>175</td>
- <td>161</td>
- <td>62</td>
- <td>woman-1</td>
- <td>113</td>
- <td>9</td>
- <td>119</td>
- <td>-12</td>
- </tr>
- <tr>
- <th>2</th>
- <td>149</td>
- <td>181</td>
- <td>170</td>
- <td>175</td>
- <td>161</td>
- <td>62</td>
- <td>woman-1</td>
- <td>113</td>
- <td>9</td>
- <td>119</td>
- <td>-12</td>
- </tr>
- <tr>
- <th>3</th>
- <td>149</td>
- <td>181</td>
- <td>170</td>
- <td>175</td>
- <td>161</td>
- <td>62</td>
- <td>woman-1</td>
- <td>113</td>
- <td>9</td>
- <td>119</td>
- <td>-12</td>
- </tr>
- <tr>
- <th>4</th>
- <td>149</td>
- <td>181</td>
- <td>170</td>
- <td>175</td>
- <td>161</td>
- <td>62</td>
- <td>woman-1</td>
- <td>113</td>
- <td>9</td>
- <td>119</td>
- <td>-12</td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
- </div>
- <div class="output_area"><div class="prompt output_prompt">Out[4]:</div>
- <div class="output_html rendered_html output_subarea output_execute_result">
- <font color=green>Correct!</font><br/>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [5]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># collect the features into a list</span>
- <span class="n">features_ground</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'grnd-rx'</span><span class="p">,</span><span class="s1">'grnd-ry'</span><span class="p">,</span><span class="s1">'grnd-lx'</span><span class="p">,</span><span class="s1">'grnd-ly'</span><span class="p">]</span>
- <span class="c1">#show a single set of features for a given (video, frame) tuple</span>
- <span class="p">[</span><span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span><span class="mi">98</span><span class="p">,</span><span class="mi">1</span><span class="p">][</span><span class="n">v</span><span class="p">]</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">features_ground</span><span class="p">]</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt output_prompt">Out[5]:</div>
- <div class="output_text output_subarea output_execute_result">
- <pre>[9, 113, -12, 119]</pre>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h5 id="Build-the-training-set">Build the training set<a class="anchor-link" href="#Build-the-training-set">¶</a></h5><p>Now that we have a feature list defined, we can pass that list to the <code>build_training</code> method to collect the features for all the words in the training set. Each word in the training set has multiple examples from various videos. Below we can see the unique words that have been loaded into the training set:</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [6]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="n">training</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">build_training</span><span class="p">(</span><span class="n">features_ground</span><span class="p">)</span>
- <span class="nb">print</span><span class="p">(</span><span class="s2">"Training words: </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">training</span><span class="o">.</span><span class="n">words</span><span class="p">))</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>Training words: ['JOHN', 'WRITE', 'HOMEWORK', 'IX-1P', 'SEE', 'YESTERDAY', 'IX', 'LOVE', 'MARY', 'CAN', 'GO', 'GO1', 'FUTURE', 'GO2', 'PARTY', 'FUTURE1', 'HIT', 'BLAME', 'FRED', 'FISH', 'WONT', 'EAT', 'BUT', 'CHICKEN', 'VEGETABLE', 'CHINA', 'PEOPLE', 'PREFER', 'BROCCOLI', 'LIKE', 'LEAVE', 'SAY', 'BUY', 'HOUSE', 'KNOW', 'CORN', 'CORN1', 'THINK', 'NOT', 'PAST', 'LIVE', 'CHICAGO', 'CAR', 'SHOULD', 'DECIDE', 'VISIT', 'MOVIE', 'WANT', 'SELL', 'TOMORROW', 'NEXT-WEEK', 'NEW-YORK', 'LAST-WEEK', 'WILL', 'FINISH', 'ANN', 'READ', 'BOOK', 'CHOCOLATE', 'FIND', 'SOMETHING-ONE', 'POSS', 'BROTHER', 'ARRIVE', 'HERE', 'GIVE', 'MAN', 'NEW', 'COAT', 'WOMAN', 'GIVE1', 'HAVE', 'FRANK', 'BREAK-DOWN', 'SEARCH-FOR', 'WHO', 'WHAT', 'LEG', 'FRIEND', 'CANDY', 'BLUE', 'SUE', 'BUY1', 'STOLEN', 'OLD', 'STUDENT', 'VIDEOTAPE', 'BORROW', 'MOTHER', 'POTATO', 'TELL', 'BILL', 'THROW', 'APPLE', 'NAME', 'SHOOT', 'SAY-1P', 'SELF', 'GROUP', 'JANA', 'TOY1', 'MANY', 'TOY', 'ALL', 'BOY', 'TEACHER', 'GIRL', 'BOX', 'GIVE2', 'GIVE3', 'GET', 'PUTASIDE']
- </pre>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <p>The training data in <code>training</code> is an object of class <code>WordsData</code> defined in the <code>asl_data</code> module. in addition to the <code>words</code> list, data can be accessed with the <code>get_all_sequences</code>, <code>get_all_Xlengths</code>, <code>get_word_sequences</code>, and <code>get_word_Xlengths</code> methods. We need the <code>get_word_Xlengths</code> method to train multiple sequences with the <code>hmmlearn</code> library. In the following example, notice that there are two lists; the first is a concatenation of all the sequences(the X portion) and the second is a list of the sequence lengths (the Lengths portion).</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [7]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="n">training</span><span class="o">.</span><span class="n">get_word_Xlengths</span><span class="p">(</span><span class="s1">'CHOCOLATE'</span><span class="p">)</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt output_prompt">Out[7]:</div>
- <div class="output_text output_subarea output_execute_result">
- <pre>(array([[-11, 48, 7, 120],
- [-11, 48, 8, 109],
- [ -8, 49, 11, 98],
- [ -7, 50, 7, 87],
- [ -4, 54, 7, 77],
- [ -4, 54, 6, 69],
- [ -4, 54, 6, 69],
- [-13, 52, 6, 69],
- [-13, 52, 6, 69],
- [ -8, 51, 6, 69],
- [ -8, 51, 6, 69],
- [ -8, 51, 6, 69],
- [ -8, 51, 6, 69],
- [ -8, 51, 6, 69],
- [-10, 59, 7, 71],
- [-15, 64, 9, 77],
- [-17, 75, 13, 81],
- [ -4, 48, -4, 113],
- [ -2, 53, -4, 113],
- [ -4, 55, 2, 98],
- [ -4, 58, 2, 98],
- [ -1, 59, 2, 89],
- [ -1, 59, -1, 84],
- [ -1, 59, -1, 84],
- [ -7, 63, -1, 84],
- [ -7, 63, -1, 84],
- [ -7, 63, 3, 83],
- [ -7, 63, 3, 83],
- [ -7, 63, 3, 83],
- [ -7, 63, 3, 83],
- [ -7, 63, 3, 83],
- [ -7, 63, 3, 83],
- [ -7, 63, 3, 83],
- [ -4, 70, 3, 83],
- [ -4, 70, 3, 83],
- [ -2, 73, 5, 90],
- [ -3, 79, -4, 96],
- [-15, 98, 13, 135],
- [ -6, 93, 12, 128],
- [ -2, 89, 14, 118],
- [ 5, 90, 10, 108],
- [ 4, 86, 7, 105],
- [ 4, 86, 7, 105],
- [ 4, 86, 13, 100],
- [ -3, 82, 14, 96],
- [ -3, 82, 14, 96],
- [ 6, 89, 16, 100],
- [ 6, 89, 16, 100],
- [ 7, 85, 17, 111]], dtype=int64), [17, 20, 12])</pre>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h6 id="More-feature-sets">More feature sets<a class="anchor-link" href="#More-feature-sets">¶</a></h6><p>So far we have a simple feature set that is enough to get started modeling. However, we might get better results if we manipulate the raw values a bit more, so we will go ahead and set up some other options now for experimentation later. For example, we could normalize each speaker's range of motion with grouped statistics using <a href="http://pandas.pydata.org/pandas-docs/stable/api.html#api-dataframe-stats">Pandas stats</a> functions and <a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.groupby.html">pandas groupby</a>. Below is an example for finding the means of all speaker subgroups.</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [8]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="n">df_means</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s1">'speaker'</span><span class="p">)</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span>
- <span class="n">df_means</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt output_prompt">Out[8]:</div>
- <div class="output_html rendered_html output_subarea output_execute_result">
- <div>
- <table border="1" class="dataframe">
- <thead>
- <tr style="text-align: right;">
- <th></th>
- <th>left-x</th>
- <th>left-y</th>
- <th>right-x</th>
- <th>right-y</th>
- <th>nose-x</th>
- <th>nose-y</th>
- <th>grnd-ry</th>
- <th>grnd-rx</th>
- <th>grnd-ly</th>
- <th>grnd-lx</th>
- </tr>
- <tr>
- <th>speaker</th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th>man-1</th>
- <td>206.248203</td>
- <td>218.679449</td>
- <td>155.464350</td>
- <td>150.371031</td>
- <td>175.031756</td>
- <td>61.642600</td>
- <td>88.728430</td>
- <td>-19.567406</td>
- <td>157.036848</td>
- <td>31.216447</td>
- </tr>
- <tr>
- <th>woman-1</th>
- <td>164.661438</td>
- <td>161.271242</td>
- <td>151.017865</td>
- <td>117.332462</td>
- <td>162.655120</td>
- <td>57.245098</td>
- <td>60.087364</td>
- <td>-11.637255</td>
- <td>104.026144</td>
- <td>2.006318</td>
- </tr>
- <tr>
- <th>woman-2</th>
- <td>183.214509</td>
- <td>176.527232</td>
- <td>156.866295</td>
- <td>119.835714</td>
- <td>170.318973</td>
- <td>58.022098</td>
- <td>61.813616</td>
- <td>-13.452679</td>
- <td>118.505134</td>
- <td>12.895536</td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <p>To select a mean that matches by speaker, use the pandas <a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.map.html">map</a> method:</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [9]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'left-x-mean'</span><span class="p">]</span><span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'speaker'</span><span class="p">]</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">df_means</span><span class="p">[</span><span class="s1">'left-x'</span><span class="p">])</span>
- <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">head</span><span class="p">()</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt output_prompt">Out[9]:</div>
- <div class="output_html rendered_html output_subarea output_execute_result">
- <div>
- <table border="1" class="dataframe">
- <thead>
- <tr style="text-align: right;">
- <th></th>
- <th></th>
- <th>left-x</th>
- <th>left-y</th>
- <th>right-x</th>
- <th>right-y</th>
- <th>nose-x</th>
- <th>nose-y</th>
- <th>speaker</th>
- <th>grnd-ry</th>
- <th>grnd-rx</th>
- <th>grnd-ly</th>
- <th>grnd-lx</th>
- <th>left-x-mean</th>
- </tr>
- <tr>
- <th>video</th>
- <th>frame</th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th rowspan="5" valign="top">98</th>
- <th>0</th>
- <td>149</td>
- <td>181</td>
- <td>170</td>
- <td>175</td>
- <td>161</td>
- <td>62</td>
- <td>woman-1</td>
- <td>113</td>
- <td>9</td>
- <td>119</td>
- <td>-12</td>
- <td>164.661438</td>
- </tr>
- <tr>
- <th>1</th>
- <td>149</td>
- <td>181</td>
- <td>170</td>
- <td>175</td>
- <td>161</td>
- <td>62</td>
- <td>woman-1</td>
- <td>113</td>
- <td>9</td>
- <td>119</td>
- <td>-12</td>
- <td>164.661438</td>
- </tr>
- <tr>
- <th>2</th>
- <td>149</td>
- <td>181</td>
- <td>170</td>
- <td>175</td>
- <td>161</td>
- <td>62</td>
- <td>woman-1</td>
- <td>113</td>
- <td>9</td>
- <td>119</td>
- <td>-12</td>
- <td>164.661438</td>
- </tr>
- <tr>
- <th>3</th>
- <td>149</td>
- <td>181</td>
- <td>170</td>
- <td>175</td>
- <td>161</td>
- <td>62</td>
- <td>woman-1</td>
- <td>113</td>
- <td>9</td>
- <td>119</td>
- <td>-12</td>
- <td>164.661438</td>
- </tr>
- <tr>
- <th>4</th>
- <td>149</td>
- <td>181</td>
- <td>170</td>
- <td>175</td>
- <td>161</td>
- <td>62</td>
- <td>woman-1</td>
- <td>113</td>
- <td>9</td>
- <td>119</td>
- <td>-12</td>
- <td>164.661438</td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h5 id="Try-it!">Try it!<a class="anchor-link" href="#Try-it!">¶</a></h5>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [10]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">asl_utils</span> <span class="k">import</span> <span class="n">test_std_tryit</span>
- <span class="c1"># TODO Create a dataframe named `df_std` with standard deviations grouped by speaker</span>
- <span class="n">df_std</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s1">'speaker'</span><span class="p">)</span><span class="o">.</span><span class="n">std</span><span class="p">()</span>
- <span class="c1"># test the code</span>
- <span class="n">test_std_tryit</span><span class="p">(</span><span class="n">df_std</span><span class="p">)</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>df_std
- </pre>
- </div>
- </div>
- <div class="output_area"><div class="prompt"></div>
- <div class="output_html rendered_html output_subarea ">
- <div>
- <table border="1" class="dataframe">
- <thead>
- <tr style="text-align: right;">
- <th></th>
- <th>left-x</th>
- <th>left-y</th>
- <th>right-x</th>
- <th>right-y</th>
- <th>nose-x</th>
- <th>nose-y</th>
- <th>grnd-ry</th>
- <th>grnd-rx</th>
- <th>grnd-ly</th>
- <th>grnd-lx</th>
- <th>left-x-mean</th>
- </tr>
- <tr>
- <th>speaker</th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th>man-1</th>
- <td>15.154425</td>
- <td>36.328485</td>
- <td>18.901917</td>
- <td>54.902340</td>
- <td>6.654573</td>
- <td>5.520045</td>
- <td>53.487999</td>
- <td>20.269032</td>
- <td>36.572749</td>
- <td>15.080360</td>
- <td>0.0</td>
- </tr>
- <tr>
- <th>woman-1</th>
- <td>17.573442</td>
- <td>26.594521</td>
- <td>16.459943</td>
- <td>34.667787</td>
- <td>3.549392</td>
- <td>3.538330</td>
- <td>33.972660</td>
- <td>16.764706</td>
- <td>27.117393</td>
- <td>17.328941</td>
- <td>0.0</td>
- </tr>
- <tr>
- <th>woman-2</th>
- <td>15.388711</td>
- <td>28.825025</td>
- <td>14.890288</td>
- <td>39.649111</td>
- <td>4.099760</td>
- <td>3.416167</td>
- <td>39.128572</td>
- <td>16.191324</td>
- <td>29.320655</td>
- <td>15.050938</td>
- <td>0.0</td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
- </div>
- <div class="output_area"><div class="prompt output_prompt">Out[10]:</div>
- <div class="output_html rendered_html output_subarea output_execute_result">
- <font color=green>Correct!</font><br/>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <p><a id='part1_submission'></a></p>
- <h3 id="Features-Implementation-Submission">Features Implementation Submission<a class="anchor-link" href="#Features-Implementation-Submission">¶</a></h3><p>Implement four feature sets and answer the question that follows.</p>
- <ul>
- <li><p>normalized Cartesian coordinates</p>
- <ul>
- <li>use <em>mean</em> and <em>standard deviation</em> statistics and the <a href="https://en.wikipedia.org/wiki/Standard_score">standard score</a> equation to account for speakers with different heights and arm length</li>
- </ul>
- </li>
- <li><p>polar coordinates</p>
- <ul>
- <li>calculate polar coordinates with <a href="https://en.wikipedia.org/wiki/Polar_coordinate_system#Converting_between_polar_and_Cartesian_coordinates">Cartesian to polar equations</a></li>
- <li>use the <a href="https://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.arctan2.html">np.arctan2</a> function and <em>swap the x and y axes</em> to move the $0$ to $2\pi$ discontinuity to 12 o'clock instead of 3 o'clock; in other words, the normal break in radians value from $0$ to $2\pi$ occurs directly to the left of the speaker's nose, which may be in the signing area and interfere with results. By swapping the x and y axes, that discontinuity move to directly above the speaker's head, an area not generally used in signing.</li>
- </ul>
- </li>
- <li><p>delta difference</p>
- <ul>
- <li>as described in Thad's lecture, use the difference in values between one frame and the next frames as features</li>
- <li>pandas <a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.diff.html">diff method</a> and <a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.fillna.html">fillna method</a> will be helpful for this one</li>
- </ul>
- </li>
- <li><p>custom features</p>
- <ul>
- <li>These are your own design; combine techniques used above or come up with something else entirely. We look forward to seeing what you come up with!
- Some ideas to get you started:<ul>
- <li>normalize using a <a href="https://en.wikipedia.org/wiki/Feature_scaling">feature scaling equation</a></li>
- <li>normalize the polar coordinates</li>
- <li>adding additional deltas</li>
- </ul>
- </li>
- </ul>
- </li>
- </ul>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [11]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># TODO add features for normalized by speaker values of left, right, x, y</span>
- <span class="c1"># Name these 'norm-rx', 'norm-ry', 'norm-lx', and 'norm-ly'</span>
- <span class="c1"># using Z-score scaling (X-Xmean)/Xstd</span>
- <span class="n">features_norm</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'norm-rx'</span><span class="p">,</span> <span class="s1">'norm-ry'</span><span class="p">,</span> <span class="s1">'norm-lx'</span><span class="p">,</span><span class="s1">'norm-ly'</span><span class="p">]</span>
- <span class="n">mean_right_x</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'speaker'</span><span class="p">]</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">df_means</span><span class="p">[</span><span class="s1">'right-x'</span><span class="p">])</span>
- <span class="n">mean_right_y</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'speaker'</span><span class="p">]</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">df_means</span><span class="p">[</span><span class="s1">'right-y'</span><span class="p">])</span>
- <span class="n">mean_left_x</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'speaker'</span><span class="p">]</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">df_means</span><span class="p">[</span><span class="s1">'left-x'</span><span class="p">])</span>
- <span class="n">mean_left_y</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'speaker'</span><span class="p">]</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">df_means</span><span class="p">[</span><span class="s1">'left-y'</span><span class="p">])</span>
- <span class="n">std_right_x</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'speaker'</span><span class="p">]</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">df_std</span><span class="p">[</span><span class="s1">'right-x'</span><span class="p">])</span>
- <span class="n">std_right_y</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'speaker'</span><span class="p">]</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">df_std</span><span class="p">[</span><span class="s1">'right-y'</span><span class="p">])</span>
- <span class="n">std_left_x</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'speaker'</span><span class="p">]</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">df_std</span><span class="p">[</span><span class="s1">'left-x'</span><span class="p">])</span>
- <span class="n">std_left_y</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'speaker'</span><span class="p">]</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">df_std</span><span class="p">[</span><span class="s1">'left-y'</span><span class="p">])</span>
- <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'norm-rx'</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'right-x'</span><span class="p">]</span> <span class="o">-</span> <span class="n">mean_right_x</span><span class="p">)</span> <span class="o">/</span> <span class="n">std_right_x</span>
- <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'norm-ry'</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'right-y'</span><span class="p">]</span> <span class="o">-</span> <span class="n">mean_right_y</span><span class="p">)</span> <span class="o">/</span> <span class="n">std_right_y</span>
- <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'norm-lx'</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'left-x'</span><span class="p">]</span> <span class="o">-</span> <span class="n">mean_left_x</span><span class="p">)</span> <span class="o">/</span> <span class="n">std_left_x</span>
- <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'norm-ly'</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'left-y'</span><span class="p">]</span> <span class="o">-</span> <span class="n">mean_left_y</span><span class="p">)</span> <span class="o">/</span> <span class="n">std_left_y</span>
- </pre></div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [12]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># TODO add features for polar coordinate values where the nose is the origin</span>
- <span class="c1"># Name these 'polar-rr', 'polar-rtheta', 'polar-lr', and 'polar-ltheta'</span>
- <span class="c1"># Note that 'polar-rr' and 'polar-rtheta' refer to the radius and angle</span>
- <span class="n">features_polar</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'polar-rr'</span><span class="p">,</span> <span class="s1">'polar-rtheta'</span><span class="p">,</span> <span class="s1">'polar-lr'</span><span class="p">,</span> <span class="s1">'polar-ltheta'</span><span class="p">]</span>
- <span class="n">grnd_rx</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'grnd-rx'</span><span class="p">]</span>
- <span class="n">grnd_ry</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'grnd-ry'</span><span class="p">]</span>
- <span class="n">grnd_lx</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'grnd-lx'</span><span class="p">]</span>
- <span class="n">grnd_ly</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'grnd-ly'</span><span class="p">]</span>
- <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'polar-rr'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">grnd_rx</span><span class="o">*</span><span class="n">grnd_rx</span> <span class="o">+</span> <span class="n">grnd_ry</span><span class="o">*</span><span class="n">grnd_ry</span><span class="p">)</span>
- <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'polar-rtheta'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arctan2</span><span class="p">(</span><span class="n">grnd_rx</span><span class="p">,</span> <span class="n">grnd_ry</span><span class="p">)</span>
- <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'polar-lr'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">grnd_lx</span><span class="o">*</span><span class="n">grnd_lx</span> <span class="o">+</span> <span class="n">grnd_ly</span><span class="o">*</span><span class="n">grnd_ly</span><span class="p">)</span>
- <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'polar-ltheta'</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arctan2</span><span class="p">(</span><span class="n">grnd_lx</span><span class="p">,</span> <span class="n">grnd_ly</span><span class="p">)</span>
- </pre></div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [13]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># TODO add features for left, right, x, y differences by one time step, i.e. the "delta" values discussed in the lecture</span>
- <span class="c1"># Name these 'delta-rx', 'delta-ry', 'delta-lx', and 'delta-ly'</span>
- <span class="n">features_delta</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'delta-rx'</span><span class="p">,</span> <span class="s1">'delta-ry'</span><span class="p">,</span> <span class="s1">'delta-lx'</span><span class="p">,</span> <span class="s1">'delta-ly'</span><span class="p">]</span>
- <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'delta-rx'</span><span class="p">]</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'right-x'</span><span class="p">]</span><span class="o">.</span><span class="n">diff</span><span class="p">()</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
- <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'delta-ry'</span><span class="p">]</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'right-y'</span><span class="p">]</span><span class="o">.</span><span class="n">diff</span><span class="p">()</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
- <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'delta-lx'</span><span class="p">]</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'left-x'</span><span class="p">]</span><span class="o">.</span><span class="n">diff</span><span class="p">()</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
- <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'delta-ly'</span><span class="p">]</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'left-y'</span><span class="p">]</span><span class="o">.</span><span class="n">diff</span><span class="p">()</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
- </pre></div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [14]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># TODO add features of your own design, which may be a combination of the above or something else</span>
- <span class="c1"># Name these whatever you would like</span>
- <span class="c1"># TODO define a list named 'features_custom' for building the training set</span>
- <span class="c1"># Need to calculate mean and std again to include 'polar-rr' and 'polar-lr'</span>
- <span class="n">df_means</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s1">'speaker'</span><span class="p">)</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span>
- <span class="n">df_std</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s1">'speaker'</span><span class="p">)</span><span class="o">.</span><span class="n">std</span><span class="p">()</span>
- <span class="c1"># Normalize right arm radius</span>
- <span class="n">mean_polar_rr</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'speaker'</span><span class="p">]</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">df_means</span><span class="p">[</span><span class="s1">'polar-rr'</span><span class="p">])</span>
- <span class="n">std_polar_rr</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'speaker'</span><span class="p">]</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">df_std</span><span class="p">[</span><span class="s1">'polar-rr'</span><span class="p">])</span>
- <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'norm-polar-rr'</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'polar-rr'</span><span class="p">]</span> <span class="o">-</span> <span class="n">mean_polar_rr</span><span class="p">)</span> <span class="o">/</span> <span class="n">std_polar_rr</span>
- <span class="c1"># Normalize left arm radius</span>
- <span class="n">mean_polar_lr</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'speaker'</span><span class="p">]</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">df_means</span><span class="p">[</span><span class="s1">'polar-lr'</span><span class="p">])</span>
- <span class="n">std_polar_lr</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'speaker'</span><span class="p">]</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">df_std</span><span class="p">[</span><span class="s1">'polar-lr'</span><span class="p">])</span>
- <span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'norm-polar-lr'</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="p">[</span><span class="s1">'polar-lr'</span><span class="p">]</span> <span class="o">-</span> <span class="n">mean_polar_lr</span><span class="p">)</span> <span class="o">/</span> <span class="n">std_polar_lr</span>
- </pre></div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <p><strong>Question 1:</strong> What custom features did you choose for the features_custom set and why?</p>
- <p><strong>Answer 1:</strong> Added new features - <em>norm-polar-lr</em> & <em>norm-polar-rr</em> which normalize the polar radius to account for differences in arm length.</p>
- <p>Also, as noted from the lectures, delta between values in consecutive time steps gives us an indication of speed. Hence, delta of normalized data might be a good metric.</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <p><a id='part1_test'></a></p>
- <h3 id="Features-Unit-Testing">Features Unit Testing<a class="anchor-link" href="#Features-Unit-Testing">¶</a></h3><p>Run the following unit tests as a sanity check on the defined "ground", "norm", "polar", and 'delta"
- feature sets. The test simply looks for some valid values but is not exhaustive. However, the project should not be submitted if these tests don't pass.</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [15]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">unittest</span>
- <span class="c1"># import numpy as np</span>
- <span class="k">class</span> <span class="nc">TestFeatures</span><span class="p">(</span><span class="n">unittest</span><span class="o">.</span><span class="n">TestCase</span><span class="p">):</span>
- <span class="k">def</span> <span class="nf">test_features_ground</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
- <span class="n">sample</span> <span class="o">=</span> <span class="p">(</span><span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span><span class="mi">98</span><span class="p">,</span> <span class="mi">1</span><span class="p">][</span><span class="n">features_ground</span><span class="p">])</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">sample</span><span class="p">,</span> <span class="p">[</span><span class="mi">9</span><span class="p">,</span> <span class="mi">113</span><span class="p">,</span> <span class="o">-</span><span class="mi">12</span><span class="p">,</span> <span class="mi">119</span><span class="p">])</span>
- <span class="k">def</span> <span class="nf">test_features_norm</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
- <span class="n">sample</span> <span class="o">=</span> <span class="p">(</span><span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span><span class="mi">98</span><span class="p">,</span> <span class="mi">1</span><span class="p">][</span><span class="n">features_norm</span><span class="p">])</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
- <span class="n">np</span><span class="o">.</span><span class="n">testing</span><span class="o">.</span><span class="n">assert_almost_equal</span><span class="p">(</span><span class="n">sample</span><span class="p">,</span> <span class="p">[</span> <span class="mf">1.153</span><span class="p">,</span> <span class="mf">1.663</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.891</span><span class="p">,</span> <span class="mf">0.742</span><span class="p">],</span> <span class="mi">3</span><span class="p">)</span>
- <span class="k">def</span> <span class="nf">test_features_polar</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
- <span class="n">sample</span> <span class="o">=</span> <span class="p">(</span><span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span><span class="mi">98</span><span class="p">,</span><span class="mi">1</span><span class="p">][</span><span class="n">features_polar</span><span class="p">])</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
- <span class="n">np</span><span class="o">.</span><span class="n">testing</span><span class="o">.</span><span class="n">assert_almost_equal</span><span class="p">(</span><span class="n">sample</span><span class="p">,</span> <span class="p">[</span><span class="mf">113.3578</span><span class="p">,</span> <span class="mf">0.0794</span><span class="p">,</span> <span class="mf">119.603</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.1005</span><span class="p">],</span> <span class="mi">3</span><span class="p">)</span>
- <span class="k">def</span> <span class="nf">test_features_delta</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
- <span class="n">sample</span> <span class="o">=</span> <span class="p">(</span><span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span><span class="mi">98</span><span class="p">,</span> <span class="mi">0</span><span class="p">][</span><span class="n">features_delta</span><span class="p">])</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">sample</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">])</span>
- <span class="n">sample</span> <span class="o">=</span> <span class="p">(</span><span class="n">asl</span><span class="o">.</span><span class="n">df</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span><span class="mi">98</span><span class="p">,</span> <span class="mi">18</span><span class="p">][</span><span class="n">features_delta</span><span class="p">])</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="n">sample</span> <span class="ow">in</span> <span class="p">[[</span><span class="o">-</span><span class="mi">16</span><span class="p">,</span> <span class="o">-</span><span class="mi">5</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="p">,</span> <span class="mi">4</span><span class="p">],</span> <span class="p">[</span><span class="o">-</span><span class="mi">14</span><span class="p">,</span> <span class="o">-</span><span class="mi">9</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]],</span> <span class="s2">"Sample value found was </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">sample</span><span class="p">))</span>
-
- <span class="n">suite</span> <span class="o">=</span> <span class="n">unittest</span><span class="o">.</span><span class="n">TestLoader</span><span class="p">()</span><span class="o">.</span><span class="n">loadTestsFromModule</span><span class="p">(</span><span class="n">TestFeatures</span><span class="p">())</span>
- <span class="n">unittest</span><span class="o">.</span><span class="n">TextTestRunner</span><span class="p">()</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">suite</span><span class="p">)</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stderr output_text">
- <pre>....
- ----------------------------------------------------------------------
- Ran 4 tests in 0.018s
- OK
- </pre>
- </div>
- </div>
- <div class="output_area"><div class="prompt output_prompt">Out[15]:</div>
- <div class="output_text output_subarea output_execute_result">
- <pre><unittest.runner.TextTestResult run=4 errors=0 failures=0></pre>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <p><a id='part2_tutorial'></a></p>
- <h2 id="PART-2:-Model-Selection">PART 2: Model Selection<a class="anchor-link" href="#PART-2:-Model-Selection">¶</a></h2><h3 id="Model-Selection-Tutorial">Model Selection Tutorial<a class="anchor-link" href="#Model-Selection-Tutorial">¶</a></h3><p>The objective of Model Selection is to tune the number of states for each word HMM prior to testing on unseen data. In this section you will explore three methods:</p>
- <ul>
- <li>Log likelihood using cross-validation folds (CV)</li>
- <li>Bayesian Information Criterion (BIC)</li>
- <li>Discriminative Information Criterion (DIC) </li>
- </ul>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h5 id="Train-a-single-word">Train a single word<a class="anchor-link" href="#Train-a-single-word">¶</a></h5><p>Now that we have built a training set with sequence data, we can "train" models for each word. As a simple starting example, we train a single word using Gaussian hidden Markov models (HMM). By using the <code>fit</code> method during training, the <a href="https://en.wikipedia.org/wiki/Baum%E2%80%93Welch_algorithm">Baum-Welch Expectation-Maximization</a> (EM) algorithm is invoked iteratively to find the best estimate for the model <em>for the number of hidden states specified</em> from a group of sample seequences. For this example, we <em>assume</em> the correct number of hidden states is 3, but that is just a guess. How do we know what the "best" number of states for training is? We will need to find some model selection technique to choose the best parameter.</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [16]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">warnings</span>
- <span class="kn">from</span> <span class="nn">hmmlearn.hmm</span> <span class="k">import</span> <span class="n">GaussianHMM</span>
- <span class="k">def</span> <span class="nf">train_a_word</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="n">num_hidden_states</span><span class="p">,</span> <span class="n">features</span><span class="p">):</span>
-
- <span class="n">warnings</span><span class="o">.</span><span class="n">filterwarnings</span><span class="p">(</span><span class="s2">"ignore"</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="ne">DeprecationWarning</span><span class="p">)</span>
- <span class="n">training</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">build_training</span><span class="p">(</span><span class="n">features</span><span class="p">)</span>
- <span class="n">X</span><span class="p">,</span> <span class="n">lengths</span> <span class="o">=</span> <span class="n">training</span><span class="o">.</span><span class="n">get_word_Xlengths</span><span class="p">(</span><span class="n">word</span><span class="p">)</span>
- <span class="n">model</span> <span class="o">=</span> <span class="n">GaussianHMM</span><span class="p">(</span><span class="n">n_components</span><span class="o">=</span><span class="n">num_hidden_states</span><span class="p">,</span> <span class="n">n_iter</span><span class="o">=</span><span class="mi">1000</span><span class="p">)</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">lengths</span><span class="p">)</span>
- <span class="n">logL</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">score</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">lengths</span><span class="p">)</span>
- <span class="k">return</span> <span class="n">model</span><span class="p">,</span> <span class="n">logL</span>
- <span class="n">demoword</span> <span class="o">=</span> <span class="s1">'BOOK'</span>
- <span class="n">model</span><span class="p">,</span> <span class="n">logL</span> <span class="o">=</span> <span class="n">train_a_word</span><span class="p">(</span><span class="n">demoword</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="n">features_ground</span><span class="p">)</span>
- <span class="nb">print</span><span class="p">(</span><span class="s2">"Number of states trained in model for </span><span class="si">{}</span><span class="s2"> is </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">demoword</span><span class="p">,</span> <span class="n">model</span><span class="o">.</span><span class="n">n_components</span><span class="p">))</span>
- <span class="nb">print</span><span class="p">(</span><span class="s2">"logL = </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">logL</span><span class="p">))</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>Number of states trained in model for BOOK is 3
- logL = -2331.1138127433196
- </pre>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <p>The HMM model has been trained and information can be pulled from the model, including means and variances for each feature and hidden state. The <a href="http://math.stackexchange.com/questions/892832/why-we-consider-log-likelihood-instead-of-likelihood-in-gaussian-distribution">log likelihood</a> for any individual sample or group of samples can also be calculated with the <code>score</code> method.</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [17]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">show_model_stats</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="n">model</span><span class="p">):</span>
- <span class="nb">print</span><span class="p">(</span><span class="s2">"Number of states trained in model for </span><span class="si">{}</span><span class="s2"> is </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="n">model</span><span class="o">.</span><span class="n">n_components</span><span class="p">))</span>
- <span class="n">variance</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">covars_</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">n_components</span><span class="p">)])</span>
- <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">n_components</span><span class="p">):</span> <span class="c1"># for each hidden state</span>
- <span class="nb">print</span><span class="p">(</span><span class="s2">"hidden state #</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="p">))</span>
- <span class="nb">print</span><span class="p">(</span><span class="s2">"mean = "</span><span class="p">,</span> <span class="n">model</span><span class="o">.</span><span class="n">means_</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
- <span class="nb">print</span><span class="p">(</span><span class="s2">"variance = "</span><span class="p">,</span> <span class="n">variance</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
- <span class="nb">print</span><span class="p">()</span>
-
- <span class="n">show_model_stats</span><span class="p">(</span><span class="n">demoword</span><span class="p">,</span> <span class="n">model</span><span class="p">)</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>Number of states trained in model for BOOK is 3
- hidden state #0
- mean = [ -1.12415027 69.44164191 17.02866283 77.7231196 ]
- variance = [ 19.70434594 16.83041492 30.51552305 11.03678246]
- hidden state #1
- mean = [ -11.45300909 94.109178 19.03512475 102.2030162 ]
- variance = [ 77.403668 203.35441965 26.68898447 156.12444034]
- hidden state #2
- mean = [ -3.46504869 50.66686933 14.02391587 52.04731066]
- variance = [ 49.12346305 43.04799144 39.35109609 47.24195772]
- </pre>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h5 id="Try-it!">Try it!<a class="anchor-link" href="#Try-it!">¶</a></h5><p>Experiment by changing the feature set, word, and/or num_hidden_states values in the next cell to see changes in values.</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [18]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="n">my_testword</span> <span class="o">=</span> <span class="s1">'CHOCOLATE'</span>
- <span class="n">model</span><span class="p">,</span> <span class="n">logL</span> <span class="o">=</span> <span class="n">train_a_word</span><span class="p">(</span><span class="n">my_testword</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="n">features_ground</span><span class="p">)</span> <span class="c1"># Experiment here with different parameters</span>
- <span class="n">show_model_stats</span><span class="p">(</span><span class="n">my_testword</span><span class="p">,</span> <span class="n">model</span><span class="p">)</span>
- <span class="nb">print</span><span class="p">(</span><span class="s2">"logL = </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">logL</span><span class="p">))</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>Number of states trained in model for CHOCOLATE is 3
- hidden state #0
- mean = [ 0.58333333 87.91666667 12.75 108.5 ]
- variance = [ 39.41055556 18.74388889 9.855 144.4175 ]
- hidden state #1
- mean = [ -9.30211403 55.32333876 6.92259936 71.24057775]
- variance = [ 16.16920957 46.50917372 3.81388185 15.79446427]
- hidden state #2
- mean = [ -5.40587658 60.1652424 2.32479599 91.3095432 ]
- variance = [ 7.95073876 64.13103127 13.68077479 129.5912395 ]
- logL = -601.3291470028619
- </pre>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h5 id="Visualize-the-hidden-states">Visualize the hidden states<a class="anchor-link" href="#Visualize-the-hidden-states">¶</a></h5><p>We can plot the means and variances for each state and feature. Try varying the number of states trained for the HMM model and examine the variances. Are there some models that are "better" than others? How can you tell? We would like to hear what you think in the classroom online.</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [19]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="o">%</span><span class="k">matplotlib</span> inline
- </pre></div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [20]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">math</span>
- <span class="kn">from</span> <span class="nn">matplotlib</span> <span class="k">import</span> <span class="p">(</span><span class="n">cm</span><span class="p">,</span> <span class="n">pyplot</span> <span class="k">as</span> <span class="n">plt</span><span class="p">,</span> <span class="n">mlab</span><span class="p">)</span>
- <span class="k">def</span> <span class="nf">visualize</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="n">model</span><span class="p">):</span>
- <span class="sd">""" visualize the input model for a particular word """</span>
- <span class="n">variance</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">covars_</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">n_components</span><span class="p">)])</span>
- <span class="n">figures</span> <span class="o">=</span> <span class="p">[]</span>
- <span class="k">for</span> <span class="n">parm_idx</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">means_</span><span class="p">[</span><span class="mi">0</span><span class="p">])):</span>
- <span class="n">xmin</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">min</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">means_</span><span class="p">[:,</span><span class="n">parm_idx</span><span class="p">])</span> <span class="o">-</span> <span class="nb">max</span><span class="p">(</span><span class="n">variance</span><span class="p">[:,</span><span class="n">parm_idx</span><span class="p">]))</span>
- <span class="n">xmax</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">means_</span><span class="p">[:,</span><span class="n">parm_idx</span><span class="p">])</span> <span class="o">+</span> <span class="nb">max</span><span class="p">(</span><span class="n">variance</span><span class="p">[:,</span><span class="n">parm_idx</span><span class="p">]))</span>
- <span class="n">fig</span><span class="p">,</span> <span class="n">axs</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">n_components</span><span class="p">,</span> <span class="n">sharex</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sharey</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
- <span class="n">colours</span> <span class="o">=</span> <span class="n">cm</span><span class="o">.</span><span class="n">rainbow</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">model</span><span class="o">.</span><span class="n">n_components</span><span class="p">))</span>
- <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">ax</span><span class="p">,</span> <span class="n">colour</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">axs</span><span class="p">,</span> <span class="n">colours</span><span class="p">)):</span>
- <span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="n">xmin</span><span class="p">,</span> <span class="n">xmax</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
- <span class="n">mu</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">means_</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="n">parm_idx</span><span class="p">]</span>
- <span class="n">sigma</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">covars_</span><span class="p">[</span><span class="n">i</span><span class="p">])[</span><span class="n">parm_idx</span><span class="p">])</span>
- <span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">mlab</span><span class="o">.</span><span class="n">normpdf</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">mu</span><span class="p">,</span> <span class="n">sigma</span><span class="p">),</span> <span class="n">c</span><span class="o">=</span><span class="n">colour</span><span class="p">)</span>
- <span class="n">ax</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s2">"</span><span class="si">{}</span><span class="s2"> feature </span><span class="si">{}</span><span class="s2"> hidden state #</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="n">parm_idx</span><span class="p">,</span> <span class="n">i</span><span class="p">))</span>
- <span class="n">ax</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
- <span class="n">figures</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">plt</span><span class="p">)</span>
- <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">figures</span><span class="p">:</span>
- <span class="n">p</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
-
- <span class="n">visualize</span><span class="p">(</span><span class="n">my_testword</span><span class="p">,</span> <span class="n">model</span><span class="p">)</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt"></div>
- <div class="output_png output_subarea ">
- <img src="data:image/png;base64,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
- "
- >
- </div>
- </div>
- <div class="output_area"><div class="prompt"></div>
- <div class="output_png output_subarea ">
- <img src="data:image/png;base64,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
- BEEQBJX8AceBcacrcAwzAAAAAElFTkSuQmCC
- "
- >
- </div>
- </div>
- <div class="output_area"><div class="prompt"></div>
- <div class="output_png output_subarea ">
- <img src="data:image/png;base64,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
- AAAAAElFTkSuQmCC
- "
- >
- </div>
- </div>
- <div class="output_area"><div class="prompt"></div>
- <div class="output_png output_subarea ">
- <img src="data:image/png;base64,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
- "
- >
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h5 id="ModelSelector-class">ModelSelector class<a class="anchor-link" href="#ModelSelector-class">¶</a></h5><p>Review the <code>ModelSelector</code> class from the codebase found in the <code>my_model_selectors.py</code> module. It is designed to be a strategy pattern for choosing different model selectors. For the project submission in this section, subclass <code>SelectorModel</code> to implement the following model selectors. In other words, you will write your own classes/functions in the <code>my_model_selectors.py</code> module and run them from this notebook:</p>
- <ul>
- <li><code>SelectorCV</code>: Log likelihood with CV</li>
- <li><code>SelectorBIC</code>: BIC </li>
- <li><code>SelectorDIC</code>: DIC</li>
- </ul>
- <p>You will train each word in the training set with a range of values for the number of hidden states, and then score these alternatives with the model selector, choosing the "best" according to each strategy. The simple case of training with a constant value for <code>n_components</code> can be called using the provided <code>SelectorConstant</code> subclass as follow:</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [21]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">my_model_selectors</span> <span class="k">import</span> <span class="n">SelectorConstant</span>
- <span class="n">training</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">build_training</span><span class="p">(</span><span class="n">features_ground</span><span class="p">)</span> <span class="c1"># Experiment here with different feature sets defined in part 1</span>
- <span class="n">word</span> <span class="o">=</span> <span class="s1">'VEGETABLE'</span> <span class="c1"># Experiment here with different words</span>
- <span class="n">model</span> <span class="o">=</span> <span class="n">SelectorConstant</span><span class="p">(</span><span class="n">training</span><span class="o">.</span><span class="n">get_all_sequences</span><span class="p">(),</span> <span class="n">training</span><span class="o">.</span><span class="n">get_all_Xlengths</span><span class="p">(),</span> <span class="n">word</span><span class="p">,</span> <span class="n">n_constant</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span><span class="o">.</span><span class="n">select</span><span class="p">()</span>
- <span class="nb">print</span><span class="p">(</span><span class="s2">"Number of states trained in model for </span><span class="si">{}</span><span class="s2"> is </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="n">model</span><span class="o">.</span><span class="n">n_components</span><span class="p">))</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>Number of states trained in model for VEGETABLE is 3
- </pre>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h5 id="Cross-validation-folds">Cross-validation folds<a class="anchor-link" href="#Cross-validation-folds">¶</a></h5><p>If we simply score the model with the Log Likelihood calculated from the feature sequences it has been trained on, we should expect that more complex models will have higher likelihoods. However, that doesn't tell us which would have a better likelihood score on unseen data. The model will likely be overfit as complexity is added. To estimate which topology model is better using only the training data, we can compare scores using cross-validation. One technique for cross-validation is to break the training set into "folds" and rotate which fold is left out of training. The "left out" fold scored. This gives us a proxy method of finding the best model to use on "unseen data". In the following example, a set of word sequences is broken into three folds using the <a href="http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html">scikit-learn Kfold</a> class object. When you implement <code>SelectorCV</code>, you will use this technique.</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [22]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">sklearn.model_selection</span> <span class="k">import</span> <span class="n">KFold</span>
- <span class="n">training</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">build_training</span><span class="p">(</span><span class="n">features_ground</span><span class="p">)</span> <span class="c1"># Experiment here with different feature sets</span>
- <span class="n">word</span> <span class="o">=</span> <span class="s1">'VEGETABLE'</span> <span class="c1"># Experiment here with different words</span>
- <span class="n">word_sequences</span> <span class="o">=</span> <span class="n">training</span><span class="o">.</span><span class="n">get_word_sequences</span><span class="p">(</span><span class="n">word</span><span class="p">)</span>
- <span class="n">split_method</span> <span class="o">=</span> <span class="n">KFold</span><span class="p">()</span>
- <span class="k">for</span> <span class="n">cv_train_idx</span><span class="p">,</span> <span class="n">cv_test_idx</span> <span class="ow">in</span> <span class="n">split_method</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">word_sequences</span><span class="p">):</span>
- <span class="nb">print</span><span class="p">(</span><span class="s2">"Train fold indices:</span><span class="si">{}</span><span class="s2"> Test fold indices:</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">cv_train_idx</span><span class="p">,</span> <span class="n">cv_test_idx</span><span class="p">))</span> <span class="c1"># view indices of the folds</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>Train fold indices:[2 3 4 5] Test fold indices:[0 1]
- Train fold indices:[0 1 4 5] Test fold indices:[2 3]
- Train fold indices:[0 1 2 3] Test fold indices:[4 5]
- </pre>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <p><strong>Tip:</strong> In order to run <code>hmmlearn</code> training using the X,lengths tuples on the new folds, subsets must be combined based on the indices given for the folds. A helper utility has been provided in the <code>asl_utils</code> module named <code>combine_sequences</code> for this purpose.</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h5 id="Scoring-models-with-other-criterion">Scoring models with other criterion<a class="anchor-link" href="#Scoring-models-with-other-criterion">¶</a></h5><p>Scoring model topologies with <strong>BIC</strong> balances fit and complexity within the training set for each word. In the BIC equation, a penalty term penalizes complexity to avoid overfitting, so that it is not necessary to also use cross-validation in the selection process. There are a number of references on the internet for this criterion. These <a href="http://www2.imm.dtu.dk/courses/02433/doc/ch6_slides.pdf">slides</a> include a formula you may find helpful for your implementation.</p>
- <p>The advantages of scoring model topologies with <strong>DIC</strong> over BIC are presented by Alain Biem in this <a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.58.6208&rep=rep1&type=pdf">reference</a> (also found <a href="https://pdfs.semanticscholar.org/ed3d/7c4a5f607201f3848d4c02dd9ba17c791fc2.pdf">here</a>). DIC scores the discriminant ability of a training set for one word against competing words. Instead of a penalty term for complexity, it provides a penalty if model liklihoods for non-matching words are too similar to model likelihoods for the correct word in the word set.</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <p><a id='part2_submission'></a></p>
- <h3 id="Model-Selection-Implementation-Submission">Model Selection Implementation Submission<a class="anchor-link" href="#Model-Selection-Implementation-Submission">¶</a></h3><p>Implement <code>SelectorCV</code>, <code>SelectorBIC</code>, and <code>SelectorDIC</code> classes in the <code>my_model_selectors.py</code> module. Run the selectors on the following five words. Then answer the questions about your results.</p>
- <p><strong>Tip:</strong> The <code>hmmlearn</code> library may not be able to train or score all models. Implement try/except contructs as necessary to eliminate non-viable models from consideration.</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [23]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="n">words_to_train</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'FISH'</span><span class="p">,</span> <span class="s1">'BOOK'</span><span class="p">,</span> <span class="s1">'VEGETABLE'</span><span class="p">,</span> <span class="s1">'FUTURE'</span><span class="p">,</span> <span class="s1">'JOHN'</span><span class="p">]</span>
- <span class="kn">import</span> <span class="nn">timeit</span>
- </pre></div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [24]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># TODO: Implement SelectorCV in my_model_selector.py</span>
- <span class="kn">from</span> <span class="nn">my_model_selectors</span> <span class="k">import</span> <span class="n">SelectorCV</span>
- <span class="n">training</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">build_training</span><span class="p">(</span><span class="n">features_ground</span><span class="p">)</span> <span class="c1"># Experiment here with different feature sets defined in part 1</span>
- <span class="n">sequences</span> <span class="o">=</span> <span class="n">training</span><span class="o">.</span><span class="n">get_all_sequences</span><span class="p">()</span>
- <span class="n">Xlengths</span> <span class="o">=</span> <span class="n">training</span><span class="o">.</span><span class="n">get_all_Xlengths</span><span class="p">()</span>
- <span class="k">for</span> <span class="n">word</span> <span class="ow">in</span> <span class="n">words_to_train</span><span class="p">:</span>
- <span class="n">start</span> <span class="o">=</span> <span class="n">timeit</span><span class="o">.</span><span class="n">default_timer</span><span class="p">()</span>
- <span class="n">model</span> <span class="o">=</span> <span class="n">SelectorCV</span><span class="p">(</span><span class="n">sequences</span><span class="p">,</span> <span class="n">Xlengths</span><span class="p">,</span> <span class="n">word</span><span class="p">,</span>
- <span class="n">min_n_components</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">max_n_components</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span> <span class="n">random_state</span> <span class="o">=</span> <span class="mi">14</span><span class="p">)</span><span class="o">.</span><span class="n">select</span><span class="p">()</span>
- <span class="n">end</span> <span class="o">=</span> <span class="n">timeit</span><span class="o">.</span><span class="n">default_timer</span><span class="p">()</span> <span class="o">-</span> <span class="n">start</span>
- <span class="k">if</span> <span class="n">model</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
- <span class="nb">print</span><span class="p">(</span><span class="s2">"Training complete for </span><span class="si">{}</span><span class="s2"> with </span><span class="si">{}</span><span class="s2"> states with time </span><span class="si">{}</span><span class="s2"> seconds"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="n">model</span><span class="o">.</span><span class="n">n_components</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="nb">print</span><span class="p">(</span><span class="s2">"Training failed for </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">word</span><span class="p">))</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>Training complete for FISH with 3 states with time 0.028000007005175576 seconds
- Training complete for BOOK with 15 states with time 2.330455476010684 seconds
- Training complete for VEGETABLE with 15 states with time 0.7969696299987845 seconds
- Training complete for FUTURE with 15 states with time 2.4186781469907146 seconds
- Training complete for JOHN with 15 states with time 25.637559488997795 seconds
- </pre>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [25]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># TODO: Implement SelectorBIC in module my_model_selectors.py</span>
- <span class="kn">from</span> <span class="nn">my_model_selectors</span> <span class="k">import</span> <span class="n">SelectorBIC</span>
- <span class="n">training</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">build_training</span><span class="p">(</span><span class="n">features_ground</span><span class="p">)</span> <span class="c1"># Experiment here with different feature sets defined in part 1</span>
- <span class="n">sequences</span> <span class="o">=</span> <span class="n">training</span><span class="o">.</span><span class="n">get_all_sequences</span><span class="p">()</span>
- <span class="n">Xlengths</span> <span class="o">=</span> <span class="n">training</span><span class="o">.</span><span class="n">get_all_Xlengths</span><span class="p">()</span>
- <span class="k">for</span> <span class="n">word</span> <span class="ow">in</span> <span class="n">words_to_train</span><span class="p">:</span>
- <span class="n">start</span> <span class="o">=</span> <span class="n">timeit</span><span class="o">.</span><span class="n">default_timer</span><span class="p">()</span>
- <span class="n">model</span> <span class="o">=</span> <span class="n">SelectorBIC</span><span class="p">(</span><span class="n">sequences</span><span class="p">,</span> <span class="n">Xlengths</span><span class="p">,</span> <span class="n">word</span><span class="p">,</span>
- <span class="n">min_n_components</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">max_n_components</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span> <span class="n">random_state</span> <span class="o">=</span> <span class="mi">14</span><span class="p">)</span><span class="o">.</span><span class="n">select</span><span class="p">()</span>
- <span class="n">end</span> <span class="o">=</span> <span class="n">timeit</span><span class="o">.</span><span class="n">default_timer</span><span class="p">()</span><span class="o">-</span><span class="n">start</span>
- <span class="k">if</span> <span class="n">model</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
- <span class="nb">print</span><span class="p">(</span><span class="s2">"Training complete for </span><span class="si">{}</span><span class="s2"> with </span><span class="si">{}</span><span class="s2"> states with time </span><span class="si">{}</span><span class="s2"> seconds"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="n">model</span><span class="o">.</span><span class="n">n_components</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="nb">print</span><span class="p">(</span><span class="s2">"Training failed for </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">word</span><span class="p">))</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>Training complete for FISH with 2 states with time 0.09146881599735934 seconds
- Training complete for BOOK with 2 states with time 2.016845521997311 seconds
- Training complete for VEGETABLE with 2 states with time 0.7241176120005548 seconds
- Training complete for FUTURE with 2 states with time 2.1909853079996537 seconds
- Training complete for JOHN with 2 states with time 22.080462529993383 seconds
- </pre>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [26]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># TODO: Implement SelectorDIC in module my_model_selectors.py</span>
- <span class="kn">from</span> <span class="nn">my_model_selectors</span> <span class="k">import</span> <span class="n">SelectorDIC</span>
- <span class="n">training</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">build_training</span><span class="p">(</span><span class="n">features_ground</span><span class="p">)</span> <span class="c1"># Experiment here with different feature sets defined in part 1</span>
- <span class="n">sequences</span> <span class="o">=</span> <span class="n">training</span><span class="o">.</span><span class="n">get_all_sequences</span><span class="p">()</span>
- <span class="n">Xlengths</span> <span class="o">=</span> <span class="n">training</span><span class="o">.</span><span class="n">get_all_Xlengths</span><span class="p">()</span>
- <span class="k">for</span> <span class="n">word</span> <span class="ow">in</span> <span class="n">words_to_train</span><span class="p">:</span>
- <span class="n">start</span> <span class="o">=</span> <span class="n">timeit</span><span class="o">.</span><span class="n">default_timer</span><span class="p">()</span>
- <span class="n">model</span> <span class="o">=</span> <span class="n">SelectorDIC</span><span class="p">(</span><span class="n">sequences</span><span class="p">,</span> <span class="n">Xlengths</span><span class="p">,</span> <span class="n">word</span><span class="p">,</span>
- <span class="n">min_n_components</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">max_n_components</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span> <span class="n">random_state</span> <span class="o">=</span> <span class="mi">14</span><span class="p">)</span><span class="o">.</span><span class="n">select</span><span class="p">()</span>
- <span class="n">end</span> <span class="o">=</span> <span class="n">timeit</span><span class="o">.</span><span class="n">default_timer</span><span class="p">()</span><span class="o">-</span><span class="n">start</span>
- <span class="k">if</span> <span class="n">model</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
- <span class="nb">print</span><span class="p">(</span><span class="s2">"Training complete for </span><span class="si">{}</span><span class="s2"> with </span><span class="si">{}</span><span class="s2"> states with time </span><span class="si">{}</span><span class="s2"> seconds"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">word</span><span class="p">,</span> <span class="n">model</span><span class="o">.</span><span class="n">n_components</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="nb">print</span><span class="p">(</span><span class="s2">"Training failed for </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">word</span><span class="p">))</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>Training complete for FISH with 3 states with time 0.09454512700904161 seconds
- Training complete for BOOK with 15 states with time 2.4017886569927214 seconds
- Training complete for VEGETABLE with 15 states with time 0.8214017159916693 seconds
- Training complete for FUTURE with 15 states with time 2.455093226992176 seconds
- Training complete for JOHN with 15 states with time 25.174293504998786 seconds
- </pre>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <p><strong>Question 2:</strong> Compare and contrast the possible advantages and disadvantages of the various model selectors implemented.</p>
- <p><strong>Answer 2:</strong> Selection using cross validation is the easier to implement compared to BIC & DIC. The idea in BIC to penalize model complexity is interesting as it may also have a side effect of faster running times. Yet, I also think it might be a doubled edged sword, as in some cases it will sacrifice complexity for performance. <strong>DIC seems like the best selector</strong> because it will use the model that gives the best distinction between the word of interest and all others. This should result in the best performing model but also the most sluggish as it needs to calculate the probabilities of each word.</p>
- <p>A more formal listing of advantages & disadvantages is depicted below.</p>
- <h3 id="Cross-Validation:">Cross Validation:<a class="anchor-link" href="#Cross-Validation:">¶</a></h3><p><strong>Advantages:</strong> Does not need a lot of data for training – as the train data is folded to simulate the behavior that the model will have in test data.</p>
- <p><strong>Disadvantages:</strong> It needs to split the sequences from the beginning each time a new state will be evaluated (overhead).</p>
- <h3 id="BIC:">BIC:<a class="anchor-link" href="#BIC:">¶</a></h3><p><strong>Advantages:</strong> It penalizes model's complexity (of parameters).</p>
- <p><strong>Disadvantages</strong> Not as accurate as cross-validation – this could be possible because of the requirement of more training data (as there are no folds to simulate test data).</p>
- <h3 id="DIC:">DIC:<a class="anchor-link" href="#DIC:">¶</a></h3><p><strong>Advantages:</strong> Better performance than BIC.</p>
- <p><strong>Disadvantages:</strong> Model complexity is not penalized which might lead to a large number of parameters.</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <p><a id='part2_test'></a></p>
- <h3 id="Model-Selector-Unit-Testing">Model Selector Unit Testing<a class="anchor-link" href="#Model-Selector-Unit-Testing">¶</a></h3><p>Run the following unit tests as a sanity check on the implemented model selectors. The test simply looks for valid interfaces but is not exhaustive. However, the project should not be submitted if these tests don't pass.</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [27]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">asl_test_model_selectors</span> <span class="k">import</span> <span class="n">TestSelectors</span>
- <span class="n">suite</span> <span class="o">=</span> <span class="n">unittest</span><span class="o">.</span><span class="n">TestLoader</span><span class="p">()</span><span class="o">.</span><span class="n">loadTestsFromModule</span><span class="p">(</span><span class="n">TestSelectors</span><span class="p">())</span>
- <span class="n">unittest</span><span class="o">.</span><span class="n">TextTestRunner</span><span class="p">()</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">suite</span><span class="p">)</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stderr output_text">
- <pre>....
- ----------------------------------------------------------------------
- Ran 4 tests in 39.572s
- OK
- </pre>
- </div>
- </div>
- <div class="output_area"><div class="prompt output_prompt">Out[27]:</div>
- <div class="output_text output_subarea output_execute_result">
- <pre><unittest.runner.TextTestResult run=4 errors=0 failures=0></pre>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <p><a id='part3_tutorial'></a></p>
- <h2 id="PART-3:-Recognizer">PART 3: Recognizer<a class="anchor-link" href="#PART-3:-Recognizer">¶</a></h2><p>The objective of this section is to "put it all together". Using the four feature sets created and the three model selectors, you will experiment with the models and present your results. Instead of training only five specific words as in the previous section, train the entire set with a feature set and model selector strategy.</p>
- <h3 id="Recognizer-Tutorial">Recognizer Tutorial<a class="anchor-link" href="#Recognizer-Tutorial">¶</a></h3><h5 id="Train-the-full-training-set">Train the full training set<a class="anchor-link" href="#Train-the-full-training-set">¶</a></h5><p>The following example trains the entire set with the example <code>features_ground</code> and <code>SelectorConstant</code> features and model selector. Use this pattern for you experimentation and final submission cells.</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [28]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># autoreload for automatically reloading changes made in my_model_selectors and my_recognizer</span>
- <span class="o">%</span><span class="k">load_ext</span> autoreload
- <span class="o">%</span><span class="k">autoreload</span> 2
- <span class="kn">from</span> <span class="nn">my_model_selectors</span> <span class="k">import</span> <span class="n">SelectorConstant</span>
- <span class="k">def</span> <span class="nf">train_all_words</span><span class="p">(</span><span class="n">features</span><span class="p">,</span> <span class="n">model_selector</span><span class="p">):</span>
- <span class="n">training</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">build_training</span><span class="p">(</span><span class="n">features</span><span class="p">)</span> <span class="c1"># Experiment here with different feature sets defined in part 1</span>
- <span class="n">sequences</span> <span class="o">=</span> <span class="n">training</span><span class="o">.</span><span class="n">get_all_sequences</span><span class="p">()</span>
- <span class="n">Xlengths</span> <span class="o">=</span> <span class="n">training</span><span class="o">.</span><span class="n">get_all_Xlengths</span><span class="p">()</span>
- <span class="n">model_dict</span> <span class="o">=</span> <span class="p">{}</span>
- <span class="k">for</span> <span class="n">word</span> <span class="ow">in</span> <span class="n">training</span><span class="o">.</span><span class="n">words</span><span class="p">:</span>
- <span class="n">model</span> <span class="o">=</span> <span class="n">model_selector</span><span class="p">(</span><span class="n">sequences</span><span class="p">,</span> <span class="n">Xlengths</span><span class="p">,</span> <span class="n">word</span><span class="p">,</span>
- <span class="n">n_constant</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span><span class="o">.</span><span class="n">select</span><span class="p">()</span>
- <span class="n">model_dict</span><span class="p">[</span><span class="n">word</span><span class="p">]</span><span class="o">=</span><span class="n">model</span>
- <span class="k">return</span> <span class="n">model_dict</span>
- <span class="n">models</span> <span class="o">=</span> <span class="n">train_all_words</span><span class="p">(</span><span class="n">features_ground</span><span class="p">,</span> <span class="n">SelectorConstant</span><span class="p">)</span>
- <span class="nb">print</span><span class="p">(</span><span class="s2">"Number of word models returned = </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">models</span><span class="p">)))</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>Number of word models returned = 112
- </pre>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h5 id="Load-the-test-set">Load the test set<a class="anchor-link" href="#Load-the-test-set">¶</a></h5><p>The <code>build_test</code> method in <code>ASLdb</code> is similar to the <code>build_training</code> method already presented, but there are a few differences:</p>
- <ul>
- <li>the object is type <code>SinglesData</code> </li>
- <li>the internal dictionary keys are the index of the test word rather than the word itself</li>
- <li>the getter methods are <code>get_all_sequences</code>, <code>get_all_Xlengths</code>, <code>get_item_sequences</code> and <code>get_item_Xlengths</code></li>
- </ul>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [29]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="n">test_set</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">build_test</span><span class="p">(</span><span class="n">features_ground</span><span class="p">)</span>
- <span class="nb">print</span><span class="p">(</span><span class="s2">"Number of test set items: </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">test_set</span><span class="o">.</span><span class="n">num_items</span><span class="p">))</span>
- <span class="nb">print</span><span class="p">(</span><span class="s2">"Number of test set sentences: </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">test_set</span><span class="o">.</span><span class="n">sentences_index</span><span class="p">)))</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>Number of test set items: 178
- Number of test set sentences: 40
- </pre>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <p><a id='part3_submission'></a></p>
- <h3 id="Recognizer-Implementation-Submission">Recognizer Implementation Submission<a class="anchor-link" href="#Recognizer-Implementation-Submission">¶</a></h3><p>For the final project submission, students must implement a recognizer following guidance in the <code>my_recognizer.py</code> module. Experiment with the four feature sets and the three model selection methods (that's 12 possible combinations). You can add and remove cells for experimentation or run the recognizers locally in some other way during your experiments, but retain the results for your discussion. For submission, you will provide code cells of <strong>only three</strong> interesting combinations for your discussion (see questions below). At least one of these should produce a word error rate of less than 60%, i.e. WER < 0.60 .</p>
- <p><strong>Tip:</strong> The hmmlearn library may not be able to train or score all models. Implement try/except contructs as necessary to eliminate non-viable models from consideration.</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [30]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># TODO implement the recognize method in my_recognizer</span>
- <span class="kn">from</span> <span class="nn">my_recognizer</span> <span class="k">import</span> <span class="n">recognize</span>
- <span class="kn">from</span> <span class="nn">asl_utils</span> <span class="k">import</span> <span class="n">show_errors</span>
- </pre></div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [33]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># TODO Choose a feature set and model selector</span>
- <span class="n">features</span> <span class="o">=</span> <span class="n">features_polar</span> <span class="c1"># change as needed</span>
- <span class="n">model_selector</span> <span class="o">=</span> <span class="n">SelectorCV</span> <span class="c1"># change as needed</span>
- <span class="c1"># TODO Recognize the test set and display the result with the show_errors method</span>
- <span class="n">models</span> <span class="o">=</span> <span class="n">train_all_words</span><span class="p">(</span><span class="n">features</span><span class="p">,</span> <span class="n">model_selector</span><span class="p">)</span>
- <span class="n">test_set</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">build_test</span><span class="p">(</span><span class="n">features</span><span class="p">)</span>
- <span class="n">probabilities</span><span class="p">,</span> <span class="n">guesses</span> <span class="o">=</span> <span class="n">recognize</span><span class="p">(</span><span class="n">models</span><span class="p">,</span> <span class="n">test_set</span><span class="p">)</span>
- <span class="n">show_errors</span><span class="p">(</span><span class="n">guesses</span><span class="p">,</span> <span class="n">test_set</span><span class="p">)</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>
- **** WER = 0.5280898876404494
- Total correct: 84 out of 178
- Video Recognized Correct
- =====================================================================================================
- 2: JOHN WRITE HOMEWORK JOHN WRITE HOMEWORK
- 7: JOHN CAN GO CAN JOHN CAN GO CAN
- 12: JOHN *WHAT *JOHN CAN JOHN CAN GO CAN
- 21: JOHN *HOMEWORK *JOHN *PREFER BUT *WHAT *FUTURE *WHO JOHN FISH WONT EAT BUT CAN EAT CHICKEN
- 25: JOHN *IX IX *WHO IX JOHN LIKE IX IX IX
- 28: JOHN *FUTURE IX *FUTURE *LOVE JOHN LIKE IX IX IX
- 30: JOHN LIKE *MARY *MARY *MARY JOHN LIKE IX IX IX
- 36: *IX *VISIT *GIVE *GIVE *MARY *MARY MARY VEGETABLE KNOW IX LIKE CORN1
- 40: JOHN *GO *DECIDE *JOHN *MARY JOHN IX THINK MARY LOVE
- 43: JOHN *IX BUY HOUSE JOHN MUST BUY HOUSE
- 50: *JOHN *SEE BUY CAR *JOHN FUTURE JOHN BUY CAR SHOULD
- 54: JOHN SHOULD NOT BUY HOUSE JOHN SHOULD NOT BUY HOUSE
- 57: *MARY *GO *GO MARY JOHN DECIDE VISIT MARY
- 67: *SHOULD FUTURE *MARY BUY HOUSE JOHN FUTURE NOT BUY HOUSE
- 71: JOHN *FUTURE *GIVE1 MARY JOHN WILL VISIT MARY
- 74: *IX *GO *GO *VISIT JOHN NOT VISIT MARY
- 77: *JOHN *GIVE1 MARY ANN BLAME MARY
- 84: *HOMEWORK *GIVE1 *HOMEWORK *COAT IX-1P FIND SOMETHING-ONE BOOK
- 89: *MAN *GIVE *IX *IX IX *ARRIVE *BOOK JOHN IX GIVE MAN IX NEW COAT
- 90: JOHN GIVE IX SOMETHING-ONE WOMAN *ARRIVE JOHN GIVE IX SOMETHING-ONE WOMAN BOOK
- 92: JOHN *IX IX *IX *IX BOOK JOHN GIVE IX SOMETHING-ONE WOMAN BOOK
- 100: POSS NEW CAR BREAK-DOWN POSS NEW CAR BREAK-DOWN
- 105: JOHN *SEE JOHN LEG
- 107: JOHN POSS *HAVE HAVE *MARY JOHN POSS FRIEND HAVE CANDY
- 108: *LOVE *HOMEWORK WOMAN ARRIVE
- 113: IX CAR *IX *MARY *JOHN IX CAR BLUE SUE BUY
- 119: *MARY *BUY1 IX *BLAME *IX SUE BUY IX CAR BLUE
- 122: JOHN *GIVE1 BOOK JOHN READ BOOK
- 139: JOHN *ARRIVE WHAT *MARY *ARRIVE JOHN BUY WHAT YESTERDAY BOOK
- 142: JOHN BUY YESTERDAY WHAT BOOK JOHN BUY YESTERDAY WHAT BOOK
- 158: LOVE JOHN WHO LOVE JOHN WHO
- 167: JOHN *MARY *VISIT LOVE MARY JOHN IX SAY LOVE MARY
- 171: *IX MARY BLAME JOHN MARY BLAME
- 174: *JOHN *GIVE3 GIVE1 *YESTERDAY *JOHN PEOPLE GROUP GIVE1 JANA TOY
- 181: *EAT ARRIVE JOHN ARRIVE
- 184: ALL BOY *GIVE1 TEACHER *YESTERDAY ALL BOY GIVE TEACHER APPLE
- 189: *MARY *GO *YESTERDAY BOX JOHN GIVE GIRL BOX
- 193: JOHN *GO *YESTERDAY BOX JOHN GIVE GIRL BOX
- 199: *HOMEWORK *STUDENT *GO LIKE CHOCOLATE WHO
- 201: JOHN *MAN *LOVE *JOHN BUY HOUSE JOHN TELL MARY IX-1P BUY HOUSE
- </pre>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [34]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># TODO Choose a feature set and model selector</span>
- <span class="c1"># TODO Recognize the test set and display the result with the show_errors method</span>
- <span class="n">features</span> <span class="o">=</span> <span class="n">features_polar</span> <span class="c1"># change as needed</span>
- <span class="n">model_selector</span> <span class="o">=</span> <span class="n">SelectorDIC</span> <span class="c1"># change as needed</span>
- <span class="c1"># TODO Recognize the test set and display the result with the show_errors method</span>
- <span class="n">models</span> <span class="o">=</span> <span class="n">train_all_words</span><span class="p">(</span><span class="n">features</span><span class="p">,</span> <span class="n">model_selector</span><span class="p">)</span>
- <span class="n">test_set</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">build_test</span><span class="p">(</span><span class="n">features</span><span class="p">)</span>
- <span class="n">probabilities</span><span class="p">,</span> <span class="n">guesses</span> <span class="o">=</span> <span class="n">recognize</span><span class="p">(</span><span class="n">models</span><span class="p">,</span> <span class="n">test_set</span><span class="p">)</span>
- <span class="n">show_errors</span><span class="p">(</span><span class="n">guesses</span><span class="p">,</span> <span class="n">test_set</span><span class="p">)</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>
- **** WER = 0.5337078651685393
- Total correct: 83 out of 178
- Video Recognized Correct
- =====================================================================================================
- 2: JOHN *NEW HOMEWORK JOHN WRITE HOMEWORK
- 7: JOHN CAN GO CAN JOHN CAN GO CAN
- 12: JOHN *WHAT *JOHN CAN JOHN CAN GO CAN
- 21: JOHN *HOMEWORK *JOHN *PREFER *CAR *WHAT *FUTURE *WHO JOHN FISH WONT EAT BUT CAN EAT CHICKEN
- 25: JOHN *IX IX *WHO IX JOHN LIKE IX IX IX
- 28: JOHN *FUTURE IX *FUTURE *LOVE JOHN LIKE IX IX IX
- 30: JOHN LIKE *MARY *MARY *MARY JOHN LIKE IX IX IX
- 36: *IX *EAT *GIVE *GIVE *MARY *MARY MARY VEGETABLE KNOW IX LIKE CORN1
- 40: JOHN *GO *GIVE *JOHN *MARY JOHN IX THINK MARY LOVE
- 43: JOHN *IX BUY HOUSE JOHN MUST BUY HOUSE
- 50: *JOHN *SEE BUY CAR *JOHN FUTURE JOHN BUY CAR SHOULD
- 54: JOHN SHOULD NOT BUY HOUSE JOHN SHOULD NOT BUY HOUSE
- 57: *MARY *GO *GO MARY JOHN DECIDE VISIT MARY
- 67: *SHOULD FUTURE *MARY BUY HOUSE JOHN FUTURE NOT BUY HOUSE
- 71: JOHN *FUTURE *GIVE1 MARY JOHN WILL VISIT MARY
- 74: *IX *GO *GO *VISIT JOHN NOT VISIT MARY
- 77: *JOHN *GIVE1 MARY ANN BLAME MARY
- 84: *HOMEWORK *GIVE1 *HOMEWORK *COAT IX-1P FIND SOMETHING-ONE BOOK
- 89: *GIVE *GIVE *IX *IX IX *ARRIVE *BOOK JOHN IX GIVE MAN IX NEW COAT
- 90: JOHN GIVE IX SOMETHING-ONE WOMAN *ARRIVE JOHN GIVE IX SOMETHING-ONE WOMAN BOOK
- 92: JOHN *IX IX *IX *IX BOOK JOHN GIVE IX SOMETHING-ONE WOMAN BOOK
- 100: POSS NEW CAR BREAK-DOWN POSS NEW CAR BREAK-DOWN
- 105: JOHN *SEE JOHN LEG
- 107: JOHN POSS *HAVE HAVE *MARY JOHN POSS FRIEND HAVE CANDY
- 108: *LOVE *HOMEWORK WOMAN ARRIVE
- 113: IX CAR *IX *MARY *JOHN IX CAR BLUE SUE BUY
- 119: *MARY *BUY1 IX *BLAME *IX SUE BUY IX CAR BLUE
- 122: JOHN *GIVE1 BOOK JOHN READ BOOK
- 139: JOHN *ARRIVE WHAT *MARY *ARRIVE JOHN BUY WHAT YESTERDAY BOOK
- 142: JOHN BUY YESTERDAY WHAT BOOK JOHN BUY YESTERDAY WHAT BOOK
- 158: LOVE JOHN WHO LOVE JOHN WHO
- 167: JOHN *MARY *VISIT LOVE MARY JOHN IX SAY LOVE MARY
- 171: *IX MARY BLAME JOHN MARY BLAME
- 174: *JOHN GROUP GIVE1 *YESTERDAY *JOHN PEOPLE GROUP GIVE1 JANA TOY
- 181: *EAT ARRIVE JOHN ARRIVE
- 184: ALL BOY *GIVE1 TEACHER *YESTERDAY ALL BOY GIVE TEACHER APPLE
- 189: *MARY *GO *YESTERDAY BOX JOHN GIVE GIRL BOX
- 193: JOHN *GO *YESTERDAY BOX JOHN GIVE GIRL BOX
- 199: *HOMEWORK *STUDENT *GO LIKE CHOCOLATE WHO
- 201: JOHN *GIVE *LOVE *JOHN BUY HOUSE JOHN TELL MARY IX-1P BUY HOUSE
- </pre>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [35]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># TODO Choose a feature set and model selector</span>
- <span class="c1"># TODO Recognize the test set and display the result with the show_errors method</span>
- <span class="n">features</span> <span class="o">=</span> <span class="n">features_norm</span> <span class="c1"># change as needed</span>
- <span class="n">model_selector</span> <span class="o">=</span> <span class="n">SelectorCV</span> <span class="c1"># change as needed</span>
- <span class="c1"># TODO Recognize the test set and display the result with the show_errors method</span>
- <span class="n">models</span> <span class="o">=</span> <span class="n">train_all_words</span><span class="p">(</span><span class="n">features</span><span class="p">,</span> <span class="n">model_selector</span><span class="p">)</span>
- <span class="n">test_set</span> <span class="o">=</span> <span class="n">asl</span><span class="o">.</span><span class="n">build_test</span><span class="p">(</span><span class="n">features</span><span class="p">)</span>
- <span class="n">probabilities</span><span class="p">,</span> <span class="n">guesses</span> <span class="o">=</span> <span class="n">recognize</span><span class="p">(</span><span class="n">models</span><span class="p">,</span> <span class="n">test_set</span><span class="p">)</span>
- <span class="n">show_errors</span><span class="p">(</span><span class="n">guesses</span><span class="p">,</span> <span class="n">test_set</span><span class="p">)</span>
- </pre></div>
- </div>
- </div>
- </div>
- <div class="output_wrapper">
- <div class="output">
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>
- **** WER = 0.6067415730337079
- Total correct: 70 out of 178
- Video Recognized Correct
- =====================================================================================================
- 2: JOHN WRITE HOMEWORK JOHN WRITE HOMEWORK
- 7: *MARY *CAR GO *WHAT JOHN CAN GO CAN
- 12: JOHN *CAR *WHAT CAN JOHN CAN GO CAN
- 21: *MARY *BOX *JOHN *BLAME *CAR *CAR *CHICKEN *WRITE JOHN FISH WONT EAT BUT CAN EAT CHICKEN
- 25: JOHN LIKE IX *MARY IX JOHN LIKE IX IX IX
- 28: *ANN LIKE *ANN *ANN *ANN JOHN LIKE IX IX IX
- 30: *IX-1P *CHOCOLATE *MARY *LOVE *LOVE JOHN LIKE IX IX IX
- 36: MARY *MARY *YESTERDAY *WOMAN LIKE *IX MARY VEGETABLE KNOW IX LIKE CORN1
- 40: *MARY *JOHN *FUTURE1 MARY *MARY JOHN IX THINK MARY LOVE
- 43: JOHN *FUTURE BUY HOUSE JOHN MUST BUY HOUSE
- 50: *POSS *SEE *BOX CAR *IX FUTURE JOHN BUY CAR SHOULD
- 54: JOHN *FUTURE *SHOULD *ARRIVE HOUSE JOHN SHOULD NOT BUY HOUSE
- 57: *LOVE *IX *JOHN *VISIT JOHN DECIDE VISIT MARY
- 67: *MARY *IX *JOHN *ARRIVE HOUSE JOHN FUTURE NOT BUY HOUSE
- 71: JOHN WILL VISIT MARY JOHN WILL VISIT MARY
- 74: *GO *VISIT VISIT MARY JOHN NOT VISIT MARY
- 77: *JOHN BLAME MARY ANN BLAME MARY
- 84: *JOHN *BOX *VISIT BOOK IX-1P FIND SOMETHING-ONE BOOK
- 89: *MARY *POSS *IX *IX IX *ARRIVE COAT JOHN IX GIVE MAN IX NEW COAT
- 90: *SELF *IX IX *IX WOMAN BOOK JOHN GIVE IX SOMETHING-ONE WOMAN BOOK
- 92: JOHN *IX IX *IX *LOVE BOOK JOHN GIVE IX SOMETHING-ONE WOMAN BOOK
- 100: POSS NEW CAR BREAK-DOWN POSS NEW CAR BREAK-DOWN
- 105: JOHN *POSS JOHN LEG
- 107: *MARY POSS *BOX *MARY *MARY JOHN POSS FRIEND HAVE CANDY
- 108: *LOVE *HOMEWORK WOMAN ARRIVE
- 113: *SHOULD CAR *IX *JOHN *BOX IX CAR BLUE SUE BUY
- 119: *PREFER *BUY1 IX *JOHN *GO SUE BUY IX CAR BLUE
- 122: JOHN *GIVE1 BOOK JOHN READ BOOK
- 139: JOHN *BUY1 *CAR *JOHN BOOK JOHN BUY WHAT YESTERDAY BOOK
- 142: JOHN BUY YESTERDAY WHAT BOOK JOHN BUY YESTERDAY WHAT BOOK
- 158: LOVE JOHN WHO LOVE JOHN WHO
- 167: JOHN IX *SAY-1P LOVE *IX JOHN IX SAY LOVE MARY
- 171: *LIKE *JOHN BLAME JOHN MARY BLAME
- 174: *CAR *GIVE1 GIVE1 *YESTERDAY *CAR PEOPLE GROUP GIVE1 JANA TOY
- 181: JOHN *BOX JOHN ARRIVE
- 184: *IX *IX *GIVE1 TEACHER APPLE ALL BOY GIVE TEACHER APPLE
- 189: *JANA *MARY *YESTERDAY BOX JOHN GIVE GIRL BOX
- 193: *IX *YESTERDAY *YESTERDAY BOX JOHN GIVE GIRL BOX
- 199: *JOHN *BOX *JOHN LIKE CHOCOLATE WHO
- 201: JOHN *GIVE1 *IX *WOMAN *ARRIVE HOUSE JOHN TELL MARY IX-1P BUY HOUSE
- </pre>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <p><strong>Question 3:</strong> Summarize the error results from three combinations of features and model selectors. What was the "best" combination and why? What additional information might we use to improve our WER? For more insight on improving WER, take a look at the introduction to Part 4.</p>
- <p><strong>Answer 3:</strong></p>
- <table>
- <thead><tr>
- <th><strong>Model</strong></th>
- <th><strong>Features</strong></th>
- <th><strong>WER</strong></th>
- <th><strong>Correct</strong></th>
- <th><strong>Incorrect</strong></th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>SelectorCV</td>
- <td>features_polar</td>
- <td>0.5280898876404494</td>
- <td>84</td>
- <td>94</td>
- </tr>
- <tr>
- <td>SelectorDIC</td>
- <td>features_polar</td>
- <td>0.5337078651685393</td>
- <td>83</td>
- <td>95</td>
- </tr>
- <tr>
- <td>SelectorCV</td>
- <td>features_norm</td>
- <td>0.6067415730337079</td>
- <td>70</td>
- <td>108</td>
- </tr>
- </tbody>
- </table>
- <p>The best results were obtained using the <em>SelectorCV</em> model selector which makes efficient use of the training data by folding it and attempting to simulate how the model would behave on test data. However, my preferred model DIC doesn't lag much. <em>features_polar</em> produced the lowest WER (with both <em>SelectorCV & SelectorDIC</em> model). This could be improved by computing the probability of a word being next to another using statistical language models (or other NLP techniques).</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <p><a id='part3_test'></a></p>
- <h3 id="Recognizer-Unit-Tests">Recognizer Unit Tests<a class="anchor-link" href="#Recognizer-Unit-Tests">¶</a></h3><p>Run the following unit tests as a sanity check on the defined recognizer. The test simply looks for some valid values but is not exhaustive. However, the project should not be submitted if these tests don't pass.</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [ ]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">asl_test_recognizer</span> <span class="k">import</span> <span class="n">TestRecognize</span>
- <span class="n">suite</span> <span class="o">=</span> <span class="n">unittest</span><span class="o">.</span><span class="n">TestLoader</span><span class="p">()</span><span class="o">.</span><span class="n">loadTestsFromModule</span><span class="p">(</span><span class="n">TestRecognize</span><span class="p">())</span>
- <span class="n">unittest</span><span class="o">.</span><span class="n">TextTestRunner</span><span class="p">()</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">suite</span><span class="p">)</span>
- </pre></div>
- </div>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <p><a id='part4_info'></a></p>
- <h2 id="PART-4:-(OPTIONAL)--Improve-the-WER-with-Language-Models">PART 4: (OPTIONAL) Improve the WER with Language Models<a class="anchor-link" href="#PART-4:-(OPTIONAL)--Improve-the-WER-with-Language-Models">¶</a></h2><p>We've squeezed just about as much as we can out of the model and still only get about 50% of the words right! Surely we can do better than that. Probability to the rescue again in the form of <a href="https://en.wikipedia.org/wiki/Language_model">statistical language models (SLM)</a>. The basic idea is that each word has some probability of occurrence within the set, and some probability that it is adjacent to specific other words. We can use that additional information to make better choices.</p>
- <h5 id="Additional-reading-and-resources">Additional reading and resources<a class="anchor-link" href="#Additional-reading-and-resources">¶</a></h5><ul>
- <li><a href="https://web.stanford.edu/class/cs124/lec/languagemodeling.pdf">Introduction to N-grams (Stanford Jurafsky slides)</a></li>
- <li><a href="https://www-i6.informatik.rwth-aachen.de/publications/download/154/Dreuw--2007.pdf">Speech Recognition Techniques for a Sign Language Recognition System, Philippe Dreuw et al</a> see the improved results of applying LM on <em>this</em> data!</li>
- <li><a href="ftp://wasserstoff.informatik.rwth-aachen.de/pub/rwth-boston-104/lm/">SLM data for <em>this</em> ASL dataset</a></li>
- </ul>
- <h5 id="Optional-challenge">Optional challenge<a class="anchor-link" href="#Optional-challenge">¶</a></h5><p>The recognizer you implemented in Part 3 is equivalent to a "0-gram" SLM. Improve the WER with the SLM data provided with the data set in the link above using "1-gram", "2-gram", and/or "3-gram" statistics. The <code>probabilities</code> data you've already calculated will be useful and can be turned into a pandas DataFrame if desired (see next cell).<br>
- Good luck! Share your results with the class!</p>
- </div>
- </div>
- </div>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [ ]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># create a DataFrame of log likelihoods for the test word items</span>
- <span class="n">df_probs</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="n">probabilities</span><span class="p">)</span>
- <span class="n">df_probs</span><span class="o">.</span><span class="n">head</span><span class="p">()</span>
- </pre></div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </body>
- </html>
|