<!DOCTYPE html>
<html class="no-js">
    <head>
        <!-- Basic Page Needs
        ================================================== -->
        <meta charset="utf-8">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <link rel="icon" type="image/png" href="images/favicon.ico">
        <title>Capella - Obeo</title>
        <meta name="description" content="">
        <meta name="keywords" content="">
        <meta name="author" content="">
        <!-- Mobile Specific Metas
        ================================================== -->
        <meta name="format-detection" content="telephone=no">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        
        <!-- Template CSS Files
        ================================================== -->
        <!-- Twitter Bootstrs CSS -->
        <link rel="stylesheet" href="../css/bootstrap.min.css">
        <!-- animate css -->
        <link rel="stylesheet" href="../css/animate.css">
        <link rel="stylesheet" href="../css/jquery.fancybox.css">
        <!-- template main css file -->
        <link rel="stylesheet" href="../css/main.css">
        <!-- responsive css -->
        <link rel="stylesheet" href="../css/responsive.css">
        <link rel="stylesheet" href="../css/latofonts.css">

        <script src="https://use.fontawesome.com/b51f77a16a.js"></script>
        
        <!-- Cookie content -->
        <link rel="stylesheet" type="text/css" href="//www.eclipse.org/eclipse.org-common/themes/solstice/public/stylesheets/vendor/cookieconsent/cookieconsent.min.css" />
        <script src="//www.eclipse.org/eclipse.org-common/themes/solstice/public/javascript/vendor/cookieconsent/default.min.js"></script>
        
        <!-- Eclipse Foundation Google Tag Manager -->
		<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
		new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
		j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
		'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
		})(window,document,'script','dataLayer','GTM-5WLCZXC');</script>
		<!-- End Google Tag Manager -->
        
        <!-- Template Javascript Files
        ================================================== -->
		<!-- Angular -->
		<base href="/capella/">
		<script src="js/angular-1.7.8.min.js"></script>
		<script src="angular/capella.js"></script>

        <!-- modernizr js -->
        <script src="js/vendor/modernizr-2.6.2.min.js"></script>
        <!-- jquery -->
        <script src="js/jquery-3.4.1.min.js"></script>
        <!-- bootstrap js -->
        <script src="js/bootstrap.min.js"></script>
        <!-- wow js -->
        <script src="js/wow.min.js"></script>
        <script src="js/jquery.fancybox.js"></script>
        <!-- template main js -->
        <script src="js/main.js"></script>
        <!-- display videos in fancybox -->
        <script type="text/javascript">
            $(document).ready(function() {
                $(".various").fancybox({
                    maxWidth    : 800,
                    maxHeight   : 600,
                    fitToView   : false,
                    width       : '70%',
                    height      : '70%',
                    autoSize    : false,
                    closeClick  : false,
                    openEffect  : 'elastic',
                    closeEffect : 'none',
                    beforeLoad  : function(){
                        var url= $(this.element).attr("href");
                        url = url.replace(new RegExp("watch\\?v=", "i"), 'v/');
                        url += '?fs=1&autoplay=1';
                        this.href = url
                    }
                });
            });
        </script>
        <script>
            $(document).ready(function(){
                $(".fancypdf").fancybox({
                    openEffect  : 'none',
                    closeEffect : 'none',
                    iframe : {
                        preload: false
                    }
                });
            });
        </script>
    </head>
    <body ng-app="capella" data-deferred-cloak>
    	<!--
        ==================================================
        Header Section
        ================================================== -->
    	<ng-include src="'angular/blocks/header.html'"></ng-include>
        <!-- 
        ================================================== 
        Global Page Section Start
        ================================================== -->
        <section class="hero-area bg_indigo">
            <div class="container">
                <div class="row">
                    <div class="col-md-12 text-center">
                    	<div class="block wow fadeInUp" data-wow-delay=".3s">
                            <p><img src="images/logos/logo_obeo_white.png" alt="Obeo"></p>
                        </div>
                    </div>
                </div>
            </div>   
        </section><!--/#page-header-->
  
     	<section id="services">
            <div class="container">
            	<div class="row">
                	<h3>About</h3>
					<p>Obeo provides open software solutions to create and transform complex systems. Strategic Member of the Eclipse foundation, our core business consists in helping our customers implement innovative and custom modeling solutions.</p>
            	
                	<h3>Integration & Customization</h3>
                    <p>Obeo leverages its expertise in Eclipse technologies to help you integrate Capella with other tools and extend the workbench for your particular engineering concerns.</p>
                    <p><a href="https://www.obeosoft.com/en/capella-professional-offer#integration" target="_blank">Learn More <i class="fa fa-arrow-circle-right" aria-hidden="true"></i></a></p>                         
                         
                    <h3>Team for Capella</h3>
                    <p>Obeo develops and distributes Team for Capella, an add-on that allows users to collaborate on remotely shared models and representations.</p>
                    <p><a href="https://www.obeosoft.com/en/team-for-capella" target="_blank">Learn More <i class="fa fa-arrow-circle-right" aria-hidden="true"></i></a></p>
                   
				    <h3>System Modeling Workbench for Teamcenter</h3>
                    <p>System Modeling Workbench is a supported and complete integration of best of breed Model-Based Systems Engineering (MBSE) tools based on Capella.</p>
					<p>Integrated with Teamcenter this solution allows to link systems models with requirements in a multi-domain product integrated environment.</p>
                    <p><a href="https://www.obeosoft.com/en/products/smw" target="_blank">Learn More <i class="fa fa-arrow-circle-right" aria-hidden="true"></i></a></p>

				    <h3>Document generation with M2Doc</h3>
                    <p>M2Doc uses wysiwyg and customable Word templates to extract data and diagrams from your Capella models and display them in a docx file.</p>
                    <p><a href="http://www.m2doc.org/" target="_blank">Learn More <i class="fa fa-arrow-circle-right" aria-hidden="true"></i></a></p>
                </div>
            </div>
        </section> <!-- #services -->
      
      	<div id="back-to-top" data-spy="affix" data-offset-top="100"
			class="back-to-top hidden-xs hidden-sm affix-top">
			<button class="btn btn-default" title="Back to Top">
				<i class="fa fa-caret-up"></i>
			</button>
		</div>
		<script type="text/javascript">
		// Back to top
			jQuery('#back-to-top').on('click', function() {
				jQuery("html, body").animate({
					scrollTop : 0
				}, 500);
				return false;
			});
		</script>
      
        <!--
        ==================================================
        Footer Section
        ================================================== -->
        <ng-include src="'angular/blocks/footer.html'"></ng-include>
        <script async src="js/googleAnalytics.js" ></script>
    </body>
</html>