////
/// @group root/styles-cxo
////

/******************************************************************
 *                                                                *
 *  Copyright (C) - Sample Corp., Smalltown, Sampleland
 *                                                                *
 *  This source was generated via the OS.bee toolset!             *
 *                                                                *
 *  OS.bee is (C) - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany *
 *                                                                *
 *================================================================*
 *                                                                *
 *  @file           $HeadURL$
 *  @version        $Revision$
 *  @date           $Date$
 *  @author         $Author$
 *                                                                *
 ******************************************************************/

@import "addons.scss";
@import "osbp-cxo.scss";

/// This file prefixes all rules with the theme name to avoid causing conflicts with other themes.
/// The actual styles should be defined in osbp-cxo.scss
.osbp-cxo {
  @include addons;
  @include osbp-cxo;
}

/// temporary WORKAROUND 
/// popup is rendered outside of "osbp" stylename and needs unrelated style definition 
/// for now! 
/* @include os-suggesttext-popup; */ 